mirror of
https://github.com/kdave/btrfs-progs
synced 2024-12-27 00:22:22 +00:00
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>
This commit is contained in:
parent
05afee3468
commit
8be2fff129
@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user