afs: Throw EIO in DRead on empty dir blob 29/13429/2
authorAndrew Deason <adeason@sinenomine.net>
Thu, 17 Jan 2019 05:46:34 +0000 (23:46 -0600)
committerBenjamin Kaduk <kaduk@mit.edu>
Mon, 4 Feb 2019 04:46:33 +0000 (23:46 -0500)
commit86d04ea70fd2e99606b1d1b5b68d980d92e7a3cd
tree6a965453f74965fce71a8fcc15eb078a09485f22
parent1a0e5e867107b3f849c17f30976831b5bf5a0e94
afs: Throw EIO in DRead on empty dir blob

DRead currently returns ENOENT if we try to read a page beyond the end
of the given dir blob. We do this to indicate we've hit EOF, but we do
this even if the dir blob is completely empty (which is not a valid
dir blob).

If a dir blob in the cache is truncated due to cache corruption
issues, that means we'll indicate a normal EOF condition in that
directory for most code paths. If someone is trying to list the
directory's entries, for instance, we'll just return that there are no
entries in the dir, even though the dir itself is just invalid.

To avoid this for at least some cases, return an EIO error instead if
the dir blob is completely empty.

Change-Id: I8544e125ad12632523d7c514fe63ff9d87e1cd8f
Reviewed-on: https://gerrit.openafs.org/13429
Tested-by: BuildBot <buildbot@rampaginggeek.com>
Reviewed-by: Benjamin Kaduk <kaduk@mit.edu>
src/afs/afs_buffer.c