From: omycle@gmail.com (Li Haifeng)
To: linux-arm-kernel@lists.infradead.org
Subject: Should a swapped out page be deleted from swap cache?
Date: Mon, 18 Feb 2013 18:48:50 +0800 [thread overview]
Message-ID: <CAFNq8R4UYvygk8+X+NZgyGjgU5vBsEv1UM6MiUxah6iW8=0HrQ@mail.gmail.com> (raw)
For explain my question, the two points should be displayed as below.
1. If an anonymous page is swapped out, this page will be deleted
from swap cache and be put back into buddy system.
2. When a page is swapped out, the sharing count of swap slot must not
be zero. That is, page_swapcount(page) will not return zero.
Are both of them above right?
According the two points above, I was confused to the line 655 below.
When a page is swapped out, the return value of page_swapcount(page)
will not be zero. So, the page couldn't be deleted from swap cache.
644 * If swap is getting full, or if there are no more mappings of this page,
645 * then try_to_free_swap is called to free its swap space.
646 */
647 int try_to_free_swap(struct page *page)
648 {
649 VM_BUG_ON(!PageLocked(page));
650
651 if (!PageSwapCache(page))
652 return 0;
653 if (PageWriteback(page))
654 return 0;
655 if (page_swapcount(page))//Has referenced by other swap out page.
656 return 0;
657
658 /*
659 * Once hibernation has begun to create its image of memory,
660 * there's a danger that one of the calls to try_to_free_swap()
661 * - most probably a call from __try_to_reclaim_swap() while
662 * hibernation is allocating its own swap pages for the image,
663 * but conceivably even a call from memory reclaim - will free
664 * the swap from a page which has already been recorded in the
665 * image as a clean swapcache page, and then reuse its swap for
666 * another page of the image. On waking from hibernation, the
667 * original page might be freed under memory pressure, then
668 * later read back in from swap, now with the wrong data.
669 *
670 * Hibration suspends storage while it is writing the image
671 * to disk so check that here.
672 */
673 if (pm_suspended_storage())
674 return 0;
675
676 delete_from_swap_cache(page);
677 SetPageDirty(page);
678 return 1;
679 }
Thanks.
next reply other threads:[~2013-02-18 10:48 UTC|newest]
Thread overview: 16+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-02-18 10:48 Li Haifeng [this message]
2013-02-18 18:06 ` Should a swapped out page be deleted from swap cache? Hugh Dickins
2013-02-19 0:39 ` Will Huck
2013-02-19 19:06 ` Hugh Dickins
2013-02-20 0:43 ` Will Huck
2013-02-19 2:04 ` Li Haifeng
2013-02-19 2:38 ` Will Huck
2013-02-19 6:53 ` Li Haifeng
2013-02-19 9:38 ` Sha Zhengju
2013-02-19 18:49 ` Hugh Dickins
2013-02-19 8:32 ` Ric Mason
2013-02-19 18:56 ` Hugh Dickins
2013-02-20 0:40 ` Ric Mason
2013-03-06 5:34 ` Li Haifeng
2013-03-06 11:04 ` Ric Mason
2013-03-06 11:10 ` Ric Mason
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to='CAFNq8R4UYvygk8+X+NZgyGjgU5vBsEv1UM6MiUxah6iW8=0HrQ@mail.gmail.com' \
--to=omycle@gmail.com \
--cc=linux-arm-kernel@lists.infradead.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).