From e7ffda565a762a6bdf782b4978af5ccfe4ab5d0d Mon Sep 17 00:00:00 2001 From: Kent Overstreet Date: Sat, 27 May 2023 20:00:13 -0400 Subject: bcachefs: Fix a quota read bug bch2_fs_quota_read() could see an inode that's been deleted (KEY_TYPE_inode_generation) - bch2_fs_quota_read_inode() needs to check for that instead of erroring. Signed-off-by: Kent Overstreet --- fs/bcachefs/quota.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) (limited to 'fs/bcachefs/quota.c') diff --git a/fs/bcachefs/quota.c b/fs/bcachefs/quota.c index 310eb9d26571..56ba82cae19d 100644 --- a/fs/bcachefs/quota.c +++ b/fs/bcachefs/quota.c @@ -576,6 +576,13 @@ static int bch2_fs_quota_read_inode(struct btree_trans *trans, le32_to_cpu(s_t.master_subvol), k.k->p.offset, }, &u); + /* + * Inode might be deleted in this snapshot - the easiest way to handle + * that is to just skip it here: + */ + if (bch2_err_matches(ret, ENOENT)) + goto advance; + if (ret) return ret; @@ -615,7 +622,7 @@ int bch2_fs_quota_read(struct bch_fs *c) POS_MIN, BTREE_ITER_PREFETCH|BTREE_ITER_ALL_SNAPSHOTS, k, bch2_fs_quota_read_inode(&trans, &iter, k)); if (ret) - bch_err(c, "err in quota_read: %s", bch2_err_str(ret)); + bch_err(c, "%s: err %s", __func__, bch2_err_str(ret)); bch2_trans_exit(&trans); return ret; -- cgit v1.2.3