diff options
author | evanl <none@none> | 2007-01-03 06:54:36 -0800 |
---|---|---|
committer | evanl <none@none> | 2007-01-03 06:54:36 -0800 |
commit | fa864c018a8a591e2185f96815ba4d33afb14236 (patch) | |
tree | 6ffe3345776fac57d1b93537daeb5424ef57d430 /usr/src | |
parent | 7ef01d19733736b76dbf3fcffc88ee683858206a (diff) | |
download | illumos-joyent-fa864c018a8a591e2185f96815ba4d33afb14236.tar.gz |
6395357 nfsv4 client paniced at nfs:nfs4_waitfor_purge_complete
Diffstat (limited to 'usr/src')
-rw-r--r-- | usr/src/uts/common/fs/nfs/nfs4_vnops.c | 13 |
1 files changed, 11 insertions, 2 deletions
diff --git a/usr/src/uts/common/fs/nfs/nfs4_vnops.c b/usr/src/uts/common/fs/nfs/nfs4_vnops.c index 7c044d6d76..ba1155d523 100644 --- a/usr/src/uts/common/fs/nfs/nfs4_vnops.c +++ b/usr/src/uts/common/fs/nfs/nfs4_vnops.c @@ -19,7 +19,7 @@ * CDDL HEADER END */ /* - * Copyright 2006 Sun Microsystems, Inc. All rights reserved. + * Copyright 2007 Sun Microsystems, Inc. All rights reserved. * Use is subject to license terms. */ @@ -1528,6 +1528,14 @@ recov_retry: " remove file", e.error)); VN_RELE(vp); (void) nfs4_remove(dvp, file_name, cr); + /* + * Since we've reled the vnode and removed + * the file we now need to return the error. + * At this point we don't want to update the + * dircaches, call nfs4_waitfor_purge_complete + * or set vpp to vp so we need to skip these + * as well. + */ goto skip_update_dircaches; } } @@ -1558,7 +1566,6 @@ recov_retry: nfs4_update_dircaches(&op_res->cinfo, dvp, vp, file_name, dinfop); } -skip_update_dircaches: /* * If the page cache for this file was flushed from actions @@ -1580,6 +1587,8 @@ skip_update_dircaches: */ *vpp = vp; +skip_update_dircaches: + nfs4args_copen_free(open_args); if (setgid_flag) { nfs4args_verify_free(&argop[8]); |