From 047ff7e9fd283f67ede2b873e3ad64ebbcf8d3ef Mon Sep 17 00:00:00 2001 From: Simon Wilkinson Date: Tue, 15 Jun 2010 19:20:50 +0100 Subject: [PATCH] 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 --- src/vol/vol-salvage.c | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/src/vol/vol-salvage.c b/src/vol/vol-salvage.c index 83ddc1497..390c202f0 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) { -- 2.39.5