From owner-freebsd-hackers Fri Oct 11 11:14:39 2002 Delivered-To: freebsd-hackers@freebsd.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id 7B3A437B404 for ; Fri, 11 Oct 2002 11:14:38 -0700 (PDT) Received: from apollo.backplane.com (apollo.backplane.com [216.240.41.2]) by mx1.FreeBSD.org (Postfix) with ESMTP id 1807A43E9E for ; Fri, 11 Oct 2002 11:14:38 -0700 (PDT) (envelope-from dillon@apollo.backplane.com) Received: from apollo.backplane.com (localhost [127.0.0.1]) by apollo.backplane.com (8.12.5/8.12.4) with ESMTP id g9BIEbPQ040689; Fri, 11 Oct 2002 11:14:37 -0700 (PDT) (envelope-from dillon@apollo.backplane.com) Received: (from dillon@localhost) by apollo.backplane.com (8.12.5/8.12.4/Submit) id g9BIEbah040688; Fri, 11 Oct 2002 11:14:37 -0700 (PDT) (envelope-from dillon) Date: Fri, 11 Oct 2002 11:14:37 -0700 (PDT) From: Matthew Dillon Message-Id: <200210111814.g9BIEbah040688@apollo.backplane.com> To: David Schultz Cc: Peter Wemm , Sean Kelly , hackers@FreeBSD.ORG Subject: Re: swapoff? References: <20020713071911.GA1558@HAL9000.wox.org> <20020713073404.9869A3811@overcee.wemm.org> <20020713115746.GA2162@HAL9000.wox.org> <200207131636.g6DGaoqh081285@apollo.backplane.com> <20021007153845.GA371@HAL9000.homeunix.com> <200210072347.g97Nl3Zo049415@apollo.backplane.com> <20021008113614.GA319@HAL9000.homeunix.com> <200210081745.g98Hjkam078883@apollo.backplane.com> <20021011130154.GA16549@HAL9000.homeunix.com> Sender: owner-freebsd-hackers@FreeBSD.ORG Precedence: bulk List-ID: List-Archive: (Web Archive) List-Help: (List Instructions) List-Subscribe: List-Unsubscribe: X-Loop: FreeBSD.ORG : :Thanks, your solution looks pretty good. I guess as part of the :try_to_page_it_all_in, I'll want to call swap_pager_unswapped() on :each page. Now I really wish I had noticed swap_pager_unswapped() :earlier; it would have made my job much easier! As long as you properly check and dirty the page you can get rid of the backing swap. :I'm worried that vm_proc_swapin_all() has a similar race with the :swapout daemon. Presently I assume that my references to the :UPAGES object and the associated pages remain valid after the :faultin(), and that I can use swap_pager_freeswapspace() to free :the correct metadata, instead of calling swap_pager_unswapped() on :each page. Should just hold the process lock until the metadata :are freed? Hmm. Well, the proc lock is not held during vm_proc_swapin() (but the PS_SWAPPINGIN flag is set). The proc lock is held during vm_proc_swapout(). In your vm_proc_swapin_all() you seem to be doing the right thing in regards to the mutexes and retry, and you have already marked the device is SW_CLOSING so if something does get in there and try to swap the process back in it shouldn't allocate swap you are trying to free. I think you may be ok. -Matt Matthew Dillon To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-hackers" in the body of the message