From fabd590cc4b0142fe97c4ffa6a4669fe5d44c359 Mon Sep 17 00:00:00 2001 From: Andrew Deason Date: Wed, 29 Sep 2010 11:48:44 -0500 Subject: [PATCH] salvager: Do not break cbks when salvaging parts When salvaging whole partitions / whole servers, the fileserver is assumed to not be running. So only break callbacks if we are salvaging a single volume. If we are salvaging a whole partition, do not tell the fileserver to break callbacks on changed volumes, since the fileserver will not be around and we will just hang. Change-Id: Ia158d5a00574a6907b9b040510ef7d827a2ee05d Reviewed-on: http://gerrit.openafs.org/2865 Reviewed-by: Derrick Brashear Tested-by: Derrick Brashear --- src/vol/vol-salvage.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/vol/vol-salvage.c b/src/vol/vol-salvage.c index 84efe4e..1fc0a12 100644 --- a/src/vol/vol-salvage.c +++ b/src/vol/vol-salvage.c @@ -306,6 +306,8 @@ struct SalvInfo { * vnodes in the volume that * we are currently looking * at */ + int useFSYNC; /**< 0 if the fileserver is unavailable; 1 if we should try + * to contact the fileserver over FSYNC */ }; char *tmpdir = NULL; @@ -790,6 +792,7 @@ SalvageFileSys1(struct DiskPartition64 *partP, VolumeId singleVolumeNumber) Abort("Couldn't connect to file server\n"); } + salvinfo->useFSYNC = 1; AskOffline(salvinfo, singleVolumeNumber); #ifdef AFS_DEMAND_ATTACH_FS if (LockVolume(salvinfo, singleVolumeNumber)) { @@ -798,6 +801,7 @@ SalvageFileSys1(struct DiskPartition64 *partP, VolumeId singleVolumeNumber) #endif /* AFS_DEMAND_ATTACH_FS */ } else { + salvinfo->useFSYNC = 0; VLockPartition(partP->name); if (ForceSalvage) { ForceSalvage = 1; @@ -4084,7 +4088,7 @@ SalvageVolume(struct SalvInfo *salvinfo, struct InodeSummary *rwIsp, IHandle_t * } #ifdef FSSYNC_BUILD_CLIENT - if (!Testing && salvinfo->VolumeChanged) { + if (!Testing && salvinfo->VolumeChanged && salvinfo->useFSYNC) { afs_int32 fsync_code; fsync_code = FSYNC_VolOp(vid, NULL, FSYNC_VOL_BREAKCBKS, FSYNC_SALVAGE, NULL); -- 1.9.4