From 9bb0274398a0e9f6aff7714014e3eefbd77df827 Mon Sep 17 00:00:00 2001 From: Andrew Deason Date: Fri, 11 Jun 2010 17:39:32 -0500 Subject: [PATCH] salvaged: Break volume callbacks on vol change The salvager code can change a volume in many ways as it fixes errors. We should break callbacks on the volume whenever we change it, as clients may have callbacks on whatever we changed. So, for the salvageserver, send an FSSYNC command to the fileserver to tell it to break callbacks for that volume. FIXES 127030 Change-Id: I1cd869371167df7d4e55ac14400865fb0a9c5154 Reviewed-on: http://gerrit.openafs.org/2210 Reviewed-by: Derrick Brashear Tested-by: Derrick Brashear --- src/vol/vol-salvage.c | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/src/vol/vol-salvage.c b/src/vol/vol-salvage.c index e3b89c936..41febd4d0 100644 --- a/src/vol/vol-salvage.c +++ b/src/vol/vol-salvage.c @@ -4029,6 +4029,22 @@ SalvageVolume(register struct InodeSummary *rwIsp, IHandle_t * alinkH) afs_printable_uint32_lu(vid)); } +#ifdef FSSYNC_BUILD_CLIENT + if (!Testing && VolumeChanged) { + afs_int32 fsync_code; + + fsync_code = FSYNC_VolOp(vid, NULL, FSYNC_VOL_BREAKCBKS, FSYNC_SALVAGE, NULL); + if (fsync_code) { + Log("Error trying to tell the fileserver to break callbacks for " + "changed volume %lu; error code %ld\n", + afs_printable_uint32_lu(vid), + afs_printable_int32_ld(fsync_code)); + } else { + VolumeChanged = 0; + } + } +#endif /* FSSYNC_BUILD_CLIENT */ + /* Turn off the inUse bit; the volume's been salvaged! */ volHeader.inUse = 0; /* clear flag indicating inUse@last crash */ volHeader.needsSalvaged = 0; /* clear 'damaged' flag */ -- 2.39.5