Commit 70b23ce3 authored by Linus Torvalds's avatar Linus Torvalds

Merge tag 'writeback-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/wfg/linux

Pull writeback fix from Wu Fengguang:
 "Fix data corruption on NFS writeback.

  It has been in linux-next for one month"

* tag 'writeback-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/wfg/linux:
  writeback: Fix data corruption on NFS
parents a9bdddb8 f9b0e058
...@@ -516,13 +516,16 @@ writeback_single_inode(struct inode *inode, struct bdi_writeback *wb, ...@@ -516,13 +516,16 @@ writeback_single_inode(struct inode *inode, struct bdi_writeback *wb,
} }
WARN_ON(inode->i_state & I_SYNC); WARN_ON(inode->i_state & I_SYNC);
/* /*
* Skip inode if it is clean. We don't want to mess with writeback * Skip inode if it is clean and we have no outstanding writeback in
* lists in this function since flusher thread may be doing for example * WB_SYNC_ALL mode. We don't want to mess with writeback lists in this
* sync in parallel and if we move the inode, it could get skipped. So * function since flusher thread may be doing for example sync in
* here we make sure inode is on some writeback list and leave it there * parallel and if we move the inode, it could get skipped. So here we
* unless we have completely cleaned the inode. * 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; goto out;
inode->i_state |= I_SYNC; inode->i_state |= I_SYNC;
spin_unlock(&inode->i_lock); spin_unlock(&inode->i_lock);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment