summaryrefslogtreecommitdiffstats
path: root/sys/nfsclient
diff options
context:
space:
mode:
authorjhb <jhb@FreeBSD.org>2012-02-24 17:26:06 +0000
committerjhb <jhb@FreeBSD.org>2012-02-24 17:26:06 +0000
commit8b6ec01ddad8970bc96a6b80590e85ae16c72c93 (patch)
tree9ebf9cc9ae508d309d6bf9e48d321d25c1ca65b3 /sys/nfsclient
parent88597370a039bd929fdd5cd0f49af9964e9fa90c (diff)
downloadFreeBSD-src-8b6ec01ddad8970bc96a6b80590e85ae16c72c93.zip
FreeBSD-src-8b6ec01ddad8970bc96a6b80590e85ae16c72c93.tar.gz
Adjust the nfs_skip_wcc_data_onerr setting so that it does not block
post-op attributes for ENOENT errors now that the name caching logic depends on working post-op attributes. MFC after: 2 weeks
Diffstat (limited to 'sys/nfsclient')
-rw-r--r--sys/nfsclient/nfs_krpc.c12
1 files changed, 7 insertions, 5 deletions
diff --git a/sys/nfsclient/nfs_krpc.c b/sys/nfsclient/nfs_krpc.c
index 0389d29..6dfd46d 100644
--- a/sys/nfsclient/nfs_krpc.c
+++ b/sys/nfsclient/nfs_krpc.c
@@ -603,13 +603,15 @@ tryagain:
if (error == ESTALE)
nfs_purgecache(vp);
/*
- * Skip wcc data on NFS errors for now. NetApp filers
- * return corrupt postop attrs in the wcc data for NFS
- * err EROFS. Not sure if they could return corrupt
- * postop attrs for others errors.
+ * Skip wcc data on non-ENOENT NFS errors for now.
+ * NetApp filers return corrupt postop attrs in the
+ * wcc data for NFS err EROFS. Not sure if they could
+ * return corrupt postop attrs for others errors.
+ * Blocking ENOENT post-op attributes breaks negative
+ * name caching, so always allow it through.
*/
if ((nmp->nm_flag & NFSMNT_NFSV3) &&
- !nfs_skip_wcc_data_onerr) {
+ (!nfs_skip_wcc_data_onerr || error == ENOENT)) {
*mrp = mrep;
*mdp = md;
*dposp = dpos;
OpenPOWER on IntegriCloud