From: Richard Purdie <rpurdie@openedhand.com>
To: Nick Piggin <nickpiggin@yahoo.com.au>,
Hugh Dickins <hugh@veritas.com>,
kernel list <linux-kernel@vger.kernel.org>,
linux-mtd@lists.infradead.org, dwmw2@infradead.org
Subject: [PATCH 4/9] swap: Simplify shmem_unuse() usage [optional]
Date: Fri, 02 Mar 2007 15:54:44 +0000 [thread overview]
Message-ID: <1172850884.11149.124.camel@localhost.localdomain> (raw)
Simplify shmem_unuse_inode() removing a confusing optimisation which
requires the caller to call swap_duplicate if the shmem_unuse() call
doesn't succeed.
Based on a patch by Nick Piggin and some of my own changes as discussed
on LKML.
Signed-off-by: Richard Purdie <rpurdie@openedhand.com>
---
mm/shmem.c | 12 +++++-------
mm/swapfile.c | 23 ++---------------------
2 files changed, 7 insertions(+), 28 deletions(-)
Index: linux/mm/shmem.c
===================================================================
--- linux.orig/mm/shmem.c 2007-02-28 18:12:34.000000000 +0000
+++ linux/mm/shmem.c 2007-02-28 18:12:46.000000000 +0000
@@ -734,7 +734,7 @@ static int shmem_unuse_inode(struct shme
struct page **dir;
struct page *subdir;
swp_entry_t *ptr;
- int offset;
+ int offset, moved;
idx = 0;
ptr = info->i_direct;
@@ -792,17 +792,15 @@ lost2:
found:
idx += offset;
inode = &info->vfs_inode;
- if (move_from_swap_cache(page, idx, inode->i_mapping) == 0) {
+ moved = (move_from_swap_cache(page, idx, inode->i_mapping) == 0);
+ if (moved) {
info->flags |= SHMEM_PAGEIN;
shmem_swp_set(info, ptr + offset, 0);
}
shmem_swp_unmap(ptr);
spin_unlock(&info->lock);
- /*
- * Decrement swap count even when the entry is left behind:
- * try_to_unuse will skip over mms, then reincrement count.
- */
- swap_free(entry, page);
+ if (moved)
+ swap_free(entry, page);
return 1;
}
Index: linux/mm/swapfile.c
===================================================================
--- linux.orig/mm/swapfile.c 2007-02-28 18:12:41.000000000 +0000
+++ linux/mm/swapfile.c 2007-02-28 18:13:04.000000000 +0000
@@ -689,15 +689,6 @@ void try_to_unuse_page_entry(struct page
if (!shmem_unuse(entry, page)) {
try_to_unuse_anon(entry, page);
delete_from_swap_cache(page);
- } else if (PageSwapCache(page)) {
- /*
- * shmem_unuse deleted a swappage from the swap cache, but the
- * move to filepage failed so it left swappage in cache and
- * lowered its swap count to pass quickly through the loops in
- * try_to_unuse(). We must reincrement the count to try again
- * later (ick).
- */
- swap_duplicate(entry);
}
}
@@ -922,12 +913,6 @@ static int try_to_unuse(unsigned int typ
* read from disk into another page. Splitting into two
* pages would be incorrect if swap supported "shared
* private" pages, but they are handled by tmpfs files.
- *
- * Note shmem_unuse already deleted a swappage from
- * the swap cache, unless the move to filepage failed:
- * in which case it left swappage in cache, lowered its
- * swap count to pass quickly through the loops above,
- * and now we must reincrement count to try again later.
*/
if ((*swap_map > 1) && PageDirty(page) && PageSwapCache(page)) {
struct writeback_control wbc = {
@@ -938,12 +923,8 @@ static int try_to_unuse(unsigned int typ
lock_page(page);
wait_on_page_writeback(page);
}
- if (PageSwapCache(page)) {
- if (shmem)
- swap_duplicate(entry);
- else
- delete_from_swap_cache(page);
- }
+ if (PageSwapCache(page) && !shmem)
+ delete_from_swap_cache(page);
/*
* So we could skip searching mms once swap count went
next reply other threads:[~2007-03-02 15:55 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2007-03-02 15:54 Richard Purdie [this message]
2007-03-02 16:44 ` [PATCH 4/9] swap: Simplify shmem_unuse() usage [optional] Hugh Dickins
2007-03-02 16:54 ` Richard Purdie
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=1172850884.11149.124.camel@localhost.localdomain \
--to=rpurdie@openedhand.com \
--cc=dwmw2@infradead.org \
--cc=hugh@veritas.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mtd@lists.infradead.org \
--cc=nickpiggin@yahoo.com.au \
/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