diff options
| author | 2025-05-31 16:33:14 +0100 | |
|---|---|---|
| committer | 2025-07-21 23:53:29 +0200 | |
| commit | 841324a8e60b25b2fa56f93ccc1ef36887593b5a (patch) | |
| tree | 5447c8919e6032a4ffc68bf76549966c59c65a61 /fs/btrfs/tree-log.c | |
| parent | btrfs: allocate path earlier at btrfs_del_dir_entries_in_log() (diff) | |
| download | linux-rng-841324a8e60b25b2fa56f93ccc1ef36887593b5a.tar.xz linux-rng-841324a8e60b25b2fa56f93ccc1ef36887593b5a.zip | |
btrfs: allocate path earlier at btrfs_log_new_name()
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>
Diffstat (limited to 'fs/btrfs/tree-log.c')
| -rw-r--r-- | fs/btrfs/tree-log.c | 16 |
1 files changed, 9 insertions, 7 deletions
diff --git a/fs/btrfs/tree-log.c b/fs/btrfs/tree-log.c index c3d7238ba2cb..bacee096dd72 100644 --- a/fs/btrfs/tree-log.c +++ b/fs/btrfs/tree-log.c @@ -7545,6 +7545,14 @@ void btrfs_log_new_name(struct btrfs_trans_handle *trans, &old_dentry->d_name, 0, &fname); if (ret) goto out; + + path = btrfs_alloc_path(); + if (!path) { + ret = -ENOMEM; + fscrypt_free_filename(&fname); + goto out; + } + /* * We have two inodes to update in the log, the old directory and * the inode that got renamed, so we must pin the log to prevent @@ -7558,19 +7566,13 @@ void btrfs_log_new_name(struct btrfs_trans_handle *trans, * mark the log for a full commit. */ if (WARN_ON_ONCE(ret < 0)) { + btrfs_free_path(path); fscrypt_free_filename(&fname); goto out; } log_pinned = true; - path = btrfs_alloc_path(); - if (!path) { - ret = -ENOMEM; - fscrypt_free_filename(&fname); - goto out; - } - /* * Other concurrent task might be logging the old directory, * as it can be triggered when logging other inode that had or |
