On Wed, Apr 20, 2011 at 11:25:18PM +0000, Rick Macklem wrote:
> Author: rmacklem
> Date: Wed Apr 20 23:25:18 2011
> New Revision: 220906
> URL: http://svn.freebsd.org/changeset/base/220906
> 
> Log:
>   Add a check for VI_DOOMED at the beginning of nfscl_request()
>   so that it won't try and use vp->v_mount to do an RPC during
>   a forced dismount. There needs to be at least one more kernel
>   commit, plus a change to the umount(8) command before forced
>   dismounts will work for the experimental NFS client.
>   
>   MFC after:  2 weeks
> 
> Modified:
>   head/sys/fs/nfsclient/nfs_clport.c
> 
> Modified: head/sys/fs/nfsclient/nfs_clport.c
> ==============================================================================
> --- head/sys/fs/nfsclient/nfs_clport.c        Wed Apr 20 23:20:00 2011        
> (r220905)
> +++ head/sys/fs/nfsclient/nfs_clport.c        Wed Apr 20 23:25:18 2011        
> (r220906)
> @@ -819,6 +819,8 @@ nfscl_request(struct nfsrv_descript *nd,
>       int ret, vers;
>       struct nfsmount *nmp;
>  
> +     if ((vp->v_iflag & VI_DOOMED) != 0)
> +             return (EPERM);
>       nmp = VFSTONFS(vp->v_mount);
>       if (nd->nd_flag & ND_NFSV4)
>               vers = NFS_VER4;

Is vnode lock held at this point ? If yes, I suggest to add
ASSERT_VOP_{E,}LOCKED() assertion both to enforce the invariant, and
to document the state to readers of the code.

Attachment: pgpwY9tcvdpgb.pgp
Description: PGP signature

Reply via email to