btrfs: use __GFP_NOFAIL in alloc_btrfs_bio
authorMichal Hocko <mhocko@suse.com>
Wed, 19 Aug 2015 12:17:41 +0000 (14:17 +0200)
committerChris Mason <clm@fb.com>
Wed, 19 Aug 2015 21:25:15 +0000 (14:25 -0700)
commit277fb5fc177dc4674ef6151a7697f5396bbdff11
treef0fdf6d64cabb888b9c82691d66db710b4773d84
parentd1b5c5671d010de1df78d3efddb84bf22bfafd1e
btrfs: use __GFP_NOFAIL in alloc_btrfs_bio

alloc_btrfs_bio relies on GFP_NOFS allocation when committing the
transaction but this allocation context is rather weak wrt. reclaim
capabilities. The page allocator currently tries hard to not fail these
allocations if they are small (<=PAGE_ALLOC_COSTLY_ORDER) but it can
still fail if the _current_ process is the OOM killer victim. Moreover
there is an attempt to move away from the default no-fail behavior and
allow these allocation to fail more eagerly. This would lead to:

[   37.928625] kernel BUG at fs/btrfs/extent_io.c:4045

which is clearly undesirable and the nofail behavior should be explicit
if the allocation failure cannot be tolerated.

Signed-off-by: Michal Hocko <mhocko@suse.com>
Signed-off-by: Chris Mason <clm@fb.com>
fs/btrfs/volumes.c