417
418 if (is_migration_entry(entry))
419 return;
420
421 p = swap_info_get(entry);
422 if (p) {
423 if (swap_entry_free(p, swp_offset(entry)) == 1) {
424 page = find_get_page(&swapper_space, entry.val);
425 if (page && !trylock_page(page)) {
426 page_cache_release(page);
427 page = NULL;
428 }
429 }
430 spin_unlock(&swap_lock);
431 }
432 if (page) {
433 int one_user;
434
435 BUG_ON(PagePrivate(page));
436 one_user = (page_count(page) == 2);
437
438
439 if (PageSwapCache(page) && !PageWriteback(page) &&
440 (one_user || vm_swap_full())) {
441 delete_from_swap_cache(page);
442 SetPageDirty(page);
443 }
444 unlock_page(page);
445 page_cache_release(page);
446 }
447}
448
449#ifdef CONFIG_HIBERNATION
450
451
452
453
454
455
456
457