public inbox for linux-xfs@vger.kernel.org
 help / color / mirror / Atom feed
From: Ben Myers <bpm@sgi.com>
To: stable@vger.kernel.org
Cc: Christoph Hellwig <hch@infradead.org>,
	Alex Elder <aelder@sgi.com>, Christoph Hellwig <hch@lst.de>,
	xfs@oss.sgi.com
Subject: [PATCH 4/6] xfs: fix buffer flushing during unmount
Date: Wed, 23 Nov 2011 15:38:11 -0600	[thread overview]
Message-ID: <1322084293-23557-5-git-send-email-bpm@sgi.com> (raw)
In-Reply-To: <1322084293-23557-1-git-send-email-bpm@sgi.com>

From: Christoph Hellwig <hch@infradead.org>

>From a063aff275e3c514da54b293e0f86c7c9c5b3ec2

The code to flush buffers in the umount code is a bit iffy: we first
flush all delwri buffers out, but then might be able to queue up a
new one when logging the sb counts.  On a normal shutdown that one
would get flushed out when doing the synchronous superblock write in
xfs_unmountfs_writesb, but we skip that one if the filesystem has
been shut down.

Fix this by moving the delwri list flushing until just before unmounting
the log, and while we're at it also remove the superflous delwri list
and buffer lru flusing for the rt and log device that can never have
cached or delwri buffers.

Signed-off-by: Christoph Hellwig <hch@lst.de>
Reported-by: Amit Sahrawat <amit.sahrawat83@gmail.com>
Tested-by: Amit Sahrawat <amit.sahrawat83@gmail.com>
Signed-off-by: Alex Elder <aelder@sgi.com>
---
 fs/xfs/xfs_buf.h   |    1 -
 fs/xfs/xfs_mount.c |   29 ++++++++++-------------------
 2 files changed, 10 insertions(+), 20 deletions(-)

diff --git a/fs/xfs/xfs_buf.h b/fs/xfs/xfs_buf.h
index 620972b..8e8b06b 100644
--- a/fs/xfs/xfs_buf.h
+++ b/fs/xfs/xfs_buf.h
@@ -320,7 +320,6 @@ extern struct list_head *xfs_get_buftarg_list(void);
 #define xfs_getsize_buftarg(buftarg)	block_size((buftarg)->bt_bdev)
 #define xfs_readonly_buftarg(buftarg)	bdev_read_only((buftarg)->bt_bdev)
 
-#define xfs_binval(buftarg)		xfs_flush_buftarg(buftarg, 1)
 #define XFS_bflush(buftarg)		xfs_flush_buftarg(buftarg, 1)
 
 #endif	/* __XFS_BUF_H__ */
diff --git a/fs/xfs/xfs_mount.c b/fs/xfs/xfs_mount.c
index 0081657..d4d5775 100644
--- a/fs/xfs/xfs_mount.c
+++ b/fs/xfs/xfs_mount.c
@@ -44,9 +44,6 @@
 #include "xfs_trace.h"
 
 
-STATIC void	xfs_unmountfs_wait(xfs_mount_t *);
-
-
 #ifdef HAVE_PERCPU_SB
 STATIC void	xfs_icsb_balance_counter(xfs_mount_t *, xfs_sb_field_t,
 						int);
@@ -1496,11 +1493,6 @@ xfs_unmountfs(
 	 */
 	xfs_log_force(mp, XFS_LOG_SYNC);
 
-	xfs_binval(mp->m_ddev_targp);
-	if (mp->m_rtdev_targp) {
-		xfs_binval(mp->m_rtdev_targp);
-	}
-
 	/*
 	 * Unreserve any blocks we have so that when we unmount we don't account
 	 * the reserved free space as used. This is really only necessary for
@@ -1526,7 +1518,16 @@ xfs_unmountfs(
 		xfs_warn(mp, "Unable to update superblock counters. "
 				"Freespace may not be correct on next mount.");
 	xfs_unmountfs_writesb(mp);
-	xfs_unmountfs_wait(mp); 		/* wait for async bufs */
+
+	/*
+	 * Make sure all buffers have been flushed and completed before
+	 * unmounting the log.
+	 */
+	error = xfs_flush_buftarg(mp->m_ddev_targp, 1);
+	if (error)
+		xfs_warn(mp, "%d busy buffers during unmount.", error);
+	xfs_wait_buftarg(mp->m_ddev_targp);
+
 	xfs_log_unmount_write(mp);
 	xfs_log_unmount(mp);
 	xfs_uuid_unmount(mp);
@@ -1537,16 +1538,6 @@ xfs_unmountfs(
 	xfs_free_perag(mp);
 }
 
-STATIC void
-xfs_unmountfs_wait(xfs_mount_t *mp)
-{
-	if (mp->m_logdev_targp != mp->m_ddev_targp)
-		xfs_wait_buftarg(mp->m_logdev_targp);
-	if (mp->m_rtdev_targp)
-		xfs_wait_buftarg(mp->m_rtdev_targp);
-	xfs_wait_buftarg(mp->m_ddev_targp);
-}
-
 int
 xfs_fs_writable(xfs_mount_t *mp)
 {
-- 
1.7.8.rc0.46.g5ae0f

_______________________________________________
xfs mailing list
xfs@oss.sgi.com
http://oss.sgi.com/mailman/listinfo/xfs

  parent reply	other threads:[~2011-11-23 21:25 UTC|newest]

Thread overview: 19+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-11-23 21:38 [PATCH 0/6] XFS update for 3.1-stable Ben Myers
2011-11-23 21:38 ` [PATCH 1/6] xfs: don't serialise direct IO reads on page cache checks Ben Myers
2011-11-23 21:38 ` [PATCH 2/6] xfs: avoid direct I/O write vs buffered I/O race Ben Myers
2011-11-23 21:38 ` [PATCH 3/6] xfs: Return -EIO when xfs_vn_getattr() failed Ben Myers
2011-11-23 21:38 ` Ben Myers [this message]
2011-11-23 21:38 ` [PATCH 5/6] xfs: Fix possible memory corruption in xfs_readlink Ben Myers
2011-11-23 21:38 ` [PATCH 6/6] xfs: use doalloc flag in xfs_qm_dqattach_one() Ben Myers
2011-11-28 11:00 ` [PATCH 0/6] XFS update for 3.1-stable Christoph Hellwig
2011-11-28 13:48   ` Greg KH
2011-11-28 16:54     ` Ben Myers
2011-11-28 21:40       ` Greg KH
2011-11-30 18:10         ` XFS update for 3.1-stable (resent) Ben Myers
2011-11-30 18:10           ` [PATCH 1/6] xfs: don't serialise direct IO reads on page cache checks Ben Myers
2011-11-30 18:10           ` [PATCH 2/6] xfs: avoid direct I/O write vs buffered I/O race Ben Myers
2011-11-30 18:10           ` [PATCH 3/6] xfs: Return -EIO when xfs_vn_getattr() failed Ben Myers
2011-11-30 18:10           ` [PATCH 4/6] xfs: fix buffer flushing during unmount Ben Myers
2011-11-30 18:10           ` [PATCH 5/6] xfs: Fix possible memory corruption in xfs_readlink Ben Myers
2011-11-30 18:11           ` [PATCH 6/6] xfs: use doalloc flag in xfs_qm_dqattach_one() Ben Myers
  -- strict thread matches above, loose matches on Subject: below --
2011-12-01 23:27 [PATCH 0/6] XFS update for 3.1-stable (again) Ben Myers
2011-12-01 23:27 ` [PATCH 4/6] xfs: fix buffer flushing during unmount Ben Myers

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1322084293-23557-5-git-send-email-bpm@sgi.com \
    --to=bpm@sgi.com \
    --cc=aelder@sgi.com \
    --cc=hch@infradead.org \
    --cc=hch@lst.de \
    --cc=stable@vger.kernel.org \
    --cc=xfs@oss.sgi.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox