Message ID | cadc31b0278e4e362f71f7c57ebccb0c94af693b.1711488980.git.boris@bur.io (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | btrfs: various qg meta rsv leak fixes | expand |
在 2024/3/27 08:09, Boris Burkov 写道: > When running delayed inode updates, we do not record the inode's root in > the transaction, but we do allocate PREALLOC and thus converted PERTRANS > space for it. To be sure we free that PERTRANS meta rsv, we must ensure > that we record the root in the transaction. > > Fixes: 4f5427ccce5d ("btrfs: delayed-inode: Use new qgroup meta rsv for delayed inode and item") Reviewed-by: Qu Wenruo <wqu@suse.com> Just curious, do you have a case that hits this particular bug only? Thanks, Qu > Signed-off-by: Boris Burkov <boris@bur.io> > --- > fs/btrfs/delayed-inode.c | 3 +++ > 1 file changed, 3 insertions(+) > > diff --git a/fs/btrfs/delayed-inode.c b/fs/btrfs/delayed-inode.c > index dd6f566a383f..121ab890bd05 100644 > --- a/fs/btrfs/delayed-inode.c > +++ b/fs/btrfs/delayed-inode.c > @@ -1133,6 +1133,9 @@ __btrfs_commit_inode_delayed_items(struct btrfs_trans_handle *trans, > if (ret) > return ret; > > + ret = btrfs_record_root_in_trans(trans, node->root); > + if (ret) > + return ret; > ret = btrfs_update_delayed_inode(trans, node->root, path, node); > return ret; > }
On Wed, Mar 27, 2024 at 08:38:53AM +1030, Qu Wenruo wrote: > > > 在 2024/3/27 08:09, Boris Burkov 写道: > > When running delayed inode updates, we do not record the inode's root in > > the transaction, but we do allocate PREALLOC and thus converted PERTRANS > > space for it. To be sure we free that PERTRANS meta rsv, we must ensure > > that we record the root in the transaction. > > > > Fixes: 4f5427ccce5d ("btrfs: delayed-inode: Use new qgroup meta rsv for delayed inode and item") > > Reviewed-by: Qu Wenruo <wqu@suse.com> > > Just curious, do you have a case that hits this particular bug only? I tested all of these fixes just by running generic/269 and generic/475 in a loop and driving the meta rsv failures down to 0. I *believe* all of them are necessary to get to fully 0. > > Thanks, > Qu > > Signed-off-by: Boris Burkov <boris@bur.io> > > --- > > fs/btrfs/delayed-inode.c | 3 +++ > > 1 file changed, 3 insertions(+) > > > > diff --git a/fs/btrfs/delayed-inode.c b/fs/btrfs/delayed-inode.c > > index dd6f566a383f..121ab890bd05 100644 > > --- a/fs/btrfs/delayed-inode.c > > +++ b/fs/btrfs/delayed-inode.c > > @@ -1133,6 +1133,9 @@ __btrfs_commit_inode_delayed_items(struct btrfs_trans_handle *trans, > > if (ret) > > return ret; > > + ret = btrfs_record_root_in_trans(trans, node->root); > > + if (ret) > > + return ret; > > ret = btrfs_update_delayed_inode(trans, node->root, path, node); > > return ret; > > }
diff --git a/fs/btrfs/delayed-inode.c b/fs/btrfs/delayed-inode.c index dd6f566a383f..121ab890bd05 100644 --- a/fs/btrfs/delayed-inode.c +++ b/fs/btrfs/delayed-inode.c @@ -1133,6 +1133,9 @@ __btrfs_commit_inode_delayed_items(struct btrfs_trans_handle *trans, if (ret) return ret; + ret = btrfs_record_root_in_trans(trans, node->root); + if (ret) + return ret; ret = btrfs_update_delayed_inode(trans, node->root, path, node); return ret; }
When running delayed inode updates, we do not record the inode's root in the transaction, but we do allocate PREALLOC and thus converted PERTRANS space for it. To be sure we free that PERTRANS meta rsv, we must ensure that we record the root in the transaction. Fixes: 4f5427ccce5d ("btrfs: delayed-inode: Use new qgroup meta rsv for delayed inode and item") Signed-off-by: Boris Burkov <boris@bur.io> --- fs/btrfs/delayed-inode.c | 3 +++ 1 file changed, 3 insertions(+)