> On Mon, 4 Dec 2006 16:36:20 -0800 Valerie Henson <val_henson@xxxxxxxxxxxxxxx> 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-fsdevel" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html