diff options
author | Coly Li <colyli@suse.de> | 2021-01-04 00:07:46 +0800 |
---|---|---|
committer | Coly Li <colyli@suse.de> | 2021-01-04 00:23:17 +0800 |
commit | 11f6bab95e5a8d4ec0089692ec78285a1fc96bab (patch) | |
tree | 7426c067b91e07f24026b12a4f3c7c121c6ae458 | |
parent | 0c6e42ef568cece1c041fea5dcd0178d403b517b (diff) | |
download | bcache-tools-11f6bab95e5a8d4ec0089692ec78285a1fc96bab.tar.gz |
bcache-tools: only call to_cache_sb() for bcache device in may_add_item()
to_cache_sb() will print an error message "Unsupported super block
version" if the super block version is invalid. For non-bcache devices,
it is unnecessary to check version number and print bogus error messages.
This patch checks bcache_magic earlier in may_add_item(), and only calls
to_cache_sb() if the magic string matched. Then the non-bcache devices
can be skipped, and no more bogus error message observed.
Signed-off-by: Coly Li <colyli@suse.de>
-rw-r--r-- | lib.c | 15 |
1 files changed, 7 insertions, 8 deletions
@@ -343,32 +343,31 @@ int may_add_item(char *devname, struct list_head *head) { struct cache_sb_disk sb_disk; struct cache_sb sb; + char dev[512]; + struct dev *tmp; + int ret; if (strcmp(devname, ".") == 0 || strcmp(devname, "..") == 0) return 0; - char dev[261]; sprintf(dev, "/dev/%s", devname); int fd = open(dev, O_RDONLY); - if (fd == -1) return 0; + if (pread(fd, &sb_disk, sizeof(sb_disk), SB_START) != sizeof(sb_disk)) { close(fd); return 0; } - to_cache_sb(&sb, &sb_disk); - - if (memcmp(sb.magic, bcache_magic, 16)) { + if (memcmp(sb_disk.magic, bcache_magic, 16)) { close(fd); return 0; } - struct dev *tmp; - int ret; - tmp = (struct dev *) malloc(DEVLEN); + to_cache_sb(&sb, &sb_disk); + tmp = (struct dev *) malloc(DEVLEN); tmp->csum = le64_to_cpu(sb_disk.csum); ret = detail_base(dev, sb, tmp); if (ret != 0) { |