[Top] [All Lists]

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

To: xfs@xxxxxxxxxxx
Subject: [PATCH] xfs: fix might_sleep() warning when initialising per-ag tree
From: Dave Chinner <david@xxxxxxxxxxxxx>
Date: Thu, 27 May 2010 11:58:13 +1000
From: Dave Chinner <dchinner@xxxxxxxxxx>

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@xxxxxxxxxx>
Signed-off-by: Dave Chinner <dchinner@xxxxxxxxxx>
 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.
-       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);

<Prev in Thread] Current Thread [Next in Thread>