aboutsummaryrefslogtreecommitdiffstats
path: root/fs/xfs/xfs_sync.c
diff options
context:
space:
mode:
Diffstat (limited to 'fs/xfs/xfs_sync.c')
-rw-r--r--fs/xfs/xfs_sync.c13
1 files changed, 11 insertions, 2 deletions
diff --git a/fs/xfs/xfs_sync.c b/fs/xfs/xfs_sync.c
index 1e9ee064dbb2..97304f10e78a 100644
--- a/fs/xfs/xfs_sync.c
+++ b/fs/xfs/xfs_sync.c
@@ -359,6 +359,15 @@ xfs_quiesce_attr(
359 * added an item to the AIL, thus flush it again. 359 * added an item to the AIL, thus flush it again.
360 */ 360 */
361 xfs_ail_push_all_sync(mp->m_ail); 361 xfs_ail_push_all_sync(mp->m_ail);
362
363 /*
364 * The superblock buffer is uncached and xfsaild_push() will lock and
365 * set the XBF_ASYNC flag on the buffer. We cannot do xfs_buf_iowait()
366 * here but a lock on the superblock buffer will block until iodone()
367 * has completed.
368 */
369 xfs_buf_lock(mp->m_sb_bp);
370 xfs_buf_unlock(mp->m_sb_bp);
362} 371}
363 372
364static void 373static void
@@ -712,8 +721,8 @@ restart:
712 * Note that xfs_iflush will never block on the inode buffer lock, as 721 * Note that xfs_iflush will never block on the inode buffer lock, as
713 * xfs_ifree_cluster() can lock the inode buffer before it locks the 722 * xfs_ifree_cluster() can lock the inode buffer before it locks the
714 * ip->i_lock, and we are doing the exact opposite here. As a result, 723 * ip->i_lock, and we are doing the exact opposite here. As a result,
715 * doing a blocking xfs_itobp() to get the cluster buffer would result 724 * doing a blocking xfs_imap_to_bp() to get the cluster buffer would
716 * in an ABBA deadlock with xfs_ifree_cluster(). 725 * result in an ABBA deadlock with xfs_ifree_cluster().
717 * 726 *
718 * As xfs_ifree_cluser() must gather all inodes that are active in the 727 * As xfs_ifree_cluser() must gather all inodes that are active in the
719 * cache to mark them stale, if we hit this case we don't actually want 728 * cache to mark them stale, if we hit this case we don't actually want