summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChristoph Hellwig <hch@infradead.org>2009-07-18 18:15:01 -0400
committerFelix Blyakher <felixb@sgi.com>2009-08-11 10:56:40 -0500
commit7509ee34a365c041718d0b676e5ee255b58b5dda (patch)
tree514c832812225611af5bc50c1331bbf51cbdfe90
parent5a25f1abb26f5ab7c6c72fe0b3807c137ee484bb (diff)
downloadlinux-7509ee34a365c041718d0b676e5ee255b58b5dda.tar.gz
linux-7509ee34a365c041718d0b676e5ee255b58b5dda.tar.bz2
linux-7509ee34a365c041718d0b676e5ee255b58b5dda.zip
xfs: switch to NOFS allocation under i_lock in xfs_attr_rmtval_get
xfs_attr_rmtval_get 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>
-rw-r--r--fs/xfs/xfs_attr.c4
1 files changed, 3 insertions, 1 deletions
diff --git a/fs/xfs/xfs_attr.c b/fs/xfs/xfs_attr.c
index bfb583791fe2..4ece1906bd41 100644
--- a/fs/xfs/xfs_attr.c
+++ b/fs/xfs/xfs_attr.c
@@ -2010,7 +2010,9 @@ xfs_attr_rmtval_get(xfs_da_args_t *args)
dblkno = XFS_FSB_TO_DADDR(mp, map[i].br_startblock);
blkcnt = XFS_FSB_TO_BB(mp, map[i].br_blockcount);
error = xfs_read_buf(mp, mp->m_ddev_targp, dblkno,
- blkcnt, XFS_BUF_LOCK, &bp);
+ blkcnt,
+ XFS_BUF_LOCK | XBF_DONT_BLOCK,
+ &bp);
if (error)
return(error);