summaryrefslogtreecommitdiff
path: root/fs/bcachefs/fs-ioctl.c
diff options
context:
space:
mode:
authorKent Overstreet <kent.overstreet@gmail.com>2018-12-19 16:43:01 +0300
committerKent Overstreet <kent.overstreet@linux.dev>2023-10-23 00:08:14 +0300
commit2fab25cdd70be6868936639dfb03eaa9fa0245c0 (patch)
treebe7d06507d673e81f7400edb3a9c5565f00b0de9 /fs/bcachefs/fs-ioctl.c
parent69d46f903120d4aab0e0ad239191245d839224cc (diff)
downloadlinux-2fab25cdd70be6868936639dfb03eaa9fa0245c0.tar.xz
bcachefs: more project quota fixes
Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
Diffstat (limited to 'fs/bcachefs/fs-ioctl.c')
-rw-r--r--fs/bcachefs/fs-ioctl.c26
1 files changed, 6 insertions, 20 deletions
diff --git a/fs/bcachefs/fs-ioctl.c b/fs/bcachefs/fs-ioctl.c
index 92939befe507..4925a127a335 100644
--- a/fs/bcachefs/fs-ioctl.c
+++ b/fs/bcachefs/fs-ioctl.c
@@ -104,19 +104,6 @@ static int bch2_ioc_fsgetxattr(struct bch_inode_info *inode,
return copy_to_user(arg, &fa, sizeof(fa));
}
-static int bch2_set_projid(struct bch_fs *c,
- struct bch_inode_info *inode,
- u32 projid)
-{
- struct bch_qid qid = inode->ei_qid;
-
- qid.q[QTYP_PRJ] = projid;
-
- return bch2_fs_quota_transfer(c, inode, qid,
- 1 << QTYP_PRJ,
- KEY_TYPE_QUOTA_PREALLOC);
-}
-
static int fssetxattr_inode_update_fn(struct bch_inode_info *inode,
struct bch_inode_unpacked *bi,
void *p)
@@ -124,11 +111,7 @@ static int fssetxattr_inode_update_fn(struct bch_inode_info *inode,
struct flags_set *s = p;
if (s->projid != bi->bi_project) {
- if (s->projid)
- bi->bi_fields_set |= 1U << Inode_opt_project;
- else
- bi->bi_fields_set &= ~(1U << Inode_opt_project);
-
+ bi->bi_fields_set |= 1U << Inode_opt_project;
bi->bi_project = s->projid;
}
@@ -151,7 +134,10 @@ static int bch2_ioc_fssetxattr(struct bch_fs *c,
if (fa.fsx_xflags)
return -EOPNOTSUPP;
- s.projid = fa.fsx_projid;
+ if (fa.fsx_projid >= U32_MAX)
+ return -EINVAL;
+
+ s.projid = fa.fsx_projid + 1;
ret = mnt_want_write_file(file);
if (ret)
@@ -164,7 +150,7 @@ static int bch2_ioc_fssetxattr(struct bch_fs *c,
}
mutex_lock(&inode->ei_update_lock);
- ret = bch2_set_projid(c, inode, fa.fsx_projid);
+ ret = bch2_set_projid(c, inode, s.projid);
if (ret)
goto err_unlock;