From 04bcfa2821c9deba151f562bb78452276d8d7443 Mon Sep 17 00:00:00 2001 From: Derrick Brashear Date: Thu, 24 Mar 2011 16:11:17 -0400 Subject: [PATCH 1/1] add AFS_DEMAND_ATTACH_UTIL use this for non-pthreads "support code" e.g. salvager. Change-Id: I17825fa90de33a7a4d17f364713fd4602dae497b Reviewed-on: http://gerrit.openafs.org/4312 Reviewed-by: Andrew Deason Tested-by: Andrew Deason Reviewed-by: Derrick Brashear --- src/tsalvaged/Makefile.in | 2 +- src/vol/partition.h | 16 +++++++++------- src/vol/salvager.c | 4 ++-- src/vol/vol-salvage.c | 36 ++++++++++++++++++------------------ src/vol/volume.h | 6 +++--- src/vol/volume_inline.h | 11 +++++++---- 6 files changed, 40 insertions(+), 35 deletions(-) diff --git a/src/tsalvaged/Makefile.in b/src/tsalvaged/Makefile.in index e409f73..46cfc1a 100644 --- a/src/tsalvaged/Makefile.in +++ b/src/tsalvaged/Makefile.in @@ -21,7 +21,7 @@ MODULE_CFLAGS = -DNINTERFACE -DRXDEBUG -DFSSYNC_BUILD_CLIENT \ -DSALVSYNC_BUILD_SERVER -DSALVSYNC_BUILD_CLIENT \ -DAFS_DEMAND_ATTACH_FS -SCFLAGS=$(COMMON_CFLAGS) -I.. -DNINTERFACE ${XCFLAGS} ${ARCHFLAGS} -DRXDEBUG -DFSSYNC_BUILD_CLIENT -DAFS_DEMAND_ATTACH_FS +SCFLAGS=$(COMMON_CFLAGS) -I.. -DNINTERFACE ${XCFLAGS} ${ARCHFLAGS} -DRXDEBUG -DFSSYNC_BUILD_CLIENT -DAFS_DEMAND_ATTACH_UTIL SCCRULE=${MT_CC} ${SCFLAGS} -c $? -o $@ diff --git a/src/vol/partition.h b/src/vol/partition.h index 4af19a6..4050b29 100644 --- a/src/vol/partition.h +++ b/src/vol/partition.h @@ -33,7 +33,9 @@ #endif #include "lock.h" - +#if defined(AFS_DEMAND_ATTACH_FS) || defined(AFS_DEMAND_ATTACH_UTIL) +# include +#endif /* All Vice partitions on a server will have the following name prefix */ #define VICE_PARTITION_PREFIX "/vicep" @@ -56,12 +58,12 @@ struct VLockFile { char *path; /**< path to the lock file */ int refcount; /**< how many locks we have on the file */ -#ifdef AFS_PTHREAD_ENV +#if defined(AFS_PTHREAD_ENV) || defined(AFS_DEMAND_ATTACH_UTIL) pthread_mutex_t mutex; /**< lock for the VLockFile struct */ -#endif /* AFS_PTHREAD_ENV */ +#endif /* AFS_PTHREAD_ENV || AFS_DEMAND_ATTACH_UTIL */ }; -#ifdef AFS_DEMAND_ATTACH_FS +#if defined(AFS_DEMAND_ATTACH_FS) || defined(AFS_DEMAND_ATTACH_UTIL) /* * flag bits for 'flags' in struct VDiskLock. */ @@ -83,7 +85,7 @@ struct VDiskLock { unsigned int flags; /**< see above for flag bits */ }; -#endif /* AFS_DEMAND_ATTACH_FS */ +#endif /* AFS_DEMAND_ATTACH_FS || AFS_DEMAND_ATTACH_UTIL */ /* For NT, the roles of "name" and "devName" are reversed. That is, "name" @@ -124,7 +126,7 @@ struct DiskPartition64 { * from the superblock */ int flags; afs_int64 f_files; /* total number of files in this partition */ -#ifdef AFS_DEMAND_ATTACH_FS +#if defined(AFS_DEMAND_ATTACH_FS) || defined(AFS_DEMAND_ATTACH_UTIL) struct { struct rx_queue head; /* list of volumes on this partition (VByPList) */ afs_uint32 len; /* length of volume list */ @@ -135,7 +137,7 @@ struct DiskPartition64 { struct VDiskLock headerLock; /* lock for the collective headers on the partition */ struct VLockFile volLockFile; /* lock file for individual volume locks */ -#endif /* AFS_DEMAND_ATTACH_FS */ +#endif /* AFS_DEMAND_ATTACH_FS || AFS_DEMAND_ATTACH_UTIL */ }; struct DiskPartitionStats64 { diff --git a/src/vol/salvager.c b/src/vol/salvager.c index 883ef07..d3deab8 100644 --- a/src/vol/salvager.c +++ b/src/vol/salvager.c @@ -335,7 +335,7 @@ handleit(struct cmd_syndesc *as, void *arock) */ if (seenvol) { char *msg = NULL; -#ifdef AFS_DEMAND_ATTACH_FS +#if defined(AFS_DEMAND_ATTACH_FS) || defined(AFS_DEMAND_ATTACH_UTIL) if (!AskDAFS()) { msg = "The DAFS dasalvager cannot be run with a non-DAFS fileserver. Please use 'salvager'."; @@ -525,7 +525,7 @@ main(int argc, char **argv) #ifdef FAST_RESTART cmd_AddParm(ts, "-DontSalvage", CMD_FLAG, CMD_OPTIONAL, "Don't salvage. This my be set in BosConfig to let the fileserver restart immediately after a crash. Bad volumes will be taken offline"); -#elif defined(AFS_DEMAND_ATTACH_FS) +#elif defined(AFS_DEMAND_ATTACH_FS) || defined(AFS_DEMAND_ATTACH_UTIL) cmd_Seek(ts, 20); /* skip DontSalvage */ cmd_AddParm(ts, "-forceDAFS", CMD_FLAG, CMD_OPTIONAL, "For Demand Attach Fileserver, permit a manual volume salvage outside of the salvageserver"); diff --git a/src/vol/vol-salvage.c b/src/vol/vol-salvage.c index 558623b..f747ff5 100644 --- a/src/vol/vol-salvage.c +++ b/src/vol/vol-salvage.c @@ -300,9 +300,9 @@ static int AskVolumeSummary(struct SalvInfo *salvinfo, VolumeId singleVolumeNumber); static void MaybeAskOnline(struct SalvInfo *salvinfo, VolumeId volumeId); -#ifdef AFS_DEMAND_ATTACH_FS +#if defined(AFS_DEMAND_ATTACH_FS) || defined(AFS_DEMAND_ATTACH_UTIL) static int LockVolume(struct SalvInfo *salvinfo, VolumeId volumeId); -#endif /* AFS_DEMAND_ATTACH_FS */ +#endif /* AFS_DEMAND_ATTACH_FS || AFS_DEMAND_ATTACH_UTIL */ /* Uniquifier stored in the Inode */ static Unique @@ -731,13 +731,13 @@ SalvageFileSys1(struct DiskPartition64 *partP, VolumeId singleVolumeNumber) Abort("Raced too many times with fileserver restarts while trying to " "checkout/lock volumes; Aborted\n"); } -#ifdef AFS_DEMAND_ATTACH_FS +#if defined(AFS_DEMAND_ATTACH_FS) || defined(AFS_DEMAND_ATTACH_UTIL) if (tries > 1) { /* unlock all previous volume locks, since we're about to lock them * again */ VLockFileReinit(&partP->volLockFile); } -#endif /* AFS_DEMAND_ATTACH_FS */ +#endif /* AFS_DEMAND_ATTACH_FS || AFS_DEMAND_ATTACH_UTIL */ salvinfo->fileSysPartition = partP; salvinfo->fileSysDevice = salvinfo->fileSysPartition->device; @@ -756,11 +756,11 @@ SalvageFileSys1(struct DiskPartition64 *partP, VolumeId singleVolumeNumber) #endif if (singleVolumeNumber) { -#ifndef AFS_DEMAND_ATTACH_FS +#if !(defined(AFS_DEMAND_ATTACH_FS) || defined(AFS_DEMAND_ATTACH_UTIL)) /* only non-DAFS locks the partition when salvaging a single volume; * DAFS will lock the individual volumes in the VG */ VLockPartition(partP->name); -#endif /* !AFS_DEMAND_ATTACH_FS */ +#endif /* !(AFS_DEMAND_ATTACH_FS || AFS_DEMAND_ATTACH_UTIL) */ ForceSalvage = 1; @@ -771,11 +771,11 @@ SalvageFileSys1(struct DiskPartition64 *partP, VolumeId singleVolumeNumber) salvinfo->useFSYNC = 1; AskOffline(salvinfo, singleVolumeNumber); -#ifdef AFS_DEMAND_ATTACH_FS +#if defined(AFS_DEMAND_ATTACH_FS) || defined(AFS_DEMAND_ATTACH_UTIL) if (LockVolume(salvinfo, singleVolumeNumber)) { goto retry; } -#endif /* AFS_DEMAND_ATTACH_FS */ +#endif /* AFS_DEMAND_ATTACH_FS || AFS_DEMAND_ATTACH_UTIL */ } else { salvinfo->useFSYNC = 0; @@ -927,10 +927,10 @@ SalvageFileSys1(struct DiskPartition64 *partP, VolumeId singleVolumeNumber) if (!Testing && singleVolumeNumber) { int foundSVN = 0; -#ifdef AFS_DEMAND_ATTACH_FS +#if defined(AFS_DEMAND_ATTACH_FS) || defined(AFS_DEMAND_ATTACH_UTIL) /* unlock vol headers so the fs can attach them when we AskOnline */ VLockFileReinit(&salvinfo->fileSysPartition->volLockFile); -#endif /* AFS_DEMAND_ATTACH_FS */ +#endif /* AFS_DEMAND_ATTACH_FS || AFS_DEMAND_ATTACH_UTIL */ /* Step through the volumeSummary list and set all volumes on-line. * Most volumes were taken off-line in GetVolumeSummary. @@ -1599,7 +1599,7 @@ RecordHeader(struct DiskPartition64 *dp, const char *name, AskOffline(salvinfo, summary.header.id); -#ifdef AFS_DEMAND_ATTACH_FS +#if defined(AFS_DEMAND_ATTACH_FS) || defined(AFS_DEMAND_ATTACH_UTIL) if (!badname) { /* don't lock the volume if the header is bad, since we're * about to delete it anyway. */ @@ -1608,7 +1608,7 @@ RecordHeader(struct DiskPartition64 *dp, const char *name, return -1; } } -#endif /* AFS_DEMAND_ATTACH_FS */ +#endif /* AFS_DEMAND_ATTACH_FS || AFS_DEMAND_ATTACH_UTIL */ } } if (badname) { @@ -4235,7 +4235,7 @@ MaybeZapVolume(struct SalvInfo *salvinfo, struct InodeSummary *isp, } } -#ifdef AFS_DEMAND_ATTACH_FS +#if defined(AFS_DEMAND_ATTACH_FS) || defined(AFS_DEMAND_ATTACH_UTIL) /** * Locks a volume on disk for salvaging. * @@ -4321,7 +4321,7 @@ LockVolume(struct SalvInfo *salvinfo, VolumeId volumeId) return 0; } -#endif /* AFS_DEMAND_ATTACH_FS */ +#endif /* AFS_DEMAND_ATTACH_FS || AFS_DEMAND_ATTACH_UTIL */ void AskOffline(struct SalvInfo *salvinfo, VolumeId volumeId) @@ -4347,13 +4347,13 @@ AskOffline(struct SalvInfo *salvinfo, VolumeId volumeId) Log("AskOffline: fssync protocol mismatch (bad command word '%d'); salvage aborting.\n", FSYNC_VOL_OFF); if (AskDAFS()) { -#ifdef AFS_DEMAND_ATTACH_FS +#if defined(AFS_DEMAND_ATTACH_FS) || defined(AFS_DEMAND_ATTACH_UTIL) Log("AskOffline: please make sure dafileserver, davolserver, salvageserver and dasalvager binaries are same version.\n"); #else Log("AskOffline: fileserver is DAFS but we are not.\n"); #endif } else { -#ifdef AFS_DEMAND_ATTACH_FS +#if defined(AFS_DEMAND_ATTACH_FS) || defined(AFS_DEMAND_ATTACH_UTIL) Log("AskOffline: fileserver is not DAFS but we are.\n"); #else Log("AskOffline: please make sure fileserver, volserver and salvager binaries are same version.\n"); @@ -4476,13 +4476,13 @@ AskDelete(struct SalvInfo *salvinfo, VolumeId volumeId) Log("AskOnline: fssync protocol mismatch (bad command word '%d')\n", FSYNC_VOL_DONE); if (AskDAFS()) { -#ifdef AFS_DEMAND_ATTACH_FS +#if defined(AFS_DEMAND_ATTACH_FS) || defined(AFS_DEMAND_ATTACH_UTIL) Log("AskOnline: please make sure dafileserver, davolserver, salvageserver and dasalvager binaries are same version.\n"); #else Log("AskOnline: fileserver is DAFS but we are not.\n"); #endif } else { -#ifdef AFS_DEMAND_ATTACH_FS +#if defined(AFS_DEMAND_ATTACH_FS) || defined(AFS_DEMAND_ATTACH_UTIL) Log("AskOnline: fileserver is not DAFS but we are.\n"); #else Log("AskOnline: please make sure fileserver, volserver and salvager binaries are same version.\n"); diff --git a/src/vol/volume.h b/src/vol/volume.h index 20694c5..a0ad8f5 100644 --- a/src/vol/volume.h +++ b/src/vol/volume.h @@ -101,8 +101,6 @@ extern pthread_t vol_glock_holder; #define VTRANS_LOCK MUTEX_ENTER(&vol_trans_mutex) #define VTRANS_UNLOCK MUTEX_EXIT(&vol_trans_mutex) #else /* AFS_PTHREAD_ENV */ -#define VOL_CV_WAIT(cv) -#define VOL_CV_TIMEDWAIT(cv, ts, to) #define VOL_LOCK #define VOL_UNLOCK #define VSALVSYNC_LOCK @@ -901,13 +899,15 @@ extern int VDeregisterVolOp_r(Volume * vp); extern void VCancelReservation_r(Volume * vp); extern int VChildProcReconnectFS_r(void); extern void VOfflineForVolOp_r(Error *ec, Volume *vp, char *message); +#endif /* AFS_DEMAND_ATTACH_FS */ +#if defined(AFS_DEMAND_ATTACH_FS) || defined(AFS_DEMAND_ATTACH_UTIL) struct VDiskLock; extern void VDiskLockInit(struct VDiskLock *dl, struct VLockFile *lf, afs_uint32 offset); extern int VGetDiskLock(struct VDiskLock *dl, int locktype, int nonblock); extern void VReleaseDiskLock(struct VDiskLock *dl, int locktype); -#endif /* AFS_DEMAND_ATTACH_FS */ +#endif /* AFS_DEMAND_ATTACH_FS || AFS_DEMAND_ATTACH_UTIL */ extern int VVolOpLeaveOnline_r(Volume * vp, FSSYNC_VolOp_info * vopinfo); extern int VVolOpLeaveOnlineNoHeader_r(Volume * vp, FSSYNC_VolOp_info * vopinfo); extern int VVolOpSetVBusy_r(Volume * vp, FSSYNC_VolOp_info * vopinfo); diff --git a/src/vol/volume_inline.h b/src/vol/volume_inline.h index dd48623..571f308 100644 --- a/src/vol/volume_inline.h +++ b/src/vol/volume_inline.h @@ -13,7 +13,7 @@ #include "volume.h" #include "partition.h" -#ifdef AFS_DEMAND_ATTACH_FS +#if defined(AFS_DEMAND_ATTACH_FS) || defined(AFS_DEMAND_ATTACH_UTIL) # include "lock.h" #endif @@ -85,7 +85,7 @@ VIsSalvager(ProgramType type) static_inline int VRequiresPartLock(void) { -#ifdef AFS_DEMAND_ATTACH_FS +#if defined(AFS_DEMAND_ATTACH_FS) || defined(AFS_DEMAND_ATTACH_UTIL) return 0; #else switch (programType) { @@ -95,7 +95,7 @@ VRequiresPartLock(void) default: return 0; } -#endif /* AFS_DEMAND_ATTACH_FS */ +#endif /* AFS_DEMAND_ATTACH_FS || AFS_DEMAND_ATTACH_UTIL */ } /** @@ -151,7 +151,7 @@ VShouldCheckInUse(int mode) return 0; } -#ifdef AFS_DEMAND_ATTACH_FS +#if defined(AFS_DEMAND_ATTACH_FS) || defined(AFS_DEMAND_ATTACH_UTIL) /** * acquire a non-blocking disk lock for a particular volume id. * @@ -270,6 +270,9 @@ VVolLockType(int mode, int writeable) } } } +#endif /* AFS_DEMAND_ATTACH_FS || AFS_DEMAND_ATTACH_UTIL */ + +#ifdef AFS_DEMAND_ATTACH_FS /** * tells caller whether or not the volume is effectively salvaging. -- 1.9.4