summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--cmds-device.c5
-rw-r--r--cmds-filesystem.c2
-rw-r--r--disk-io.c2
-rw-r--r--utils.c14
-rw-r--r--utils.h2
5 files changed, 17 insertions, 8 deletions
diff --git a/cmds-device.c b/cmds-device.c
index 8a33634e..93239861 100644
--- a/cmds-device.c
+++ b/cmds-device.c
@@ -235,9 +235,12 @@ static int cmd_scan_dev(int argc, char **argv)
if (all || argc == 1) {
printf("Scanning for Btrfs filesystems\n");
- ret = btrfs_scan_lblkid(BTRFS_UPDATE_KERNEL);
+ ret = btrfs_scan_lblkid();
if (ret)
fprintf(stderr, "ERROR: error %d while scanning\n", ret);
+ ret = btrfs_register_all_devices();
+ if (ret)
+ fprintf(stderr, "ERROR: error %d while registering\n", ret);
goto out;
}
diff --git a/cmds-filesystem.c b/cmds-filesystem.c
index b1fb4023..af56fbeb 100644
--- a/cmds-filesystem.c
+++ b/cmds-filesystem.c
@@ -948,7 +948,7 @@ static int cmd_show(int argc, char **argv)
goto out;
devs_only:
- ret = btrfs_scan_lblkid(!BTRFS_UPDATE_KERNEL);
+ ret = btrfs_scan_lblkid();
if (ret) {
fprintf(stderr, "ERROR: %d while scanning\n", ret);
diff --git a/disk-io.c b/disk-io.c
index d2d29e12..bade5f08 100644
--- a/disk-io.c
+++ b/disk-io.c
@@ -1019,7 +1019,7 @@ int btrfs_scan_fs_devices(int fd, const char *path,
}
if (total_devs != 1) {
- ret = btrfs_scan_lblkid(!BTRFS_UPDATE_KERNEL);
+ ret = btrfs_scan_lblkid();
if (ret)
return ret;
}
diff --git a/utils.c b/utils.c
index 5a12517f..f51bc564 100644
--- a/utils.c
+++ b/utils.c
@@ -52,6 +52,8 @@
#define BLKDISCARD _IO(0x12,119)
#endif
+static int btrfs_scan_done = 0;
+
static char argv0_buf[ARGV0_BUF_SIZE] = "btrfs";
void fixup_argv0(char **argv, const char *token)
@@ -1186,7 +1188,7 @@ int check_mounted_where(int fd, const char *file, char *where, int size,
/* scan other devices */
if (is_btrfs && total_devs > 1) {
- ret = btrfs_scan_lblkid(!BTRFS_UPDATE_KERNEL);
+ ret = btrfs_scan_lblkid();
if (ret)
return ret;
}
@@ -2179,7 +2181,7 @@ int test_dev_for_mkfs(char *file, int force_overwrite, char *estr)
return 0;
}
-int btrfs_scan_lblkid(int update_kernel)
+int btrfs_scan_lblkid()
{
int fd = -1;
int ret;
@@ -2190,6 +2192,9 @@ int btrfs_scan_lblkid(int update_kernel)
blkid_cache cache = NULL;
char path[PATH_MAX];
+ if (btrfs_scan_done)
+ return 0;
+
if (blkid_get_cache(&cache, 0) < 0) {
printf("ERROR: lblkid cache get failed\n");
return 1;
@@ -2218,11 +2223,12 @@ int btrfs_scan_lblkid(int update_kernel)
}
close(fd);
- if (update_kernel)
- btrfs_register_one_device(path);
}
blkid_dev_iterate_end(iter);
blkid_put_cache(cache);
+
+ btrfs_scan_done = 1;
+
return 0;
}
diff --git a/utils.h b/utils.h
index 09af46ac..8c946246 100644
--- a/utils.h
+++ b/utils.h
@@ -128,7 +128,7 @@ int csum_tree_block(struct btrfs_root *root, struct extent_buffer *buf,
int verify);
int ask_user(char *question);
int lookup_ino_rootid(int fd, u64 *rootid);
-int btrfs_scan_lblkid(int update_kernel);
+int btrfs_scan_lblkid(void);
int get_btrfs_mount(const char *dev, char *mp, size_t mp_size);
int find_mount_root(const char *path, char **mount_root);
int get_device_info(int fd, u64 devid,