gfs2: Update file times after grabbing glock
authorAndreas Gruenbacher <agruenba@redhat.com>
Mon, 26 Sep 2016 18:20:19 +0000 (13:20 -0500)
committerBob Peterson <rpeterso@redhat.com>
Mon, 26 Sep 2016 18:20:19 +0000 (13:20 -0500)
In gfs2_page_mkwrite, grab the inode glock in EX mode before calling
file_update_time: grabbing the lock may result in a call to
gfs2_dinode_in, which will reset the file times to their on-disk state.

Signed-off-by: Andreas Gruenbacher <agruenba@redhat.com>
Signed-off-by: Bob Peterson <rpeterso@redhat.com>
fs/gfs2/file.c

index 320e65e61938a5fc6d8ad387efa2505c78ebca12..360188f162bd8b0a3d1901f89dcceffb9168e19a 100644 (file)
@@ -395,9 +395,6 @@ static int gfs2_page_mkwrite(struct vm_area_struct *vma, struct vm_fault *vmf)
 
        sb_start_pagefault(inode->i_sb);
 
-       /* Update file times before taking page lock */
-       file_update_time(vma->vm_file);
-
        ret = gfs2_rsqa_alloc(ip);
        if (ret)
                goto out;
@@ -409,6 +406,9 @@ static int gfs2_page_mkwrite(struct vm_area_struct *vma, struct vm_fault *vmf)
        if (ret)
                goto out_uninit;
 
+       /* Update file times before taking page lock */
+       file_update_time(vma->vm_file);
+
        set_bit(GLF_DIRTY, &ip->i_gl->gl_flags);
        set_bit(GIF_SW_PAGED, &ip->i_flags);