diff options
author | Steven Whitehouse <swhiteho@redhat.com> | 2007-10-17 03:35:19 -0400 |
---|---|---|
committer | Steven Whitehouse <swhiteho@redhat.com> | 2008-01-25 03:07:21 -0500 |
commit | bf36a713169432643d4fc7eeb4e0ace96d791d26 (patch) | |
tree | 2cb69c9716b9ee8c687ef807bb88d5e635db3462 /fs/gfs2/ops_address.c | |
parent | e7e36f143565d14950055c893cfaf4400ad64d34 (diff) |
[GFS2] Add gfs2_is_writeback()
This adds a function "gfs2_is_writeback()" along the lines of the
existing "gfs2_is_jdata()" in order to clean up the code and make
the various tests for the inode mode more obvious. It also fixes
the PageChecked() logic where we were resetting the flag too early
in the case of an error path.
Signed-off-by: Steven Whitehouse <swhiteho@redhat.com>
Diffstat (limited to 'fs/gfs2/ops_address.c')
-rw-r--r-- | fs/gfs2/ops_address.c | 10 |
1 files changed, 4 insertions, 6 deletions
diff --git a/fs/gfs2/ops_address.c b/fs/gfs2/ops_address.c index 4c4ef7f59909..ed154af86171 100644 --- a/fs/gfs2/ops_address.c +++ b/fs/gfs2/ops_address.c | |||
@@ -138,12 +138,11 @@ static int gfs2_writepage(struct page *page, struct writeback_control *wbc) | |||
138 | return 0; /* don't care */ | 138 | return 0; /* don't care */ |
139 | } | 139 | } |
140 | 140 | ||
141 | if ((sdp->sd_args.ar_data == GFS2_DATA_ORDERED || gfs2_is_jdata(ip)) && | 141 | if (PageChecked(page)) { |
142 | PageChecked(page)) { | ||
143 | ClearPageChecked(page); | ||
144 | error = gfs2_trans_begin(sdp, RES_DINODE + 1, 0); | 142 | error = gfs2_trans_begin(sdp, RES_DINODE + 1, 0); |
145 | if (error) | 143 | if (error) |
146 | goto out_ignore; | 144 | goto out_ignore; |
145 | ClearPageChecked(page); | ||
147 | if (!page_has_buffers(page)) { | 146 | if (!page_has_buffers(page)) { |
148 | create_empty_buffers(page, inode->i_sb->s_blocksize, | 147 | create_empty_buffers(page, inode->i_sb->s_blocksize, |
149 | (1 << BH_Dirty)|(1 << BH_Uptodate)); | 148 | (1 << BH_Dirty)|(1 << BH_Uptodate)); |
@@ -180,9 +179,8 @@ static int gfs2_writepages(struct address_space *mapping, | |||
180 | { | 179 | { |
181 | struct inode *inode = mapping->host; | 180 | struct inode *inode = mapping->host; |
182 | struct gfs2_inode *ip = GFS2_I(inode); | 181 | struct gfs2_inode *ip = GFS2_I(inode); |
183 | struct gfs2_sbd *sdp = GFS2_SB(inode); | ||
184 | 182 | ||
185 | if (sdp->sd_args.ar_data == GFS2_DATA_WRITEBACK && !gfs2_is_jdata(ip)) | 183 | if (gfs2_is_writeback(ip)) |
186 | return mpage_writepages(mapping, wbc, gfs2_get_block_noalloc); | 184 | return mpage_writepages(mapping, wbc, gfs2_get_block_noalloc); |
187 | 185 | ||
188 | return generic_writepages(mapping, wbc); | 186 | return generic_writepages(mapping, wbc); |
@@ -606,7 +604,7 @@ static int gfs2_write_end(struct file *file, struct address_space *mapping, | |||
606 | if (gfs2_is_stuffed(ip)) | 604 | if (gfs2_is_stuffed(ip)) |
607 | return gfs2_stuffed_write_end(inode, dibh, pos, len, copied, page); | 605 | return gfs2_stuffed_write_end(inode, dibh, pos, len, copied, page); |
608 | 606 | ||
609 | if (sdp->sd_args.ar_data == GFS2_DATA_ORDERED || gfs2_is_jdata(ip)) | 607 | if (!gfs2_is_writeback(ip)) |
610 | gfs2_page_add_databufs(ip, page, from, to); | 608 | gfs2_page_add_databufs(ip, page, from, to); |
611 | 609 | ||
612 | ret = generic_write_end(file, mapping, pos, len, copied, page, fsdata); | 610 | ret = generic_write_end(file, mapping, pos, len, copied, page, fsdata); |