From: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
To: linux-kernel@vger.kernel.org
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
stable@vger.kernel.org, Jan Kara <jack@suse.cz>
Subject: [PATCH 3.12 11/27] writeback: Fix data corruption on NFS
Date: Thu, 23 Jan 2014 11:06:48 -0800 [thread overview]
Message-ID: <20140123190649.861199315@linuxfoundation.org> (raw)
In-Reply-To: <20140123190648.720195687@linuxfoundation.org>
3.12-stable review patch. If anyone has any objections, please let me know.
------------------
From: Jan Kara <jack@suse.cz>
commit f9b0e058cbd04ada76b13afffa7e1df830543c24 upstream.
Commit 4f8ad655dbc8 "writeback: Refactor writeback_single_inode()" added
a condition to skip clean inode. However this is wrong in WB_SYNC_ALL
mode because there we also want to wait for outstanding writeback on
possibly clean inode. This was causing occasional data corruption issues
on NFS because it uses sync_inode() to make sure all outstanding writes
are flushed to the server before truncating the inode and with
sync_inode() returning prematurely file was sometimes extended back
by an outstanding write after it was truncated.
So modify the test to also check for pages under writeback in
WB_SYNC_ALL mode.
Fixes: 4f8ad655dbc82cf05d2edc11e66b78a42d38bf93
Reported-and-tested-by: Dan Duval <dan.duval@oracle.com>
Signed-off-by: Jan Kara <jack@suse.cz>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
fs/fs-writeback.c | 15 +++++++++------
1 file changed, 9 insertions(+), 6 deletions(-)
--- a/fs/fs-writeback.c
+++ b/fs/fs-writeback.c
@@ -510,13 +510,16 @@ writeback_single_inode(struct inode *ino
}
WARN_ON(inode->i_state & I_SYNC);
/*
- * Skip inode if it is clean. We don't want to mess with writeback
- * lists in this function since flusher thread may be doing for example
- * sync in parallel and if we move the inode, it could get skipped. So
- * here we make sure inode is on some writeback list and leave it there
- * unless we have completely cleaned the inode.
+ * Skip inode if it is clean and we have no outstanding writeback in
+ * WB_SYNC_ALL mode. We don't want to mess with writeback lists in this
+ * function since flusher thread may be doing for example sync in
+ * parallel and if we move the inode, it could get skipped. So here we
+ * make sure inode is on some writeback list and leave it there unless
+ * we have completely cleaned the inode.
*/
- if (!(inode->i_state & I_DIRTY))
+ if (!(inode->i_state & I_DIRTY) &&
+ (wbc->sync_mode != WB_SYNC_ALL ||
+ !mapping_tagged(inode->i_mapping, PAGECACHE_TAG_WRITEBACK)))
goto out;
inode->i_state |= I_SYNC;
spin_unlock(&inode->i_lock);
next prev parent reply other threads:[~2014-01-23 19:06 UTC|newest]
Thread overview: 35+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-01-23 19:06 [PATCH 3.12 00/27] 3.12.9-stable review Greg Kroah-Hartman
2014-01-23 19:06 ` [PATCH 3.12 01/27] Revert "ACPI: Add BayTrail SoC GPIO and LPSS ACPI IDs" Greg Kroah-Hartman
2014-01-23 19:06 ` [PATCH 3.12 02/27] perf/x86/amd/ibs: Fix waking up from S3 for AMD family 10h Greg Kroah-Hartman
2014-01-23 19:06 ` [PATCH 3.12 03/27] GFS2: Increase i_writecount during gfs2_setattr_chown Greg Kroah-Hartman
2014-01-23 19:06 ` [PATCH 3.12 04/27] staging: comedi: addi_apci_1032: fix subdevice type/flags bug Greg Kroah-Hartman
2014-01-23 19:06 ` [PATCH 3.12 05/27] staging: comedi: adl_pci9111: fix incorrect irq passed to request_irq() Greg Kroah-Hartman
2014-01-23 19:06 ` [PATCH 3.12 06/27] vfs: In d_path dont call d_dname on a mount point Greg Kroah-Hartman
2014-01-23 19:06 ` [PATCH 3.12 07/27] vfs: Fix a regression in mounting proc Greg Kroah-Hartman
2014-01-23 19:06 ` [PATCH 3.12 08/27] fork: Allow CLONE_PARENT after setns(CLONE_NEWPID) Greg Kroah-Hartman
2014-01-23 19:06 ` [PATCH 3.12 09/27] i2c: Re-instate body of i2c_parent_is_i2c_adapter() Greg Kroah-Hartman
2014-01-23 19:06 ` [PATCH 3.12 10/27] hwmon: (coretemp) Fix truncated name of alarm attributes Greg Kroah-Hartman
2014-01-23 19:06 ` Greg Kroah-Hartman [this message]
2014-01-23 19:06 ` [PATCH 3.12 12/27] SELinux: Fix possible NULL pointer dereference in selinux_inode_permission() Greg Kroah-Hartman
2014-01-23 19:06 ` [PATCH 3.12 13/27] thp: fix copy_page_rep GPF by testing is_huge_zero_pmd once only Greg Kroah-Hartman
2014-01-23 19:06 ` [PATCH 3.12 14/27] ftrace/x86: Load ftrace_ops in parameter not the variable holding it Greg Kroah-Hartman
2014-01-23 19:06 ` [PATCH 3.12 15/27] crash_dump: fix compilation error (on MIPS at least) Greg Kroah-Hartman
2014-01-23 19:06 ` [PATCH 3.12 16/27] mm: fix crash when using XFS on loopback Greg Kroah-Hartman
2014-01-23 19:06 ` [PATCH 3.12 17/27] nilfs2: fix segctor bug that causes file system corruption Greg Kroah-Hartman
2014-01-23 19:06 ` [PATCH 3.12 18/27] drm/i915: fix DDI PLLs HW state readout code Greg Kroah-Hartman
2014-01-23 19:06 ` [PATCH 3.12 19/27] md: fix problem when adding device to read-only array with bitmap Greg Kroah-Hartman
2014-01-23 19:06 ` [PATCH 3.12 20/27] md/raid10: fix bug when raid10 recovery fails to recover a block Greg Kroah-Hartman
2014-01-23 19:06 ` [PATCH 3.12 21/27] md/raid10: fix two bugs in handling of known-bad-blocks Greg Kroah-Hartman
2014-01-23 19:06 ` [PATCH 3.12 22/27] md/raid5: Fix possible confusion when multiple write errors occur Greg Kroah-Hartman
2014-01-23 19:07 ` [PATCH 3.12 23/27] mm: Make {,set}page_address() static inline if WANT_PAGE_VIRTUAL Greg Kroah-Hartman
2014-01-23 19:07 ` [PATCH 3.12 24/27] serial: amba-pl011: use port lock to guard control register access Greg Kroah-Hartman
2014-01-23 19:07 ` [PATCH 3.12 25/27] ARM: 7934/1: DT/kernel: fix arch_match_cpu_phys_id to avoid erroneous match Greg Kroah-Hartman
2014-01-23 19:07 ` [PATCH 3.12 27/27] ARM: 7938/1: OMAP4/highbank: Flush L2 cache before disabling Greg Kroah-Hartman
2014-01-23 23:20 ` [PATCH 3.12 00/27] 3.12.9-stable review Guenter Roeck
2014-01-24 4:11 ` Greg Kroah-Hartman
2014-01-24 5:17 ` Guenter Roeck
2014-01-24 15:19 ` Shuah Khan
2014-01-24 19:39 ` Radim Krčmář
2014-01-25 0:05 ` Greg Kroah-Hartman
2014-02-03 13:36 ` Luis Henriques
2014-01-25 14:08 ` Satoru Takeuchi
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=20140123190649.861199315@linuxfoundation.org \
--to=gregkh@linuxfoundation.org \
--cc=jack@suse.cz \
--cc=linux-kernel@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).