[XFS] Fix remount,readonly path to flush everything correctly.
The remount readonly path can fail to writeback properly because we still have active transactions after calling xfs_quiesce_fs(). Further investigation shows that this path is broken in the same ways that the xfs freeze path was broken so fix it the same way. SGI-PV: 964464 SGI-Modid: xfs-linux-melb:xfs-kern:28869a Signed-off-by: David Chinner <dgc@sgi.com> Signed-off-by: Christoph Hellwig <hch@infradead.org> Signed-off-by: Tim Shimmin <tes@sgi.com>
This commit is contained in:

committed by
Tim Shimmin

parent
957d0ebed0
commit
516b2e7c26
@@ -94,6 +94,20 @@ typedef enum {
|
||||
#define SYNC_IOWAIT 0x0100 /* wait for all I/O to complete */
|
||||
#define SYNC_SUPER 0x0200 /* flush superblock to disk */
|
||||
|
||||
/*
|
||||
* When remounting a filesystem read-only or freezing the filesystem,
|
||||
* we have two phases to execute. This first phase is syncing the data
|
||||
* before we quiesce the fielsystem, and the second is flushing all the
|
||||
* inodes out after we've waited for all the transactions created by
|
||||
* the first phase to complete. The second phase uses SYNC_INODE_QUIESCE
|
||||
* to ensure that the inodes are written to their location on disk
|
||||
* rather than just existing in transactions in the log. This means
|
||||
* after a quiesce there is no log replay required to write the inodes
|
||||
* to disk (this is the main difference between a sync and a quiesce).
|
||||
*/
|
||||
#define SYNC_DATA_QUIESCE (SYNC_DELWRI|SYNC_FSDATA|SYNC_WAIT|SYNC_IOWAIT)
|
||||
#define SYNC_INODE_QUIESCE (SYNC_REMOUNT|SYNC_ATTR|SYNC_WAIT)
|
||||
|
||||
#define SHUTDOWN_META_IO_ERROR 0x0001 /* write attempt to metadata failed */
|
||||
#define SHUTDOWN_LOG_IO_ERROR 0x0002 /* write attempt to the log failed */
|
||||
#define SHUTDOWN_FORCE_UMOUNT 0x0004 /* shutdown from a forced unmount */
|
||||
|
Reference in New Issue
Block a user