]> git.michaelhowe.org Git - packages/o/openafs.git/commitdiff
afs: Stop abusing ENOENT
authorAndrew Deason <adeason@sinenomine.net>
Sat, 14 Feb 2015 00:08:25 +0000 (18:08 -0600)
committerBenjamin Kaduk <kaduk@mit.edu>
Sat, 22 Aug 2015 04:51:28 +0000 (00:51 -0400)
When looking up a file, the ENOENT error code is supposed to be used
if we know that the target filename does not exist. That is, the
situation is a user or application error; they specified a filename
that was not previously created.

Currently, though, we use ENOENT for a variety of different
situations, such as:

 - After successfully looking up a directory entry, we fail to
   afs_GetDCache or afs_GetVCache on the FID for that entry.

 - We encounter an invalid mount point, in certain code paths.

In each of these situations, an ENOENT error code is incorrect, since
the target filename does indeed exist and these situations may be
caused by network or administrative errors. An ENOENT error implies
that the user may be able to then create the target filename, which is
not true most of the time in the above situations.

In addition, on LINUX we return a negative dcache entry when we
encounter an ENOENT error on lookup. This means that if any of the
above scenarios occur, Linux would cache the fact that that directory
entry did not exist, and return ENOENT for future lookups. This was
worked around in one of the changes in commit
652f3bd9cb7a5d7833a760ba50ef7c2c67214bba to always invalidate such
negative dentries, but at the cost of performance (since this caused
negative lookups to never be cached).

To avoid all of these issues, just don't use ENOENT in these
situations. For simple non-disconnected afs_GetDCache or afs_GetVCache
errors, return EIO, since we have encountered an error that is
internal to AFS (either the underlying data is inconsistent, or we
have a network error, or something else). In disconnected operation,
return ENETDOWN like in other disconnected code paths, since often the
root cause is due to us not having network access. When a bad
mountpoint is encountered, return ENODEV, since that is what we use
elsewhere in the code when encountering a bad mountpoint.

It is also noteworthy that this changes removes the translation of
VNOVNODE into ENOENT, since a nonexistent vnode is not the same as a
nonexistent filename, as described above. Some code paths have special
behavior for this situation (ignoring the error in some cases where it
does not matter). These code paths should be okay with this change,
since all of them examine error codes that have not been translated
through afs_CheckCode.

Some useless references to ENOENT were also removed in
src/afs/LINUX*/osi_misc.c. These did not result in incorrect behavior,
but removing them makes searching for bad ENOENT references easier.

Change-Id: Ib01e4309e44b532f843d53c8de2eae613e397bf6
Reviewed-on: http://gerrit.openafs.org/11788
Tested-by: BuildBot <buildbot@rampaginggeek.com>
Reviewed-by: Benjamin Kaduk <kaduk@mit.edu>
26 files changed:
src/afs/AIX/osi_vfsops.c
src/afs/DARWIN/osi_vfsops.c
src/afs/FBSD/osi_vfsops.c
src/afs/HPUX/osi_vfsops.c
src/afs/IRIX/osi_vfsops.c
src/afs/IRIX/osi_vnodeops.c
src/afs/LINUX/osi_misc.c
src/afs/LINUX/osi_vfsops.c
src/afs/LINUX/osi_vnodeops.c
src/afs/NBSD/osi_vfsops.c
src/afs/OBSD/osi_vfsops.c
src/afs/SOLARIS/osi_vfsops.c
src/afs/SOLARIS/osi_vnodeops.c
src/afs/UKERNEL/osi_vfsops.c
src/afs/VNOPS/afs_vnop_create.c
src/afs/VNOPS/afs_vnop_dirops.c
src/afs/VNOPS/afs_vnop_lookup.c
src/afs/VNOPS/afs_vnop_readdir.c
src/afs/VNOPS/afs_vnop_remove.c
src/afs/VNOPS/afs_vnop_rename.c
src/afs/VNOPS/afs_vnop_symlink.c
src/afs/VNOPS/afs_vnop_write.c
src/afs/afs_disconnected.c
src/afs/afs_error.c
src/afs/afs_pioctl.c
src/afs/afs_vcache.c

index 32fbbf5c8a0f702b3963990f084d5b81661555ba..526594442912ca45fec7525931c3665a89e7a8ff 100644 (file)
@@ -130,7 +130,7 @@ afs_root_nolock(struct vfs *afsp, struct vnode **avpp)
            if (tvp) {
                afs_globalVp = tvp;
            } else
-               code = ENOENT;
+               code = EIO;
        }
        crfree(credp);
     }
index 22cfeba3d31e433ed525475c3940a7417bf92e40..064410decb5297c31ddc464ac1780bc3c50126ba 100644 (file)
@@ -281,7 +281,7 @@ again:
                     needref=1;
                 }
            } else
-               error = ENOENT;
+               error = EIO;
        }
     }
     if (tvp) {
index 5b3f33b78e02be8b52f150d3b5ac8570aa8f0968..8ca88c3b0065148186d56aa8743f0fc57fa8d0f6 100644 (file)
@@ -292,7 +292,7 @@ tryagain:
                    }
                }
            } else
-               error = ENOENT;
+               error = EIO;
        }
     }
     if (tvp) {
index ca5de57fd54dcec728761baad8b638c11fa3f9c1..ee3741c62ed011b34d11a1472dce0714b74091e5 100644 (file)
@@ -133,7 +133,7 @@ afs_root(struct vfs *afsp, struct vnode **avpp, char *unused1)
            if (tvp) {
                afs_globalVp = tvp;
            } else
-               code = ENOENT;
+               code = EIO;
        }
     }
     if (tvp) {
index bc129d62dd7d6a18a396821ea98b88f8aca8abab..a7e838745a44d6a482d3415c018e133678ba0df9 100644 (file)
@@ -279,7 +279,7 @@ afs_root(OSI_VFS_ARG(afsp), avpp)
            if (tvp) {
                afs_globalVp = tvp;
            } else
-               code = ENOENT;
+               code = EIO;
        }
     }
     if (tvp) {
@@ -529,7 +529,7 @@ afs_vget(OSI_VFS_DECL(afsp), vnode_t ** avcp, struct fid * fidp)
        /* It's a checkpoint restart fid. */
        tcell = afs_GetCellByIndex(afid2->af_cell, READ_LOCK);
        if (!tcell) {
-           code = ENOENT;
+           code = EIO;
            goto out;
        }
        vfid.Cell = tcell->cellNum;
@@ -543,7 +543,7 @@ afs_vget(OSI_VFS_DECL(afsp), vnode_t ** avcp, struct fid * fidp)
        *avcp =
            (vnode_t *) afs_GetVCache(&vfid, &treq, NULL, (struct vcache *)0);
        if (!*avcp) {
-           code = ENOENT;
+           code = EIO;
        }
        goto out;
     }
index 4d8aa6206ceb8e3300bfcfa4cf66f3fa87ecf5dd..5efd81cc34bfc3d2a42c80175ffd4b4b30d3fa6e 100644 (file)
@@ -1152,7 +1152,7 @@ OSI_VC_DECL(avc);
            avc->mapcnt -= mapcnt;
            code = afs_StoreOnLastReference(avc, &treq);
            /* The following behavior mimics the behavior in afs_close. */
-           if (code == VNOVNODE || code == ENOENT)
+           if (code == VNOVNODE)
                code = 0;
            if (code) {
                if (mapcnt) {
index 32ee5a62042665a0943149a3219dd9fc1a47a142..627b477253c5727220703bdf5d53f7a4bfb29fd5 100644 (file)
@@ -65,7 +65,6 @@ osi_lookupname_internal(char *aname, int followlink, struct vfsmount **mnt,
     afs_linux_path_t path_data;
 #endif
     int flags = LOOKUP_POSITIVE;
-    code = ENOENT;
 
     if (followlink)
        flags |= LOOKUP_FOLLOW;
@@ -113,7 +112,6 @@ osi_lookupname(char *aname, uio_seg_t seg, int followlink,
     int code;
     char *name;
 
-    code = ENOENT;
     if (seg == AFS_UIOUSER) {
        name = afs_getname(aname);
        if (IS_ERR(name))
@@ -136,7 +134,6 @@ int osi_abspath(char *aname, char *buf, int buflen,
     char *name, *path;
     int code;
 
-    code = ENOENT;
     name = afs_getname(aname);
     if (IS_ERR(name))
        return -PTR_ERR(name);
index e6e00329af014db88cd0fa0e194c028dd73ffc01..a0bcc85fa8980c565a5b9cb6cbcd4a068b49d538 100644 (file)
@@ -209,7 +209,7 @@ afs_root(struct super_block *afsp)
                    afs_DestroyAttr(vattr);
                }
            } else
-               code = ENOENT;
+               code = EIO;
        }
        crfree(credp);
        afs_DestroyReq(treq);
index 7bd9094325c24fd0f5699a25f09cdefaac977951..ae83935a211900abda32528a6f200994185f4a53 100644 (file)
@@ -339,7 +339,7 @@ afs_linux_readdir(struct file *fp, void *dirbuf, filldir_t filldir)
     tdc = afs_GetDCache(avc, (afs_size_t) 0, treq, &origOffset, &tlen, 1);
     len = tlen;
     if (!tdc) {
-       code = -ENOENT;
+       code = -EIO;
        goto out;
     }
     ObtainWriteLock(&avc->lock, 811);
@@ -403,7 +403,7 @@ afs_linux_readdir(struct file *fp, void *dirbuf, filldir_t filldir)
                UpgradeSToWLock(&avc->lock, 814);
                avc->f.states |= CCorrupt;
            }
-           code = -ENOENT;
+           code = -EIO;
            goto unlock_out;
         }
 
index 3e418471faf431944fe4cbd2ed1f57cc2f145ff3..a52629b732ed3650bb89c4e10dcbed4e8da80c03 100644 (file)
@@ -366,7 +366,7 @@ tryagain:
                }
                afs_globalVp = tvp;
            } else
-               code = ENOENT;
+               code = EIO;
        }
     }
     if (tvp) {
index aa2ccb4ff9c9463195f400b5e012c5264c317783..4377494bb90711438309eb04e3d5f9018219464c 100644 (file)
@@ -360,7 +360,7 @@ afs_root(struct mount *mp, struct vnode **vpp)
            afs_globalVFS = mp;
            *vpp = AFSTOV(tvp);
        } else
-           code = ENOENT;
+           code = EIO;
     }
     AFS_GUNLOCK();
 
index 88ab992b458bc2f6bddbfd2661756781d5512f8f..14695d2b7ebf0430314369f62722d9d81e98ad99 100644 (file)
@@ -189,7 +189,7 @@ again:
                }
                afs_globalVp = tvp;
            } else
-               code = ENOENT;
+               code = EIO;
        }
     }
     if (tvp) {
index 8e24abdfde1cf4d3fcc6eab278f26bb2186cafb8..d19bcf65522bf31352f6b7d9e4abab9c5d9f97b3 100644 (file)
@@ -823,7 +823,7 @@ afs_nfsrdwr(struct vcache *avc, struct uio *auio, enum uio_rw arw,
            afs_size_t toff, tlen;
            dcp = afs_GetDCache(avc, fileBase, &treq, &toff, &tlen, 2);
            if (!dcp) {
-               code = ENOENT;
+               code = EIO;
                break;
            }
        }
index 42d25abb283d3dbedb5b7d73d81893bf41e75868..b50af8f0fd3c1443af5e84461777f1971ca7128c 100644 (file)
@@ -81,7 +81,7 @@ afs_root(OSI_VFS_DECL(afsp), struct vnode **avpp)
            if (tvp) {
                afs_globalVp = tvp;
            } else
-               code = ENOENT;
+               code = EIO;
        }
     }
     if (tvp) {
index b0762a2605e75761bd88e107dd39fbf8ab0cf4cd..5f8819f55fa6c21b5aaf7ba6eab305b27a91dc63 100644 (file)
@@ -257,8 +257,12 @@ afs_create(OSI_VC_DECL(adp), char *aname, struct vattr *attrs,
                    }
                }
                *avcp = tvc;
-           } else
-               code = ENOENT;  /* shouldn't get here */
+
+           } else {
+               /* Directory entry already exists, but we cannot fetch the
+                * fid it points to. */
+               code = EIO;
+           }
            /* make sure vrefCount bumped only if code == 0 */
            goto done;
        }
@@ -465,8 +469,11 @@ afs_create(OSI_VC_DECL(adp), char *aname, struct vattr *attrs,
            ReleaseWriteLock(&tvc->lock);
            *avcp = tvc;
            code = 0;
-       } else
-           code = ENOENT;
+
+       } else {
+           /* Cannot create a new vcache. */
+           code = EIO;
+       }
     } else {
        /* otherwise cache entry already exists, someone else must
         * have created it.  Comments used to say:  "don't need write
index b664921a37c80e1ff9abebc88d6b7342a5900bbe..9365563b0cfafe79487cb3653c5cb669e60c454d 100644 (file)
@@ -197,7 +197,7 @@ afs_mkdir(OSI_VC_DECL(adp), char *aname, struct vattr *attrs,
        if (tvc) {
            *avcp = tvc;
        } else {
-           code = ENOENT;
+           code = EIO;
            goto done;
        }
 
@@ -210,7 +210,7 @@ afs_mkdir(OSI_VC_DECL(adp), char *aname, struct vattr *attrs,
        new_dc = afs_GetDCache(tvc, (afs_size_t) 0, treq, &offset, &len, 1);
        if (!new_dc) {
            /* printf("afs_mkdir: can't get new dcache for dir.\n"); */
-           code = ENOENT;
+           code = EIO;
            goto done;
        }
 
@@ -235,8 +235,12 @@ afs_mkdir(OSI_VC_DECL(adp), char *aname, struct vattr *attrs,
        if (tvc) {
            code = 0;
            *avcp = tvc;
-       } else
-           code = ENOENT;
+
+       } else {
+           /* For some reason, we cannot fetch the vcache for our
+            * newly-created dir. */
+           code = EIO;
+       }
     }                          /* if (AFS_DISCON_RW) */
 
   done:
index 9d595646a24562fd7c3f405de2460af50e8e96cc..d1940259c3fe5fc2f4d63db9385ee174f79f30e0 100644 (file)
@@ -411,7 +411,7 @@ afs_EvalFakeStat_int(struct vcache **avcp, struct afs_fakestat_state *state,
            root_vp = afs_GetVCache(tvc->mvid.target_root, areq, NULL, NULL);
        }
        if (!root_vp) {
-           code = canblock ? ENOENT : 0;
+           code = canblock ? EIO : 0;
            goto done;
        }
 #ifdef AFS_DARWIN80_ENV
@@ -437,7 +437,7 @@ afs_EvalFakeStat_int(struct vcache **avcp, struct afs_fakestat_state *state,
        *avcp = root_vp;
        code = 0;
     } else {
-       code = canblock ? ENOENT : 0;
+       code = canblock ? EIO : 0;
     }
 
   done:
@@ -755,7 +755,7 @@ afs_DoBulkStat(struct vcache *adp, long dirCookie, struct vrequest *areqp)
 
     dcp = afs_GetDCache(adp, (afs_size_t) 0, areqp, &temp, &temp, 1);
     if (!dcp) {
-       code = ENOENT;
+       code = EIO;
        goto done2;
     }
 
@@ -1426,7 +1426,7 @@ afs_lookup(OSI_VC_DECL(adp), char *aname, struct vcache **avcp, afs_ucred_t *acr
     /*printf("Code is %d\n", code);*/
     
     if (tryEvalOnly && adp->mvstat == AFS_MVSTAT_MTPT)
-       code = ENOENT;
+       code = ENODEV;
     if (code)
        goto done;
 
@@ -1456,7 +1456,7 @@ afs_lookup(OSI_VC_DECL(adp), char *aname, struct vcache **avcp, afs_ucred_t *acr
        afs_Trace3(afs_iclSetp, CM_TRACE_GETVCDOTDOT, ICL_TYPE_FID, adp->mvid.parent,
                   ICL_TYPE_POINTER, tvc, ICL_TYPE_INT32, code);
        *avcp = tvc;
-       code = (tvc ? 0 : ENOENT);
+       code = (tvc ? 0 : EIO);
        hit = 1;
        if (tvc && !VREFCOUNT_GT(tvc, 0)) {
            osi_Panic("TT1");
@@ -1549,7 +1549,7 @@ afs_lookup(OSI_VC_DECL(adp), char *aname, struct vcache **avcp, afs_ucred_t *acr
            tfid.Fid.Unique = volid;
        }
        *avcp = tvc = afs_GetVCache(&tfid, treq, NULL, NULL);
-       code = (tvc ? 0 : ENOENT);
+       code = (tvc ? 0 : EIO);
        hit = 1;
        goto done;
     }
@@ -1844,7 +1844,7 @@ afs_lookup(OSI_VC_DECL(adp), char *aname, struct vcache **avcp, afs_ucred_t *acr
                    afs_PutVCache(uvc); /* we're done with it */
 
                    if (!tvc) {
-                       code = ENOENT;
+                       code = EIO;
                        if (tvolp) {
                            afs_PutVolume(tvolp, WRITE_LOCK);
                        }
@@ -1867,7 +1867,7 @@ afs_lookup(OSI_VC_DECL(adp), char *aname, struct vcache **avcp, afs_ucred_t *acr
                    }
                } else {
                    afs_PutVCache(tvc);
-                   code = ENOENT;
+                   code = ENODEV;
                    if (tvolp)
                        afs_PutVolume(tvolp, WRITE_LOCK);
                    goto done;
@@ -1902,7 +1902,7 @@ afs_lookup(OSI_VC_DECL(adp), char *aname, struct vcache **avcp, afs_ucred_t *acr
                    afs_PutVolume(tv, READ_LOCK);
                }
            }
-           code = ENOENT;
+           code = EIO;
        } else {
            code = ENETDOWN;
        }
index 78929829f4882eeb6a87d9e12a861a508968a87d..d5aa00d1a18edbc3598581de7cd2db26545f59f3 100644 (file)
@@ -667,7 +667,7 @@ afs_readdir(OSI_VC_DECL(avc), struct uio *auio, afs_ucred_t *acred)
     /* get a reference to the entire directory */
     tdc = afs_GetDCache(avc, (afs_size_t) 0, treq, &origOffset, &tlen, 1);
     if (!tdc) {
-       code = ENOENT;
+       code = EIO;
        goto done;
     }
     ObtainReadLock(&avc->lock);
index b5f53b498bb6c586b2d4a3a0e10f3b78b3fdf614..c19c2a5e6535305650aa33567499c55bf7595bd8 100644 (file)
@@ -199,7 +199,7 @@ afs_remove(OSI_VC_DECL(adp), char *aname, afs_ucred_t *acred)
        goto done;
     }
     if (afs_IsDynrootMount(adp)) {
-       code = ENOENT;
+       code = EROFS;
        goto done;
     }
 
index 519f405891e123ab34aef861c6a1cd140f753ac3..7791784a08a1ce52b711ac922a451389fce30c5f 100644 (file)
@@ -93,7 +93,7 @@ afsrename(struct vcache *aodp, char *aname1, struct vcache *andp,
        ObtainWriteLock(&andp->lock, 147);
        tdc1 = afs_GetDCache(aodp, (afs_size_t) 0, areq, &offset, &len, 0);
        if (!tdc1) {
-           code = ENOENT;
+           code = EIO;
        } else {
            ObtainWriteLock(&tdc1->lock, 643);
        }
@@ -112,7 +112,7 @@ afsrename(struct vcache *aodp, char *aname1, struct vcache *andp,
        if (tdc1)
            ObtainWriteLock(&tdc1->lock, 645);
        else
-           code = ENOENT;
+           code = EIO;
     } else {
        ObtainWriteLock(&aodp->lock, 150);      /* lock smaller one first */
        ObtainWriteLock(&andp->lock, 557);
@@ -120,7 +120,7 @@ afsrename(struct vcache *aodp, char *aname1, struct vcache *andp,
        if (tdc1)
            ObtainWriteLock(&tdc1->lock, 646);
        else
-           code = ENOENT;
+           code = EIO;
        tdc2 = afs_FindDCache(andp, (afs_size_t) 0);
        if (tdc2)
            ObtainWriteLock(&tdc2->lock, 647);
@@ -234,7 +234,7 @@ afsrename(struct vcache *aodp, char *aname1, struct vcache *andp,
            ReleaseWriteLock(&tvc->lock);
            afs_PutVCache(tvc);
        } else {
-           code = ENOENT;
+           code = ENETDOWN;
        }                       /* if (tvc) */
     }                          /* if !(AFS_IS_DISCON_RW)*/
     returnCode = code;         /* remember for later */
index 1e930db87cbda6a25af3c854844ff1a624a80542..14026efbb3647a6b43f5757f9e745c473b03e5d6 100644 (file)
@@ -47,7 +47,7 @@ afs_DisconCreateSymlink(struct vcache *avc, char *aname,
     tdc = afs_GetDCache(avc, 0, areq, &offset, &len, 0);
     if (!tdc) {
        /* printf("afs_DisconCreateSymlink: can't get new dcache for symlink.\n"); */
-       return ENOENT;
+       return ENETDOWN;
     }
 
     len = strlen(aname);
@@ -398,7 +398,7 @@ afs_UFSHandleLink(struct vcache *avc, struct vrequest *areq)
            ReleaseReadLock(&tdc->lock);
            afs_PutDCache(tdc);
            osi_FreeLargeSpace(rbuf);
-           return ENOENT;
+           return EIO;
        }
        code = afs_osi_Read(tfile, -1, rbuf, tlen);
        osi_UFSClose(tfile);
index c3ee0053fd69c07d176a024a404932a3d50a01cb..be6c63adf6abf47214c3806da78147f8048d873e 100644 (file)
@@ -567,8 +567,8 @@ afs_close(OSI_VC_DECL(avc), afs_int32 aflags, afs_ucred_t *acred)
 
        /* VNOVNODE is "acceptable" error code from close, since
         * may happen when deleting a file on another machine while
-        * it is open here. We do the same for ENOENT since in afs_CheckCode we map VNOVNODE -> ENOENT */
-       if (code == VNOVNODE || code == ENOENT)
+        * it is open here. */
+       if (code == VNOVNODE)
            code = 0;
 
        /* Ensure last closer gets the error. If another thread caused
index e948cf92cff8cce7faa1a1a1888c5a45d2014aaa..62712b9536fab569d025526ad32ca8188a27299c 100644 (file)
@@ -264,7 +264,7 @@ afs_GetVnodeName(struct vcache *avc, struct VenusFid *afid, char *aname,
        parent_vc = afs_FindVCache(&parent_fid, 0, 1);
        ReleaseSharedLock(&afs_xvcache);
        if (!parent_vc) {
-           return ENOENT;
+           return ENETDOWN;
        }
 
        shadow_fid.Cell = parent_vc->f.fid.Cell;
@@ -293,7 +293,7 @@ afs_GetVnodeName(struct vcache *avc, struct VenusFid *afid, char *aname,
            code = ENOENT;
     } else {
        /* printf("Directory dcache not found!\n"); */
-        code = ENOENT;
+        code = ENETDOWN;
     }
 
     return code;
@@ -507,7 +507,7 @@ afs_GetParentVCache(struct vcache *avc, int deleted, struct VenusFid *afid,
 
     if (afs_GetParentDirFid(avc, afid)) {
        /* printf("afs_GetParentVCache: Couldn't find parent dir's FID.\n"); */
-       return ENOENT;
+       return ENETDOWN;
     }
 
     code = afs_GetVnodeName(avc, afid, aname, deleted);
@@ -521,7 +521,7 @@ afs_GetParentVCache(struct vcache *avc, int deleted, struct VenusFid *afid,
     ReleaseSharedLock(&afs_xvcache);
     if (!*adp) {
        /* printf("afs_GetParentVCache: Couldn't find parent dir's vcache\n"); */
-       code = ENOENT;
+       code = ENETDOWN;
        goto end;
     }
 
@@ -593,7 +593,7 @@ afs_ProcessOpRename(struct vcache *avc, struct vrequest *areq)
        /* Get parent dir's FID.*/
        if (afs_GetParentDirFid(avc, &new_pdir_fid)) {
            /* printf("afs_ProcessOpRename: Couldn't find new parent dir FID.\n"); */
-           code = ENOENT;
+           code = ENETDOWN;
            goto done;
         }
     }
@@ -687,7 +687,7 @@ afs_ProcessOpCreate(struct vcache *avc, struct vrequest *areq,
 
        tdc = afs_GetDCache(avc, 0, areq, &offset, &tlen, 0);
        if (!tdc) {
-           code = ENOENT;
+           code = ENETDOWN;
            goto end;
        }
 
index 217145fc8890d3b416784203b5de57c3906ea0f5..dd346a0b80e34c211fb643a809362c3ed0c16e32 100644 (file)
@@ -276,7 +276,7 @@ afs_CheckCode(afs_int32 acode, struct vrequest *areq, int where)
     if (areq->volumeError == VOLBUSY)
        return EWOULDBLOCK;
     if (acode == VNOVNODE)
-       return ENOENT;
+       return EIO;
     if (acode == VDISKFULL)
        return ENOSPC;
     if (acode == VOVERQUOTA)
index 1a7ac50820e33daa10d9a4e49244337a32ae4c84..4efcd51ef89173d7bd0058d0167ea744d933523f 100644 (file)
@@ -2212,7 +2212,7 @@ DECL_PIOCTL(PNewStatMount)
     }
     tdc = afs_GetDCache(avc, (afs_size_t) 0, areq, &offset, &len, 1);
     if (!tdc)
-       return ENOENT;
+       return EIO;
     Check_AtSys(avc, name, &sysState, areq);
     ObtainReadLock(&tdc->lock);
     do {
@@ -2232,7 +2232,7 @@ DECL_PIOCTL(PNewStatMount)
        tvc = afs_GetVCache(&tfid, areq, NULL, NULL);
     }
     if (!tvc) {
-       code = ENOENT;
+       code = EIO;
        goto out;
     }
     if (tvc->mvstat != AFS_MVSTAT_MTPT) {
@@ -3275,7 +3275,7 @@ DECL_PIOCTL(PRemoveMount)
 
     tdc = afs_GetDCache(avc, (afs_size_t) 0, areq, &offset, &len, 1);  /* test for error below */
     if (!tdc)
-       return ENOENT;
+       return EIO;
     Check_AtSys(avc, name, &sysState, areq);
     ObtainReadLock(&tdc->lock);
     do {
@@ -3295,7 +3295,7 @@ DECL_PIOCTL(PRemoveMount)
        tvc = afs_GetVCache(&tfid, areq, NULL, NULL);
     }
     if (!tvc) {
-       code = ENOENT;
+       code = EIO;
        afs_PutDCache(tdc);
        goto out;
     }
@@ -4826,7 +4826,7 @@ DECL_PIOCTL(PFlushMount)
     }
     tdc = afs_GetDCache(avc, (afs_size_t) 0, areq, &offset, &len, 1);
     if (!tdc)
-       return ENOENT;
+       return EIO;
     Check_AtSys(avc, mount, &sysState, areq);
     ObtainReadLock(&tdc->lock);
     do {
@@ -4846,7 +4846,7 @@ DECL_PIOCTL(PFlushMount)
        tvc = afs_GetVCache(&tfid, areq, NULL, NULL);
     }
     if (!tvc) {
-       code = ENOENT;
+       code = EIO;
        goto out;
     }
     if (tvc->mvstat != AFS_MVSTAT_MTPT) {
index 1d75f7c8ec187593ffc768f2250213c0f329a4bf..63a0431b1b02302ebda4b43cb438c3df99c5da0c 100644 (file)
@@ -1228,7 +1228,7 @@ afs_VerifyVCache2(struct vcache *avc, struct vrequest *areq)
     /* fetch the status info */
     tvc = afs_GetVCache(&avc->f.fid, areq, NULL, avc);
     if (!tvc)
-       return ENOENT;
+       return EIO;
     /* Put it back; caller has already incremented vrefCount */
     afs_PutVCache(tvc);
     return 0;