diff options
author | Kent Overstreet <kent.overstreet@linux.dev> | 2023-04-28 03:50:57 -0400 |
---|---|---|
committer | Kent Overstreet <kent.overstreet@linux.dev> | 2023-10-22 17:10:01 -0400 |
commit | cb1b479dc1c78d1d224e4aa6aba212a7bd3263a4 (patch) | |
tree | 513bb9bfc7c62be3eadc1ec622f420b4497d9d28 /fs/bcachefs/fs-io.c | |
parent | 653693beea8ac93e57fc17afc7353bd158bcd5ff (diff) |
bcachefs: Fix quotas + snapshots
Now that we can reliably designate and find the master subvolume out of
a tree of snapshots, we can finally make quotas work with snapshots:
That is - quotas will now _ignore_ snapshot subvolumes, and only be in
effect for the master (non snapshot) subvolume.
Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
Diffstat (limited to 'fs/bcachefs/fs-io.c')
-rw-r--r-- | fs/bcachefs/fs-io.c | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/fs/bcachefs/fs-io.c b/fs/bcachefs/fs-io.c index ea5039254609..64897cee8494 100644 --- a/fs/bcachefs/fs-io.c +++ b/fs/bcachefs/fs-io.c @@ -333,6 +333,9 @@ static int bch2_quota_reservation_add(struct bch_fs *c, { int ret; + if (test_bit(EI_INODE_SNAPSHOT, &inode->ei_flags)) + return 0; + mutex_lock(&inode->ei_quota_lock); ret = bch2_quota_acct(c, inode->ei_qid, Q_SPC, sectors, check_enospc ? KEY_TYPE_QUOTA_PREALLOC : KEY_TYPE_QUOTA_NOCHECK); @@ -414,7 +417,9 @@ static void __i_sectors_acct(struct bch_fs *c, struct bch_inode_info *inode, inode->v.i_blocks += sectors; #ifdef CONFIG_BCACHEFS_QUOTA - if (quota_res && sectors > 0) { + if (quota_res && + !test_bit(EI_INODE_SNAPSHOT, &inode->ei_flags) && + sectors > 0) { BUG_ON(sectors > quota_res->sectors); BUG_ON(sectors > inode->ei_quota_reserved); |