Re: [PATCH 3/7] writeback: Move I_DIRTY_PAGES handling

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Thu 22-03-12 10:41:14, Wu Fengguang wrote:
> On Tue, Mar 20, 2012 at 11:56:27PM +0100, Jan Kara wrote:
> > 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.
> 
> Is this just to reduce one line of code? Well it hardly deserves to
> think about the tricky implications..
  It's not because of the reduction. It's because I don't want to take
i_lock in the beginning of writeback_single_inode() just to clear
I_DIRTY_PAGES when it's not really needed.

> > 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.
> 
> afs_writeback_all() calls 
> 
>         __mark_inode_dirty(mapping->host, I_DIRTY_PAGES);
> 
> which creates the subtle state (I_DIRTY_PAGES && !PAGECACHE_TAG_DIRTY)
> which will no longer exist after this patch.
> 
> That line is introduced in 2007 in commit 31143d5d5 ("AFS: implement
> basic file write support"), so it should not be trying to alter the
> requeue/redirty behavior here. But this patch might still alter the
> behavior from redirty_tail() to list_del_init() since the
> (inode->i_state & I_DIRTY) test may no longer be true.
  Hmm, I don't really see a reason for that __mark_inode_dirty() call.
Since AFS uses PAGECACHE_TAG_DIRTY to track dirty pages in it's
writepages() implementation, having I_DIRTY_PAGES set without any dirty
page just doesn't make any sense. David, do you remember why that
__mark_inode_dirty() is there?

> > Signed-off-by: Jan Kara <jack@xxxxxxx>
> > ---
> >  fs/fs-writeback.c |    5 +++--
> >  1 files changed, 3 insertions(+), 2 deletions(-)
> > 
> > diff --git a/fs/fs-writeback.c b/fs/fs-writeback.c
> > index 5f17a16..0ef272e 100644
> > --- a/fs/fs-writeback.c
> > +++ b/fs/fs-writeback.c
> > @@ -384,7 +384,6 @@ writeback_single_inode(struct inode *inode, struct bdi_writeback *wb,
> >  
> >  	/* Set I_SYNC, reset I_DIRTY_PAGES */
> 
> That comment is obsoleted (and not really useful).
  Yes. I've removed it, just in some later patch.

								Honza
--
To unsubscribe from this list: send the line "unsubscribe linux-fsdevel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Index of Archives]     [Linux Ext4 Filesystem]     [Union Filesystem]     [Filesystem Testing]     [Ceph Users]     [Ecryptfs]     [AutoFS]     [Kernel Newbies]     [Share Photos]     [Security]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux Cachefs]     [Reiser Filesystem]     [Linux RAID]     [Samba]     [Device Mapper]     [CEPH Development]
  Powered by Linux