void slibreapthr_main(struct psc_thread *thr) { while (pscthr_run(thr)) { psc_pool_reap(slab_pool, 0); sleep(10); } }
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); } }
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); } }
__static void psc_eqpollthr_main(struct psc_thread *thr) { while (pscthr_run(thr)) pscrpc_check_events(100); }