Skip to content

Commit

Permalink
btrfs: do not account twice for inode ref when reserving metadata units
Browse files Browse the repository at this point in the history
When reserving metadata units for creating an inode, we don't need to
reserve one extra unit for the inode ref item because when creating the
inode, at btrfs_create_new_inode(), we always insert the inode item and
the inode ref item in a single batch (a single btree insert operation,
and both ending up in the same leaf).

As we have accounted already one unit for the inode item, the extra unit
for the inode ref item is superfluous, it only makes us reserve more
metadata than necessary and often adding more reclaim pressure if we are
low on available metadata space.

Reviewed-by: Nikolay Borisov <nborisov@suse.com>
Signed-off-by: Filipe Manana <fdmanana@suse.com>
Reviewed-by: David Sterba <dsterba@suse.com>
Signed-off-by: David Sterba <dsterba@suse.com>
  • Loading branch information
Filipe Manana authored and David Sterba committed May 17, 2022
1 parent aa9ffad commit 97bdf1a
Showing 1 changed file with 5 additions and 2 deletions.
7 changes: 5 additions & 2 deletions fs/btrfs/inode.c
Original file line number Diff line number Diff line change
Expand Up @@ -6164,12 +6164,15 @@ int btrfs_new_inode_prepare(struct btrfs_new_inode_args *args,
(*trans_num_items)++;
} else {
/*
* 1 to add inode ref
* 1 to add dir item
* 1 to add dir index
* 1 to update parent inode item
*
* No need for 1 unit for the inode ref item because it is
* inserted in a batch together with the inode item at
* btrfs_create_new_inode().
*/
*trans_num_items += 4;
*trans_num_items += 3;
}
return 0;
}
Expand Down

0 comments on commit 97bdf1a

Please sign in to comment.