btrfs-progs: skip fs with no seed when build seed/sprout mapping for fi show
diff mbox

Message ID 1415326063-8838-1-git-send-email-guihc.fnst@cn.fujitsu.com
State Superseded
Headers show

Commit Message

Gui Hecheng Nov. 7, 2014, 2:07 a.m. UTC
There is no need to try to build seed/sprout mapping for those btrfs
without seed devices, so just skip such fs.
We could get the total number of devices from the disk super block, if it
equals the number of items in list @fs_devices->devices, then there shouldn't
be any seed devices.

Signed-off-by: Gui Hecheng <guihc.fnst@cn.fujitsu.com>
---
 cmds-filesystem.c | 25 +++++++++++++++++++++++--
 1 file changed, 23 insertions(+), 2 deletions(-)

Comments

David Sterba Nov. 7, 2014, 5:41 p.m. UTC | #1
On Fri, Nov 07, 2014 at 10:07:41AM +0800, Gui Hecheng wrote:
> +static int no_seed_devices(struct btrfs_fs_devices *fs_devices)

Please reverse the meaning of the function, ie. something like
'has_seed_devices'. It's more natural to deal with negation operators
when they're explicit rather than hidden.

Thanks.
--
To unsubscribe from this list: send the line "unsubscribe linux-btrfs" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Patch
diff mbox

diff --git a/cmds-filesystem.c b/cmds-filesystem.c
index 67fe52b..0d49cd1 100644
--- a/cmds-filesystem.c
+++ b/cmds-filesystem.c
@@ -795,6 +795,22 @@  out:
 	return ret;
 }
 
+static int no_seed_devices(struct btrfs_fs_devices *fs_devices)
+{
+	struct btrfs_device *device;
+	int dev_cnt_total, dev_cnt = 0;
+
+	device = list_first_entry(&fs_devices->devices, struct btrfs_device,
+				  dev_list);
+
+	dev_cnt_total = device->total_devs;
+
+	list_for_each_entry(device, &fs_devices->devices, dev_list)
+		dev_cnt++;
+
+	return dev_cnt_total == dev_cnt;
+}
+
 static int map_seed_devices(struct list_head *all_uuids)
 {
 	struct btrfs_fs_devices *cur_fs, *cur_seed;
@@ -812,6 +828,11 @@  static int map_seed_devices(struct list_head *all_uuids)
 						struct btrfs_device, dev_list);
 		if (!device)
 			continue;
+
+		/* skip fs without seeds */
+		if (no_seed_devices(cur_fs))
+			continue;
+
 		/*
 		 * open_ctree_* detects seed/sprout mapping
 		 */
@@ -976,8 +997,8 @@  devs_only:
 	}
 
 	/*
-	 * scan_for_btrfs() don't build seed/sprout mapping,
-	 * do mapping build for each scanned fs here
+	 * The seed/sprout mapping are not detected yet,
+	 * do mapping build for all umounted fs
 	 */
 	ret = map_seed_devices(&all_uuids);
 	if (ret) {