From: kanoj@google.engr.sgi.com (Kanoj Sarcar)
To: Andrea Arcangeli <andrea@suse.de>
Cc: torvalds@transmeta.com, sct@redhat.com, linux-mm@kvack.org
Subject: Re: filecache/swapcache questions [RFC] [RFT] [PATCH] kanoj-mm12-2.3.8
Date: Mon, 28 Jun 1999 10:11:52 -0700 (PDT) [thread overview]
Message-ID: <199906281711.KAA87788@google.engr.sgi.com> (raw)
In-Reply-To: <Pine.LNX.4.10.9906281227550.364-100000@laser.random> from "Andrea Arcangeli" at Jun 28, 99 12:35:24 pm
> Here it is the alternate fix:
>
> Index: mm/swap_state.c
> ===================================================================
> RCS file: /var/cvs/linux/mm/swap_state.c,v
> retrieving revision 1.1.1.3
> diff -u -r1.1.1.3 swap_state.c
> --- mm/swap_state.c 1999/06/14 15:30:09 1.1.1.3
> +++ mm/swap_state.c 1999/06/28 10:15:15
> @@ -125,7 +125,7 @@
> "swap_duplicate: entry %08lx, offset exceeds max\n", entry);
> goto out;
> bad_unused:
> - printk(KERN_ERR
> + printk(KERN_WARNING
> "swap_duplicate at %8p: entry %08lx, unused page\n",
> __builtin_return_address(0), entry);
> goto out;
> @@ -291,20 +291,15 @@
> entry, wait ? ", wait" : "");
> #endif
> /*
> - * Make sure the swap entry is still in use.
> - */
> - if (!swap_duplicate(entry)) /* Account for the swap cache */
> - goto out;
> - /*
> * Look for the page in the swap cache.
> */
> found_page = lookup_swap_cache(entry);
> if (found_page)
> - goto out_free_swap;
> + goto out;
>
> new_page_addr = __get_free_page(GFP_USER);
> if (!new_page_addr)
> - goto out_free_swap; /* Out of memory */
> + goto out; /* Out of memory */
> new_page = mem_map + MAP_NR(new_page_addr);
>
> /*
> @@ -313,6 +308,11 @@
> found_page = lookup_swap_cache(entry);
> if (found_page)
> goto out_free_page;
> + /*
> + * Make sure the swap entry is still in use.
> + */
> + if (!swap_duplicate(entry)) /* Account for the swap cache */
> + goto out_free_page;
> /*
> * Add it to the swap cache and read its contents.
> */
> @@ -330,8 +330,6 @@
>
> out_free_page:
> __free_page(new_page);
> -out_free_swap:
> - swap_free(entry);
> out:
> return found_page;
> }
>
>
>
> NOTE: this will cause swap_duplicate to generate some warning message but
Or not, depending on whether the swap id has already been allocated
to a newly added swap device. In which case, the worst we will do is
read-ahead in some unneeded swap pages. Not too bad ... I thought
about this solution, and figured that a better idea is probably to
give up on read-ahead in swapin_readahead() if the faulting pte
had already been swapped in.
Anyway, it seems to prevent fork/exit races, grabbing mmap_sem is
needed in the swapoff path. Best to use that synchronization, since
the fault path also grabs mmap_sem.
Thanks.
Kanoj
> everything will work fine then, exactly because the swapin code just check
> if the pte is changed (swapped in from swapoff) before looking if
> read_swap_cache returned a NULL pointer. (also the shm.c swap-cache code
> checks if the pte is changed before to go oom).
>
> But probably the right thing to do is to grab the mm semaphore in swapoff
> as you did since we don't risk to deadlock there :).
>
> Comments?
>
> Andrea
>
> --
> To unsubscribe, send a message with 'unsubscribe linux-mm' in
> the body to majordomo@kvack.org. For more info on Linux MM,
> see: http://humbolt.geo.uu.nl/Linux-MM/
>
--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org. For more info on Linux MM,
see: http://humbolt.geo.uu.nl/Linux-MM/
next prev parent reply other threads:[~1999-06-28 17:11 UTC|newest]
Thread overview: 60+ messages / expand[flat|nested] mbox.gz Atom feed top
1999-06-21 5:29 filecache/swapcache questions Kanoj Sarcar
1999-06-21 11:25 ` Stephen C. Tweedie
1999-06-21 16:46 ` Kanoj Sarcar
1999-06-21 16:57 ` Stephen C. Tweedie
1999-06-21 17:36 ` Kanoj Sarcar
1999-06-21 17:49 ` Stephen C. Tweedie
1999-06-21 18:46 ` Kanoj Sarcar
1999-06-21 23:44 ` Kanoj Sarcar
1999-06-24 22:23 ` Andrea Arcangeli
1999-06-24 23:55 ` Kanoj Sarcar
1999-06-25 0:26 ` Andrea Arcangeli
1999-06-28 1:48 ` filecache/swapcache questions [RFC] [RFT] [PATCH] kanoj-mm12-2.3.8 Fix swapoff races Kanoj Sarcar
1999-06-28 10:35 ` Andrea Arcangeli
1999-06-28 17:11 ` Kanoj Sarcar [this message]
1999-06-28 16:32 ` Stephen C. Tweedie
1999-06-28 17:25 ` Kanoj Sarcar
1999-06-28 20:40 ` Stephen C. Tweedie
1999-06-28 21:11 ` Kanoj Sarcar
1999-06-28 22:12 ` Stephen C. Tweedie
1999-06-28 23:43 ` Kanoj Sarcar
1999-06-29 11:44 ` Stephen C. Tweedie
1999-06-29 22:01 ` Kanoj Sarcar
1999-06-30 17:28 ` Stephen C. Tweedie
1999-06-30 18:05 ` Kanoj Sarcar
1999-06-28 19:39 ` Chuck Lever
1999-06-28 19:55 ` filecache/swapcache questions [RFC] [RFT] [PATCH] kanoj-mm12-2.3.8 Kanoj Sarcar
1999-06-28 20:33 ` Chuck Lever
1999-06-28 20:51 ` Kanoj Sarcar
1999-06-28 21:32 ` Chuck Lever
1999-06-28 21:38 ` Kanoj Sarcar
1999-06-28 21:50 ` Chuck Lever
1999-06-28 22:15 ` Kanoj Sarcar
1999-06-29 11:23 ` Stephen C. Tweedie
1999-06-29 17:36 ` Kanoj Sarcar
1999-06-28 22:22 ` Stephen C. Tweedie
1999-06-28 22:21 ` Stephen C. Tweedie
1999-06-28 22:57 ` Andrea Arcangeli
1999-06-29 2:13 ` Chuck Lever
1999-06-29 12:01 ` Stephen C. Tweedie
1999-06-29 12:32 ` Andrea Arcangeli
1999-06-30 15:59 ` Stephen C. Tweedie
1999-06-29 1:00 ` Chuck Lever
1999-06-28 22:08 ` Stephen C. Tweedie
1999-06-28 22:59 ` Andrea Arcangeli
1999-06-29 0:53 ` Chuck Lever
1999-06-29 11:14 ` Stephen C. Tweedie
1999-06-28 22:09 ` Stephen C. Tweedie
1999-06-28 20:45 ` filecache/swapcache questions [RFC] [RFT] [PATCH] kanoj-mm12-2.3.8 Fix swapoff races Stephen C. Tweedie
1999-06-28 21:14 ` Chuck Lever
1999-06-28 21:25 ` filecache/swapcache questions [RFC] [RFT] [PATCH] kanoj-mm12-2.3.8 Kanoj Sarcar
1999-06-28 22:15 ` filecache/swapcache questions [RFC] [RFT] [PATCH] kanoj-mm12-2.3.8 Fix swapoff races Stephen C. Tweedie
1999-06-28 22:48 ` Andrea Arcangeli
1999-06-29 1:29 ` Chuck Lever
1999-06-29 11:58 ` Stephen C. Tweedie
1999-06-29 12:09 ` Andrea Arcangeli
1999-06-29 15:27 ` Chuck Lever
1999-06-29 11:55 ` Stephen C. Tweedie
1999-06-29 20:08 ` Andrea Arcangeli
1999-06-28 22:36 ` filecache/swapcache questions Stephen C. Tweedie
1999-06-28 23:24 ` Kanoj Sarcar
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=199906281711.KAA87788@google.engr.sgi.com \
--to=kanoj@google.engr.sgi.com \
--cc=andrea@suse.de \
--cc=linux-mm@kvack.org \
--cc=sct@redhat.com \
--cc=torvalds@transmeta.com \
/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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.