diff options
author | Andreas Gruenbacher <agruenba@redhat.com> | 2016-09-26 20:20:19 +0200 |
---|---|---|
committer | Bob Peterson <rpeterso@redhat.com> | 2016-09-26 20:20:19 +0200 |
commit | d7c436cd605eb203ecf64c40f9b18aa610ac0248 (patch) | |
tree | 28bcc71357dbec7e1152322409d0f3c362eab0c3 | |
parent | gfs2: fix to detect failure of register_shrinker (diff) | |
download | linux-d7c436cd605eb203ecf64c40f9b18aa610ac0248.tar.xz linux-d7c436cd605eb203ecf64c40f9b18aa610ac0248.zip |
gfs2: Update file times after grabbing glock
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>
-rw-r--r-- | fs/gfs2/file.c | 6 |
1 files changed, 3 insertions, 3 deletions
diff --git a/fs/gfs2/file.c b/fs/gfs2/file.c index 320e65e61938..360188f162bd 100644 --- a/fs/gfs2/file.c +++ b/fs/gfs2/file.c @@ -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); |