]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
ceph: pass an idmapping to mknod/symlink/mkdir
authorChristian Brauner <brauner@kernel.org>
Mon, 7 Aug 2023 13:26:19 +0000 (15:26 +0200)
committerIlya Dryomov <idryomov@gmail.com>
Fri, 3 Nov 2023 22:28:34 +0000 (23:28 +0100)
Enable mknod/symlink/mkdir iops to handle idmapped mounts.
This is just a matter of passing down the mount's idmapping.

Signed-off-by: Christian Brauner <brauner@kernel.org>
Signed-off-by: Alexander Mikhalitsyn <aleksandr.mikhalitsyn@canonical.com>
Reviewed-by: Xiubo Li <xiubli@redhat.com>
Signed-off-by: Ilya Dryomov <idryomov@gmail.com>
fs/ceph/dir.c

index 6bb95b4e93a8aa6dff6e6e85195dfe2a2e679c30..91709934c8b14371a6eb41b35302559d26f94823 100644 (file)
@@ -953,6 +953,7 @@ static int ceph_mknod(struct mnt_idmap *idmap, struct inode *dir,
        req->r_parent = dir;
        ihold(dir);
        set_bit(CEPH_MDS_R_PARENT_LOCKED, &req->r_req_flags);
+       req->r_mnt_idmap = mnt_idmap_get(idmap);
        req->r_args.mknod.mode = cpu_to_le32(mode);
        req->r_args.mknod.rdev = cpu_to_le32(rdev);
        req->r_dentry_drop = CEPH_CAP_FILE_SHARED | CEPH_CAP_AUTH_EXCL |
@@ -1071,6 +1072,7 @@ static int ceph_symlink(struct mnt_idmap *idmap, struct inode *dir,
        }
 
        set_bit(CEPH_MDS_R_PARENT_LOCKED, &req->r_req_flags);
+       req->r_mnt_idmap = mnt_idmap_get(idmap);
        req->r_dentry = dget(dentry);
        req->r_num_caps = 2;
        req->r_dentry_drop = CEPH_CAP_FILE_SHARED | CEPH_CAP_AUTH_EXCL |
@@ -1150,6 +1152,8 @@ static int ceph_mkdir(struct mnt_idmap *idmap, struct inode *dir,
        req->r_parent = dir;
        ihold(dir);
        set_bit(CEPH_MDS_R_PARENT_LOCKED, &req->r_req_flags);
+       if (op == CEPH_MDS_OP_MKDIR)
+               req->r_mnt_idmap = mnt_idmap_get(idmap);
        req->r_args.mkdir.mode = cpu_to_le32(mode);
        req->r_dentry_drop = CEPH_CAP_FILE_SHARED | CEPH_CAP_AUTH_EXCL |
                             CEPH_CAP_XATTR_EXCL;