aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorColy Li <colyli@suse.de>2021-01-04 00:07:46 +0800
committerColy Li <colyli@suse.de>2021-01-04 00:23:17 +0800
commit11f6bab95e5a8d4ec0089692ec78285a1fc96bab (patch)
tree7426c067b91e07f24026b12a4f3c7c121c6ae458
parent0c6e42ef568cece1c041fea5dcd0178d403b517b (diff)
downloadbcache-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.c15
1 files changed, 7 insertions, 8 deletions
diff --git a/lib.c b/lib.c
index 340ddf35..b8487dbd 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) {