/* part of tail2extent. replace tail items with extent one. Content of tail items (@count bytes) being cut are copied already into pages. extent_writepage method is called to create extents corresponding to those pages */ static int replace(struct inode *inode, struct page **pages, unsigned nr_pages, int count) { int result; unsigned i; STORE_COUNTERS; if (nr_pages == 0) return 0; assert("vs-596", pages[0]); /* cut copied items */ result = cut_formatting_items(inode, page_offset(pages[0]), count); if (result) return result; CHECK_COUNTERS; /* put into tree replacement for just removed items: extent item, namely */ for (i = 0; i < nr_pages; i++) { result = add_to_page_cache_lru(pages[i], inode->i_mapping, pages[i]->index, mapping_gfp_mask(inode-> i_mapping)); if (result) break; unlock_page(pages[i]); result = find_or_create_extent(pages[i]); if (result) break; SetPageUptodate(pages[i]); } return result; }
/* part of tail2extent. replace tail items with extent one. Content of tail items (@count bytes) being cut are copied already into pages. extent_writepage method is called to create extents corresponding to those pages */ static int replace(struct inode *inode, struct page **pages, unsigned nr_pages, int count) { int result; unsigned i; STORE_COUNTERS; if (nr_pages == 0) return 0; assert("vs-596", pages[0]); /* cut copied items */ result = cut_formatting_items(inode, page_offset(pages[0]), count); if (result) return result; CHECK_COUNTERS; /* put into tree replacement for just removed items: extent item, namely */ for (i = 0; i < nr_pages; i++) { result = add_to_page_cache_lru(pages[i], inode->i_mapping, pages[i]->index, mapping_gfp_mask(inode-> i_mapping)); if (result) break; unlock_page(pages[i]); result = find_or_create_extent(pages[i]); if (result) { /* * Unsuccess in critical place: * tail has been removed, * but extent hasn't been created */ warning("edward-1572", "Report the error code %i to developers. Run FSCK", result); break; } SetPageUptodate(pages[i]); } return result; }