]> git.michaelhowe.org Git - packages/o/openafs.git/commitdiff
DAFS: Request salvage on detach for volser
authorAndrew Deason <adeason@sinenomine.net>
Fri, 8 Apr 2011 18:00:15 +0000 (13:00 -0500)
committerDerrick Brashear <shadow@dementix.org>
Fri, 16 Dec 2011 10:59:40 +0000 (02:59 -0800)
When the volserver notices that a volume needs salvaging, mark
V_needsSalvaged. So when we VDetachVolume the volume, we can then just
request the salvage in the volume package.

Fix the VolClone salvaging code to do this as well, instead of using
the vol-private VRequestSalvage_r interface.

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

Change-Id: Id6f86368386a5e113a00aa0a496649d69875d283
Reviewed-on: http://gerrit.openafs.org/6286
Tested-by: Derrick Brashear <shadow@dementix.org>
Reviewed-by: Derrick Brashear <shadow@dementix.org>
src/vol/volume.c
src/volser/dumpstuff.c
src/volser/volprocs.c

index 2b301a3482618204c9818057632ba83ce7ba96bd..ed91b0f75feed622a6256f4911fb7193a7703dbd 100644 (file)
@@ -4407,11 +4407,17 @@ VDetachVolume_r(Error * ec, Volume * vp)
        notifyServer = vp->needsPutBack;
        if (V_destroyMe(vp) == DESTROY_ME)
            useDone = FSYNC_VOL_LEAVE_OFF;
-#ifdef AFS_DEMAND_ATTACH_FS
+# ifdef AFS_DEMAND_ATTACH_FS
        else if (!V_blessed(vp) || !V_inService(vp))
            useDone = FSYNC_VOL_LEAVE_OFF;
-#endif
+# endif
+    }
+# ifdef AFS_DEMAND_ATTACH_FS
+    if (V_needsSalvaged(vp)) {
+       notifyServer = 0;
+       VRequestSalvage_r(ec, vp, SALVSYNC_NEEDED, 0);
     }
+# endif
     tpartp = vp->partition;
     volume = V_id(vp);
     DeleteVolumeFromHashTable(vp);
index fb07ce2472eb3b4097a3b5031d1658c5a21b85be..caa2c408ca46792a2d65be7e7f364ad3539c8c3a 100644 (file)
@@ -1406,6 +1406,7 @@ ReadVnodes(struct iod *iodp, Volume * vp, int incremental,
                    if (!VALID_INO(ino)) {
                        Log("1 Volser: ReadVnodes: IH_CREATE: %s - restore aborted\n",
                             afs_error_message(errno));
+                       V_needsSalvaged(vp) = 1;
                        return VOLSERREAD_DUMPERROR;
                    }
                    nearInode = ino;
@@ -1416,6 +1417,7 @@ ReadVnodes(struct iod *iodp, Volume * vp, int incremental,
                        Log("1 Volser: ReadVnodes: IH_OPEN: %s - restore aborted\n",
                             afs_error_message(errno));
                        IH_RELEASE(tmpH);
+                       V_needsSalvaged(vp) = 1;
                        return VOLSERREAD_DUMPERROR;
                    }
                    vnodeLength =
@@ -1427,6 +1429,7 @@ ReadVnodes(struct iod *iodp, Volume * vp, int incremental,
                        Log("1 Volser: ReadVnodes: IDEC inode %llu\n",
                            (afs_uintmax_t) ino);
                        IH_DEC(V_linkHandle(vp), ino, V_parentId(vp));
+                       V_needsSalvaged(vp) = 1;
                        return VOLSERREAD_DUMPERROR;
                    }
                    break;
@@ -1460,6 +1463,7 @@ ReadVnodes(struct iod *iodp, Volume * vp, int incremental,
            if (fdP == NULL) {
                Log("1 Volser: ReadVnodes: Error opening vnode index: %s; restore aborted\n",
                    afs_error_message(errno));
+               V_needsSalvaged(vp) = 1;
                return VOLSERREAD_DUMPERROR;
            }
            if (FDH_PREAD(fdP, &oldvnode, sizeof(oldvnode), vnodeIndexOffset(vcp, vnodeNumber)) ==
@@ -1474,6 +1478,7 @@ ReadVnodes(struct iod *iodp, Volume * vp, int incremental,
                Log("1 Volser: ReadVnodes: Error writing vnode index: %s; restore aborted\n",
                    afs_error_message(errno));
                FDH_REALLYCLOSE(fdP);
+               V_needsSalvaged(vp) = 1;
                return VOLSERREAD_DUMPERROR;
            }
            FDH_CLOSE(fdP);
index 90520a46cb5101f4bee54258e349c9d614670184..95339ad57e9e43d1c8f8c4a81e38a8049862eb89 100644 (file)
@@ -587,6 +587,7 @@ VolCreateVolume(struct rx_call *acid, afs_int32 apart, char *aname,
            Log("1 Volser: CreateVolume: Unable to create volume root dir; "
                "error code %u\n", (unsigned)error);
            DeleteTrans(tt, 1);
+           V_needsSalvaged(vp) = 1;
            VDetachVolume(&junk, vp);
            return EIO;
        }
@@ -855,8 +856,7 @@ VolClone(struct rx_call *acid, afs_int32 atrans, afs_uint32 purgeId,
        DeleteTrans(ttc, 1);
 #ifdef AFS_DEMAND_ATTACH_FS
     if (salv_vp && error != VVOLEXISTS && error != EXDEV) {
-       Error salv_error;
-       VRequestSalvage_r(&salv_error, salv_vp, FSYNC_SALVAGE, 0);
+       V_needsSalvaged(salv_vp) = 1;
     }
 #endif /* AFS_DEMAND_ATTACH_FS */
     return error;