libafs: Fix directory verification
authorSimon Wilkinson <sxw@your-file-system.com>
Mon, 29 Aug 2011 22:36:41 +0000 (23:36 +0100)
committerDerrick Brashear <shadow@dementix.org>
Mon, 5 Sep 2011 13:05:48 +0000 (06:05 -0700)
With the earlier directory verification changes, every directory
was seen as corrupt, because the nde pointer was never being initialised

Rework the way that we check for the failure of afs_dir_GetVerifiedBlob
so that we can more robustly detect problems, whilst still allowing
normal directories to be browsed as before

Change-Id: I3d3f428025296956b5feff6ba290aaef79817dcd
Reviewed-on: http://gerrit.openafs.org/5318
Tested-by: BuildBot <buildbot@rampaginggeek.com>
Reviewed-by: Derrick Brashear <shadow@dementix.org>

src/afs/VNOPS/afs_vnop_readdir.c

index f2f0a84..f0572b9 100644 (file)
@@ -741,9 +741,10 @@ afs_readdir(OSI_VC_DECL(avc), struct uio *auio, afs_ucred_t *acred)
        us = BlobScan(tdc, (origOffset >> 5));
 
        if (us)
-          afs_dir_GetVerifiedBlob(tdc, us, &nextEntry);
+          code = afs_dir_GetVerifiedBlob(tdc, us, &nextEntry);
 
-       if (us == 0 || nde == NULL) {
+       if (us == 0 || code != 0) {
+           code = 0; /* Reset code - keep old failure behaviour */
            /* failed to setup nde, return what we've got, and release ode */
            if (len) {
                /* something to hand over. */