Loading fs/ocfs2/refcounttree.c +6 −36 Original line number Diff line number Diff line Loading @@ -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; } Loading Loading
fs/ocfs2/refcounttree.c +6 −36 Original line number Diff line number Diff line Loading @@ -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; } Loading