From nobody@FreeBSD.ORG  Sat Jan 22 08:39:27 2000
Return-Path: <nobody@FreeBSD.ORG>
Received: by hub.freebsd.org (Postfix, from userid 32767)
	id 163A614E1D; Sat, 22 Jan 2000 08:39:27 -0800 (PST)
Message-Id: <20000122163927.163A614E1D@hub.freebsd.org>
Date: Sat, 22 Jan 2000 08:39:27 -0800 (PST)
From: peter.edwards@ireland.com
Sender: nobody@FreeBSD.ORG
To: freebsd-gnats-submit@FreeBSD.org
Subject: nfs.ko can be unloaded when nfsd is running, leading to a panic later
X-Send-Pr-Version: www-1.0

>Number:         16299
>Category:       kern
>Synopsis:       [nfs] nfs.ko can be unloaded when nfsd is running, leading to a panic later
>Confidential:   no
>Severity:       serious
>Priority:       low
>Responsible:    peadar
>State:          closed
>Quarter:        
>Keywords:       
>Date-Required:  
>Class:          sw-bug
>Submitter-Id:   current-users
>Arrival-Date:   Sat Jan 22 08:40:01 PST 2000
>Closed-Date:    Sat Aug 27 12:05:03 GMT 2005
>Last-Modified:  Sat Aug 27 12:05:03 GMT 2005
>Originator:     Peter Edwards
>Release:        -current (~Jan 18 2000)
>Organization:
>Environment:
FreeBSD 4.0-CURRENT #0: Wed Jan 19 19:12:52 GMT 2000
>Description:
You can unload the nfs module while nfsd is running
When nfsd dies later, you will probably end up panicing.	
>How-To-Repeat:
# kldunload nfs
# ps ax | awk '/nfsd/ { print $1 }' | xargs kill -9
>Fix:
Patches: (sorry for cut-n-paste whitespace, but I've no MX available to
send a proper mail. Anyway, the change is pretty small..)

*** nfs_syscalls.c.old  Sat Jan 22 16:15:02 2000
--- nfs_syscalls.c      Sat Jan 22 16:24:36 2000
***************
*** 103,108 ****
--- 103,109 ----
  
  #ifndef NFS_NOSERVER
  int nfsd_waiting = 0;
+ int nfs_server_daemons; /* number of active nfsd processes. */
  static struct nfsdrt nfsdrt;
  static int nfs_numnfsd = 0;
  static int notstarted = 1;
***************
*** 303,309 ****
--- 304,312 ----
                }
                if ((uap->flag & NFSSVC_AUTHINFAIL) && (nfsd = nsd->nsd_nfsd))
                        nfsd->nfsd_flag |= NFSD_AUTHFAIL;
+               nfs_server_daemons++;
                error = nfssvc_nfsd(nsd, uap->argp, p);
+               nfs_server_daemons--;
        }
  #endif /* NFS_NOSERVER */
        if (error == EINTR || error == ERESTART)



*** nfs_subs.c.old      Sat Jan 22 16:15:02 2000
--- nfs_subs.c  Sat Jan 22 16:26:17 2000
***************
*** 150,155 ****
--- 150,157 ----
        NFSPROC_NOOP
  };
  
+ extern int nfs_server_daemons;
+ 
  #endif /* NFS_NOSERVER */
  /*
   * and the reverse mapping from generic to Version 2 procedure numbers
***************
*** 1183,1188 ****
--- 1185,1192 ----
        untimeout(nfs_timer, (void *)NULL, nfs_timer_handle);
        nfs_mount_type = -1;
  #ifndef NFS_NOSERVER
+       if (nfs_server_daemons)
+           return EBUSY;
        default_vnodeop_p[VOFFSET(vop_lease)] = nfs_prev_vop_lease_check;
  #endif
        lease_updatetime = nfs_prev_lease_updatetime;





>Release-Note:
>Audit-Trail:
State-Changed-From-To: open->feedback 
State-Changed-By: mike 
State-Changed-When: Sat Jul 21 12:03:08 PDT 2001 
State-Changed-Why:  

Does this problem still occur in newer versions of FreeBSD, 
such as 4.3-RELEASE? 

http://www.FreeBSD.org/cgi/query-pr.cgi?pr=16299 
State-Changed-From-To: feedback->analyzed 
State-Changed-By: mike 
State-Changed-When: Sat Jul 21 12:56:21 PDT 2001 
State-Changed-Why:  

This is still a problem. 


Responsible-Changed-From-To: freebsd-bugs->tmm 
Responsible-Changed-By: mike 
Responsible-Changed-When: Sat Jul 21 12:56:21 PDT 2001 
Responsible-Changed-Why:  

tmm volunteered to fix this one. 

http://www.FreeBSD.org/cgi/query-pr.cgi?pr=16299 
Responsible-Changed-From-To: tmm->peadar 
Responsible-Changed-By: peadar 
Responsible-Changed-When: Sat Apr 3 08:41:15 PST 2004 
Responsible-Changed-Why:  
Talked to thomas, and he's happy to give me back my old PR :-) 


http://www.freebsd.org/cgi/query-pr.cgi?pr=16299 
State-Changed-From-To: analyzed->patched 
State-Changed-By: peadar 
State-Changed-When: Sun Apr 11 06:35:26 PDT 2004 
State-Changed-Why:  
Patch committed to -current 

http://www.freebsd.org/cgi/query-pr.cgi?pr=16299 

From: Matteo Riondato <matteo@freebsd.org>
To: bug-followup@FreeBSD.org, peter.edwards@ireland.com, peadar@freebsd.org
Cc:  
Subject: Re: kern/16299: [nfs] nfs.ko can be unloaded when nfsd is running, leading to a panic later
Date: Sat, 6 Aug 2005 15:10:45 +0200

 Can this be closed?
 Best Regards
 -- 
 Matteo Riondato
 FreeBSD Volunteer (http://freebsd.org)
 G.U.F.I. Staff Member (http://www.gufi.org)
 FreeSBIE Developer (http://www.freesbie.org)
State-Changed-From-To: patched->closed 
State-Changed-By: matteo 
State-Changed-When: Sat Aug 27 12:04:38 GMT 2005 
State-Changed-Why:  
This is fixed in RELENG_5 and in RELENG_6, so close this PR 

http://www.freebsd.org/cgi/query-pr.cgi?pr=16299 
>Unformatted:
