mirror of
https://github.com/torvalds/linux.git
synced 2025-11-01 00:58:39 +02:00
btrfs: simplify cow only root list extraction during transaction commit
There's no need to keep a local variable to extract the first member of the list and then do a list_entry() call, we can use list_first_entry() instead, removing the need for the temporary variable and extracting the first element in a single step. Also, there's no need to do a list_del_init() followed by list_add_tail(), instead we can use list_move_tail(). We are in transaction commit critical section where we don't need to worry about concurrency and that's why we don't take any locks and can use list_move_tail() (we do assert early at commit_cowonly_roots() that we are in the critical section, that the transaction's state is TRANS_STATE_COMMIT_DOING). Reviewed-by: Qu Wenruo <wqu@suse.com> Reviewed-by: Johannes Thumshirn <johannes.thumshirn@wdc.com> Signed-off-by: Filipe Manana <fdmanana@suse.com> Reviewed-by: David Sterba <dsterba@suse.com> Signed-off-by: David Sterba <dsterba@suse.com>
This commit is contained in:
parent
a20f732822
commit
d26d16a432
1 changed files with 6 additions and 7 deletions
|
|
@ -1327,7 +1327,6 @@ static noinline int commit_cowonly_roots(struct btrfs_trans_handle *trans)
|
|||
struct btrfs_fs_info *fs_info = trans->fs_info;
|
||||
struct list_head *dirty_bgs = &trans->transaction->dirty_bgs;
|
||||
struct list_head *io_bgs = &trans->transaction->io_bgs;
|
||||
struct list_head *next;
|
||||
struct extent_buffer *eb;
|
||||
int ret;
|
||||
|
||||
|
|
@ -1363,13 +1362,13 @@ static noinline int commit_cowonly_roots(struct btrfs_trans_handle *trans)
|
|||
again:
|
||||
while (!list_empty(&fs_info->dirty_cowonly_roots)) {
|
||||
struct btrfs_root *root;
|
||||
next = fs_info->dirty_cowonly_roots.next;
|
||||
list_del_init(next);
|
||||
root = list_entry(next, struct btrfs_root, dirty_list);
|
||||
clear_bit(BTRFS_ROOT_DIRTY, &root->state);
|
||||
|
||||
list_add_tail(&root->dirty_list,
|
||||
&trans->transaction->switch_commits);
|
||||
root = list_first_entry(&fs_info->dirty_cowonly_roots,
|
||||
struct btrfs_root, dirty_list);
|
||||
clear_bit(BTRFS_ROOT_DIRTY, &root->state);
|
||||
list_move_tail(&root->dirty_list,
|
||||
&trans->transaction->switch_commits);
|
||||
|
||||
ret = update_cowonly_root(trans, root);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
|
|
|||
Loading…
Reference in a new issue