]> git.proxmox.com Git - mirror_ubuntu-kernels.git/commitdiff
bcachefs: Some project id fixes
authorKent Overstreet <kent.overstreet@gmail.com>
Mon, 24 Aug 2020 18:57:48 +0000 (14:57 -0400)
committerKent Overstreet <kent.overstreet@linux.dev>
Sun, 22 Oct 2023 21:08:44 +0000 (17:08 -0400)
Inode options that are accessible via the xattr interface are stored
with a +1 bias, so that a value of 0 means unset. We weren't handling
this consistently.

Signed-off-by: Kent Overstreet <kent.overstreet@gmail.com>
Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
fs/bcachefs/fs-ioctl.c
fs/bcachefs/xattr.c

index acc0a230ff0c241956b41ada58862afc6fda0f24..f6773783b958b34630b22af030b008ad96badf88 100644 (file)
@@ -138,6 +138,10 @@ static int bch2_ioc_fssetxattr(struct bch_fs *c,
        if (fa.fsx_projid >= U32_MAX)
                return -EINVAL;
 
+       /*
+        * inode fields accessible via the xattr interface are stored with a +1
+        * bias, so that 0 means unset:
+        */
        s.projid = fa.fsx_projid + 1;
 
        ret = mnt_want_write_file(file);
@@ -151,7 +155,7 @@ static int bch2_ioc_fssetxattr(struct bch_fs *c,
        }
 
        mutex_lock(&inode->ei_update_lock);
-       ret = bch2_set_projid(c, inode, s.projid);
+       ret = bch2_set_projid(c, inode, fa.fsx_projid);
        if (ret)
                goto err_unlock;
 
index 806a638508a6ad71dee045fd5c39a4fb4ede7ae1..c7840bb949a1c48cda8161c57e57908fa48950fd 100644 (file)
@@ -513,7 +513,11 @@ static int bch2_xattr_bcachefs_set(const struct xattr_handler *handler,
 
        mutex_lock(&inode->ei_update_lock);
        if (inode_opt_id == Inode_opt_project) {
-               ret = bch2_set_projid(c, inode, s.v);
+               /*
+                * inode fields accessible via the xattr interface are stored
+                * with a +1 bias, so that 0 means unset:
+                */
+               ret = bch2_set_projid(c, inode, s.v ? s.v - 1 : 0);
                if (ret)
                        goto err;
        }