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@xxxxxxx> --- lib.c | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/lib.c b/lib.c index 340ddf3..b8487db 100644 --- a/lib.c +++ b/lib.c @@ -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) { -- 2.26.2