From: <gregkh@linuxfoundation.org>
To: hch@lst.de, bfoster@redhat.com, darrick.wong@oracle.com,
gregkh@linuxfoundation.org
Cc: <stable@vger.kernel.org>, <stable-commits@vger.kernel.org>
Subject: Patch "xfs: disallow marking previously dirty buffers as ordered" has been added to the 4.13-stable tree
Date: Mon, 18 Sep 2017 10:31:17 +0200 [thread overview]
Message-ID: <150572347711767@kroah.com> (raw)
In-Reply-To: <20170917210631.10725-20-hch@lst.de>
This is a note to let you know that I've just added the patch titled
xfs: disallow marking previously dirty buffers as ordered
to the 4.13-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-disallow-marking-previously-dirty-buffers-as-ordered.patch
and it can be found in the queue-4.13 subdirectory.
If you, or anyone else, feels it should not be added to the stable tree,
please let <stable@vger.kernel.org> know about it.
>From foo@baz Mon Sep 18 10:25:08 CEST 2017
From: Christoph Hellwig <hch@lst.de>
Date: Sun, 17 Sep 2017 14:06:25 -0700
Subject: xfs: disallow marking previously dirty buffers as ordered
To: stable@vger.kernel.org
Cc: linux-xfs@vger.kernel.org, Brian Foster <bfoster@redhat.com>, "Darrick J . Wong" <darrick.wong@oracle.com>
Message-ID: <20170917210631.10725-20-hch@lst.de>
From: Brian Foster <bfoster@redhat.com>
commit a5814bceea48ee1c57c4db2bd54b0c0246daf54a upstream.
Ordered buffers are used in situations where the buffer is not
physically logged but must pass through the transaction/logging
pipeline for a particular transaction. As a result, ordered buffers
are not unpinned and written back until the transaction commits to
the log. Ordered buffers have a strict requirement that the target
buffer must not be currently dirty and resident in the log pipeline
at the time it is marked ordered. If a dirty+ordered buffer is
committed, the buffer is reinserted to the AIL but not physically
relogged at the LSN of the associated checkpoint. The buffer log
item is assigned the LSN of the latest checkpoint and the AIL
effectively releases the previously logged buffer content from the
active log before the buffer has been written back. If the tail
pushes forward and a filesystem crash occurs while in this state, an
inconsistent filesystem could result.
It is currently the caller responsibility to ensure an ordered
buffer is not already dirty from a previous modification. This is
unclear and error prone when not used in situations where it is
guaranteed a buffer has not been previously modified (such as new
metadata allocations).
To facilitate general purpose use of ordered buffers, update
xfs_trans_ordered_buf() to conditionally order the buffer based on
state of the log item and return the status of the result. If the
bli is dirty, do not order the buffer and return false. The caller
must either physically log the buffer (having acquired the
appropriate log reservation) or push it from the AIL to clean it
before it can be marked ordered in the current transaction.
Note that ordered buffers are currently only used in two situations:
1.) inode chunk allocation where previously logged buffers are not
possible and 2.) extent swap which will be updated to handle ordered
buffer failures in a separate patch.
Signed-off-by: Brian Foster <bfoster@redhat.com>
Reviewed-by: Darrick J. Wong <darrick.wong@oracle.com>
Reviewed-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
fs/xfs/xfs_trans.h | 2 +-
fs/xfs/xfs_trans_buf.c | 7 +++++--
2 files changed, 6 insertions(+), 3 deletions(-)
--- a/fs/xfs/xfs_trans.h
+++ b/fs/xfs/xfs_trans.h
@@ -212,7 +212,7 @@ void xfs_trans_bhold_release(xfs_trans_
void xfs_trans_binval(xfs_trans_t *, struct xfs_buf *);
void xfs_trans_inode_buf(xfs_trans_t *, struct xfs_buf *);
void xfs_trans_stale_inode_buf(xfs_trans_t *, struct xfs_buf *);
-void xfs_trans_ordered_buf(xfs_trans_t *, struct xfs_buf *);
+bool xfs_trans_ordered_buf(xfs_trans_t *, struct xfs_buf *);
void xfs_trans_dquot_buf(xfs_trans_t *, struct xfs_buf *, uint);
void xfs_trans_inode_alloc_buf(xfs_trans_t *, struct xfs_buf *);
void xfs_trans_ichgtime(struct xfs_trans *, struct xfs_inode *, int);
--- a/fs/xfs/xfs_trans_buf.c
+++ b/fs/xfs/xfs_trans_buf.c
@@ -724,7 +724,7 @@ xfs_trans_inode_alloc_buf(
* transactions rather than the physical changes we make to the buffer without
* changing writeback ordering constraints of metadata buffers.
*/
-void
+bool
xfs_trans_ordered_buf(
struct xfs_trans *tp,
struct xfs_buf *bp)
@@ -734,7 +734,9 @@ xfs_trans_ordered_buf(
ASSERT(bp->b_transp == tp);
ASSERT(bip != NULL);
ASSERT(atomic_read(&bip->bli_refcount) > 0);
- ASSERT(!xfs_buf_item_dirty_format(bip));
+
+ if (xfs_buf_item_dirty_format(bip))
+ return false;
bip->bli_flags |= XFS_BLI_ORDERED;
trace_xfs_buf_item_ordered(bip);
@@ -744,6 +746,7 @@ xfs_trans_ordered_buf(
* to be marked dirty and that it has been logged.
*/
xfs_trans_dirty_buf(tp, bp);
+ return true;
}
/*
Patches currently in stable-queue which might be from hch@lst.de are
queue-4.13/xfs-open-code-xfs_buf_item_dirty.patch
queue-4.13/xfs-properly-retry-failed-inode-items-in-case-of-error-during-buffer-writeback.patch
queue-4.13/xfs-use-kmem_free-to-free-return-value-of-kmem_zalloc.patch
queue-4.13/xfs-add-infrastructure-needed-for-error-propagation-during-buffer-io-failure.patch
queue-4.13/xfs-don-t-set-v3-xflags-for-v2-inodes.patch
queue-4.13/xfs-toggle-readonly-state-around-xfs_log_mount_finish.patch
queue-4.13/xfs-fix-log-recovery-corruption-error-due-to-tail-overwrite.patch
queue-4.13/xfs-move-bmbt-owner-change-to-last-step-of-extent-swap.patch
queue-4.13/xfs-check-for-race-with-xfs_reclaim_inode-in-xfs_ifree_cluster.patch
queue-4.13/xfs-always-verify-the-log-tail-during-recovery.patch
queue-4.13/xfs-open-code-end_buffer_async_write-in-xfs_finish_page_writeback.patch
queue-4.13/xfs-relog-dirty-buffers-during-swapext-bmbt-owner-change.patch
queue-4.13/xfs-disable-per-inode-dax-flag.patch
queue-4.13/xfs-refactor-buffer-logging-into-buffer-dirtying-helper.patch
queue-4.13/xfs-fix-recovery-failure-when-log-record-header-wraps-log-end.patch
queue-4.13/xfs-skip-bmbt-block-ino-validation-during-owner-change.patch
queue-4.13/xfs-don-t-log-dirty-ranges-for-ordered-buffers.patch
queue-4.13/xfs-stop-searching-for-free-slots-in-an-inode-chunk-when-there-are-none.patch
queue-4.13/xfs-fix-incorrect-log_flushed-on-fsync.patch
queue-4.13/xfs-evict-all-inodes-involved-with-log-redo-item.patch
queue-4.13/xfs-write-unmount-record-for-ro-mounts.patch
queue-4.13/xfs-remove-unnecessary-dirty-bli-format-check-for-ordered-bufs.patch
queue-4.13/xfs-disallow-marking-previously-dirty-buffers-as-ordered.patch
queue-4.13/xfs-handle-efscorrupted-during-head-tail-verification.patch
queue-4.13/xfs-ordered-buffer-log-items-are-never-formatted.patch
next prev parent reply other threads:[~2017-09-18 8:31 UTC|newest]
Thread overview: 52+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-09-17 21:06 4.13-stable updates for XFS Christoph Hellwig
2017-09-17 21:06 ` [PATCH 01/25] xfs: write unmount record for ro mounts Christoph Hellwig
2017-09-18 8:31 ` Patch "xfs: write unmount record for ro mounts" has been added to the 4.13-stable tree gregkh
2017-09-17 21:06 ` [PATCH 02/25] xfs: toggle readonly state around xfs_log_mount_finish Christoph Hellwig
2017-09-18 8:31 ` Patch "xfs: toggle readonly state around xfs_log_mount_finish" has been added to the 4.13-stable tree gregkh
2017-09-17 21:06 ` [PATCH 03/25] xfs: Add infrastructure needed for error propagation during buffer IO failure Christoph Hellwig
2017-09-18 8:31 ` Patch "xfs: Add infrastructure needed for error propagation during buffer IO failure" has been added to the 4.13-stable tree gregkh
2017-09-17 21:06 ` [PATCH 04/25] xfs: Properly retry failed inode items in case of error during buffer writeback Christoph Hellwig
2017-09-18 8:31 ` Patch "xfs: Properly retry failed inode items in case of error during buffer writeback" has been added to the 4.13-stable tree gregkh
2017-09-17 21:06 ` [PATCH 05/25] xfs: fix recovery failure when log record header wraps log end Christoph Hellwig
2017-09-18 8:31 ` Patch "xfs: fix recovery failure when log record header wraps log end" has been added to the 4.13-stable tree gregkh
2017-09-17 21:06 ` [PATCH 06/25] xfs: always verify the log tail during recovery Christoph Hellwig
2017-09-18 8:31 ` Patch "xfs: always verify the log tail during recovery" has been added to the 4.13-stable tree gregkh
2017-09-17 21:06 ` [PATCH 07/25] xfs: fix log recovery corruption error due to tail overwrite Christoph Hellwig
2017-09-18 8:31 ` Patch "xfs: fix log recovery corruption error due to tail overwrite" has been added to the 4.13-stable tree gregkh
2017-09-17 21:06 ` [PATCH 08/25] xfs: handle -EFSCORRUPTED during head/tail verification Christoph Hellwig
2017-09-18 8:31 ` Patch "xfs: handle -EFSCORRUPTED during head/tail verification" has been added to the 4.13-stable tree gregkh
2017-09-17 21:06 ` [PATCH 09/25] xfs: stop searching for free slots in an inode chunk when there are none Christoph Hellwig
2017-09-18 8:31 ` Patch "xfs: stop searching for free slots in an inode chunk when there are none" has been added to the 4.13-stable tree gregkh
2017-09-17 21:06 ` [PATCH 10/25] xfs: evict all inodes involved with log redo item Christoph Hellwig
2017-09-18 8:31 ` Patch "xfs: evict all inodes involved with log redo item" has been added to the 4.13-stable tree gregkh
2017-09-17 21:06 ` [PATCH 11/25] xfs: check for race with xfs_reclaim_inode() in xfs_ifree_cluster() Christoph Hellwig
2017-09-18 8:31 ` Patch "xfs: check for race with xfs_reclaim_inode() in xfs_ifree_cluster()" has been added to the 4.13-stable tree gregkh
2017-09-17 21:06 ` [PATCH 12/25] xfs: open-code xfs_buf_item_dirty() Christoph Hellwig
2017-09-18 8:31 ` Patch "xfs: open-code xfs_buf_item_dirty()" has been added to the 4.13-stable tree gregkh
2017-09-17 21:06 ` [PATCH 13/25] xfs: remove unnecessary dirty bli format check for ordered bufs Christoph Hellwig
2017-09-18 8:31 ` Patch "xfs: remove unnecessary dirty bli format check for ordered bufs" has been added to the 4.13-stable tree gregkh
2017-09-17 21:06 ` [PATCH 14/25] xfs: ordered buffer log items are never formatted Christoph Hellwig
2017-09-18 8:31 ` Patch "xfs: ordered buffer log items are never formatted" has been added to the 4.13-stable tree gregkh
2017-09-17 21:06 ` [PATCH 15/25] xfs: refactor buffer logging into buffer dirtying helper Christoph Hellwig
2017-09-18 8:31 ` Patch "xfs: refactor buffer logging into buffer dirtying helper" has been added to the 4.13-stable tree gregkh
2017-09-17 21:06 ` [PATCH 16/25] xfs: don't log dirty ranges for ordered buffers Christoph Hellwig
2017-09-18 8:31 ` Patch "xfs: don't log dirty ranges for ordered buffers" has been added to the 4.13-stable tree gregkh
2017-09-17 21:06 ` [PATCH 17/25] xfs: skip bmbt block ino validation during owner change Christoph Hellwig
2017-09-18 8:31 ` Patch "xfs: skip bmbt block ino validation during owner change" has been added to the 4.13-stable tree gregkh
2017-09-17 21:06 ` [PATCH 18/25] xfs: move bmbt owner change to last step of extent swap Christoph Hellwig
2017-09-18 8:31 ` Patch "xfs: move bmbt owner change to last step of extent swap" has been added to the 4.13-stable tree gregkh
2017-09-17 21:06 ` [PATCH 19/25] xfs: disallow marking previously dirty buffers as ordered Christoph Hellwig
2017-09-18 8:31 ` gregkh [this message]
2017-09-17 21:06 ` [PATCH 20/25] xfs: relog dirty buffers during swapext bmbt owner change Christoph Hellwig
2017-09-18 8:31 ` Patch "xfs: relog dirty buffers during swapext bmbt owner change" has been added to the 4.13-stable tree gregkh
2017-09-17 21:06 ` [PATCH 21/25] xfs: disable per-inode DAX flag Christoph Hellwig
2017-09-18 8:31 ` Patch "xfs: disable per-inode DAX flag" has been added to the 4.13-stable tree gregkh
2017-09-17 21:06 ` [PATCH 22/25] xfs: fix incorrect log_flushed on fsync Christoph Hellwig
2017-09-18 8:31 ` Patch "xfs: fix incorrect log_flushed on fsync" has been added to the 4.13-stable tree gregkh
2017-09-17 21:06 ` [PATCH 23/25] xfs: don't set v3 xflags for v2 inodes Christoph Hellwig
2017-09-18 8:31 ` Patch "xfs: don't set v3 xflags for v2 inodes" has been added to the 4.13-stable tree gregkh
2017-09-17 21:06 ` [PATCH 24/25] xfs: open code end_buffer_async_write in xfs_finish_page_writeback Christoph Hellwig
2017-09-18 8:31 ` Patch "xfs: open code end_buffer_async_write in xfs_finish_page_writeback" has been added to the 4.13-stable tree gregkh
2017-09-17 21:06 ` [PATCH 25/25] xfs: use kmem_free to free return value of kmem_zalloc Christoph Hellwig
2017-09-18 8:31 ` Patch "xfs: use kmem_free to free return value of kmem_zalloc" has been added to the 4.13-stable tree gregkh
2017-09-18 8:31 ` 4.13-stable updates for XFS Greg KH
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=150572347711767@kroah.com \
--to=gregkh@linuxfoundation.org \
--cc=bfoster@redhat.com \
--cc=darrick.wong@oracle.com \
--cc=hch@lst.de \
--cc=stable-commits@vger.kernel.org \
--cc=stable@vger.kernel.org \
/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;
as well as URLs for NNTP newsgroup(s).