From d1e59d2d82787d19c81e60db68c76f45560b8465 Mon Sep 17 00:00:00 2001 From: Simon Wilkinson Date: Fri, 9 Sep 2011 07:46:01 +0100 Subject: [PATCH] Generalise the new background daemon code Move the new background daemon code out from under the AFS_DARWIN80_ENV ifdef into its own AFS_NEW_BKG define. This lets us use it for things other than the Darwin mv helper, on other platforms. Based on code originally written by Derrick Brashear Change-Id: Iba9431f5dc4bbbe10222b25a595cdd1ea2f592f4 Reviewed-on: http://gerrit.openafs.org/7136 Tested-by: BuildBot Reviewed-by: Derrick Brashear --- src/afs/afs_call.c | 12 ++++++++---- src/afs/afs_daemons.c | 10 +++++----- src/afs/afs_prototypes.h | 2 +- src/afsd/afsd.c | 4 ++-- src/config/param.ppc_darwin_90.h | 1 + src/config/param.x86_darwin_100.h | 1 + src/config/param.x86_darwin_110.h | 1 + src/config/param.x86_darwin_80.h | 1 + src/config/param.x86_darwin_90.h | 1 + 9 files changed, 21 insertions(+), 12 deletions(-) diff --git a/src/afs/afs_call.c b/src/afs/afs_call.c index 63b5b0c27..29daefa21 100644 --- a/src/afs/afs_call.c +++ b/src/afs/afs_call.c @@ -335,6 +335,9 @@ afsd_thread(void *rock) complete_and_exit(0, 0); break; case AFSOP_START_BKG: +#ifdef AFS_NEW_BKG + afs_warn("Install matching afsd! Old background daemons not supported.\n"); +#else sprintf(current->comm, "afs_bkgstart"); AFS_GLOCK(); complete(arg->complete); @@ -347,6 +350,7 @@ afsd_thread(void *rock) sprintf(current->comm, "afs_background"); afs_BackgroundDaemon(); AFS_GUNLOCK(); +#endif complete_and_exit(0, 0); break; case AFSOP_START_TRUNCDAEMON: @@ -649,7 +653,7 @@ afs_syscall_call(long parm, long parm2, long parm3, put_vfs_context(); #endif #ifdef AFS_DAEMONOP_ENV -# if defined(AFS_DARWIN80_ENV) +# if defined(AFS_NEW_BKG) if (parm == AFSOP_BKG_HANDLER) { /* if afs_uspc_param grows this should be checked */ struct afs_uspc_param *mvParam = osi_AllocSmallSpace(AFS_SMALLOCSIZ); @@ -692,7 +696,7 @@ afs_syscall_call(long parm, long parm2, long parm3, afs_osi_Free(param2, namebufsz); osi_FreeSmallSpace(mvParam); } else -# endif /* DARWIN80 */ +# endif /* AFS_NEW_BKG */ if (parm < AFSOP_ADDCELL || parm == AFSOP_RXEVENT_DAEMON || parm == AFSOP_RXLISTENER_DAEMON) { afs_DaemonOp(parm, parm2, parm3, parm4, parm5, parm6); @@ -784,7 +788,7 @@ afs_syscall_call(long parm, long parm2, long parm3, AFS_GUNLOCK(); exit(CLD_EXITED, 0); # endif /* AFS_SGI_ENV */ -# ifndef AFS_DARWIN80_ENV +# ifndef AFS_NEW_BKG } else if (parm == AFSOP_START_BKG) { while (afs_initState < AFSOP_START_BKG) afs_osi_Sleep(&afs_initState); @@ -805,7 +809,7 @@ afs_syscall_call(long parm, long parm2, long parm3, AFS_GUNLOCK(); exit(CLD_EXITED, 0); # endif /* AFS_SGI_ENV */ -# endif /* ! AFS_DARWIN80_ENV */ +# endif /* ! AFS_NEW_BKG */ } else if (parm == AFSOP_START_TRUNCDAEMON) { while (afs_initState < AFSOP_GO) afs_osi_Sleep(&afs_initState); diff --git a/src/afs/afs_daemons.c b/src/afs/afs_daemons.c index a1bd5f06d..a4c9c88a2 100644 --- a/src/afs/afs_daemons.c +++ b/src/afs/afs_daemons.c @@ -994,7 +994,7 @@ brequest_release(struct brequest *tb) afs_BRelease(tb); /* this grabs and releases afs_xbrs lock */ } -#ifdef AFS_DARWIN80_ENV +#ifdef AFS_NEW_BKG int afs_BackgroundDaemon(struct afs_uspc_param *uspc, void *param1, void *param2) #else @@ -1011,7 +1011,7 @@ afs_BackgroundDaemon(void) /* Irix with "short stack" exits */ afs_BackgroundDaemon_once(); -#ifdef AFS_DARWIN80_ENV +#ifdef AFS_NEW_BKG /* If it's a re-entering syscall, complete the request and release */ if (uspc->ts > -1) { tb = afs_brs; @@ -1035,7 +1035,7 @@ afs_BackgroundDaemon(void) #endif /* Otherwise it's a new one */ afs_nbrs++; -#ifdef AFS_DARWIN80_ENV +#ifdef AFS_NEW_BKG } #endif @@ -1049,7 +1049,7 @@ afs_BackgroundDaemon(void) afs_termState = AFSOP_STOP_TRUNCDAEMON; ReleaseWriteLock(&afs_xbrs); afs_osi_Wakeup(&afs_termState); -#ifdef AFS_DARWIN80_ENV +#ifdef AFS_NEW_BKG return -2; #else return; @@ -1113,7 +1113,7 @@ afs_BackgroundDaemon(void) afs_brsDaemons--; } } -#ifdef AFS_DARWIN80_ENV +#ifdef AFS_NEW_BKG return -2; #endif } diff --git a/src/afs/afs_prototypes.h b/src/afs/afs_prototypes.h index d56b02052..aaa4eb9da 100644 --- a/src/afs/afs_prototypes.h +++ b/src/afs/afs_prototypes.h @@ -221,7 +221,7 @@ extern int afs_CheckRootVolume(void); extern void afs_BRelease(struct brequest *ab); extern int afs_BBusy(void); extern int afs_BioDaemon(afs_int32 nbiods); -#ifdef AFS_DARWIN80_ENV +#ifdef AFS_NEW_BKG extern int afs_BackgroundDaemon(struct afs_uspc_param *uspc, void *param1, void *param2); #else extern void afs_BackgroundDaemon(void); diff --git a/src/afsd/afsd.c b/src/afsd/afsd.c index 4c96d9c4d..a66807257 100644 --- a/src/afsd/afsd.c +++ b/src/afsd/afsd.c @@ -1497,7 +1497,7 @@ AfsdbLookupHandler(void) #endif } -#ifdef AFS_DARWIN_ENV +#ifdef AFS_NEW_BKG static void BkgHandler(void) { @@ -1628,7 +1628,7 @@ afsdb_thread(void *rock) static void * daemon_thread(void *rock) { -#ifdef AFS_DARWIN80_ENV +#ifdef AFS_NEW_BKG /* Since the background daemon runs as a user process, * need to drop the controlling TTY, etc. */ diff --git a/src/config/param.ppc_darwin_90.h b/src/config/param.ppc_darwin_90.h index e5429a6d8..01e3ad135 100644 --- a/src/config/param.ppc_darwin_90.h +++ b/src/config/param.ppc_darwin_90.h @@ -29,6 +29,7 @@ #define DARWIN_REFBASE 3 #define AFS_WARNUSER_MARINER_ENV 1 #define AFS_CACHE_VNODE_PATH +#define AFS_NEW_BKG 1 /* File system entry (used if mount.h doesn't define MOUNT_AFS */ #define AFS_MOUNT_AFS "afs" diff --git a/src/config/param.x86_darwin_100.h b/src/config/param.x86_darwin_100.h index 6167cf237..9d8de1041 100644 --- a/src/config/param.x86_darwin_100.h +++ b/src/config/param.x86_darwin_100.h @@ -33,6 +33,7 @@ #define DARWIN_REFBASE 3 #define AFS_WARNUSER_MARINER_ENV 1 #define AFS_CACHE_VNODE_PATH +#define AFS_NEW_BKG 1 #define NEED_IOCTL32 /* File system entry (used if mount.h doesn't define MOUNT_AFS */ diff --git a/src/config/param.x86_darwin_110.h b/src/config/param.x86_darwin_110.h index 440b370cd..eae598370 100644 --- a/src/config/param.x86_darwin_110.h +++ b/src/config/param.x86_darwin_110.h @@ -34,6 +34,7 @@ #define DARWIN_REFBASE 3 #define AFS_WARNUSER_MARINER_ENV 1 #define AFS_CACHE_VNODE_PATH +#define AFS_NEW_BKG 1 #define NEED_IOCTL32 /* File system entry (used if mount.h doesn't define MOUNT_AFS */ diff --git a/src/config/param.x86_darwin_80.h b/src/config/param.x86_darwin_80.h index 29751d307..2a079a7b1 100644 --- a/src/config/param.x86_darwin_80.h +++ b/src/config/param.x86_darwin_80.h @@ -118,6 +118,7 @@ #define AFS_SYSCALL 230 #define AFS_WARNUSER_MARINER_ENV 1 #define DARWIN_REFBASE 0 +#define AFS_NEW_BKG 1 /* File system entry (used if mount.h doesn't define MOUNT_AFS */ #define AFS_MOUNT_AFS "afs" diff --git a/src/config/param.x86_darwin_90.h b/src/config/param.x86_darwin_90.h index f1e02a629..6814c28d2 100644 --- a/src/config/param.x86_darwin_90.h +++ b/src/config/param.x86_darwin_90.h @@ -29,6 +29,7 @@ #define DARWIN_REFBASE 3 #define AFS_WARNUSER_MARINER_ENV 1 #define AFS_CACHE_VNODE_PATH +#define AFS_NEW_BKG 1 /* File system entry (used if mount.h doesn't define MOUNT_AFS */ #define AFS_MOUNT_AFS "afs" -- 2.39.5