aboutsummaryrefslogtreecommitdiffstats
path: root/fs/gfs2
diff options
context:
space:
mode:
authorSteven Whitehouse <swhiteho@redhat.com>2009-03-19 09:15:44 -0400
committerSteven Whitehouse <steve@dolmen.chygwyn.com>2009-03-24 07:21:27 -0400
commit9c538837d844574787c95bd5665f684559fb7065 (patch)
tree6f2889435b03df7bd42f75d0f2577faf20d35775 /fs/gfs2
parent6bac243f0793499782267342eba852a8a6cc7ac4 (diff)
Fix a minor bug in the previous patch
The logic requires that we mark the glock dirty in page_mkwrite otherwise we might not flush correctly in the case that no allocation was required in the process of dirying the page. Also we need to set the shared write flag early for the same reason. Signed-off-by: Steven Whitehouse <swhiteho@redhat.com>
Diffstat (limited to 'fs/gfs2')
-rw-r--r--fs/gfs2/ops_file.c5
1 files changed, 3 insertions, 2 deletions
diff --git a/fs/gfs2/ops_file.c b/fs/gfs2/ops_file.c
index 48ec3d5e29eb..3b9e8de3500b 100644
--- a/fs/gfs2/ops_file.c
+++ b/fs/gfs2/ops_file.c
@@ -355,6 +355,9 @@ static int gfs2_page_mkwrite(struct vm_area_struct *vma, struct page *page)
355 if (ret) 355 if (ret)
356 goto out; 356 goto out;
357 357
358 set_bit(GLF_DIRTY, &ip->i_gl->gl_flags);
359 set_bit(GIF_SW_PAGED, &ip->i_flags);
360
358 ret = gfs2_write_alloc_required(ip, pos, PAGE_CACHE_SIZE, &alloc_required); 361 ret = gfs2_write_alloc_required(ip, pos, PAGE_CACHE_SIZE, &alloc_required);
359 if (ret || !alloc_required) 362 if (ret || !alloc_required)
360 goto out_unlock; 363 goto out_unlock;
@@ -395,8 +398,6 @@ static int gfs2_page_mkwrite(struct vm_area_struct *vma, struct page *page)
395 goto out_unlock_page; 398 goto out_unlock_page;
396 } 399 }
397 ret = gfs2_allocate_page_backing(page); 400 ret = gfs2_allocate_page_backing(page);
398 if (!ret)
399 set_bit(GIF_SW_PAGED, &ip->i_flags);
400 401
401out_unlock_page: 402out_unlock_page:
402 unlock_page(page); 403 unlock_page(page);