• Home
  • Raw
  • Download

Lines Matching refs:page

62 static inline struct ceph_snap_context *page_snap_context(struct page *page)  in page_snap_context()  argument
64 if (PagePrivate(page)) in page_snap_context()
65 return (void *)page->private; in page_snap_context()
73 static int ceph_set_page_dirty(struct page *page) in ceph_set_page_dirty() argument
75 struct address_space *mapping = page->mapping; in ceph_set_page_dirty()
82 return !TestSetPageDirty(page); in ceph_set_page_dirty()
84 if (PageDirty(page)) { in ceph_set_page_dirty()
86 mapping->host, page, page->index); in ceph_set_page_dirty()
87 BUG_ON(!PagePrivate(page)); in ceph_set_page_dirty()
114 mapping->host, page, page->index, in ceph_set_page_dirty()
124 BUG_ON(PagePrivate(page)); in ceph_set_page_dirty()
125 page->private = (unsigned long)snapc; in ceph_set_page_dirty()
126 SetPagePrivate(page); in ceph_set_page_dirty()
128 ret = __set_page_dirty_nobuffers(page); in ceph_set_page_dirty()
129 WARN_ON(!PageLocked(page)); in ceph_set_page_dirty()
130 WARN_ON(!page->mapping); in ceph_set_page_dirty()
140 static void ceph_invalidatepage(struct page *page, unsigned int offset, in ceph_invalidatepage() argument
145 struct ceph_snap_context *snapc = page_snap_context(page); in ceph_invalidatepage()
147 inode = page->mapping->host; in ceph_invalidatepage()
152 inode, page, page->index, offset, length); in ceph_invalidatepage()
156 ceph_invalidate_fscache_page(inode, page); in ceph_invalidatepage()
158 WARN_ON(!PageLocked(page)); in ceph_invalidatepage()
159 if (!PagePrivate(page)) in ceph_invalidatepage()
162 ClearPageChecked(page); in ceph_invalidatepage()
165 inode, page, page->index); in ceph_invalidatepage()
169 page->private = 0; in ceph_invalidatepage()
170 ClearPagePrivate(page); in ceph_invalidatepage()
173 static int ceph_releasepage(struct page *page, gfp_t g) in ceph_releasepage() argument
175 dout("%p releasepage %p idx %lu (%sdirty)\n", page->mapping->host, in ceph_releasepage()
176 page, page->index, PageDirty(page) ? "" : "not "); in ceph_releasepage()
179 if (!ceph_release_fscache_page(page, g)) in ceph_releasepage()
182 return !PagePrivate(page); in ceph_releasepage()
188 static int ceph_do_readpage(struct file *filp, struct page *page) in ceph_do_readpage() argument
194 u64 off = page_offset(page); in ceph_do_readpage()
198 zero_user_segment(page, 0, PAGE_SIZE); in ceph_do_readpage()
199 SetPageUptodate(page); in ceph_do_readpage()
210 zero_user_segment(page, 0, PAGE_SIZE); in ceph_do_readpage()
211 SetPageUptodate(page); in ceph_do_readpage()
215 err = ceph_readpage_from_fscache(inode, page); in ceph_do_readpage()
220 inode, filp, page, page->index); in ceph_do_readpage()
224 &page, 1, 0); in ceph_do_readpage()
228 SetPageError(page); in ceph_do_readpage()
229 ceph_fscache_readpage_cancel(inode, page); in ceph_do_readpage()
236 zero_user_segment(page, err, PAGE_SIZE); in ceph_do_readpage()
238 flush_dcache_page(page); in ceph_do_readpage()
240 SetPageUptodate(page); in ceph_do_readpage()
241 ceph_readpage_to_fscache(inode, page); in ceph_do_readpage()
247 static int ceph_readpage(struct file *filp, struct page *page) in ceph_readpage() argument
249 int r = ceph_do_readpage(filp, page); in ceph_readpage()
251 unlock_page(page); in ceph_readpage()
279 struct page *page = osd_data->pages[i]; in finish_read() local
282 ceph_fscache_readpage_cancel(inode, page); in finish_read()
288 zero_user_segment(page, s, PAGE_SIZE); in finish_read()
290 dout("finish_read %p uptodate %p idx %lu\n", inode, page, in finish_read()
291 page->index); in finish_read()
292 flush_dcache_page(page); in finish_read()
293 SetPageUptodate(page); in finish_read()
294 ceph_readpage_to_fscache(inode, page); in finish_read()
296 unlock_page(page); in finish_read()
297 put_page(page); in finish_read()
313 struct page *page = lru_to_page(page_list); in start_read() local
319 struct page **pages; in start_read()
341 page = lru_to_page(page_list); in start_read()
342 list_del(&page->lru); in start_read()
343 put_page(page); in start_read()
349 off = (u64) page_offset(page); in start_read()
352 next_index = page->index; in start_read()
353 list_for_each_entry_reverse(page, page_list, lru) { in start_read()
354 if (page->index != next_index) in start_read()
383 page = list_entry(page_list->prev, struct page, lru); in start_read()
384 BUG_ON(PageLocked(page)); in start_read()
385 list_del(&page->lru); in start_read()
387 dout("start_read %p adding %p idx %lu\n", inode, page, in start_read()
388 page->index); in start_read()
389 if (add_to_page_cache_lru(page, &inode->i_data, page->index, in start_read()
391 ceph_fscache_uncache_page(inode, page); in start_read()
392 put_page(page); in start_read()
394 inode, page); in start_read()
403 pages[i] = page; in start_read()
547 struct page *page, u64 start) in get_writepages_data_length() argument
550 struct ceph_snap_context *snapc = page_snap_context(page); in get_writepages_data_length()
568 if (end > page_offset(page) + PAGE_SIZE) in get_writepages_data_length()
569 end = page_offset(page) + PAGE_SIZE; in get_writepages_data_length()
579 static int writepage_nounlock(struct page *page, struct writeback_control *wbc) in writepage_nounlock() argument
585 loff_t page_off = page_offset(page); in writepage_nounlock()
589 dout("writepage %p idx %lu\n", page, page->index); in writepage_nounlock()
591 inode = page->mapping->host; in writepage_nounlock()
596 snapc = page_snap_context(page); in writepage_nounlock()
598 dout("writepage %p page %p not dirty?\n", inode, page); in writepage_nounlock()
604 inode, page, snapc); in writepage_nounlock()
608 redirty_page_for_writepage(wbc, page); in writepage_nounlock()
615 dout("%p page eof %llu\n", page, ceph_wbc.i_size); in writepage_nounlock()
616 page->mapping->a_ops->invalidatepage(page, 0, PAGE_SIZE); in writepage_nounlock()
624 inode, page, page->index, page_off, len, snapc, snapc->seq); in writepage_nounlock()
630 set_page_writeback(page); in writepage_nounlock()
635 &inode->i_mtime, &page, 1); in writepage_nounlock()
642 dout("writepage interrupted page %p\n", page); in writepage_nounlock()
643 redirty_page_for_writepage(wbc, page); in writepage_nounlock()
644 end_page_writeback(page); in writepage_nounlock()
650 err, page); in writepage_nounlock()
654 dout("writepage cleaned page %p\n", page); in writepage_nounlock()
657 page->private = 0; in writepage_nounlock()
658 ClearPagePrivate(page); in writepage_nounlock()
659 end_page_writeback(page); in writepage_nounlock()
670 static int ceph_writepage(struct page *page, struct writeback_control *wbc) in ceph_writepage() argument
673 struct inode *inode = page->mapping->host; in ceph_writepage()
676 err = writepage_nounlock(page, wbc); in ceph_writepage()
682 unlock_page(page); in ceph_writepage()
698 struct page *page; in writepages_finish() local
737 page = osd_data->pages[j]; in writepages_finish()
738 BUG_ON(!page); in writepages_finish()
739 WARN_ON(!PageUptodate(page)); in writepages_finish()
747 ceph_put_snap_context(page_snap_context(page)); in writepages_finish()
748 page->private = 0; in writepages_finish()
749 ClearPagePrivate(page); in writepages_finish()
750 dout("unlocking %p\n", page); in writepages_finish()
751 end_page_writeback(page); in writepages_finish()
755 page); in writepages_finish()
757 unlock_page(page); in writepages_finish()
861 struct page **pages = NULL, **data_pages; in ceph_writepages_start()
863 struct page *page; in ceph_writepages_start() local
877 page = pvec.pages[i]; in ceph_writepages_start()
878 dout("? %p idx %lu\n", page, page->index); in ceph_writepages_start()
880 lock_page(page); /* first page */ in ceph_writepages_start()
881 else if (!trylock_page(page)) in ceph_writepages_start()
885 if (unlikely(!PageDirty(page)) || in ceph_writepages_start()
886 unlikely(page->mapping != mapping)) { in ceph_writepages_start()
887 dout("!dirty or !mapping %p\n", page); in ceph_writepages_start()
888 unlock_page(page); in ceph_writepages_start()
892 pgsnapc = page_snap_context(page); in ceph_writepages_start()
900 unlock_page(page); in ceph_writepages_start()
903 if (page_offset(page) >= ceph_wbc.i_size) { in ceph_writepages_start()
905 page, ceph_wbc.i_size); in ceph_writepages_start()
907 page_offset(page) >= i_size_read(inode)) && in ceph_writepages_start()
908 clear_page_dirty_for_io(page)) in ceph_writepages_start()
909 mapping->a_ops->invalidatepage(page, in ceph_writepages_start()
911 unlock_page(page); in ceph_writepages_start()
914 if (strip_unit_end && (page->index > strip_unit_end)) { in ceph_writepages_start()
915 dout("end of strip unit %p\n", page); in ceph_writepages_start()
916 unlock_page(page); in ceph_writepages_start()
919 if (PageWriteback(page)) { in ceph_writepages_start()
921 dout("%p under writeback\n", page); in ceph_writepages_start()
922 unlock_page(page); in ceph_writepages_start()
925 dout("waiting on writeback %p\n", page); in ceph_writepages_start()
926 wait_on_page_writeback(page); in ceph_writepages_start()
929 if (!clear_page_dirty_for_io(page)) { in ceph_writepages_start()
930 dout("%p !clear_page_dirty_for_io\n", page); in ceph_writepages_start()
931 unlock_page(page); in ceph_writepages_start()
947 offset = (u64)page_offset(page); in ceph_writepages_start()
955 strip_unit_end = page->index + in ceph_writepages_start()
970 } else if (page->index != in ceph_writepages_start()
974 redirty_page_for_writepage(wbc, page); in ceph_writepages_start()
975 unlock_page(page); in ceph_writepages_start()
980 offset = (u64)page_offset(page); in ceph_writepages_start()
986 inode, page, page->index); in ceph_writepages_start()
996 pages[locked_pages++] = page; in ceph_writepages_start()
1160 struct page *page; in ceph_writepages_start() local
1167 page = pvec.pages[i]; in ceph_writepages_start()
1168 if (page_snap_context(page) != snapc) in ceph_writepages_start()
1170 wait_on_page_writeback(page); in ceph_writepages_start()
1217 struct page *page) in ceph_update_writeable_page() argument
1230 dout(" page %p forced umount\n", page); in ceph_update_writeable_page()
1231 unlock_page(page); in ceph_update_writeable_page()
1237 wait_on_page_writeback(page); in ceph_update_writeable_page()
1239 snapc = page_snap_context(page); in ceph_update_writeable_page()
1249 page, snapc); in ceph_update_writeable_page()
1255 unlock_page(page); in ceph_update_writeable_page()
1268 page, snapc); in ceph_update_writeable_page()
1269 if (!clear_page_dirty_for_io(page)) in ceph_update_writeable_page()
1271 r = writepage_nounlock(page, NULL); in ceph_update_writeable_page()
1277 if (PageUptodate(page)) { in ceph_update_writeable_page()
1278 dout(" page %p already uptodate\n", page); in ceph_update_writeable_page()
1293 page, pos_in_page, end_in_page, (int)PAGE_SIZE); in ceph_update_writeable_page()
1294 zero_user_segments(page, in ceph_update_writeable_page()
1301 r = ceph_do_readpage(file, page); in ceph_update_writeable_page()
1309 unlock_page(page); in ceph_update_writeable_page()
1319 struct page **pagep, void **fsdata) in ceph_write_begin()
1322 struct page *page; in ceph_write_begin() local
1328 page = grab_cache_page_write_begin(mapping, index, 0); in ceph_write_begin()
1329 if (!page) in ceph_write_begin()
1333 inode, page, (int)pos, (int)len); in ceph_write_begin()
1335 r = ceph_update_writeable_page(file, pos, len, page); in ceph_write_begin()
1337 put_page(page); in ceph_write_begin()
1339 *pagep = page; in ceph_write_begin()
1351 struct page *page, void *fsdata) in ceph_write_end() argument
1357 inode, page, (int)pos, (int)copied, (int)len); in ceph_write_end()
1360 if (!PageUptodate(page)) { in ceph_write_end()
1365 SetPageUptodate(page); in ceph_write_end()
1372 set_page_dirty(page); in ceph_write_end()
1375 unlock_page(page); in ceph_write_end()
1376 put_page(page); in ceph_write_end()
1429 struct page *pinned_page = NULL; in ceph_filemap_fault()
1478 struct page *page = find_or_create_page(mapping, 0, in ceph_filemap_fault() local
1481 if (!page) { in ceph_filemap_fault()
1485 err = __ceph_do_getattr(inode, page, in ceph_filemap_fault()
1488 unlock_page(page); in ceph_filemap_fault()
1489 put_page(page); in ceph_filemap_fault()
1494 zero_user_segment(page, err, PAGE_SIZE); in ceph_filemap_fault()
1496 flush_dcache_page(page); in ceph_filemap_fault()
1497 SetPageUptodate(page); in ceph_filemap_fault()
1498 vmf->page = page; in ceph_filemap_fault()
1522 struct page *page = vmf->page; in ceph_page_mkwrite() local
1523 loff_t off = page_offset(page); in ceph_page_mkwrite()
1538 struct page *locked_page = NULL; in ceph_page_mkwrite()
1540 lock_page(page); in ceph_page_mkwrite()
1541 locked_page = page; in ceph_page_mkwrite()
1576 lock_page(page); in ceph_page_mkwrite()
1578 if ((off > size) || (page->mapping != inode->i_mapping)) { in ceph_page_mkwrite()
1579 unlock_page(page); in ceph_page_mkwrite()
1584 err = ceph_update_writeable_page(vma->vm_file, off, len, page); in ceph_page_mkwrite()
1587 set_page_dirty(page); in ceph_page_mkwrite()
1616 void ceph_fill_inline_data(struct inode *inode, struct page *locked_page, in ceph_fill_inline_data()
1620 struct page *page; in ceph_fill_inline_data() local
1623 page = locked_page; in ceph_fill_inline_data()
1627 page = find_or_create_page(mapping, 0, in ceph_fill_inline_data()
1630 if (!page) in ceph_fill_inline_data()
1632 if (PageUptodate(page)) { in ceph_fill_inline_data()
1633 unlock_page(page); in ceph_fill_inline_data()
1634 put_page(page); in ceph_fill_inline_data()
1643 void *kaddr = kmap_atomic(page); in ceph_fill_inline_data()
1648 if (page != locked_page) { in ceph_fill_inline_data()
1650 zero_user_segment(page, len, PAGE_SIZE); in ceph_fill_inline_data()
1652 flush_dcache_page(page); in ceph_fill_inline_data()
1654 SetPageUptodate(page); in ceph_fill_inline_data()
1655 unlock_page(page); in ceph_fill_inline_data()
1656 put_page(page); in ceph_fill_inline_data()
1660 int ceph_uninline_data(struct file *filp, struct page *locked_page) in ceph_uninline_data()
1666 struct page *page = NULL; in ceph_uninline_data() local
1683 page = locked_page; in ceph_uninline_data()
1684 WARN_ON(!PageUptodate(page)); in ceph_uninline_data()
1687 page = find_get_page(inode->i_mapping, 0); in ceph_uninline_data()
1688 if (page) { in ceph_uninline_data()
1689 if (PageUptodate(page)) { in ceph_uninline_data()
1691 lock_page(page); in ceph_uninline_data()
1693 put_page(page); in ceph_uninline_data()
1694 page = NULL; in ceph_uninline_data()
1699 if (page) { in ceph_uninline_data()
1704 page = __page_cache_alloc(GFP_NOFS); in ceph_uninline_data()
1705 if (!page) { in ceph_uninline_data()
1709 err = __ceph_do_getattr(inode, page, in ceph_uninline_data()
1747 osd_req_op_extent_osd_data_pages(req, 1, &page, len, 0, false, false); in ceph_uninline_data()
1780 if (page && page != locked_page) { in ceph_uninline_data()
1782 unlock_page(page); in ceph_uninline_data()
1783 put_page(page); in ceph_uninline_data()
1785 __free_pages(page, 0); in ceph_uninline_data()
1822 struct page **pages; in __ceph_pool_perm_get()