diff options
author | Gui Hecheng <guihc.fnst@cn.fujitsu.com> | 2014-11-27 10:01:35 +0800 |
---|---|---|
committer | David Sterba <dsterba@suse.cz> | 2014-11-27 18:37:00 +0100 |
commit | 8be2fff1295c39e11d5cf6a40517b0538620f7cb (patch) | |
tree | bb4d6adc0c4e781ff68896466d5fab6f23a8dedd /cmds-filesystem.c | |
parent | 05afee34683f5a57fba0b2f55375bef592bb3987 (diff) |
btrfs-progs: apply realpath for btrfs fi show when mount point is given
For now,
# btrfs fi show /mnt/btrfs
gives info correctly, while
# btrfs fi show /mnt/btrfs/
gives nothing.
This implies that the @realpath() function should be applied to
unify the behavior.
Made a more clear comment right above the call as well.
Signed-off-by: Gui Hecheng <guihc.fnst@cn.fujitsu.com>
Signed-off-by: David Sterba <dsterba@suse.cz>
Diffstat (limited to 'cmds-filesystem.c')
-rw-r--r-- | cmds-filesystem.c | 64 |
1 files changed, 35 insertions, 29 deletions
diff --git a/cmds-filesystem.c b/cmds-filesystem.c index cd6b3c69..253f105b 100644 --- a/cmds-filesystem.c +++ b/cmds-filesystem.c @@ -901,39 +901,45 @@ static int cmd_show(int argc, char **argv) if (strlen(search) == 0) usage(cmd_show_usage); type = check_arg_type(search); + /* - * needs spl handling if input arg is block dev - * And if input arg is mount-point just print it - * right away + * For search is a device: + * realpath do /dev/mapper/XX => /dev/dm-X + * which is required by BTRFS_SCAN_DEV + * For search is a mountpoint: + * realpath do /mnt/btrfs/ => /mnt/btrfs + * which shall be recognized by btrfs_scan_kernel() */ - if (type == BTRFS_ARG_BLKDEV) { - if (where == BTRFS_SCAN_LBLKID) { - /* we need to do this because - * legacy BTRFS_SCAN_DEV - * provides /dev/dm-x paths - */ - if (realpath(search, path)) - search = path; + if (!realpath(search, path)) { + fprintf(stderr, "ERROR: Could not show %s: %s\n", + search, strerror(errno)); + return 1; + } + + search = path; + + /* + * Needs special handling if input arg is block dev And if + * input arg is mount-point just print it right away + */ + if (type == BTRFS_ARG_BLKDEV && where != BTRFS_SCAN_LBLKID) { + ret = get_btrfs_mount(search, mp, sizeof(mp)); + if (!ret) { + /* given block dev is mounted */ + search = mp; + type = BTRFS_ARG_MNTPOINT; } else { - ret = get_btrfs_mount(search, - mp, sizeof(mp)); - if (!ret) { - /* given block dev is mounted*/ - search = mp; - type = BTRFS_ARG_MNTPOINT; - } else { - ret = dev_to_fsid(search, fsid); - if (ret) { - fprintf(stderr, - "ERROR: No btrfs on %s\n", - search); - return 1; - } - uuid_unparse(fsid, uuid_buf); - search = uuid_buf; - type = BTRFS_ARG_UUID; - goto devs_only; + ret = dev_to_fsid(search, fsid); + if (ret) { + fprintf(stderr, + "ERROR: No btrfs on %s\n", + search); + return 1; } + uuid_unparse(fsid, uuid_buf); + search = uuid_buf; + type = BTRFS_ARG_UUID; + goto devs_only; } } } |