Re: Lazytime feature bugs

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

 



On Thu 26-02-15 14:27:35, Ted Tso wrote:
> On Thu, Feb 26, 2015 at 03:38:28PM +0100, Jan Kara wrote:
> >   But you wrote you'll reset i_dirty_time_when to "now" when queueing into
> > b_dirty_time. Thus frequently dirtied inodes will just travel back and
> > forth between b_dirty and b_dirty_time lists and i_dirty_time will be
> > continuously reset. And you never end up writing it. That's why I suggested
> > to reset i_dirted_when instead (since it would be unused in b_dirty_time
> > list anyway).
> 
> Inodes will never get transfered onto the b_dirty_time list if they
> also have dirty pages.  So if the inode is constantly getting dirtied,
> the pages *will* get written out, and when they do, we'll also check
> to see if i_dirty_time_when is too old, and also updated the
> timestamp.
> 
> Basically the I_DIRTY_TIME flag is the "weakest" of all of the dirty
> flags.  If the inode is dirty, it takes precedence, and writing out
> the inode will include updating the timestamps.  If the inode's pages
> are dirty, it takes precedence over I_DIRTY_TIME, so we worry about
> getting the pages written out before we even think about considering
> whether or not the inode should go on the b_dirty_time list.
> 
> So I don't see how inodes would be shuttling back and forth between
> b_io and b_dirty_time.
  So maybe I miss something but I still don't see what prevents this
scenario:
 1) write to file happens -> inode timestamps updated, inode filed to b_dirty,
    i_dirtied_when = now, i_dirty_time_when = now
 2) writeback for file happens, all pages written but not timestamps since
    they are fresh -> inode gets filed to b_dirty_time list, if we use your
    algorithm, i_dirty_time_when = now.
 3) write to file happens -> inode filed to b_dirty, i_dirtied_when = now.
 4) goto 2)

Now the loop in the above can happen infinitely long and you never end up
writing inode because time stamps are updated on write to file and
i_dirty_time_when gets updated when you move inode to b_dirty_time list.

Again if there's a fault in the above logic or I misunderstood something
from your proposal, I'm happy to be corrected.

								Honza
-- 
Jan Kara <jack@xxxxxxx>
SUSE Labs, CR
--
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