btrfs: switch GFP_ATOMIC to GFP_NOFS when fixing up low keys
authorFilipe Manana <fdmanana@suse.com>
Thu, 13 Oct 2022 10:36:25 +0000 (11:36 +0100)
committerDavid Sterba <dsterba@suse.com>
Mon, 5 Dec 2022 17:00:40 +0000 (18:00 +0100)
When fixing up the first key of each node above the current level, at
fixup_low_keys(), we are doing a GFP_ATOMIC allocation for inserting an
operation record for the tree mod log. However we can do just fine with
GFP_NOFS nowadays. The need for GFP_ATOMIC was for the old days when we
had custom locks with spinning behaviour for extent buffers and we were
in spinning mode while at fixup_low_keys(). Now we use rw semaphores for
extent buffer locks, so we can safely use GFP_NOFS.

Signed-off-by: Filipe Manana <fdmanana@suse.com>
Reviewed-by: David Sterba <dsterba@suse.com>
Signed-off-by: David Sterba <dsterba@suse.com>
fs/btrfs/ctree.c

index 5f461e0..e6182d5 100644 (file)
@@ -2418,7 +2418,7 @@ static void fixup_low_keys(struct btrfs_path *path,
                        break;
                t = path->nodes[i];
                ret = btrfs_tree_mod_log_insert_key(t, tslot,
-                               BTRFS_MOD_LOG_KEY_REPLACE, GFP_ATOMIC);
+                               BTRFS_MOD_LOG_KEY_REPLACE, GFP_NOFS);
                BUG_ON(ret < 0);
                btrfs_set_node_key(t, key, tslot);
                btrfs_mark_buffer_dirty(path->nodes[i]);