]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
btrfs: return real error after lookup failure in btrfs_ioctl_default_subvol()
authorFilipe Manana <fdmanana@suse.com>
Mon, 1 Jun 2026 09:45:14 +0000 (10:45 +0100)
committerJohannes Thumshirn <johannes.thumshirn@wdc.com>
Tue, 9 Jun 2026 16:22:46 +0000 (18:22 +0200)
If we fail to lookup the dir item, we are always returning -ENOENT but
that may not be the reason for the failure, as btrfs_lookup_dir_item() can
return many different errors, such as -EIO or -ENOMEM for example.
Fix this by returning the real error, and also fixup the silly error
message, including the id of the directory and the error.

Reviewed-by: Qu Wenruo <wqu@suse.com>
Signed-off-by: Filipe Manana <fdmanana@suse.com>
Reviewed-by: David Sterba <dsterba@suse.com>
Signed-off-by: David Sterba <dsterba@suse.com>
fs/btrfs/ioctl.c

index 561f4a90981be15e85d3eafb3bdbfc9a1bd94c71..9d47d16394fc569fa62a4769eeff0aaab16fe252 100644 (file)
@@ -2829,9 +2829,13 @@ static long btrfs_ioctl_default_subvol(struct file *file, void __user *argp)
        if (IS_ERR_OR_NULL(di)) {
                btrfs_release_path(path);
                btrfs_end_transaction(trans);
+               if (di)
+                       ret = PTR_ERR(di);
+               else
+                       ret = -ENOENT;
                btrfs_err(fs_info,
-                         "Umm, you don't have the default diritem, this isn't going to work");
-               ret = -ENOENT;
+                         "could not find default diritem for dir %llu: %d",
+                         dir_id, ret);
                goto out_free;
        }