Fix a minor bug in the previous patch
authorSteven Whitehouse <swhiteho@redhat.com>
Thu, 19 Mar 2009 13:15:44 +0000 (13:15 +0000)
committerSteven Whitehouse <steve@dolmen.chygwyn.com>
Tue, 24 Mar 2009 11:21:27 +0000 (11:21 +0000)
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>
fs/gfs2/ops_file.c

index 48ec3d5e29eb8727a9cd2d14893cee271af54e49..3b9e8de3500be1c40b2fbb798cb8dcdc8d4b51b5 100644 (file)
@@ -355,6 +355,9 @@ static int gfs2_page_mkwrite(struct vm_area_struct *vma, struct page *page)
        if (ret)
                goto out;
 
+       set_bit(GLF_DIRTY, &ip->i_gl->gl_flags);
+       set_bit(GIF_SW_PAGED, &ip->i_flags);
+
        ret = gfs2_write_alloc_required(ip, pos, PAGE_CACHE_SIZE, &alloc_required);
        if (ret || !alloc_required)
                goto out_unlock;
@@ -395,8 +398,6 @@ static int gfs2_page_mkwrite(struct vm_area_struct *vma, struct page *page)
                        goto out_unlock_page;
        }
        ret = gfs2_allocate_page_backing(page);
-       if (!ret)
-               set_bit(GIF_SW_PAGED, &ip->i_flags);
 
 out_unlock_page:
        unlock_page(page);