From eb70cf7096b724a9249ca6412657d3152ac2d87b Mon Sep 17 00:00:00 2001 From: Andrew Deason Date: Fri, 8 Apr 2011 13:00:15 -0500 Subject: [PATCH] DAFS: Request salvage on detach for volser 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 Reviewed-by: Derrick Brashear (cherry picked from commit de0c72bf7c7d284f4d15d99c79b39e0c97f1a122) Change-Id: Id6f86368386a5e113a00aa0a496649d69875d283 Reviewed-on: http://gerrit.openafs.org/6286 Tested-by: Derrick Brashear Reviewed-by: Derrick Brashear --- src/vol/volume.c | 10 ++++++++-- src/volser/dumpstuff.c | 5 +++++ src/volser/volprocs.c | 4 ++-- 3 files changed, 15 insertions(+), 4 deletions(-) diff --git a/src/vol/volume.c b/src/vol/volume.c index 2b301a348..ed91b0f75 100644 --- a/src/vol/volume.c +++ b/src/vol/volume.c @@ -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); diff --git a/src/volser/dumpstuff.c b/src/volser/dumpstuff.c index fb07ce247..caa2c408c 100644 --- a/src/volser/dumpstuff.c +++ b/src/volser/dumpstuff.c @@ -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); diff --git a/src/volser/volprocs.c b/src/volser/volprocs.c index 90520a46c..95339ad57 100644 --- a/src/volser/volprocs.c +++ b/src/volser/volprocs.c @@ -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; -- 2.39.5