lkml.org 
[lkml]   [2015]   [Feb]   [16]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Date
    Subject[PATCH 3.2 005/152] writeback: Move I_DIRTY_PAGES handling
    3.2.67-rc1 review patch.  If anyone has any objections, please let me know.

    ------------------

    From: Jan Kara <jack@suse.cz>

    commit 6290be1c1dc6589eeda213aa40946b27fa4faac8 upstream.

    Instead of clearing I_DIRTY_PAGES and resetting it when we didn't succeed in
    writing them all, just clear the bit only when we succeeded writing all the
    pages. We also move the clearing of the bit close to other i_state handling to
    separate it from writeback list handling. This is desirable because list
    handling will differ for flusher thread and other writeback_single_inode()
    callers in future. No filesystem plays any tricks with I_DIRTY_PAGES (like
    checking it in ->writepages or ->write_inode implementation) so this movement
    is safe.

    Signed-off-by: Jan Kara <jack@suse.cz>
    Signed-off-by: Fengguang Wu <fengguang.wu@intel.com>
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
    ---
    fs/fs-writeback.c | 5 +++--
    1 file changed, 3 insertions(+), 2 deletions(-)

    --- a/fs/fs-writeback.c
    +++ b/fs/fs-writeback.c
    @@ -396,7 +396,6 @@ writeback_single_inode(struct inode *ino

    /* Set I_SYNC, reset I_DIRTY_PAGES */
    inode->i_state |= I_SYNC;
    - inode->i_state &= ~I_DIRTY_PAGES;
    spin_unlock(&inode->i_lock);
    spin_unlock(&wb->list_lock);

    @@ -419,6 +418,9 @@ writeback_single_inode(struct inode *ino
    * write_inode()
    */
    spin_lock(&inode->i_lock);
    + /* Clear I_DIRTY_PAGES if we've written out all dirty pages */
    + if (!mapping_tagged(mapping, PAGECACHE_TAG_DIRTY))
    + inode->i_state &= ~I_DIRTY_PAGES;
    dirty = inode->i_state & I_DIRTY;
    inode->i_state &= ~(I_DIRTY_SYNC | I_DIRTY_DATASYNC);
    spin_unlock(&inode->i_lock);
    @@ -447,7 +449,6 @@ writeback_single_inode(struct inode *ino
    * We didn't write back all the pages. nfs_writepages()
    * sometimes bales out without doing anything.
    */
    - inode->i_state |= I_DIRTY_PAGES;
    if (wbc->nr_to_write <= 0) {
    /*
    * slice used up: queue for next turn


    \
     
     \ /
      Last update: 2015-02-17 04:01    [W:2.083 / U:0.708 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site