On Mon, Jul 06, 2009 at 09:24:46PM +0200, Andi Kleen wrote: > > Some benchmark testing shows touch_atime to be high up in profile > logs for IO intensive workloads. Most likely that's due to the lock > in mnt_want_write(). Unfortunately touch_atime first takes the lock, > and then does all the other tests that could avoid atime updates (like > noatime or relatime). > > Do it the other way round -- first try to avoid the update and only > then if that didn't succeed take the lock. That works because none of > the atime avoidance tests rely on locking. > > This also eliminates a goto. > > Signed-off-by: Andi Kleen <ak@xxxxxxxxxxxxxxx> > > --- > fs/inode.c | 20 ++++++++++---------- > 1 file changed, 10 insertions(+), 10 deletions(-) > > Index: linux-2.6.30-ak/fs/inode.c > =================================================================== > --- linux-2.6.30-ak.orig/fs/inode.c > +++ linux-2.6.30-ak/fs/inode.c > @@ -1361,31 +1361,31 @@ void touch_atime(struct vfsmount *mnt, s > struct inode *inode = dentry->d_inode; > struct timespec now; > > - if (mnt_want_write(mnt)) > - return; > if (inode->i_flags & S_NOATIME) > - goto out; > + return; > if (IS_NOATIME(inode)) > - goto out; > + return; > if ((inode->i_sb->s_flags & MS_NODIRATIME) && S_ISDIR(inode->i_mode)) > - goto out; > + return; > > if (mnt->mnt_flags & MNT_NOATIME) > - goto out; > + return; > if ((mnt->mnt_flags & MNT_NODIRATIME) && S_ISDIR(inode->i_mode)) > - goto out; > + return; > > now = current_fs_time(inode->i_sb); > > if (!relatime_need_update(mnt, inode, now)) > - goto out; > + return; > > if (timespec_equal(&inode->i_atime, &now)) > - goto out; > + return; > + > + if (mnt_want_write(mnt)) > + return; > > inode->i_atime = now; > mark_inode_dirty_sync(inode); > -out: > mnt_drop_write(mnt); > } > EXPORT_SYMBOL(touch_atime); Nice! Reviewed-by: Valerie Aurora <vaurora@xxxxxxxxxx> -VAL -- 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