btrfs: pass btrfs_root pointers to send ioctl parameters
authorDavid Sterba <dsterba@suse.com>
Mon, 3 Mar 2025 14:55:17 +0000 (15:55 +0100)
committerDavid Sterba <dsterba@suse.com>
Tue, 18 Mar 2025 19:35:49 +0000 (20:35 +0100)
The ioctl switch btrfs_ioctl() provides several parameter types for
convenience so we don't have to do the conversion in the callbacks.
Pass root pointers to the send related functions.

Signed-off-by: David Sterba <dsterba@suse.com>
fs/btrfs/ioctl.c
fs/btrfs/send.c
fs/btrfs/send.h

index 5c26788f7e4f2d869560b5c123a90d65242336c2..124f104d31b1b85a389454771e26f3a2ce5a10a0 100644 (file)
@@ -4385,7 +4385,7 @@ out_drop_write:
        return ret;
 }
 
-static int _btrfs_ioctl_send(struct btrfs_inode *inode, void __user *argp, bool compat)
+static int _btrfs_ioctl_send(struct btrfs_root *root, void __user *argp, bool compat)
 {
        struct btrfs_ioctl_send_args *arg;
        int ret;
@@ -4416,7 +4416,7 @@ static int _btrfs_ioctl_send(struct btrfs_inode *inode, void __user *argp, bool
                if (IS_ERR(arg))
                        return PTR_ERR(arg);
        }
-       ret = btrfs_ioctl_send(inode, arg);
+       ret = btrfs_ioctl_send(root, arg);
        kfree(arg);
        return ret;
 }
@@ -5315,10 +5315,10 @@ long btrfs_ioctl(struct file *file, unsigned int
                return btrfs_ioctl_set_received_subvol_32(file, argp);
 #endif
        case BTRFS_IOC_SEND:
-               return _btrfs_ioctl_send(BTRFS_I(inode), argp, false);
+               return _btrfs_ioctl_send(root, argp, false);
 #if defined(CONFIG_64BIT) && defined(CONFIG_COMPAT)
        case BTRFS_IOC_SEND_32:
-               return _btrfs_ioctl_send(BTRFS_I(inode), argp, true);
+               return _btrfs_ioctl_send(root, argp, true);
 #endif
        case BTRFS_IOC_GET_DEV_STATS:
                return btrfs_ioctl_get_dev_stats(fs_info, argp);
index 878b32331bc2e7f76b2420fc17987fb7660d4c8d..e225530d3ebbb0864b0599b0b987ef00cf5681f0 100644 (file)
@@ -8077,10 +8077,9 @@ static void dedupe_in_progress_warn(const struct btrfs_root *root)
                      btrfs_root_id(root), root->dedupe_in_progress);
 }
 
-long btrfs_ioctl_send(struct btrfs_inode *inode, const struct btrfs_ioctl_send_args *arg)
+long btrfs_ioctl_send(struct btrfs_root *send_root, const struct btrfs_ioctl_send_args *arg)
 {
        int ret = 0;
-       struct btrfs_root *send_root = inode->root;
        struct btrfs_fs_info *fs_info = send_root->fs_info;
        struct btrfs_root *clone_root;
        struct send_ctx *sctx = NULL;
index 9309886c5ea17b1fdd050eff86a0475bb21d9a5e..652bb28f63d421ea09275ab7416b8bd939563e9d 100644 (file)
@@ -11,7 +11,7 @@
 #include <linux/sizes.h>
 #include <linux/align.h>
 
-struct btrfs_inode;
+struct btrfs_root;
 struct btrfs_ioctl_send_args;
 
 #define BTRFS_SEND_STREAM_MAGIC "btrfs-stream"
@@ -182,6 +182,6 @@ enum {
        __BTRFS_SEND_A_MAX              = 35,
 };
 
-long btrfs_ioctl_send(struct btrfs_inode *inode, const struct btrfs_ioctl_send_args *arg);
+long btrfs_ioctl_send(struct btrfs_root *send_root, const struct btrfs_ioctl_send_args *arg);
 
 #endif