From: Simon Wilkinson Date: Tue, 15 Jun 2010 18:20:50 +0000 (+0100) Subject: Salvager: Don't use garbage vnodes when Testing X-Git-Tag: openafs-stable-1_8_0pre1~2629 X-Git-Url: https://git.openafs.org/?p=openafs.git;a=commitdiff_plain;h=047ff7e9fd283f67ede2b873e3ad64ebbcf8d3ef;hp=8648a8c45b593dce8982deec41e3caf48e80dc0c Salvager: Don't use garbage vnodes when Testing If Testing is true, and the salvage wants to repair the '.' file, then it will end up using a garbage value as the location of the repaired file (vnodeNumber gets set to fid.Vnode, but fid.Vnode is uninitialised) Fix this by making it behave as if no repair is necessary when running in Testing mode. It's unclear that this is entirely the correct answer, but it's definitely better than the current behaviour. Caught by clang-analyzer Change-Id: I1bddd889b3350cf31fe6384573e49e82159c7095 Reviewed-on: http://gerrit.openafs.org/7071 Reviewed-by: Derrick Brashear Tested-by: Derrick Brashear --- diff --git a/src/vol/vol-salvage.c b/src/vol/vol-salvage.c index 83ddc14..390c202 100644 --- a/src/vol/vol-salvage.c +++ b/src/vol/vol-salvage.c @@ -3106,20 +3106,19 @@ JudgeEntry(void *arock, char *name, afs_int32 vnodeNumber, if (strcmp(name, ".") == 0) { if (dir->vnodeNumber != vnodeNumber || (dir->unique != unique)) { - AFSFid fid; if (!Showmode) Log("directory vnode %u.%u: bad '.' entry (was %u.%u); fixed\n", dir->vnodeNumber, dir->unique, vnodeNumber, unique); if (!Testing) { + AFSFid fid; CopyOnWrite(salvinfo, dir); osi_Assert(afs_dir_Delete(&dir->dirHandle, ".") == 0); fid.Vnode = dir->vnodeNumber; fid.Unique = dir->unique; osi_Assert(afs_dir_Create(&dir->dirHandle, ".", &fid) == 0); + vnodeNumber = fid.Vnode; /* Get the new Essence */ + unique = fid.Unique; + vnodeEssence = CheckVnodeNumber(salvinfo, vnodeNumber); } - - vnodeNumber = fid.Vnode; /* Get the new Essence */ - unique = fid.Unique; - vnodeEssence = CheckVnodeNumber(salvinfo, vnodeNumber); } dir->haveDot = 1; } else if (strcmp(name, "..") == 0) {