Пример #1
0
void
slibreapthr_main(struct psc_thread *thr)
{
	while (pscthr_run(thr)) {
		psc_pool_reap(slab_pool, 0);
		sleep(10);
	}
}
Пример #2
0
void
slmbmaptimeothr_begin(struct psc_thread *thr)
{
	struct bmap_mds_lease *bml;
	int rc, nsecs = 0;

	while (pscthr_run(thr)) {
		spinlock(&mdsBmapTimeoTbl.btt_lock);
		bml = pll_peekhead(&mdsBmapTimeoTbl.btt_leases);
		if (!bml) {
			freelock(&mdsBmapTimeoTbl.btt_lock);
			nsecs = BMAP_TIMEO_MAX;
			goto sleep;
		}

		if (!BML_TRYLOCK(bml)) {
			freelock(&mdsBmapTimeoTbl.btt_lock);
			nsecs = 1;
			goto sleep;
		}
		if (bml->bml_refcnt) {
			BML_ULOCK(bml);
			freelock(&mdsBmapTimeoTbl.btt_lock);
			nsecs = 1;
			goto sleep;
		}

		if (!(bml->bml_flags & BML_FREEING)) {
			nsecs = bml->bml_expire - time(NULL);
			if (nsecs > 0) {
				BML_ULOCK(bml);
				freelock(&mdsBmapTimeoTbl.btt_lock);
				goto sleep;
			}
			bml->bml_flags |= BML_FREEING;
		}

		BML_ULOCK(bml);
		freelock(&mdsBmapTimeoTbl.btt_lock);

		rc = mds_bmap_bml_release(bml);
		if (rc) {
			DEBUG_BMAP(PLL_WARN, bml_2_bmap(bml),
			    "rc=%d bml=%p fl=%d seq=%"PRId64,
			    rc, bml, bml->bml_flags, bml->bml_seq);
			nsecs = 1;
		} else
			nsecs = 0;
 sleep:
		psclog_debug("nsecs=%d", nsecs);

		if (nsecs > 0)
			sleep((uint32_t)nsecs);
	}
}
Пример #3
0
void
pscrpc_nbreapthr_main(struct psc_thread *thr)
{
	struct pscrpc_request_set *set;
	struct pscrpc_nbreapthr *pnbt;
	int cntr;

	pnbt = thr->pscthr_private;
	set = pnbt->pnbt_set;
	while (pscthr_run(thr)) {
		spinlock(&set->set_lock);
		cntr = set->set_compl.pc_counter;
		if (pscrpc_set_checkone(set))
			freelock(&set->set_lock);
		else if (cntr == set->set_compl.pc_counter)
			psc_compl_waitrel_s(&set->set_compl,
			    &set->set_lock, 1);
		else
			freelock(&set->set_lock);
	}
}
Пример #4
0
__static void
psc_eqpollthr_main(struct psc_thread *thr)
{
	while (pscthr_run(thr))
		pscrpc_check_events(100);
}