dir: Honor non-ENOENT lookup errors 31/13431/4
authorAndrew Deason <adeason@sinenomine.net>
Thu, 17 Jan 2019 06:04:36 +0000 (00:04 -0600)
committerBenjamin Kaduk <kaduk@mit.edu>
Sat, 6 Apr 2019 17:26:09 +0000 (13:26 -0400)
commit0b3bd1b7cdc88ba62c8cd540e8628faa84e33cf9
tree8c38dda9840b3d97cba8c9cb8399c45115f281e0
parent8b6ae2893b517bd4e008cae94acff70abe4d2227
dir: Honor non-ENOENT lookup errors

Currently, several places in src/dir/dir.c assume that any error from
a lower-level function (e.g. FindItem) means that the item we're
looking for does not exist in that directory. But if we encountered
some other error, that may not be the case; the directory blob may be
corrupt, we may have encountered some I/O error, etc.

To detect cases like this, return the actual error code from FindItem
&c, instead of always reporting ENOENT. For the code paths that are
actually specifically looking for if the target exists (in
afs_dir_Create), change our checks to specifically check for ENOENT,
and return any other error.

Do the same thing for a few similar callers in viced/afsfileprocs.c,
as well.

FIXES 134904

Change-Id: I41073464b9ef20e4cbb45bcc61a43f70380eb930
Reviewed-on: https://gerrit.openafs.org/13431
Tested-by: BuildBot <buildbot@rampaginggeek.com>
Reviewed-by: Michael Meffie <mmeffie@sinenomine.net>
Reviewed-by: Cheyenne Wills <cwills@sinenomine.net>
Reviewed-by: Benjamin Kaduk <kaduk@mit.edu>
src/dir/dir.c
src/viced/afsfileprocs.c