int VOLSER_AFSVolListVolumes(struct rx_call *call, const int32_t partID, const int32_t flags, volEntries *resultEntries) { int ret = 0; List *vollist; Listitem *item; volume_handle *vh; struct dp_part *dp; int numvol; int i; mlog_log(MDEBVOLDB, "VOLSER_AFSVolListVolumes"); ret = dp_create (partID, &dp); if (ret) goto out; ret = vld_list_volumes(dp, &vollist); if (ret) goto free_part; numvol = 0; item = listhead(vollist); while (item) { numvol++; item = listnext(vollist, item); } resultEntries->len = numvol; resultEntries->val = calloc(sizeof(struct volintInfo) * resultEntries->len, 1); i = 0; while (!listemptyp(vollist)) { vh = (volume_handle *) listdelhead(vollist); assert(vh); ret = vld_info_uptodatep (vh); assert(ret == 0); copy_volumeinfo(&resultEntries->val[i], vh, partID); vld_free (vh); i++; } free(vollist); free_part: dp_free (dp); out: VOLSER_EXIT; return ret; }
static Bool client_inuse_p (struct ropa_client *c) { assert (c); if (c->state == ROPAC_FREE) return FALSE; if (c->state == ROPAC_DEAD && listemptyp(c->callbacks)) return FALSE; return TRUE; }
static void callback_deref (struct ropa_cb *cb) { cb->ref--; mlog_log (MDEBROPA, "cb_deref: %x.%x.%x (%d)", cb->fid.Volume, cb->fid.Vnode, cb->fid.Unique, cb->ref); if (cb->ref == 0) { int ret = hashtabdel (ht_callbacks, cb); mlog_log (MDEBROPA, "cb_deref: removing %x.%x.%x", cb->fid.Volume, cb->fid.Vnode, cb->fid.Unique); assert (ret == 0); if (cb->li) listdel (lru_callback, cb->li); assert (listemptyp (cb->ccpairs)); memset (&cb->fid, 0, sizeof(cb->fid)); cb->li = listaddtail (lru_callback, cb); } }
static Bool callback_inuse_p (struct ropa_cb *cb) { assert (cb); return !listemptyp (cb->ccpairs) ; }
static void pinger (char *arg) { for (;;) { struct timeval tv; Listitem *item; ConnCacheEntry *e; struct in_addr addr; const char *port_str; arla_warnx(ADEBCONN, "running pinger"); while (listemptyp (connprobelist)) LWP_WaitProcess (connprobelist); item = listhead (connprobelist); e = (ConnCacheEntry *)listdata (item); assert (e->probe_le == item); gettimeofday (&tv, NULL); if (tv.tv_sec < e->probe_next) { unsigned long t = e->probe_next - tv.tv_sec; arla_warnx(ADEBCONN, "pinger: sleeping %lu second(s)", t); IOMGR_Sleep (t); continue; } listdel (connprobelist, item); e->probe_le = NULL; if (e->flags.alivep) continue; addr.s_addr = e->host; port_str = ports_num2name (e->port); if (port_str != NULL) arla_warnx (ADEBCONN, "pinger: probing %s/%s", inet_ntoa(addr), port_str); else arla_warnx (ADEBCONN, "pinger: probing %s/%d", inet_ntoa(addr), e->port); ++e->refcount; if (e->probe == NULL) arla_warnx(ADEBWARN, "pinger: probe function is NULL, " "host: %s cell: %d port: %d", inet_ntoa(addr), e->cell, e->port); if (connected_mode == DISCONNECTED) { arla_warnx(ADEBCONN, "pinger: ignoring host in disconnected mode"); } else if (e->probe && ((*(e->probe))(e->connection) == 0)) { conn_alive (e); } else { re_probe (e); } conn_free (e); } }