mirror of
https://github.com/torvalds/linux.git
synced 2026-06-01 19:13:47 +02:00
btrfs: allocate path earlier at btrfs_del_dir_entries_in_log()
Instead of allocating the path after joining the log transaction, allocate it before so that we're not delaying log commits for the rare cases where the allocation takes a significant time (under memory pressure and all slabs are full, there's the need to allocate a new page, etc). Reviewed-by: Boris Burkov <boris@bur.io> 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
181436a85b
commit
b32efae7b8
|
|
@ -3472,27 +3472,27 @@ void btrfs_del_dir_entries_in_log(struct btrfs_trans_handle *trans,
|
|||
return;
|
||||
}
|
||||
|
||||
path = btrfs_alloc_path();
|
||||
if (!path) {
|
||||
btrfs_set_log_full_commit(trans);
|
||||
return;
|
||||
}
|
||||
|
||||
ret = join_running_log_trans(root);
|
||||
ASSERT(ret == 0, "join_running_log_trans() ret=%d", ret);
|
||||
if (WARN_ON(ret))
|
||||
return;
|
||||
goto out;
|
||||
|
||||
mutex_lock(&dir->log_mutex);
|
||||
|
||||
path = btrfs_alloc_path();
|
||||
if (!path) {
|
||||
ret = -ENOMEM;
|
||||
goto out_unlock;
|
||||
}
|
||||
|
||||
ret = del_logged_dentry(trans, root->log_root, path, btrfs_ino(dir),
|
||||
name, index);
|
||||
btrfs_free_path(path);
|
||||
out_unlock:
|
||||
mutex_unlock(&dir->log_mutex);
|
||||
if (ret < 0)
|
||||
btrfs_set_log_full_commit(trans);
|
||||
btrfs_end_log_trans(root);
|
||||
out:
|
||||
btrfs_free_path(path);
|
||||
}
|
||||
|
||||
/* see comments for btrfs_del_dir_entries_in_log */
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user