diff options
author | Steven Whitehouse <swhiteho@redhat.com> | 2007-10-15 10:40:33 -0400 |
---|---|---|
committer | Steven Whitehouse <swhiteho@redhat.com> | 2008-01-25 03:07:13 -0500 |
commit | 3cc3f710ce0effe397b830826a1a081fa81f11c7 (patch) | |
tree | 53f69f1b8d1cbc2849c6bac08ce7786f3ecd7447 /fs/gfs2/glops.c | |
parent | 51ff87bdd9f21a5d3672517b75d25ab5842d94a8 (diff) |
[GFS2] Use ->page_mkwrite() for mmap()
This cleans up the mmap() code path for GFS2 by implementing the
page_mkwrite function for GFS2. We are thus able to use the
generic filemap_fault function for our ->fault() implementation.
This now means that shared writable mappings will be much more
efficiently shared across the cluster if there is a reasonable
proportion of read activity (the greater proportion, the better).
As a side effect, it also reduces the size of the code, removes
special cases from readpage and readpages, and makes the code
path easier to follow.
Signed-off-by: Steven Whitehouse <swhiteho@redhat.com>
Diffstat (limited to 'fs/gfs2/glops.c')
-rw-r--r-- | fs/gfs2/glops.c | 9 |
1 files changed, 1 insertions, 8 deletions
diff --git a/fs/gfs2/glops.c b/fs/gfs2/glops.c index 4670dcb2a877..110f03d66f4b 100644 --- a/fs/gfs2/glops.c +++ b/fs/gfs2/glops.c | |||
@@ -86,15 +86,10 @@ static void gfs2_pte_inval(struct gfs2_glock *gl) | |||
86 | if (!ip || !S_ISREG(inode->i_mode)) | 86 | if (!ip || !S_ISREG(inode->i_mode)) |
87 | return; | 87 | return; |
88 | 88 | ||
89 | if (!test_bit(GIF_PAGED, &ip->i_flags)) | ||
90 | return; | ||
91 | |||
92 | unmap_shared_mapping_range(inode->i_mapping, 0, 0); | 89 | unmap_shared_mapping_range(inode->i_mapping, 0, 0); |
93 | |||
94 | if (test_bit(GIF_SW_PAGED, &ip->i_flags)) | 90 | if (test_bit(GIF_SW_PAGED, &ip->i_flags)) |
95 | set_bit(GLF_DIRTY, &gl->gl_flags); | 91 | set_bit(GLF_DIRTY, &gl->gl_flags); |
96 | 92 | ||
97 | clear_bit(GIF_SW_PAGED, &ip->i_flags); | ||
98 | } | 93 | } |
99 | 94 | ||
100 | /** | 95 | /** |
@@ -234,10 +229,8 @@ static void inode_go_inval(struct gfs2_glock *gl, int flags) | |||
234 | set_bit(GIF_INVALID, &ip->i_flags); | 229 | set_bit(GIF_INVALID, &ip->i_flags); |
235 | } | 230 | } |
236 | 231 | ||
237 | if (ip && S_ISREG(ip->i_inode.i_mode)) { | 232 | if (ip && S_ISREG(ip->i_inode.i_mode)) |
238 | truncate_inode_pages(ip->i_inode.i_mapping, 0); | 233 | truncate_inode_pages(ip->i_inode.i_mapping, 0); |
239 | clear_bit(GIF_PAGED, &ip->i_flags); | ||
240 | } | ||
241 | } | 234 | } |
242 | 235 | ||
243 | /** | 236 | /** |