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 <sweettea-kernel@dorminy.me>
This commit is contained in:
parent
ea2c8e61a1
commit
0cc8c32045
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue