svn commit: r220761 - head/sys/fs/nfsclient
Kostik Belousov
kostikbel at gmail.com
Mon Apr 18 08:01:26 UTC 2011
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
>
> 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.
>
> MFC after: 2 weeks
>
> Modified:
> head/sys/fs/nfsclient/nfs_clrpcops.c
> head/sys/fs/nfsclient/nfs_clstate.c
> head/sys/fs/nfsclient/nfs_clvfsops.c
>
> Modified: head/sys/fs/nfsclient/nfs_clrpcops.c
> ==============================================================================
> --- head/sys/fs/nfsclient/nfs_clrpcops.c Sun Apr 17 22:31:36 2011 (r220760)
> +++ head/sys/fs/nfsclient/nfs_clrpcops.c Sun Apr 17 23:04:03 2011 (r220761)
> @@ -567,6 +567,11 @@ nfsrpc_close(vnode_t vp, int doclose, NF
>
> if (vnode_vtype(vp) != VREG)
> return (0);
> +
> + /* For forced unmounts, just return. */
> + if ((vp->v_mount->mnt_kern_flag & MNTK_UNMOUNTF) != 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 = nfscl_doclose(vp, &clp, p);
> else
>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 196 bytes
Desc: not available
Url : http://lists.freebsd.org/pipermail/svn-src-all/attachments/20110418/453782a3/attachment.pgp
More information about the svn-src-all
mailing list