Commit b32efae7 authored by Filipe Manana's avatar Filipe Manana Committed by David Sterba
Browse files

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: default avatarBoris Burkov <boris@bur.io>
Signed-off-by: default avatarFilipe Manana <fdmanana@suse.com>
Reviewed-by: default avatarDavid Sterba <dsterba@suse.com>
Signed-off-by: default avatarDavid Sterba <dsterba@suse.com>
parent 181436a8
Loading
Loading
Loading
Loading
+9 −9
Original line number Diff line number Diff line
@@ -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 */