xfs: wait for the write the superblock on unmount
A message that is not in the archive (sent off-list or not yet received): [email protected]
PATCH v2 1/1 xfs: wait for the write the superblock on unmount
v2: Add the xfs_buf_lock to xfs_quiesce_attr().
Add explaination why xfs_buf_lock() is used to wait for write.
xfs_wait_buftarg() does not wait for the completion of the write of the uncached superblock. This write can race with the shutdown of the log and causes a panic if the write does not win the race.
During the log write, xfsaild_push() will lock the buffer and set the XBF_ASYNC flag. Because the XBF_FLAG is set, complete() is not performed on the buffer's iowait entry, we cannot call xfs_buf_iowait() to wait for the write to complete. The buffer's lock is held until the write is complete, so we can block on a xfs_buf_lock() request to be notified that the write is complete.
--- fs/xfs/xfs_mount.c | 9 +++++++++ fs/xfs/xfs_sync.c | 9 +++++++++ 2 files changed, 18 insertions(+)
fs/xfs/xfs_mount.c +9 -0
@@ -1529,6 +1529,15 @@ xfs_unmountfs(xfs_ail_push_all_sync (mp->m_ail);xfs_wait_buftarg (mp->m_ddev_targp); +/* +* The superblock buffer is uncached and xfsaild_push() will lock and +* set the XBF_ASYNC flag on the buffer. We cannot do xfs_buf_iowait() +* here but a lock on the superblock buffer will block until iodone() +* has completed. +*/ +xfs_buf_lock (mp->m_sb_bp); +xfs_buf_unlock (mp->m_sb_bp); +xfs_log_unmount_write (mp);xfs_log_unmount (mp);xfs_uuid_unmount (mp);
fs/xfs/xfs_sync.c +9 -0
@@ -359,6 +359,15 @@ xfs_quiesce_attr(* added an item to the AIL, thus flush it again. */ xfs_ail_push_all_sync (mp->m_ail); + +/* +* The superblock buffer is uncached and xfsaild_push() will lock and +* set the XBF_ASYNC flag on the buffer. We cannot do xfs_buf_iowait() +* here but a lock on the superblock buffer will block until iodone() +* has completed. +*/ +xfs_buf_lock (mp->m_sb_bp); +xfs_buf_unlock (mp->m_sb_bp); } static void
_______________________________________________
xfs mailing list
[email protected]
http://oss.sgi.com/mailman/listinfo/xfs