Skip to content

Commit

Permalink
ocfs2: Use filemap_write_and_wait_range() in ocfs2_cow_sync_writeback()
Browse files Browse the repository at this point in the history
Remove the open-coding of filemap_fdatawait_range().

Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
  • Loading branch information
Matthew Wilcox (Oracle) committed Aug 2, 2022
1 parent e775dfb commit 97a3a38
Showing 1 changed file with 6 additions and 36 deletions.
42 changes: 6 additions & 36 deletions fs/ocfs2/refcounttree.c
Original file line number Diff line number Diff line change
Expand Up @@ -3146,48 +3146,18 @@ int ocfs2_cow_sync_writeback(struct super_block *sb,
struct inode *inode,
u32 cpos, u32 num_clusters)
{
int ret = 0;
loff_t offset, end, map_end;
pgoff_t page_index;
struct page *page;
int ret;
loff_t start, end;

if (ocfs2_should_order_data(inode))
return 0;

offset = ((loff_t)cpos) << OCFS2_SB(sb)->s_clustersize_bits;
end = offset + (num_clusters << OCFS2_SB(sb)->s_clustersize_bits);
start = ((loff_t)cpos) << OCFS2_SB(sb)->s_clustersize_bits;
end = start + (num_clusters << OCFS2_SB(sb)->s_clustersize_bits) - 1;

ret = filemap_fdatawrite_range(inode->i_mapping,
offset, end - 1);
if (ret < 0) {
ret = filemap_write_and_wait_range(inode->i_mapping, start, end);
if (ret < 0)
mlog_errno(ret);
return ret;
}

while (offset < end) {
page_index = offset >> PAGE_SHIFT;
map_end = ((loff_t)page_index + 1) << PAGE_SHIFT;
if (map_end > end)
map_end = end;

page = find_or_create_page(inode->i_mapping,
page_index, GFP_NOFS);
BUG_ON(!page);

wait_on_page_writeback(page);
if (PageError(page)) {
ret = -EIO;
mlog_errno(ret);
} else
mark_page_accessed(page);

unlock_page(page);
put_page(page);
page = NULL;
offset = map_end;
if (ret)
break;
}

return ret;
}
Expand Down

0 comments on commit 97a3a38

Please sign in to comment.