X-Git-Url: https://git.kernel.dk/?a=blobdiff_plain;f=mm%2Fpage_io.c;h=985f23cfa79b75d3b38fad9bfa5cdf4385f7c8e4;hb=407aa3ff6f54ea2be7959639d664ae5183e2e9f8;hp=18aac7819cc97b4f2b9fe834600a30614d3e8b33;hpb=004cb62efd5e9e4772efb46b49c16fa2618ecf3e;p=linux-2.6-block.git diff --git a/mm/page_io.c b/mm/page_io.c index 18aac7819cc9..985f23cfa79b 100644 --- a/mm/page_io.c +++ b/mm/page_io.c @@ -252,7 +252,7 @@ out: static sector_t swap_page_sector(struct page *page) { - return (sector_t)__page_file_index(page) << (PAGE_CACHE_SHIFT - 9); + return (sector_t)__page_file_index(page) << (PAGE_SHIFT - 9); } int __swap_writepage(struct page *page, struct writeback_control *wbc, @@ -353,7 +353,11 @@ int swap_readpage(struct page *page) ret = bdev_read_page(sis->bdev, swap_page_sector(page), page); if (!ret) { - swap_slot_free_notify(page); + if (trylock_page(page)) { + swap_slot_free_notify(page); + unlock_page(page); + } + count_vm_event(PSWPIN); return 0; }