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; }
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); }