lkml.org 
[lkml]   [2010]   [Nov]   [23]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[patch 4/7] fs: preserve inode dirty bits on failed metadata writeback
    Otherwise we think the inode is clean even if syncing failed.

    Signed-off-by: Nick Piggin <npiggin@kernel.dk>

    Index: linux-2.6/fs/fs-writeback.c
    ===================================================================
    --- linux-2.6.orig/fs/fs-writeback.c 2010-11-23 22:28:22.000000000 +1100
    +++ linux-2.6/fs/fs-writeback.c 2010-11-23 22:57:40.000000000 +1100
    @@ -447,15 +447,25 @@ writeback_single_inode(struct inode *ino
    spin_lock(&inode_lock);
    dirty = inode->i_state & I_DIRTY;
    inode->i_state &= ~(I_DIRTY_SYNC | I_DIRTY_DATASYNC);
    - spin_unlock(&inode_lock);
    /* Don't write the inode if only I_DIRTY_PAGES was set */
    if (dirty & (I_DIRTY_SYNC | I_DIRTY_DATASYNC)) {
    - int err = write_inode(inode, wbc);
    + int err;
    +
    + spin_unlock(&inode_lock);
    + err = write_inode(inode, wbc);
    if (ret == 0)
    ret = err;
    + spin_lock(&inode_lock);
    + if (err) {
    + /*
    + * Inode writeout failed, restore inode metadata
    + * dirty bits.
    + */
    + inode->i_state |= dirty &
    + (I_DIRTY_SYNC | I_DIRTY_DATASYNC);
    + }
    }

    - spin_lock(&inode_lock);
    if (!inode_writeback_end(inode)) {
    if (wbc->nr_to_write <= 0) {
    /*



    \
     
     \ /
      Last update: 2010-11-23 15:15    [W:0.023 / U:0.080 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site