FreeBSD/sys/fs/nfs/nfs_commonport.c
/*
 * Called once to initialize data structures...
 */
Called once to initialize data structures
Called once to initialize data structures
static int
nfscommon_modevent(module_t mod, int type, void *data)
{
	int error = 0;
	static int loaded = 0;
	switch (type) {
	case MOD_LOAD:
		if (loaded)
			goto out;
		newnfs_portinit();
		mtx_init(&nfs_nameid_mutex, "nfs_nameid_mutex", NULL, MTX_DEF);
		mtx_init(&nfs_sockl_mutex, "nfs_sockl_mutex", NULL, MTX_DEF);
		mtx_init(&nfs_slock_mutex, "nfs_slock_mutex", NULL, MTX_DEF);
		mtx_init(&nfs_req_mutex, "nfs_req_mutex", NULL, MTX_DEF);
		mtx_init(&nfsrv_nfsuserdsock.nr_mtx, "nfsuserd", NULL,
		    MTX_DEF);
		callout_init(&newnfsd_callout, 1);
		newnfs_init();
		nfsd_call_nfscommon = nfssvc_nfscommon;
		loaded = 1;
		break;
	case MOD_UNLOAD:
		if (newnfs_numnfsd != 0 || nfsrv_nfsuserd != 0 ||
		    nfs_numnfscbd != 0) {
			error = EBUSY;
			break;
		}
		nfsd_call_nfscommon = NULL;
		callout_drain(&newnfsd_callout);
		nfsrv_cleanusergroup();
		mtx_destroy(&nfs_nameid_mutex);
		mtx_destroy(&newnfsd_mtx);
		mtx_destroy(&nfs_state_mutex);
		mtx_destroy(&nfs_sockl_mutex);
		mtx_destroy(&nfs_slock_mutex);
		mtx_destroy(&nfs_req_mutex);
		mtx_destroy(&nfsrv_nfsuserdsock.nr_mtx);
		loaded = 0;
		break;
	default:
		error = EOPNOTSUPP;
		break;
	}
out:
	NFSEXITCODE(error);
	return error;
}
static int nfscommon_modevent ( module_t mod , int type , void * data ) { int error = 0 ; static int loaded = 0 ; switch ( type ) { case MOD_LOAD : if ( loaded ) goto out ; newnfs_portinit ( ) ; mtx_init ( & nfs_nameid_mutex , " " , NULL , MTX_DEF ) ; mtx_init ( & nfs_sockl_mutex , " " , NULL , MTX_DEF ) ; mtx_init ( & nfs_slock_mutex , " " , NULL , MTX_DEF ) ; mtx_init ( & nfs_req_mutex , " " , NULL , MTX_DEF ) ; mtx_init ( & nfsrv_nfsuserdsock . nr_mtx , " " , NULL , MTX_DEF ) ; callout_init ( & newnfsd_callout , 1 ) ; newnfs_init ( ) ; nfsd_call_nfscommon = nfssvc_nfscommon ; loaded = 1 ; break ; case MOD_UNLOAD : if ( newnfs_numnfsd != 0 || nfsrv_nfsuserd != 0 || nfs_numnfscbd != 0 ) { error = EBUSY ; break ; } nfsd_call_nfscommon = NULL ; callout_drain ( & newnfsd_callout ) ; nfsrv_cleanusergroup ( ) ; mtx_destroy ( & nfs_nameid_mutex ) ; mtx_destroy ( & newnfsd_mtx ) ; mtx_destroy ( & nfs_state_mutex ) ; mtx_destroy ( & nfs_sockl_mutex ) ; mtx_destroy ( & nfs_slock_mutex ) ; mtx_destroy ( & nfs_req_mutex ) ; mtx_destroy ( & nfsrv_nfsuserdsock . nr_mtx ) ; loaded = 0 ; break ; default : error = EOPNOTSUPP ; break ; } out : NFSEXITCODE ( error ) ; return error ; }
Called once to initialize data structures...
Called once to initialize data structures ...
/* Clean out the name<-->id cache. */ /* and get rid of the mutexes */