Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 10 Mar 1999 23:50:01 -0800 (PST)
From:      Matthew Dillon <dillon@apollo.backplane.com>
To:        freebsd-bugs@FreeBSD.org
Subject:   Re: kern/10528: MFS fails to die when system shut down
Message-ID:  <199903110750.XAA38489@freefall.freebsd.org>

next in thread | raw e-mail | index | archive | help
The following reply was made to PR kern/10528; it has been noted by GNATS.

From: Matthew Dillon <dillon@apollo.backplane.com>
To: Cy Schubert - ITSD Open Systems Group <Cy.Schubert@uumail.gov.bc.ca>
Cc: freebsd-gnats-submit@FreeBSD.ORG, cschuber@uumail.gov.bc.ca
Subject: Re: kern/10528: MFS fails to die when system shut down
Date: Wed, 10 Mar 1999 23:40:50 -0800 (PST)

 :Matthew, I've been trying to solve a "syncing filesystems... giving up" 
 :problem under 3.1.  My first cut was effective under some 
 :circumstances, e.g. copying files to MFS but if MFS was used for /tmp 
 :and X was in use at the time of the shutdown, my patch would still 
 :fail.  I've devised a better patch as follows.  What do you think?
 :
 :What I've done is change the P_SYSTEM flag to a P_NOSWAP.  What I don't 
 :understand is the comment about the swapper continuously trying to kill 
 :MFS.  I can see why you don't want it to swap out, because of potential 
 :...
 
     The problem is that if the system runs out of swap space and memory,
     it will attempt to kill the 'largest' process.  This from
     vm/vm_pageout.c:
 
 	...
         /*
          * make sure that we have swap space -- if we are low on memory and
          * swap -- then kill the biggest process.
          */
         if ((vm_swap_size == 0 || swap_pager_full) &&
             ((cnt.v_free_count + cnt.v_cache_count) < cnt.v_free_min)) {
                 bigproc = NULL;
                 bigsize = 0;
                 for (p = allproc.lh_first; p != 0; p = p->p_list.le_next) {
                         /*
                          * if this is a system process, skip it
                          */
                         if ((p->p_flag & P_SYSTEM) || (p->p_pid == 1) ||
                             ((p->p_pid < 48) && (vm_swap_size != 0))) {
                                 continue;
                         }
 
 			...
 
     Current setting P_NOSWAP will not prevent the system from trying to
     kill the process.  Perhaps, though, it would be safe to add P_NOSWAP
     in and not have the system try to swap out a P_NOSWAP process either,
     which with your patch would solve both problems.
 
     P_NOSWAP appears to only be set normally when the system is in the
     midst of a fork.  I think it would be safe to modify pageout.c from
 
 	if ((p->p_flag & P_SYSTEM) || (p->p_pid == 1) || ...
 
     to
 
 	if ((p->p_flag & (P_NOSWAP|P_SYSTEM)) || (p->p_pid == 1) || ...
 
     *PLUS* your patch.  I will submit your patch, plus my modification
     above, to core.
 
 					-Matt
 					Matthew Dillon 
 					<dillon@backplane.com>
 
 :deadlock.  It solves a "syncing filesystems" problem during shutdown.  
 :I tested during a shutdown while a file is currently being written 
 :to /tmp.  Previously the system would panic: vinvalbuf: dirty bufs.  
 :With the patch below it doesn't do that any more.  Does my patch 
 :introduce another problem?
 :
 :I'd appreciate some guidance.
 :
 :--- src/sys/ufs/mfs/mfs_vfsops.c.orig	Thu Dec 31 20:14:11 1998
 :+++ src/sys/ufs/mfs/mfs_vfsops.c	Wed Mar 10 21:08:13 1999
 :@@ -399,7 +399,8 @@
 : 	 * can we swap out this process - not unless you want a deadlock,
 : 	 * anyway.
 : 	 */
 :-	curproc->p_flag |= P_SYSTEM;
 :+	/* curproc->p_flag |= P_SYSTEM; */
 :+	curproc->p_flag |= P_NOSWAP;
 : 
 : 	while (mfsp->mfs_active) {
 : 		while (bp = bufq_first(&mfsp->buf_queue)) {
 :
 :Regards,                       Phone:  (250)387-8437
 :Cy Schubert                      Fax:  (250)387-5766
 :Open Systems Group          Internet:  Cy.Schubert@uumail.gov.bc.ca
 :ITSD                                   Cy.Schubert@gems8.gov.bc.ca
 :Province of BC            
 :
 
 


To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-bugs" in the body of the message




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?199903110750.XAA38489>