btrfs-progs: fi: enable fi usage for filesystem on top of seed device
authorMisono, Tomohiro <misono.tomohiro@jp.fujitsu.com>
Mon, 23 Oct 2017 04:45:48 +0000 (13:45 +0900)
committerDavid Sterba <dsterba@suse.com>
Tue, 14 Nov 2017 14:59:00 +0000 (15:59 +0100)
commitb1dac5996bdfa0ba58ea2e545ce1f1af25b99a7d
tree17b15096d077591fc9241bdd330ae0eb5a155d99
parent94afa11d832901cd63766ec38b60752058722a7b
btrfs-progs: fi: enable fi usage for filesystem on top of seed device

Currently "fi usage" (and "dev usage") cannot run for the filesystem
using the seed device.

This is because FS_INFO ioctl returns the number of devices excluding
seeds, but load_device_info() tries to access valid device from devid 0
to max_id, and results in accessing seeds too (thus causing mismatching
number of devices).

Since only the size of non-seed devices matters, fix this by just
skipping seed device by checking device's fsid and comparing it to the
fsid obtained by FS_INFO ioctl.

Anand Jain:
%fi_args.num_devices provides number of devices excluding the seed device.
So when looping through the device list for a given fsid, determine if the
given device is a seed device by reading its superblock and then skip it
if its a seed device.  Reading of the superblock is done by the function
dev_to_fsid() which can fail if the user is not root OR if the device has
media errors as well. So skip the seed check altogether if we fail to know
the device superblock and thus the fsid.

With this now we are able to view the btrfs fi usage when the device is
bad.

Signed-off-by: Anand Jain <anand.jain@oracle.com>
Signed-off-by: Tomohiro Misono <misono.tomohiro@jp.fujitsu.com>
Reviewed-by: Anand Jain <anand.jain@oracle.com>
Signed-off-by: David Sterba <dsterba@suse.com>
cmds-fi-usage.c