]> git.michaelhowe.org Git - packages/o/openafs.git/commitdiff
volser: Preserve needsSalvaged during restore
authorAndrew Deason <adeason@sinenomine.net>
Wed, 9 Nov 2011 23:04:09 +0000 (17:04 -0600)
committerDerrick Brashear <shadow@dementix.org>
Sun, 20 Nov 2011 23:36:56 +0000 (15:36 -0800)
Some of the routines during a volume restore may set needsSalvaged, if
an inconsistency is detected while writing the given volume data.
However, after the data is read, we set the volume header information
to what was found in the dump stream, ignoring any needsSalvaged that
may have been set.

To ensure that inconsistent volumes in this situation actually get
demand-salvaged (for DAFS) or offlined (non-DAFS), keep the value of
needsSalvaged in the header, if it was set.

Reviewed-on: http://gerrit.openafs.org/5822
Tested-by: BuildBot <buildbot@rampaginggeek.com>
Reviewed-by: Derrick Brashear <shadow@dementix.org>
(cherry picked from commit 9ba891676a15512fa58915662cf599ea73eac430)

Change-Id: Iece9f5b03f0454b7f833e4f3e86da4478b4441fe
Reviewed-on: http://gerrit.openafs.org/6080
Tested-by: BuildBot <buildbot@rampaginggeek.com>
Reviewed-by: Derrick Brashear <shadow@dementix.org>
src/volser/dumpstuff.c

index def1b0f1b711eb4215bf6f2950905792389bc4cc..fb07ce2472eb3b4097a3b5031d1658c5a21b85be 100644 (file)
@@ -1232,6 +1232,8 @@ RestoreVolume(struct rx_call *call, Volume * avp, int incremental,
     vol.cloneId = cookie->clone;
     vol.parentId = cookie->parent;
 
+    V_needsSalvaged(vp) = 0;
+
     tdelo = delo;
     while (1) {
        if (ReadVnodes(iodp, vp, 0, b1, s1, b2, s2, tdelo)) {
@@ -1273,6 +1275,11 @@ RestoreVolume(struct rx_call *call, Volume * avp, int incremental,
 
   clean:
     ClearVolumeStats(&vol);
+    if (V_needsSalvaged(vp)) {
+       /* needsSalvaged may have been set while we tried to write volume data.
+        * prevent it from getting overwritten. */
+       vol.needsSalvaged = V_needsSalvaged(vp);
+    }
     CopyVolumeHeader(&vol, &V_disk(vp));
     V_destroyMe(vp) = 0;
     VUpdateVolume(&vupdate, vp);