From 96a176ed5872f54402e1625f6e67ce2979e48875 Mon Sep 17 00:00:00 2001 From: Derrick Brashear Date: Thu, 13 Aug 2009 10:05:44 -0400 Subject: [PATCH] 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 --- src/vol/vol-salvage.c | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) 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); } } } -- 2.39.5