[PATCH] xfs: fix might_sleep() warning when initialising per-ag tree

Dave Chinner david at fromorbit.com
Wed May 26 20:58:13 CDT 2010


From: Dave Chinner <dchinner at redhat.com>

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 <chris.mason at oracle.com>
Signed-off-by: Dave Chinner <dchinner at redhat.com>
---
 fs/xfs/xfs_mount.c |    2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)

diff --git a/fs/xfs/xfs_mount.c b/fs/xfs/xfs_mount.c
index ace795f..c901283 100644
--- a/fs/xfs/xfs_mount.c
+++ b/fs/xfs/xfs_mount.c
@@ -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);
-- 
1.5.6.5




More information about the xfs mailing list