From: Filipe Manana <[email protected]> As of commit bb739cf08e8f32 ("btrfs: btrfs_check_shared should manage its own transaction") btrfs_check_shared() manages its own transaction, it no longer receives a transaction handle as parameter. Since it is used only in the fiemap path, the ulists it needs to use are allocated before it grabs a transaction handle and we are not holding any locks that could cause a deadlock in case reclaim happens during a memory allocation, we can use the GFP_KERNEL flag to allocate the ulists instead of GFP_NOFS. So do that switch.
Signed-off-by: Filipe Manana <[email protected]> --- fs/btrfs/backref.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/fs/btrfs/backref.c b/fs/btrfs/backref.c index 876e6bb93797..377978bb8845 100644 --- a/fs/btrfs/backref.c +++ b/fs/btrfs/backref.c @@ -1481,8 +1481,8 @@ int btrfs_check_shared(struct btrfs_root *root, u64 inum, u64 bytenr) .share_count = 0, }; - tmp = ulist_alloc(GFP_NOFS); - roots = ulist_alloc(GFP_NOFS); + tmp = ulist_alloc(GFP_KERNEL); + roots = ulist_alloc(GFP_KERNEL); if (!tmp || !roots) { ulist_free(tmp); ulist_free(roots); -- 2.11.0
