lkml.org 
[lkml]   [2009]   [Oct]   [9]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    Date
    From
    SubjectRe: [PATCH 07/45] writeback: dont redirty tail an inode with dirty pages
    On Wed 07-10-09 15:38:25, Wu Fengguang wrote:
    > This avoids delaying writeback for an expired (XFS) inode with lots of
    > dirty pages, but no active dirtier at the moment.
    OK, looks good.
    Acked-by: Jan Kara <jack@suse.cz>

    Honza
    >
    > CC: Dave Chinner <david@fromorbit.com>
    > CC: Christoph Hellwig <hch@infradead.org>
    > Signed-off-by: Wu Fengguang <fengguang.wu@intel.com>
    > ---
    > fs/fs-writeback.c | 20 +++++++-------------
    > 1 file changed, 7 insertions(+), 13 deletions(-)
    >
    > --- linux.orig/fs/fs-writeback.c 2009-10-06 23:37:57.000000000 +0800
    > +++ linux/fs/fs-writeback.c 2009-10-06 23:38:28.000000000 +0800
    > @@ -479,18 +479,7 @@ writeback_single_inode(struct inode *ino
    > spin_lock(&inode_lock);
    > inode->i_state &= ~I_SYNC;
    > if (!(inode->i_state & (I_FREEING | I_CLEAR))) {
    > - if ((inode->i_state & I_DIRTY_PAGES) && wbc->for_kupdate) {
    > - /*
    > - * More pages get dirtied by a fast dirtier.
    > - */
    > - goto select_queue;
    > - } else if (inode->i_state & I_DIRTY) {
    > - /*
    > - * At least XFS will redirty the inode during the
    > - * writeback (delalloc) and on io completion (isize).
    > - */
    > - redirty_tail(inode);
    > - } else if (mapping_tagged(mapping, PAGECACHE_TAG_DIRTY)) {
    > + if (mapping_tagged(mapping, PAGECACHE_TAG_DIRTY)) {
    > /*
    > * We didn't write back all the pages. nfs_writepages()
    > * sometimes bales out without doing anything. Redirty
    > @@ -512,7 +501,6 @@ writeback_single_inode(struct inode *ino
    > * soon as the queue becomes uncongested.
    > */
    > inode->i_state |= I_DIRTY_PAGES;
    > -select_queue:
    > if (wbc->nr_to_write <= 0) {
    > /*
    > * slice used up: queue for next turn
    > @@ -535,6 +523,12 @@ select_queue:
    > inode->i_state |= I_DIRTY_PAGES;
    > redirty_tail(inode);
    > }
    > + } else if (inode->i_state & I_DIRTY) {
    > + /*
    > + * At least XFS will redirty the inode during the
    > + * writeback (delalloc) and on io completion (isize).
    > + */
    > + redirty_tail(inode);
    > } else if (atomic_read(&inode->i_count)) {
    > /*
    > * The inode is clean, inuse
    >
    >
    --
    Jan Kara <jack@suse.cz>
    SUSE Labs, CR


    \
     
     \ /
      Last update: 2009-10-09 17:53    [W:4.553 / U:0.080 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site