예제 #1
0
static void
vdev_mirror_close(vdev_t *vd)
{
	int c;

	for (c = 0; c < vd->vdev_children; c++)
		vdev_close(vd->vdev_child[c]);
}
예제 #2
0
void
vdev_free(vdev_t *vd)
{
	int c;

	/*
	 * vdev_free() implies closing the vdev first.  This is simpler than
	 * trying to ensure complicated semantics for all callers.
	 */
	vdev_close(vd);

	ASSERT(!list_link_active(&vd->vdev_dirty_node));

	/*
	 * Free all children.
	 */
	for (c = 0; c < vd->vdev_children; c++)
		vdev_free(vd->vdev_child[c]);

	ASSERT(vd->vdev_child == NULL);
	ASSERT(vd->vdev_guid_sum == vd->vdev_guid);

	/*
	 * Discard allocation state.
	 */
	if (vd == vd->vdev_top)
		vdev_metaslab_fini(vd);

	ASSERT3U(vd->vdev_stat.vs_space, ==, 0);
	ASSERT3U(vd->vdev_stat.vs_dspace, ==, 0);
	ASSERT3U(vd->vdev_stat.vs_alloc, ==, 0);

	/*
	 * Remove this vdev from its parent's child list.
	 */
	vdev_remove_child(vd->vdev_parent, vd);

	ASSERT(vd->vdev_parent == NULL);

	vdev_free_common(vd);
}
예제 #3
0
파일: onet.c 프로젝트: jeromeetienne/neoip
/**
 * close onet layer
 */
void onet_closelay( void )
{
	onet_t	*onet	= onet_main;
	GList	*elem;
	// close all tunnel
	while( (elem = onet->tunnel_list) ){
		onet_tunnel_t	*tunnel = elem->data;
		onet_tunnel_close( tunnel );
	}
	// close all pending ns_req_dst_iaddr
	while( (elem = onet->ns_req_dst_iaddr_list) ){
		onet_ns_req_dst_iaddr_t	*ns_req_dst_iaddr = elem->data;
		onet_ns_req_dst_iaddr_del( ns_req_dst_iaddr );
	}
	// close the iaddr_log_client if it is still running
	if( ip_addr_is_null(&onet->ip_iaddr) ){
		iaddr_log_client_close( &onet->iaddr_log_client );
	}else{
		// delete the handler in httpd
		httpd_handler_del_by_path( "/neoip_router" );		
		// vdev_unregister_callback( vdev, onet_vdev_in );
		vdev_close( &onet->vdev );
		// stop responder
		resp_stop(onet->resp);
		// stop the dnsgrab layer	
		if( prop_get_bool_dfl( "neoip_router", "debug:dnsgrab", 1) ){
			dnsgrab_stop();
			watchdog_close();
		}
	}
	// open the dst_iaddr_negcache
	dst_iaddr_negcache_close( onet->dst_iaddr_negcache );
	// free the memory
	nipmem_free( onet );
	onet_main = NULL;
}