Skip to content

Commit 27e7868

Browse files
adam900710gregkh
authored andcommitted
btrfs: qgroup: fix wrong qgroup metadata reserve for delayed inode
commit b4c5d8f upstream. For delayed inode facility, qgroup metadata is reserved for it, and later freed. However we're freeing more bytes than we reserved. In btrfs_delayed_inode_reserve_metadata(): num_bytes = btrfs_calc_metadata_size(fs_info, 1); ... ret = btrfs_qgroup_reserve_meta_prealloc(root, fs_info->nodesize, true); ... if (!ret) { node->bytes_reserved = num_bytes; But in btrfs_delayed_inode_release_metadata(): if (qgroup_free) btrfs_qgroup_free_meta_prealloc(node->root, node->bytes_reserved); else btrfs_qgroup_convert_reserved_meta(node->root, node->bytes_reserved); This means, we're always releasing more qgroup metadata rsv than we have reserved. This won't trigger selftest warning, as btrfs qgroup metadata rsv has extra protection against cases like quota enabled half-way. But we still need to fix this problem any way. This patch will use the same num_bytes for qgroup metadata rsv so we could handle it correctly. Fixes: f218ea6 ("btrfs: delayed-inode: Remove wrong qgroup meta reservation calls") CC: stable@vger.kernel.org # 4.19+ Reviewed-by: Josef Bacik <josef@toxicpanda.com> Signed-off-by: Qu Wenruo <wqu@suse.com> Signed-off-by: David Sterba <dsterba@suse.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
1 parent 90e8bbe commit 27e7868

File tree

1 file changed

+1
-2
lines changed

1 file changed

+1
-2
lines changed

fs/btrfs/delayed-inode.c

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -627,8 +627,7 @@ static int btrfs_delayed_inode_reserve_metadata(
627627
*/
628628
if (!src_rsv || (!trans->bytes_reserved &&
629629
src_rsv->type != BTRFS_BLOCK_RSV_DELALLOC)) {
630-
ret = btrfs_qgroup_reserve_meta_prealloc(root,
631-
fs_info->nodesize, true);
630+
ret = btrfs_qgroup_reserve_meta_prealloc(root, num_bytes, true);
632631
if (ret < 0)
633632
return ret;
634633
ret = btrfs_block_rsv_add(root, dst_rsv, num_bytes,

0 commit comments

Comments
 (0)