aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHuan Yan <yanhuan916@gmail.com>2022-05-13 22:44:15 +0800
committerColy Li <colyli@suse.de>2022-05-13 23:04:23 +0800
commit2499ff2dd78f236c7809016be5dfff836454396b (patch)
tree2060a56fbb4cdfd01a78d3e1d5ac1bc51959f1cc
parent4b5af6f92999b295afc0a523975678a48e9bbe51 (diff)
downloadbcache-tools-2499ff2dd78f236c7809016be5dfff836454396b.tar.gz
bcache-tools: Correct super block version check codes
This patch add missing super block version below: BCACHE_SB_VERSION_CDEV_WITH_UUID BCACHE_SB_VERSION_BDEV_WITH_OFFSET BCACHE_SB_VERSION_CDEV_WITH_FEATURES BCACHE_SB_VERSION_BDEV_WITH_FEATURES (Coly Li: They are missed in many locations where the super block version of cache device or backing device are checked.) Signed-off-by: Huan Yan <yanhuan916@gmail.com> Signed-off-by: Coly Li <colyli@suse.de>
-rw-r--r--bcache.c22
-rw-r--r--bcache.h3
-rw-r--r--lib.c15
-rw-r--r--make.c8
-rw-r--r--show.c6
5 files changed, 37 insertions, 17 deletions
diff --git a/bcache.c b/bcache.c
index 18dfa42e..f99d2dcf 100644
--- a/bcache.c
+++ b/bcache.c
@@ -198,7 +198,8 @@ int tree(void)
sprintf(out, "%s", begin);
list_for_each_entry_safe(devs, n, &head, dev_list) {
if ((devs->version == BCACHE_SB_VERSION_CDEV
- || devs->version == BCACHE_SB_VERSION_CDEV_WITH_UUID)
+ || devs->version == BCACHE_SB_VERSION_CDEV_WITH_UUID
+ || devs->version == BCACHE_SB_VERSION_CDEV_WITH_FEATURES)
&& strcmp(devs->state, BCACHE_BASIC_STATE_ACTIVE) == 0) {
sprintf(out + strlen(out), "%s\n", devs->name);
list_for_each_entry_safe(tmp, m, &head, dev_list) {
@@ -230,7 +231,8 @@ int attach_both(char *cdev, char *backdev)
if (ret != 0)
return ret;
if (type != BCACHE_SB_VERSION_BDEV
- && type != BCACHE_SB_VERSION_BDEV_WITH_OFFSET) {
+ && type != BCACHE_SB_VERSION_BDEV_WITH_OFFSET
+ && type != BCACHE_SB_VERSION_BDEV_WITH_FEATURES) {
fprintf(stderr, "%s is not an backend device\n", backdev);
return 1;
}
@@ -243,7 +245,8 @@ int attach_both(char *cdev, char *backdev)
if (strlen(cdev) != 36) {
ret = detail_dev(cdev, &bd, &cd, &type);
if (type != BCACHE_SB_VERSION_CDEV
- && type != BCACHE_SB_VERSION_CDEV_WITH_UUID) {
+ && type != BCACHE_SB_VERSION_CDEV_WITH_UUID
+ && type != BCACHE_SB_VERSION_CDEV_WITH_FEATURES) {
fprintf(stderr, "%s is not an cache device\n", cdev);
return 1;
}
@@ -358,10 +361,13 @@ int main(int argc, char **argv)
ret = detail_dev(devname, &bd, &cd, &type);
if (ret != 0)
return ret;
- if (type == BCACHE_SB_VERSION_BDEV) {
+ if (type == BCACHE_SB_VERSION_BDEV
+ || type == BCACHE_SB_VERSION_BDEV_WITH_OFFSET
+ || type == BCACHE_SB_VERSION_BDEV_WITH_FEATURES) {
return stop_backdev(devname);
} else if (type == BCACHE_SB_VERSION_CDEV
- || type == BCACHE_SB_VERSION_CDEV_WITH_UUID) {
+ || type == BCACHE_SB_VERSION_CDEV_WITH_UUID
+ || type == BCACHE_SB_VERSION_CDEV_WITH_FEATURES) {
return unregister_cset(cd.base.cset);
}
return 1;
@@ -407,7 +413,8 @@ int main(int argc, char **argv)
return ret;
}
if (type != BCACHE_SB_VERSION_BDEV
- && type != BCACHE_SB_VERSION_BDEV_WITH_OFFSET) {
+ && type != BCACHE_SB_VERSION_BDEV_WITH_OFFSET
+ && type != BCACHE_SB_VERSION_BDEV_WITH_FEATURES) {
fprintf(stderr,
"Only backend device is suppported\n");
return 1;
@@ -433,7 +440,8 @@ int main(int argc, char **argv)
return ret;
}
if (type != BCACHE_SB_VERSION_BDEV
- && type != BCACHE_SB_VERSION_BDEV_WITH_OFFSET) {
+ && type != BCACHE_SB_VERSION_BDEV_WITH_OFFSET
+ && type != BCACHE_SB_VERSION_BDEV_WITH_FEATURES) {
fprintf(stderr,
"Only backend device is suppported\n");
return 1;
diff --git a/bcache.h b/bcache.h
index 46d96834..6ce5b103 100644
--- a/bcache.h
+++ b/bcache.h
@@ -164,7 +164,8 @@ struct cache_sb {
static inline bool SB_IS_BDEV(const struct cache_sb *sb)
{
return sb->version == BCACHE_SB_VERSION_BDEV
- || sb->version == BCACHE_SB_VERSION_BDEV_WITH_OFFSET;
+ || sb->version == BCACHE_SB_VERSION_BDEV_WITH_OFFSET
+ || sb->version == BCACHE_SB_VERSION_BDEV_WITH_FEATURES;
}
BITMASK(CACHE_SYNC, struct cache_sb, flags, 0, 1);
diff --git a/lib.c b/lib.c
index adad823d..28aa72db 100644
--- a/lib.c
+++ b/lib.c
@@ -277,10 +277,12 @@ int get_dev_bname(char *devname, char *bname)
int get_bname(struct dev *dev, char *bname)
{
if (dev->version == BCACHE_SB_VERSION_CDEV
- || dev->version == BCACHE_SB_VERSION_CDEV_WITH_UUID)
+ || dev->version == BCACHE_SB_VERSION_CDEV_WITH_UUID
+ || dev->version == BCACHE_SB_VERSION_CDEV_WITH_FEATURES)
strcpy(bname, BCACHE_NO_SUPPORT);
else if (dev->version == BCACHE_SB_VERSION_BDEV
- || dev->version == BCACHE_SB_VERSION_BDEV_WITH_OFFSET)
+ || dev->version == BCACHE_SB_VERSION_BDEV_WITH_OFFSET
+ || dev->version == BCACHE_SB_VERSION_BDEV_WITH_FEATURES)
return get_dev_bname(dev->name, bname);
return 0;
}
@@ -313,10 +315,12 @@ int get_backdev_attachpoint(char *devname, char *point)
int get_point(struct dev *dev, char *point)
{
if (dev->version == BCACHE_SB_VERSION_CDEV
- || dev->version == BCACHE_SB_VERSION_CDEV_WITH_UUID)
+ || dev->version == BCACHE_SB_VERSION_CDEV_WITH_UUID
+ || dev->version == BCACHE_SB_VERSION_CDEV_WITH_FEATURES)
strcpy(point, BCACHE_NO_SUPPORT);
else if (dev->version == BCACHE_SB_VERSION_BDEV
- || dev->version == BCACHE_SB_VERSION_BDEV_WITH_OFFSET)
+ || dev->version == BCACHE_SB_VERSION_BDEV_WITH_OFFSET
+ || dev->version == BCACHE_SB_VERSION_BDEV_WITH_FEATURES)
return get_backdev_attachpoint(dev->name, point);
return 0;
}
@@ -327,7 +331,8 @@ int cset_to_devname(struct list_head *head, char *cset, char *devname)
list_for_each_entry(dev, head, dev_list) {
if ((dev->version == BCACHE_SB_VERSION_CDEV
- || dev->version == BCACHE_SB_VERSION_CDEV_WITH_UUID)
+ || dev->version == BCACHE_SB_VERSION_CDEV_WITH_UUID
+ || dev->version == BCACHE_SB_VERSION_CDEV_WITH_FEATURES)
&& strcmp(dev->cset, cset) == 0)
strcpy(devname, dev->name);
}
diff --git a/make.c b/make.c
index 52f54c76..b9656671 100644
--- a/make.c
+++ b/make.c
@@ -266,10 +266,14 @@ static void write_sb(char *dev, struct sb_context *sbc, bool bdev, bool force)
ret = detail_dev(dev, &bd, &cd, &type);
if (ret != 0)
exit(EXIT_FAILURE);
- if (type == BCACHE_SB_VERSION_BDEV) {
+ if (type == BCACHE_SB_VERSION_BDEV
+ || type == BCACHE_SB_VERSION_BDEV_WITH_OFFSET
+ || type == BCACHE_SB_VERSION_BDEV_WITH_FEATURES) {
ret = stop_backdev(dev);
} else if (type == BCACHE_SB_VERSION_CDEV
- || type == BCACHE_SB_VERSION_CDEV_WITH_UUID) {
+ || type == BCACHE_SB_VERSION_CDEV_WITH_UUID
+ || type ==
+ BCACHE_SB_VERSION_CDEV_WITH_FEATURES) {
ret = unregister_cset(cd.base.cset);
} else {
fprintf(stderr,
diff --git a/show.c b/show.c
index ff498623..abd068e9 100644
--- a/show.c
+++ b/show.c
@@ -75,8 +75,9 @@ int show_bdevs_detail(void)
if (strlen(devs->attachuuid) == 36) {
cset_to_devname(&head, devs->cset, attachdev);
} else if (devs->version == BCACHE_SB_VERSION_CDEV
+ || devs->version == BCACHE_SB_VERSION_CDEV_WITH_UUID
|| devs->version ==
- BCACHE_SB_VERSION_CDEV_WITH_UUID) {
+ BCACHE_SB_VERSION_CDEV_WITH_FEATURES) {
strcpy(attachdev, BCACHE_NO_SUPPORT);
} else {
strcpy(attachdev, BCACHE_ATTACH_ALONE);
@@ -135,8 +136,9 @@ int show_bdevs(void)
if (strlen(devs->attachuuid) == 36) {
cset_to_devname(&head, devs->cset, attachdev);
} else if (devs->version == BCACHE_SB_VERSION_CDEV
+ || devs->version == BCACHE_SB_VERSION_CDEV_WITH_UUID
|| devs->version ==
- BCACHE_SB_VERSION_CDEV_WITH_UUID) {
+ BCACHE_SB_VERSION_CDEV_WITH_FEATURES) {
strcpy(attachdev, BCACHE_NO_SUPPORT);
} else {
strcpy(attachdev, BCACHE_ATTACH_ALONE);