Hi, I am reading 2.4.16, let us assume following scenario swap_map[offset] == 2; and page->count == 2; (before function execution) vm_swap is full (nr_swap_pages*2 > total_swap_pages); first question is the above case possible. if yes, then after execution of this function, we would have page->count == 1, i.e. mapped by some process, with good page->index and what we have is, the associated swap entry is already freed. Am i wrong somewhere ?? ----- Amol void free_swap_and_cache(swp_entry_t entry) { struct swap_info_struct * p; struct page *page = NULL; p = swap_info_get(entry); if (p) { if (swap_entry_free(p, SWP_OFFSET(entry)) == 1) page = find_trylock_page(&swapper_space, entry.val); swap_info_put(p); } if (page) { page_cache_get(page); /* Only cache user (+us), or swap space full? Free it! */ if (page_count(page) == 2 || vm_swap_full()) { delete_from_swap_cache(page); SetPageDirty(page); } UnlockPage(page); page_cache_release(page); } }