lkml.org 
[lkml]   [2014]   [Jan]   [13]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[GIT PULL] writeback data corruption fix
    Linus,

    Please pull a writeback fix, it has been in linux-next for one month.

    The following changes since commit 374b105797c3d4f29c685f3be535c35f5689b30e:

    Linux 3.13-rc3 (2013-12-06 09:34:04 -0800)

    are available in the git repository at:

    git://git.kernel.org/pub/scm/linux/kernel/git/wfg/linux.git tags/writeback-fixes

    for you to fetch changes up to f9b0e058cbd04ada76b13afffa7e1df830543c24:

    writeback: Fix data corruption on NFS (2013-12-14 04:21:26 +0800)

    ----------------------------------------------------------------
    fix data corruption on NFS writeback

    ----------------------------------------------------------------
    Jan Kara (1):
    writeback: Fix data corruption on NFS

    fs/fs-writeback.c | 15 +++++++++------
    1 file changed, 9 insertions(+), 6 deletions(-)

    diff --git a/fs/fs-writeback.c b/fs/fs-writeback.c
    index 1f4a10e..e0259a1 100644
    --- a/fs/fs-writeback.c
    +++ b/fs/fs-writeback.c
    @@ -516,13 +516,16 @@ writeback_single_inode(struct inode *inode, struct bdi_writeback *wb,
    }
    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);

    \
     
     \ /
      Last update: 2014-01-13 13:21    [W:4.294 / U:0.016 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site