xfs: fix might_sleep() warning when initialising per-ag tree
PATCH 1/1 xfs: fix might_sleep() warning when initialising per-ag tree
From: Dave Chinner <[email protected]>
The use of radix_tree_preload() only works if the radix tree was initialised without the __GFP_WAIT flag. The per-ag tree uses GFP_NOFS, so does not trigger allocation of new tree nodes from the preloaded array. Hence it enters the allocator with a spinlock held and triggers the might_sleep() warnings.
Reported-by; Chris Mason <[email protected]>
--- fs/xfs/xfs_mount.c | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-)
fs/xfs/xfs_mount.c +1 -1
@@ -1251,7 +1251,7 @@ xfs_mountfs(* Allocate and initialize the per-ag data. */ spin_lock_init (&mp->m_perag_lock); -INIT_RADIX_TREE (&mp->m_perag_tree,GFP_NOFS ); +INIT_RADIX_TREE (&mp->m_perag_tree,GFP_ATOMIC ); error =xfs_initialize_perag (mp, sbp->sb_agcount, &mp->m_maxagi);if (error) {cmn_err (CE_WARN ,"XFS: Failed per-ag init: %d" , error);
Signature · 6 lines
1.5.6.5 _______________________________________________ xfs mailing list [email protected] http://oss.sgi.com/mailman/listinfo/xfs
Quoted 9 lines · Dave Chinner
From: Dave Chinner <[email protected]>
The use of
radix_tree_preload()only works if the radix tree was initialised without the__GFP_WAITflag. The per-ag tree usesGFP_NOFS, so does not trigger allocation of new tree nodes from the preloaded array. Hence it enters the allocator with a spinlock held and triggers themight_sleep()warnings.Reported-by; Chris Mason <[email protected]>
Signed-off-by Dave Chinner <[email protected]>
Looks good,
_______________________________________________
xfs mailing list
[email protected]
http://oss.sgi.com/mailman/listinfo/xfs