[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-Id: <20061205205802.92b91ce1.akpm@osdl.org>
Date: Tue, 5 Dec 2006 20:58:02 -0800
From: Andrew Morton <akpm@...l.org>
To: Valerie Henson <val_henson@...ux.intel.com>
Cc: mark.fasheh@...cle.com, steve@...gwyn.com,
linux-kernel@...r.kernel.org, ocfs2-devel@....oracle.com,
linux-fsdevel@...r.kernel.org, viro@....linux.org.uk
Subject: Re: Relative atime (was Re: What's in ocfs2.git)
> On Mon, 4 Dec 2006 16:36:20 -0800 Valerie Henson <val_henson@...ux.intel.com> wrote:
> Add "relatime" (relative atime) support. Relative atime only updates
> the atime if the previous atime is older than the mtime or ctime.
> Like noatime, but useful for applications like mutt that need to know
> when a file has been read since it was last modified.
That seems like a good idea.
I found touch_atime() to be rather putrid, so I hacked it around a bit. The
end result:
void touch_atime(struct vfsmount *mnt, struct dentry *dentry)
{
struct inode *inode = dentry->d_inode;
struct timespec now;
if (IS_RDONLY(inode))
return;
if (inode->i_flags & S_NOATIME)
return;
if (inode->i_sb->s_flags & MS_NOATIME)
return;
if ((inode->i_sb->s_flags & MS_NODIRATIME) && S_ISDIR(inode->i_mode))
return;
/*
* We may have a NULL vfsmount when coming from NFSD
*/
if (mnt) {
if (mnt->mnt_flags & MNT_NOATIME)
return;
if ((mnt->mnt_flags & MNT_NODIRATIME) && S_ISDIR(inode->i_mode))
return;
if (mnt->mnt_flags & MNT_RELATIME) {
/*
* With relative atime, only update atime if the
* previous atime is earlier than either the ctime or
* mtime.
*/
if (timespec_compare(&inode->i_mtime,
&inode->i_atime) < 0 &&
timespec_compare(&inode->i_ctime,
&inode->i_atime) < 0)
return;
}
}
now = current_fs_time(inode->i_sb);
if (timespec_equal(&inode->i_atime, &now))
return;
inode->i_atime = now;
mark_inode_dirty_sync(inode);
}
Does it still look right?
Note the reordering to avoid the current_fs_time() call if poss.
That's the easy part. How are we going to get mount(8) patched?
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
Powered by blists - more mailing lists