Lines Matching full:page

10  *  Add swap of shared pages through the page cache. 20.2.1998. Stephen Tweedie
31 struct page *page = bio_first_page_all(bio); in end_swap_bio_write() local
34 SetPageError(page); in end_swap_bio_write()
36 * We failed to write the page out to swap-space. in end_swap_bio_write()
37 * Re-dirty the page in order to avoid it being reclaimed. in end_swap_bio_write()
43 set_page_dirty(page); in end_swap_bio_write()
47 ClearPageReclaim(page); in end_swap_bio_write()
49 end_page_writeback(page); in end_swap_bio_write()
53 static void swap_slot_free_notify(struct page *page) in swap_slot_free_notify() argument
60 * There is no guarantee that the page is in swap cache - the software in swap_slot_free_notify()
62 * swapcache page. So we must check PG_swapcache before proceeding with in swap_slot_free_notify()
65 if (unlikely(!PageSwapCache(page))) in swap_slot_free_notify()
68 sis = page_swap_info(page); in swap_slot_free_notify()
74 * expecting that the page will be swapped out again. in swap_slot_free_notify()
75 * So we can avoid an unnecessary write if the page in swap_slot_free_notify()
84 * and make the VM-owned decompressed page *dirty*, in swap_slot_free_notify()
85 * so the page should be swapped out somewhere again if in swap_slot_free_notify()
89 entry.val = page_private(page); in swap_slot_free_notify()
95 SetPageDirty(page); in swap_slot_free_notify()
103 struct page *page = bio_first_page_all(bio); in end_swap_bio_read() local
107 SetPageError(page); in end_swap_bio_read()
108 ClearPageUptodate(page); in end_swap_bio_read()
115 SetPageUptodate(page); in end_swap_bio_read()
116 swap_slot_free_notify(page); in end_swap_bio_read()
118 unlock_page(page); in end_swap_bio_read()
190 if (page_no) { /* exclude the header page */ in generic_swapfile_activate()
228 int swap_writepage(struct page *page, struct writeback_control *wbc) in swap_writepage() argument
232 if (try_to_free_swap(page)) { in swap_writepage()
233 unlock_page(page); in swap_writepage()
237 * Arch code may have to preserve more data than just the page in swap_writepage()
240 ret = arch_prepare_to_swap(page); in swap_writepage()
242 set_page_dirty(page); in swap_writepage()
243 unlock_page(page); in swap_writepage()
246 if (frontswap_store(page) == 0) { in swap_writepage()
247 set_page_writeback(page); in swap_writepage()
248 unlock_page(page); in swap_writepage()
249 end_page_writeback(page); in swap_writepage()
252 ret = __swap_writepage(page, wbc, end_swap_bio_write); in swap_writepage()
257 static inline void count_swpout_vm_event(struct page *page) in count_swpout_vm_event() argument
260 if (unlikely(PageTransHuge(page))) in count_swpout_vm_event()
263 count_vm_events(PSWPOUT, thp_nr_pages(page)); in count_swpout_vm_event()
267 static void bio_associate_blkg_from_page(struct bio *bio, struct page *page) in bio_associate_blkg_from_page() argument
272 memcg = page_memcg(page); in bio_associate_blkg_from_page()
282 #define bio_associate_blkg_from_page(bio, page) do { } while (0) argument
285 int __swap_writepage(struct page *page, struct writeback_control *wbc, in __swap_writepage() argument
290 struct swap_info_struct *sis = page_swap_info(page); in __swap_writepage()
292 VM_BUG_ON_PAGE(!PageSwapCache(page), page); in __swap_writepage()
298 .bv_page = page, in __swap_writepage()
306 kiocb.ki_pos = page_file_offset(page); in __swap_writepage()
308 set_page_writeback(page); in __swap_writepage()
309 unlock_page(page); in __swap_writepage()
319 * Mark the page dirty and avoid in __swap_writepage()
325 set_page_dirty(page); in __swap_writepage()
326 ClearPageReclaim(page); in __swap_writepage()
328 page_file_offset(page)); in __swap_writepage()
330 end_page_writeback(page); in __swap_writepage()
334 ret = bdev_write_page(sis->bdev, swap_page_sector(page), page, wbc); in __swap_writepage()
336 count_swpout_vm_event(page); in __swap_writepage()
342 bio->bi_iter.bi_sector = swap_page_sector(page); in __swap_writepage()
345 bio_add_page(bio, page, thp_size(page), 0); in __swap_writepage()
347 bio_associate_blkg_from_page(bio, page); in __swap_writepage()
348 count_swpout_vm_event(page); in __swap_writepage()
349 set_page_writeback(page); in __swap_writepage()
350 unlock_page(page); in __swap_writepage()
356 int swap_readpage(struct page *page, bool synchronous) in swap_readpage() argument
360 struct swap_info_struct *sis = page_swap_info(page); in swap_readpage()
365 VM_BUG_ON_PAGE(!PageSwapCache(page) && !synchronous, page); in swap_readpage()
366 VM_BUG_ON_PAGE(!PageLocked(page), page); in swap_readpage()
367 VM_BUG_ON_PAGE(PageUptodate(page), page); in swap_readpage()
376 if (frontswap_load(page) == 0) { in swap_readpage()
377 SetPageUptodate(page); in swap_readpage()
378 unlock_page(page); in swap_readpage()
386 ret = mapping->a_ops->readpage(swap_file, page); in swap_readpage()
393 ret = bdev_read_page(sis->bdev, swap_page_sector(page), page); in swap_readpage()
395 if (trylock_page(page)) { in swap_readpage()
396 swap_slot_free_notify(page); in swap_readpage()
397 unlock_page(page); in swap_readpage()
409 bio->bi_iter.bi_sector = swap_page_sector(page); in swap_readpage()
411 bio_add_page(bio, page, thp_size(page), 0); in swap_readpage()
416 * attempt to access it in the page fault retry time check. in swap_readpage()
442 int swap_set_page_dirty(struct page *page) in swap_set_page_dirty() argument
444 struct swap_info_struct *sis = page_swap_info(page); in swap_set_page_dirty()
449 VM_BUG_ON_PAGE(!PageSwapCache(page), page); in swap_set_page_dirty()
450 return mapping->a_ops->set_page_dirty(page); in swap_set_page_dirty()
452 return __set_page_dirty_no_writeback(page); in swap_set_page_dirty()