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:
Filipe Manana 2025-05-29 16:32:37 +01:00 committed by David Sterba
parent 181436a85b
commit b32efae7b8

View File

@ -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 */