> On Mon, 4 Dec 2006 16:36:20 -0800 Valerie Henson <[EMAIL PROTECTED]> 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 [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Reply via email to