xfs: switch to NOFS allocation under i_lock in xfs_da_state_alloc
authorChristoph Hellwig <hch@infradead.org>
Sat, 18 Jul 2009 22:14:55 +0000 (18:14 -0400)
committerFelix Blyakher <felixb@sgi.com>
Wed, 12 Aug 2009 06:07:07 +0000 (01:07 -0500)
xfs_da_state_alloc is always called with i_lock held, but i_lock is taken in
reclaim context so all allocations under it must avoid recursions into the
filesystem.

Reported by the new reclaim context tracing in lockdep.

Signed-off-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: Felix Blyakher <felixb@sgi.com>
Signed-off-by: Felix Blyakher <felixb@sgi.com>
fs/xfs/xfs_da_btree.c

index 9ff6e57a50758f10ddc076dc7875dad2172963a3..bd0bb6dfcdfadc97c653baa17f206872b5734741 100644 (file)
@@ -2201,7 +2201,7 @@ kmem_zone_t *xfs_dabuf_zone;              /* dabuf zone */
 xfs_da_state_t *
 xfs_da_state_alloc(void)
 {
-       return kmem_zone_zalloc(xfs_da_state_zone, KM_SLEEP);
+       return kmem_zone_zalloc(xfs_da_state_zone, KM_NOFS);
 }
 
 /*