void cvolcm_TrimOld() { gdb_sTouchQ* oqp = &gdbroot->db->cacheOld; gdb_sTouchQ* fqp = &gdbroot->db->cacheFree; pool_sQlink* ol; gdb_sObject* op; gdb_sVolume* vp; gdb_AssumeLocked; while (fqp->lc < fqp->lc_min) { ol = pool_Qpred(NULL, gdbroot->pool, &oqp->lh); if (ol == &oqp->lh) break; op = pool_Qitem(ol, gdb_sObject, u.c.cache_ll); vp = pool_Address(NULL, gdbroot->pool, op->l.vr); cvol_FreeObject(NULL, vp, op, vol_mLink_cacheTrim); } }
static void respondObject ( qcom_sGet *get, gdb_sObject *op, pwr_tInt32 lcount, pwr_tInt32 rcount ) { pwr_tStatus sts; qcom_sPut put; gdb_sObject *pop; net_sObjectR *rsp; net_sGobject *gop; net_sGobject *go[net_cObjectMaxCount]; pwr_tUInt32 count; pwr_tUInt32 pcount; pwr_tUInt32 size; pwr_tInt32 i; pool_sQlink *sol; gdb_sObject *sop; gdb_AssumeLocked; /* The parents must be first in the message, so the receiver can link the cache objects. They must be in top-down-order. */ pop = op; pcount = 0; count = 0; while (pop->g.oid.oix != pwr_cNObjectIx && count < net_cObjectMaxCount - 1) { pop = pool_Address(NULL, gdbroot->pool, pop->l.por); go[count++] = &pop->g; } pcount = count; pop = pool_Address(NULL, gdbroot->pool, op->l.por); if (pop != NULL) { /* Left siblings. (At most lcount of them.) */ for ( i = 0, sol = pool_Qpred(NULL, gdbroot->pool, &op->u.n.sib_ll); i < lcount && sol != &pop->u.n.sib_lh && count < net_cObjectMaxCount - 1; i++, sol = pool_Qpred(NULL, gdbroot->pool, sol) ) { sop = pool_Qitem(sol, gdb_sObject, u.n.sib_ll); go[count++] = &sop->g; } /* Right siblings. (At most rcount of them.) */ for ( i = 0, sol = pool_Qsucc(NULL, gdbroot->pool, &op->u.n.sib_ll); i < rcount && sol != &pop->u.n.sib_lh && count < net_cObjectMaxCount - 1; i++, sol = pool_Qsucc(NULL, gdbroot->pool, sol) ) { sop = pool_Qitem(sol, gdb_sObject, u.n.sib_ll); go[count++] = &sop->g; } } /* Build response message. */ size = sizeof(net_sObjectR) + count * sizeof(net_sGobject); rsp = net_Alloc(&sts, &put, size, net_eMsg_objectR); if (rsp == NULL) { printf("NETH: could not allocate pams buffer for Cache send response, sts: %d\n", sts); respondError(get, op->g.oid, sts); return; } gop = &rsp->g[0]; /* Copy parent objects. */ for (i = pcount - 1; i >= 0; i--) *gop++ = *(go[i]); /* Copy target object. */ *gop++ = op->g; /* Copy sibling objects. */ for (i = pcount; i < count; i++) *gop++ = *(go[i]); rsp->sts = sts; rsp->oid = op->g.oid; rsp->count = count + 1; if (!net_Reply(&sts, get, &put, 0)) errh_Bugcheck(sts, "net_Reply"); }