]> git.michaelhowe.org Git - packages/o/openafs.git/commitdiff
vol-salvage: Only delete bad vnodes during !check
authorAndrew Deason <adeason@sinenomine.net>
Tue, 25 Jan 2011 16:46:38 +0000 (10:46 -0600)
committerDerrick Brashear <shadow@dementia.org>
Tue, 25 Jan 2011 20:07:00 +0000 (12:07 -0800)
In SalvageIndex, if check is true, we're only supposed to check for
consistency and not actually change anything (this is enforced by an
assert later on). The check for vnode magic consistency breaks this
assumption, and just always fixes the vnode.

Change this so we just error out if check is set, and the vnode magic
is wrong.

Change-Id: I9e2d3bd5e9e340a9b2ac66d70d52aa110b512561
Reviewed-on: http://gerrit.openafs.org/3756
Reviewed-by: Jeffrey Altman <jaltman@openafs.org>
Reviewed-by: Derrick Brashear <shadow@dementia.org>
Tested-by: Derrick Brashear <shadow@dementia.org>
src/vol/vol-salvage.c

index b02d7b6bdac00d26c55ae4f313a0dc85c2e47cc2..5f80744168a82c11d73da6883a8c4e894e52bf9a 100644 (file)
@@ -2572,6 +2572,14 @@ SalvageIndex(struct SalvInfo *salvinfo, Inode ino, VnodeClass class, int RW,
            } else {
                if (vcp->magic != vnode->vnodeMagic) {
                    /* bad magic #, probably partially created vnode */
+                   if (check) {
+                      Log("Partially allocated vnode %d: bad magic (is %lx should be %lx)\n",
+                          vnodeNumber, afs_printable_uint32_lu(vnode->vnodeMagic),
+                          afs_printable_uint32_lu(vcp->magic));
+                      memset(vnode, 0, vcp->diskSize);
+                      err = -1;
+                      goto zooks;
+                   }
                    Log("Partially allocated vnode %d deleted.\n",
                        vnodeNumber);
                    memset(vnode, 0, vcp->diskSize);