From 462f1fb90defcb351657655442024f971705d945 Mon Sep 17 00:00:00 2001 From: Derrick Brashear Date: Thu, 31 Jan 2008 20:17:45 +0000 Subject: [PATCH] solaris10-cleanup-friendliness-20080130 LICENSE IPL10 based on patch from mib@unimelb.edu.au clean up taskq after ourselves and don't leave ourself marked system processes --- src/afs/UKERNEL/afs_usrops.c | 6 ++++++ src/afs/afs_call.c | 7 +++++++ src/afs/afs_osi.c | 13 +++++++++++++ src/afs/afs_prototypes.h | 1 + src/config/afs_args.h | 1 + src/rx/SOLARIS/rx_knet.c | 8 ++++++++ src/rx/rx_kcommon.c | 8 ++++++++ 7 files changed, 44 insertions(+) diff --git a/src/afs/UKERNEL/afs_usrops.c b/src/afs/UKERNEL/afs_usrops.c index 094c14193..d4cae72c7 100644 --- a/src/afs/UKERNEL/afs_usrops.c +++ b/src/afs/UKERNEL/afs_usrops.c @@ -1004,6 +1004,12 @@ afs_osi_Invisible(void) return; } +void +afs_osi_Visible(void) +{ + return; +} + int osi_GetTime(struct timeval *tv) { diff --git a/src/afs/afs_call.c b/src/afs/afs_call.c index e8edf2b26..4246bacfb 100644 --- a/src/afs/afs_call.c +++ b/src/afs/afs_call.c @@ -540,6 +540,7 @@ afs_syscall_call(parm, parm2, parm3, parm4, parm5, parm6) #endif /* RXK_LISTENER_ENV */ afs_osi_Invisible(); afs_RXCallBackServer(); + afs_osi_Visible(); } #ifdef AFS_SGI_ENV AFS_GUNLOCK(); @@ -568,6 +569,7 @@ afs_syscall_call(parm, parm2, parm3, parm4, parm5, parm6) afs_osi_RxkRegister(); #endif /* !UKERNEL */ rxk_Listener(); + afs_osi_Visible(); } #ifdef AFS_SGI_ENV AFS_GUNLOCK(); @@ -587,6 +589,7 @@ afs_syscall_call(parm, parm2, parm3, parm4, parm5, parm6) afs_osi_Wakeup(&afs_initState); afs_osi_Invisible(); afs_Daemon(); + afs_osi_Visible(); #ifdef AFS_SGI_ENV AFS_GUNLOCK(); exit(CLD_EXITED, 0); @@ -594,6 +597,7 @@ afs_syscall_call(parm, parm2, parm3, parm4, parm5, parm6) } else if (parm == AFSOP_START_CS) { afs_osi_Invisible(); afs_CheckServerDaemon(); + afs_osi_Visible(); #ifdef AFS_SGI_ENV AFS_GUNLOCK(); exit(CLD_EXITED, 0); @@ -613,6 +617,7 @@ afs_syscall_call(parm, parm2, parm3, parm4, parm5, parm6) else #endif /* AFS_AIX32_ENV */ afs_BackgroundDaemon(); + afs_osi_Visible(); #ifdef AFS_SGI_ENV AFS_GUNLOCK(); exit(CLD_EXITED, 0); @@ -623,6 +628,7 @@ afs_syscall_call(parm, parm2, parm3, parm4, parm5, parm6) /* start the bkg daemon */ afs_osi_Invisible(); afs_CacheTruncateDaemon(); + afs_osi_Visible(); #ifdef AFS_SGI_ENV AFS_GUNLOCK(); exit(CLD_EXITED, 0); @@ -634,6 +640,7 @@ afs_syscall_call(parm, parm2, parm3, parm4, parm5, parm6) afs_osi_Sleep(&afs_initState); afs_osi_Invisible(); afs_rxevent_daemon(); + afs_osi_Visible(); #ifdef AFS_SGI_ENV AFS_GUNLOCK(); exit(CLD_EXITED, 0); diff --git a/src/afs/afs_osi.c b/src/afs/afs_osi.c index 23a1c01d5..81bd4cf57 100644 --- a/src/afs/afs_osi.c +++ b/src/afs/afs_osi.c @@ -205,6 +205,19 @@ afs_osi_Invisible(void) AFS_STATCNT(osi_Invisible); } +void +afs_osi_Visible(void) +{ +#if defined(AFS_SUN5_ENV) + curproc->p_flag &= ~SSYS; +#elif defined(AFS_DARWIN80_ENV) +#elif defined(AFS_DARWIN_ENV) + /* maybe call init_process instead? */ + current_proc()->p_flag &= ~P_SYSTEM; +#elif defined(AFS_XBSD_ENV) + curproc->p_flag &= ~P_SYSTEM; +#endif +} #if !defined(AFS_LINUX20_ENV) && !defined(AFS_XBSD_ENV) /* set the real time */ diff --git a/src/afs/afs_prototypes.h b/src/afs/afs_prototypes.h index 9b9ea72fe..c42264d7b 100644 --- a/src/afs/afs_prototypes.h +++ b/src/afs/afs_prototypes.h @@ -500,6 +500,7 @@ extern void shutdown_nfsclnt(void); /* afs_osi.c */ extern afs_lock_t afs_ftf; extern void afs_osi_Invisible(void); +extern void afs_osi_Visible(void); extern void afs_osi_RxkRegister(void); extern void afs_osi_MaskSignals(void); extern void afs_osi_UnmaskRxkSignals(void); diff --git a/src/config/afs_args.h b/src/config/afs_args.h index 7e362e7d3..2db7d3443 100644 --- a/src/config/afs_args.h +++ b/src/config/afs_args.h @@ -123,6 +123,7 @@ /* #define AFSOP_STOP_COMPLETE 215 defined in osi.h */ /* #define AFSOP_STOP_RXK_LISTENER 217 defined in osi.h */ #define AFSOP_STOP_AFSDB 218 /* Stop AFSDB handler */ +#define AFSOP_STOP_NETIF 219 /* Stop Netif poller */ /* Main afs syscall entry; this number may vary per system (i.e. defined in afs/param.h) */ #ifndef AFS_SYSCALL diff --git a/src/rx/SOLARIS/rx_knet.c b/src/rx/SOLARIS/rx_knet.c index c46f09b4e..6246fe199 100644 --- a/src/rx/SOLARIS/rx_knet.c +++ b/src/rx/SOLARIS/rx_knet.c @@ -592,6 +592,14 @@ osi_NetIfPoller() uint_t mtu; uint64_t flags; + if (afs_termState == AFSOP_STOP_NETIF) { + afs_warn("NetIfPoller... "); + rw_destroy(&afsifinfo_lock); + ddi_taskq_destroy(afs_taskq); + afs_termState = AFSOP_STOP_COMPLETE; + osi_rxWakeup(&afs_termState); + return; + } /* Get our permissions */ cr = CRED(); diff --git a/src/rx/rx_kcommon.c b/src/rx/rx_kcommon.c index 70ac504e7..044c96ffc 100644 --- a/src/rx/rx_kcommon.c +++ b/src/rx/rx_kcommon.c @@ -1088,8 +1088,12 @@ afs_rxevent_daemon(void) if (afs_termState == AFSOP_STOP_RXEVENT) { #ifdef RXK_LISTENER_ENV afs_termState = AFSOP_STOP_RXK_LISTENER; +#else +#ifdef AFS_SUN510_ENV + afs_termState = AFSOP_STOP_NETIF; #else afs_termState = AFSOP_STOP_COMPLETE; +#endif #endif osi_rxWakeup(&afs_termState); return; @@ -1267,7 +1271,11 @@ rxk_Listener(void) AFS_GLOCK(); #endif /* RX_ENABLE_LOCKS */ if (afs_termState == AFSOP_STOP_RXK_LISTENER) { +#ifdef AFS_SUN510_ENV + afs_termState = AFSOP_STOP_NETIF; +#else afs_termState = AFSOP_STOP_COMPLETE; +#endif osi_rxWakeup(&afs_termState); } rxk_ListenerPid = 0; -- 2.39.5