diff options
author | Huan Yan <yanhuan916@gmail.com> | 2022-05-13 22:44:15 +0800 |
---|---|---|
committer | Coly Li <colyli@suse.de> | 2022-05-13 23:04:23 +0800 |
commit | 2499ff2dd78f236c7809016be5dfff836454396b (patch) | |
tree | 2060a56fbb4cdfd01a78d3e1d5ac1bc51959f1cc | |
parent | 4b5af6f92999b295afc0a523975678a48e9bbe51 (diff) | |
download | bcache-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.c | 22 | ||||
-rw-r--r-- | bcache.h | 3 | ||||
-rw-r--r-- | lib.c | 15 | ||||
-rw-r--r-- | make.c | 8 | ||||
-rw-r--r-- | show.c | 6 |
5 files changed, 37 insertions, 17 deletions
@@ -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; @@ -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); @@ -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); } @@ -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, @@ -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); |