Skip to content

Commit

Permalink
btrfs: add helper to truncate inode items when logging inode
Browse files Browse the repository at this point in the history
Move the call to btrfs_truncate_inode_items(), and the surrounding retry
loop, into a local helper function. This avoids some repetition and avoids
making the next change a bit awkward due to a bit of too much indentation.

This patch is part of a patch set comprised of the following patches:

  btrfs: check if a log tree exists at inode_logged()
  btrfs: remove no longer needed checks for NULL log context
  btrfs: do not log new dentries when logging that a new name exists
  btrfs: always update the logged transaction when logging new names
  btrfs: avoid expensive search when dropping inode items from log
  btrfs: add helper to truncate inode items when logging inode
  btrfs: avoid expensive search when truncating inode items from the log
  btrfs: avoid search for logged i_size when logging inode if possible
  btrfs: avoid attempt to drop extents when logging inode for the first time
  btrfs: do not commit delayed inode when logging a file in full sync mode

This is patch 6/10 and test results are listed in the change log of the
last patch in the set.

Signed-off-by: Filipe Manana <fdmanana@suse.com>
Signed-off-by: David Sterba <dsterba@suse.com>
  • Loading branch information
Filipe Manana authored and David Sterba committed Oct 26, 2021
1 parent 88e221c commit 8a2b3da
Showing 1 changed file with 19 additions and 13 deletions.
32 changes: 19 additions & 13 deletions fs/btrfs/tree-log.c
Original file line number Diff line number Diff line change
Expand Up @@ -3937,6 +3937,21 @@ static int drop_inode_items(struct btrfs_trans_handle *trans,
return ret;
}

static int truncate_inode_items(struct btrfs_trans_handle *trans,
struct btrfs_root *log_root,
struct btrfs_inode *inode,
u64 new_size, u32 min_type)
{
int ret;

do {
ret = btrfs_truncate_inode_items(trans, log_root, inode,
new_size, min_type, NULL);
} while (ret == -EAGAIN);

return ret;
}

static void fill_inode_item(struct btrfs_trans_handle *trans,
struct extent_buffer *leaf,
struct btrfs_inode_item *item,
Expand Down Expand Up @@ -4525,13 +4540,9 @@ static int btrfs_log_prealloc_extents(struct btrfs_trans_handle *trans,
* Avoid logging extent items logged in past fsync calls
* and leading to duplicate keys in the log tree.
*/
do {
ret = btrfs_truncate_inode_items(trans,
root->log_root,
inode, truncate_offset,
BTRFS_EXTENT_DATA_KEY,
NULL);
} while (ret == -EAGAIN);
ret = truncate_inode_items(trans, root->log_root, inode,
truncate_offset,
BTRFS_EXTENT_DATA_KEY);
if (ret)
goto out;
dropped_extents = true;
Expand Down Expand Up @@ -5477,12 +5488,7 @@ static int btrfs_log_inode(struct btrfs_trans_handle *trans,
&inode->runtime_flags);
clear_bit(BTRFS_INODE_COPY_EVERYTHING,
&inode->runtime_flags);
while(1) {
ret = btrfs_truncate_inode_items(trans,
log, inode, 0, 0, NULL);
if (ret != -EAGAIN)
break;
}
ret = truncate_inode_items(trans, log, inode, 0, 0);
}
} else if (test_and_clear_bit(BTRFS_INODE_COPY_EVERYTHING,
&inode->runtime_flags) ||
Expand Down

0 comments on commit 8a2b3da

Please sign in to comment.