From: Derrick Brashear Date: Thu, 13 Aug 2009 14:05:44 +0000 (-0400) Subject: make salvager able to cope with corrupt class index X-Git-Tag: openafs-devel-1_5_63~22 X-Git-Url: https://git.michaelhowe.org/gitweb/?a=commitdiff_plain;h=96a176ed5872f54402e1625f6e67ce2979e48875;p=packages%2Fo%2Fopenafs.git make salvager able to cope with corrupt class index right now if a directory ends up in the small vnode index, the salvager will never fix it. unlinking from the index (and recovering an orphan later) beats crashing forever Reviewed-on: http://gerrit.openafs.org/309 Reviewed-by: Russ Allbery Tested-by: Russ Allbery --- diff --git a/src/vol/vol-salvage.c b/src/vol/vol-salvage.c index 51bdd158f..a0986b0ad 100644 --- a/src/vol/vol-salvage.c +++ b/src/vol/vol-salvage.c @@ -2716,8 +2716,16 @@ DistilVnodeEssence(VolumeId rwVId, VnodeClass class, Inode ino, Unique * maxu) vep->owner = vnode->owner; vep->group = vnode->group; if (vnode->type == vDirectory) { - assert(class == vLarge); - vip->inodes[vnodeIndex] = VNDISK_GET_INO(vnode); + if (class != vLarge) { + VnodeId vnodeNumber = bitNumberToVnodeNumber(vnodeIndex, class); + vip->nAllocatedVnodes--; + memset(vnode, 0, sizeof(vnode)); + IH_IWRITE(vnodeInfo[vSmall].handle, + vnodeIndexOffset(vcp, vnodeNumber), + (char *)&vnode, sizeof(vnode)); + VolumeChanged = 1; + } else + vip->inodes[vnodeIndex] = VNDISK_GET_INO(vnode); } } }