Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 18 Apr 2011 11:01:16 +0300
From:      Kostik Belousov <kostikbel@gmail.com>
To:        Rick Macklem <rmacklem@freebsd.org>
Cc:        svn-src-head@freebsd.org, svn-src-all@freebsd.org, src-committers@freebsd.org
Subject:   Re: svn commit: r220761 - head/sys/fs/nfsclient
Message-ID:  <20110418080116.GW48734@deviant.kiev.zoral.com.ua>
In-Reply-To: <201104172304.p3HN44mq052335@svn.freebsd.org>
References:  <201104172304.p3HN44mq052335@svn.freebsd.org>

next in thread | previous in thread | raw e-mail | index | archive | help

--szdyR02yM8NCQUEm
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
Content-Transfer-Encoding: quoted-printable

On Sun, Apr 17, 2011 at 11:04:04PM +0000, Rick Macklem wrote:
> Author: rmacklem
> Date: Sun Apr 17 23:04:03 2011
> New Revision: 220761
> URL: http://svn.freebsd.org/changeset/base/220761
>=20
> Log:
>   Add checks for MNTK_UNMOUNTF at the beginning of three
>   functions, so that threads don't get stuck in them during
>   a forced dismount. nfs_sync/VFS_SYNC() needs this, since it is
>   called by dounmount() before VFS_UNMOUNT(). The nfscl_nget()
>   case makes sure that a thread doing an VOP_OPEN() or
>   VOP_ADVLOCK() call doesn't get blocked before attempting
>   the RPC. Attempting RPCs don't block, since they all
>   fail once a forced dismount is in progress.
>   The third one at the beginning of nfsrpc_close()
>   is done so threads don't get blocked while doing VOP_INACTIVE()
>   as the vnodes are cleared out.
>   With these three changes plus a change to the umount(1)
>   command so that it doesn't do "sync()" for the forced case
>   seem to make forced dismounts work for the experimental NFS
>   client.
>  =20
>   MFC after:	2 weeks
>=20
> Modified:
>   head/sys/fs/nfsclient/nfs_clrpcops.c
>   head/sys/fs/nfsclient/nfs_clstate.c
>   head/sys/fs/nfsclient/nfs_clvfsops.c
>=20
> Modified: head/sys/fs/nfsclient/nfs_clrpcops.c
> =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D
> --- head/sys/fs/nfsclient/nfs_clrpcops.c	Sun Apr 17 22:31:36 2011	(r22076=
0)
> +++ head/sys/fs/nfsclient/nfs_clrpcops.c	Sun Apr 17 23:04:03 2011	(r22076=
1)
> @@ -567,6 +567,11 @@ nfsrpc_close(vnode_t vp, int doclose, NF
> =20
>  	if (vnode_vtype(vp) !=3D VREG)
>  		return (0);
> +
> +	/* For forced unmounts, just return. */
> +	if ((vp->v_mount->mnt_kern_flag & MNTK_UNMOUNTF) !=3D 0)
> +		return (0);
> +
Is there anything that would prevent the MNTK_UNMOUNTF flag from being
set immediately after the test returned success ?

Usually, the tests for MNTK_UNMOUNTF are bugs. I coould see how terminating
the RPCs would be useful for forced unmounts, but do not think that
preventing entry into close would help.

>  	if (doclose)
>  		error =3D nfscl_doclose(vp, &clp, p);
>  	else
>=20

--szdyR02yM8NCQUEm
Content-Type: application/pgp-signature
Content-Disposition: inline

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.11 (FreeBSD)

iEYEARECAAYFAk2r78wACgkQC3+MBN1Mb4hKTQCg8IKS2khsSP6wDZDpptqWZhkw
2hoAn1rlDJiQyIzoLbPbArJ82JAxwg/S
=XNcI
-----END PGP SIGNATURE-----

--szdyR02yM8NCQUEm--



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