コード例 #1
0
ファイル: lqfs.c プロジェクト: BackupTheBerlios/samqfs
void
lqfs_init(void)
{
	/* Create kmem caches */
	lqfs_sv = kmem_cache_create("lqfs_save", sizeof (lqfs_save_t), 0,
	    NULL, NULL, NULL, NULL, NULL, 0);
	lqfs_bp = kmem_cache_create("lqfs_bufs", sizeof (lqfs_buf_t), 0,
	    NULL, NULL, NULL, NULL, NULL, 0);

	sam_mutex_init(&log_mutex, NULL, MUTEX_DEFAULT, NULL);

	_init_top();

	if (&bio_lqfs_strategy != NULL) {
		bio_lqfs_strategy = (void (*) (void *, buf_t *)) lqfs_strategy;
	}

	/*
	 * Initialise general logging and delta kstats
	 */
	lqfs_logstats = kstat_create("sam-qfs", 0, "logstats", "fs",
	    KSTAT_TYPE_NAMED, sizeof (logstats) / sizeof (kstat_named_t),
	    KSTAT_FLAG_VIRTUAL);
	if (lqfs_logstats) {
		lqfs_logstats->ks_data = (void *) &logstats;
		kstat_install(lqfs_logstats);
	}

	lqfs_deltastats = kstat_create("sam-qfs", 0, "deltastats", "fs",
	    KSTAT_TYPE_NAMED, sizeof (dkstats) / sizeof (kstat_named_t),
	    KSTAT_FLAG_VIRTUAL);
	if (lqfs_deltastats) {
		lqfs_deltastats->ks_data = (void *) &dkstats;
		lqfs_deltastats->ks_update = delta_stats_update;
		kstat_install(lqfs_deltastats);
	}

	/*
	 * Set up the maximum amount of kmem that the crbs (system wide)
	 * can use.
	 */
	qfs_crb_limit = kmem_maxavail() / qfs_max_crb_divisor;
}
コード例 #2
0
int
nfs4_rnode_init(void)
{
	ulong_t nrnode4_max;
	int i;

	/*
	 * Compute the size of the rnode4 hash table
	 */
	if (nrnode <= 0)
		nrnode = ncsize;
	nrnode4_max =
	    (ulong_t)((kmem_maxavail() >> 2) / sizeof (struct rnode4));
	if (nrnode > nrnode4_max || (nrnode == 0 && ncsize == 0)) {
		zcmn_err(GLOBAL_ZONEID, CE_NOTE,
		    "setting nrnode to max value of %ld", nrnode4_max);
		nrnode = nrnode4_max;
	}
	rtable4size = 1 << highbit(nrnode / rnode4_hashlen);
	rtable4mask = rtable4size - 1;

	/*
	 * Allocate and initialize the hash buckets
	 */
	rtable4 = kmem_alloc(rtable4size * sizeof (*rtable4), KM_SLEEP);
	for (i = 0; i < rtable4size; i++) {
		rtable4[i].r_hashf = (rnode4_t *)(&rtable4[i]);
		rtable4[i].r_hashb = (rnode4_t *)(&rtable4[i]);
		rw_init(&rtable4[i].r_lock, NULL, RW_DEFAULT, NULL);
	}

	rnode4_cache = kmem_cache_create("rnode4_cache", sizeof (rnode4_t),
	    0, NULL, NULL, nfs4_reclaim, NULL, NULL, 0);

	return (0);
}