This is a note to let you know that I've just added the patch titled xfs: write unmount record for ro mounts to the 4.9-stable tree which can be found at: http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary The filename of the patch is: xfs-write-unmount-record-for-ro-mounts.patch and it can be found in the queue-4.9 subdirectory. If you, or anyone else, feels it should not be added to the stable tree, please let <stable@xxxxxxxxxxxxxxx> know about it. >From foo@baz Mon Sep 18 10:16:36 CEST 2017 From: Christoph Hellwig <hch@xxxxxx> Date: Sun, 17 Sep 2017 14:06:46 -0700 Subject: xfs: write unmount record for ro mounts To: stable@xxxxxxxxxxxxxxx Cc: linux-xfs@xxxxxxxxxxxxxxx, Eric Sandeen <sandeen@xxxxxxxxxxx>, Eric Sandeen <sandeen@xxxxxxxxxx>, "Darrick J . Wong" <darrick.wong@xxxxxxxxxx> Message-ID: <20170917210712.10804-22-hch@xxxxxx> From: Eric Sandeen <sandeen@xxxxxxxxxxx> commit 757a69ef6cf2bf839bd4088e5609ddddd663b0c4 upstream. There are dueling comments in the xfs code about intent for log writes when unmounting a readonly filesystem. In xfs_mountfs, we see the intent: /* * Now the log is fully replayed, we can transition to full read-only * mode for read-only mounts. This will sync all the metadata and clean * the log so that the recovery we just performed does not have to be * replayed again on the next mount. */ and it calls xfs_quiesce_attr(), but by the time we get to xfs_log_unmount_write(), it returns early for a RDONLY mount: * Don't write out unmount record on read-only mounts. Because of this, sequential ro mounts of a filesystem with a dirty log will replay the log each time, which seems odd. Fix this by writing an unmount record even for RO mounts, as long as norecovery wasn't specified (don't write a clean log record if a dirty log may still be there!) and the log device is writable. Signed-off-by: Eric Sandeen <sandeen@xxxxxxxxxx> Reviewed-by: Brian Foster <bfoster@xxxxxxxxxx> Reviewed-by: Christoph Hellwig <hch@xxxxxx> Reviewed-by: Darrick J. Wong <darrick.wong@xxxxxxxxxx> Signed-off-by: Darrick J. Wong <darrick.wong@xxxxxxxxxx> Signed-off-by: Greg Kroah-Hartman <gregkh@xxxxxxxxxxxxxxxxxxx> --- fs/xfs/xfs_log.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) --- a/fs/xfs/xfs_log.c +++ b/fs/xfs/xfs_log.c @@ -812,11 +812,14 @@ xfs_log_unmount_write(xfs_mount_t *mp) int error; /* - * Don't write out unmount record on read-only mounts. + * Don't write out unmount record on norecovery mounts or ro devices. * Or, if we are doing a forced umount (typically because of IO errors). */ - if (mp->m_flags & XFS_MOUNT_RDONLY) + if (mp->m_flags & XFS_MOUNT_NORECOVERY || + xfs_readonly_buftarg(log->l_mp->m_logdev_targp)) { + ASSERT(mp->m_flags & XFS_MOUNT_RDONLY); return 0; + } error = _xfs_log_force(mp, XFS_LOG_SYNC, NULL); ASSERT(error || !(XLOG_FORCED_SHUTDOWN(log))); Patches currently in stable-queue which might be from hch@xxxxxx are queue-4.9/xfs-open-code-xfs_buf_item_dirty.patch queue-4.9/xfs-properly-retry-failed-inode-items-in-case-of-error-during-buffer-writeback.patch queue-4.9/xfs-use-kmem_free-to-free-return-value-of-kmem_zalloc.patch queue-4.9/xfs-fix-inobt-inode-allocation-search-optimization.patch queue-4.9/xfs-add-infrastructure-needed-for-error-propagation-during-buffer-io-failure.patch queue-4.9/xfs-try-to-avoid-blowing-out-the-transaction-reservation-when-bunmaping-a-shared-extent.patch queue-4.9/xfs-don-t-set-v3-xflags-for-v2-inodes.patch queue-4.9/xfs-free-cowblocks-and-retry-on-buffered-write-enospc.patch queue-4.9/xfs-add-log-recovery-tracepoint-for-head-tail.patch queue-4.9/xfs-toggle-readonly-state-around-xfs_log_mount_finish.patch queue-4.9/xfs-fix-log-recovery-corruption-error-due-to-tail-overwrite.patch queue-4.9/xfs-move-bmbt-owner-change-to-last-step-of-extent-swap.patch queue-4.9/xfs-set-firstfsb-to-nullfsblock-before-feeding-it-to-_bmapi_write.patch queue-4.9/xfs-fix-quotacheck-dquot-id-overflow-infinite-loop.patch queue-4.9/xfs-remove-bli-from-ail-before-release-on-transaction-abort.patch queue-4.9/xfs-check-_btree_check_block-value.patch queue-4.9/xfs-check-for-race-with-xfs_reclaim_inode-in-xfs_ifree_cluster.patch queue-4.9/xfs-always-verify-the-log-tail-during-recovery.patch queue-4.9/xfs-open-code-end_buffer_async_write-in-xfs_finish_page_writeback.patch queue-4.9/xfs-relog-dirty-buffers-during-swapext-bmbt-owner-change.patch queue-4.9/xfs-don-t-allow-bmap-on-rt-files.patch queue-4.9/xfs-disable-per-inode-dax-flag.patch queue-4.9/xfs-refactor-buffer-logging-into-buffer-dirtying-helper.patch queue-4.9/xfs-fix-recovery-failure-when-log-record-header-wraps-log-end.patch queue-4.9/xfs-free-uncommitted-transactions-during-log-recovery.patch queue-4.9/xfs-skip-bmbt-block-ino-validation-during-owner-change.patch queue-4.9/xfs-don-t-log-dirty-ranges-for-ordered-buffers.patch queue-4.9/xfs-stop-searching-for-free-slots-in-an-inode-chunk-when-there-are-none.patch queue-4.9/xfs-fix-incorrect-log_flushed-on-fsync.patch queue-4.9/xfs-evict-all-inodes-involved-with-log-redo-item.patch queue-4.9/xfs-write-unmount-record-for-ro-mounts.patch queue-4.9/xfs-clear-ms_active-after-finishing-log-recovery.patch queue-4.9/xfs-don-t-crash-on-unexpected-holes-in-dir-attr-btrees.patch queue-4.9/xfs-fix-spurious-spin_is_locked-assert-failures-on-non-smp-kernels.patch queue-4.9/xfs-fix-per-inode-dax-flag-inheritance.patch queue-4.9/xfs-fix-multi-ag-deadlock-in-xfs_bunmapi.patch queue-4.9/xfs-remove-unnecessary-dirty-bli-format-check-for-ordered-bufs.patch queue-4.9/xfs-disallow-marking-previously-dirty-buffers-as-ordered.patch queue-4.9/xfs-handle-efscorrupted-during-head-tail-verification.patch queue-4.9/xfs-release-bli-from-transaction-properly-on-fs-shutdown.patch queue-4.9/iomap-fix-integer-truncation-issues-in-the-zeroing-and-dirtying-helpers.patch queue-4.9/xfs-don-t-leak-quotacheck-dquots-when-cow-recovery.patch queue-4.9/xfs-ordered-buffer-log-items-are-never-formatted.patch queue-4.9/xfs-check-_alloc_read_agf-buffer-pointer-before-using.patch queue-4.9/xfs-remove-xfs_trans_ail_delete_bulk.patch