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

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@oracle.com>
Signed-off-by: Dave Chinner <dchinner@redhat.com>
Reviewed-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Alex Elder <aelder@sgi.com>

authored by Dave Chinner and committed by Alex Elder 9b98b6f3 38e712ab

+1 -1
+1 -1
fs/xfs/xfs_mount.c
··· 1254 1254 * Allocate and initialize the per-ag data. 1255 1255 */ 1256 1256 spin_lock_init(&mp->m_perag_lock); 1257 - INIT_RADIX_TREE(&mp->m_perag_tree, GFP_NOFS); 1257 + INIT_RADIX_TREE(&mp->m_perag_tree, GFP_ATOMIC); 1258 1258 error = xfs_initialize_perag(mp, sbp->sb_agcount, &mp->m_maxagi); 1259 1259 if (error) { 1260 1260 cmn_err(CE_WARN, "XFS: Failed per-ag init: %d", error);