Commit 97a3a383 authored by Matthew Wilcox (Oracle)'s avatar Matthew Wilcox (Oracle)
Browse files

ocfs2: Use filemap_write_and_wait_range() in ocfs2_cow_sync_writeback()



Remove the open-coding of filemap_fdatawait_range().

Signed-off-by: default avatarMatthew Wilcox (Oracle) <willy@infradead.org>
parent e775dfb3
Loading
Loading
Loading
Loading
+6 −36
Original line number Diff line number Diff line
@@ -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);

	ret = filemap_fdatawrite_range(inode->i_mapping,
				       offset, end - 1);
	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);
	start = ((loff_t)cpos) << OCFS2_SB(sb)->s_clustersize_bits;
	end = start + (num_clusters << OCFS2_SB(sb)->s_clustersize_bits) - 1;

		wait_on_page_writeback(page);
		if (PageError(page)) {
			ret = -EIO;
	ret = filemap_write_and_wait_range(inode->i_mapping, start, end);
	if (ret < 0)
		mlog_errno(ret);
		} else
			mark_page_accessed(page);

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

	return ret;
}