lkml.org 
[lkml]   [2007]   [Nov]   [1]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Subject[PATCH 12/27] r-o-bind-mounts-elevate-write-count-for-do_sys_utime-and-touch_atime
    From
    Date


    Acked-by: Christoph Hellwig <hch@infradead.org>
    Signed-off-by: Dave Hansen <haveblue@us.ibm.com>
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    ---

    linux-2.6.git-dave/fs/inode.c | 20 ++++++++++++--------
    1 file changed, 12 insertions(+), 8 deletions(-)

    diff -puN fs/inode.c~r-o-bind-mounts-elevate-write-count-for-do_sys_utime-and-touch_atime fs/inode.c
    --- linux-2.6.git/fs/inode.c~r-o-bind-mounts-elevate-write-count-for-do_sys_utime-and-touch_atime 2007-11-01 14:46:12.000000000 -0700
    +++ linux-2.6.git-dave/fs/inode.c 2007-11-01 14:46:12.000000000 -0700
    @@ -1203,22 +1203,23 @@ void touch_atime(struct vfsmount *mnt, s
    struct inode *inode = dentry->d_inode;
    struct timespec now;

    - if (inode->i_flags & S_NOATIME)
    + if (mnt && mnt_want_write(mnt))
    return;
    + if (inode->i_flags & S_NOATIME)
    + goto out;
    if (IS_NOATIME(inode))
    - return;
    + goto out;
    if ((inode->i_sb->s_flags & MS_NODIRATIME) && S_ISDIR(inode->i_mode))
    - return;
    + goto out;

    /*
    * We may have a NULL vfsmount when coming from NFSD
    */
    if (mnt) {
    if (mnt->mnt_flags & MNT_NOATIME)
    - return;
    + goto out;
    if ((mnt->mnt_flags & MNT_NODIRATIME) && S_ISDIR(inode->i_mode))
    - return;
    -
    + goto out;
    if (mnt->mnt_flags & MNT_RELATIME) {
    /*
    * With relative atime, only update atime if the
    @@ -1229,16 +1230,19 @@ void touch_atime(struct vfsmount *mnt, s
    &inode->i_atime) < 0 &&
    timespec_compare(&inode->i_ctime,
    &inode->i_atime) < 0)
    - return;
    + goto out;
    }
    }

    now = current_fs_time(inode->i_sb);
    if (timespec_equal(&inode->i_atime, &now))
    - return;
    + goto out;

    inode->i_atime = now;
    mark_inode_dirty_sync(inode);
    +out:
    + if (mnt)
    + mnt_drop_write(mnt);
    }
    EXPORT_SYMBOL(touch_atime);

    _
    -
    To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
    the body of a message to majordomo@vger.kernel.org
    More majordomo info at http://vger.kernel.org/majordomo-info.html
    Please read the FAQ at http://www.tux.org/lkml/
    \
     
     \ /
      Last update: 2007-11-02 00:17    [W:0.021 / U:0.192 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site