From 0cc8c32045b205bb22c71ee338562d38f78bc60d Mon Sep 17 00:00:00 2001 From: Sweet Tea Dorminy Date: Thu, 21 Mar 2024 15:17:31 -0400 Subject: [PATCH] btrfs-progs: subvolume-list: use user ino lookup The user ioctl works in all cases, so don't limit subvolume list to root by using the root-only ioctl. Subvolume list itself still uses the root-only tree search ioctl, but this is a step toward making subvolume list user-capable. Signed-off-by: Sweet Tea Dorminy --- cmds/subvolume-list.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/cmds/subvolume-list.c b/cmds/subvolume-list.c index 21319267..c5f7e81c 100644 --- a/cmds/subvolume-list.c +++ b/cmds/subvolume-list.c @@ -769,7 +769,7 @@ static int resolve_root(struct rb_root *rl, struct root_info *ri, */ static int lookup_ino_path(int fd, struct root_info *ri) { - struct btrfs_ioctl_ino_lookup_args args; + struct btrfs_ioctl_ino_lookup_user_args args; int ret; if (ri->path) @@ -780,9 +780,9 @@ static int lookup_ino_path(int fd, struct root_info *ri) memset(&args, 0, sizeof(args)); args.treeid = ri->ref_tree; - args.objectid = ri->dir_id; + args.dirid = ri->dir_id; - ret = ioctl(fd, BTRFS_IOC_INO_LOOKUP, &args); + ret = ioctl(fd, BTRFS_IOC_INO_LOOKUP_USER, &args); if (ret < 0) { if (errno == ENOENT) { ri->ref_tree = 0; @@ -792,6 +792,8 @@ static int lookup_ino_path(int fd, struct root_info *ri) return ret; } + strcpy(ri->name, args.name); + if (args.name[0]) { /* * we're in a subdirectory of ref_tree, the kernel ioctl