Npsrv* np_srv_create(int nwthread, int flags) { Npsrv *srv = NULL; np_uerror (0); if (!(srv = malloc(sizeof(*srv)))) { np_uerror (ENOMEM); goto error; } memset (srv, 0, sizeof (*srv)); pthread_mutex_init(&srv->lock, NULL); pthread_cond_init(&srv->conncountcond, NULL); srv->msize = 8216; srv->flags = flags; if (np_ctl_initialize (srv) < 0) goto error; if (!np_ctl_addfile (srv->ctlroot, "version", _ctl_get_version, NULL)) goto error; if (!np_ctl_addfile (srv->ctlroot, "connections", _ctl_get_connections, srv)) goto error; if (!np_ctl_addfile (srv->ctlroot, "tpools", _ctl_get_tpools, srv)) goto error; if (!np_ctl_addfile (srv->ctlroot, "requests", _ctl_get_requests, srv)) goto error; if (!np_ctl_addfile_proc (srv->ctlroot, "meminfo")) goto error; if (!np_ctl_addfile_proc (srv->ctlroot, "net.rpc.nfs")) goto error; if (np_usercache_create (srv) < 0) goto error; srv->nwthread = nwthread; if (!(srv->tpool = np_tpool_create (srv, "default"))) goto error; np_tpool_incref_nolock (srv->tpool); return srv; error: if (srv) np_srv_destroy (srv); return NULL; }
int diod_init (Npsrv *srv) { srv->msize = 65536; srv->fiddestroy = diod_fiddestroy; srv->logmsg = diod_log_msg; srv->remapuser = diod_remapuser; srv->auth_required = diod_auth_required; srv->auth = diod_auth_functions; srv->get_path = diod_get_path; srv->attach = diod_attach; srv->clone = diod_clone; srv->walk = diod_walk; srv->read = diod_read; srv->write = diod_write; srv->clunk = diod_clunk; srv->remove = diod_remove; srv->statfs = diod_statfs; srv->lopen = diod_lopen; srv->lcreate = diod_lcreate; srv->symlink = diod_symlink; srv->mknod = diod_mknod; srv->rename = diod_rename; srv->readlink = diod_readlink; srv->getattr = diod_getattr; srv->setattr = diod_setattr; //srv->xattrwalk = diod_xattrwalk; //srv->xattrcreate = diod_xattrcreate; srv->readdir = diod_readdir; srv->fsync = diod_fsync; srv->llock = diod_lock; srv->getlock = diod_getlock; srv->link = diod_link; srv->mkdir = diod_mkdir; //srv->renameat = diod_renameat; //srv->unlinkat = diod_unlinkat; if (!np_ctl_addfile (srv->ctlroot, "exports", diod_get_exports, srv, 0)) goto error; if (ppool_init (srv) < 0) goto error; return 0; error: diod_fini (srv); return -1; }
int diod_register_ops (Npsrv *srv) { srv->msize = 65536; srv->fiddestroy = diod_fiddestroy; srv->logmsg = diod_log_msg; srv->remapuser = diod_remapuser; srv->auth_required = diod_auth_required; srv->auth = diod_auth_functions; srv->attach = diod_attach; srv->clone = diod_clone; srv->walk = diod_walk; srv->read = diod_read; srv->write = diod_write; srv->clunk = diod_clunk; srv->remove = diod_remove; srv->flush = diod_flush; srv->statfs = diod_statfs; srv->lopen = diod_lopen; srv->lcreate = diod_lcreate; srv->symlink = diod_symlink; srv->mknod = diod_mknod; srv->rename = diod_rename; srv->readlink = diod_readlink; srv->getattr = diod_getattr; srv->setattr = diod_setattr; //srv->xattrwalk = diod_xattrwalk; //srv->xattrcreate = diod_xattrcreate; srv->readdir = diod_readdir; srv->fsync = diod_fsync; srv->llock = diod_lock; srv->getlock = diod_getlock; srv->link = diod_link; srv->mkdir = diod_mkdir; if (!np_ctl_addfile (srv->ctlroot, "exports", diod_get_exports, srv)) return -1; return 0; }
int np_usercache_create (Npsrv *srv) { Npusercache *uc; NP_ASSERT (srv->usercache == NULL); if (!(uc = malloc (sizeof (*uc)))) { np_uerror (ENOMEM); return -1; } uc->users = NULL; pthread_mutex_init (&uc->lock, NULL); uc->ttl = 60; srv->usercache = uc; if (!np_ctl_addfile (srv->ctlroot, "usercache", _get_usercache,srv,0)) { free (srv->usercache); return -1; } return 0; }
int ppool_init (Npsrv *srv) { PathPool pp; if (!(pp = malloc (sizeof (*pp)))) goto error; pthread_mutex_init (&pp->lock, NULL); pp->hash = hash_create (1000, (hash_key_f)hash_key_string, (hash_cmp_f)strcmp, NULL); if (!pp->hash) { free (pp); goto error; } srv->srvaux = pp; if (!np_ctl_addfile (srv->ctlroot, "files", _ppool_dump, srv, 0)) goto error; return 0; error: ppool_fini (srv); return -1; }