void cvolcm_DeleteObject ( qcom_sGet *get ) { pwr_tStatus sts; gdb_sObject *op; gdb_sObject *pop; gdb_sObject *sop; pwr_tObjid soid; gdb_sVolume *vp; net_sDeleteObject *dop = (net_sDeleteObject *) get->data; gdb_AssumeUnlocked; gdb_ScopeLock { pop = hash_Search(&sts, gdbroot->oid_ht, &dop->par.oid); op = hash_Search(&sts, gdbroot->oid_ht, &dop->notify.oid); if (op != NULL) { pwr_Assert(cdh_ObjidIsEqual(op->g.f.poid, dop->par.oid)); vp = pool_Address(NULL, gdbroot->pool, op->l.vr); cvol_FreeObject(&sts, vp, op, vol_mLink_cacheDelete); } if (pop == NULL) break; pop->g.soid = dop->par.soid; if (cdh_ObjidIsNull(pop->g.soid)) { pop->g.flags.b.isParent = 0; } soid = dop->par.oid; soid.oix = dop->sib.blink; sop = hash_Search(&sts, gdbroot->oid_ht, &soid); if (sop != NULL) sop->g.sib.flink = dop->sib.newflink; soid.oix = dop->sib.flink; sop = hash_Search(&sts, gdbroot->oid_ht, &soid); if (sop != NULL) sop->g.sib.blink = dop->sib.newblink; } gdb_ScopeUnlock; }
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); } }
void cvolcm_MoveObject ( qcom_sGet *get ) { pwr_tStatus sts; gdb_sObject *op; gdb_sObject *pop; gdb_sObject *sop; pwr_tObjid soid; gdb_sVolume *vp; net_sMoveObject *mop = (net_sMoveObject *) get->data; gdb_AssumeUnlocked; gdb_ScopeLock { op = hash_Search(&sts, gdbroot->oid_ht, &mop->notify.oid); if (op != NULL) { pop = hash_Search(&sts, gdbroot->oid_ht, &mop->npar.oid); vp = pool_Address(NULL, gdbroot->pool, op->l.vr); if (pop == NULL) { /* New father is not in the cache => delete object from cache. */ cvol_FreeObject(NULL, vp, op, vol_mLink_cacheDelete); op = NULL; } else { cvol_UnlinkObject(&sts, vp, op, vol_mLink_cacheMove); vol_UnlinkObject(&sts, vp, op, vol_mLink_cacheMove); } } pop = hash_Search(&sts, gdbroot->oid_ht, &mop->opar.oid); if (pop != NULL) { pop->g.soid = mop->opar.soid; soid = mop->opar.oid; soid.oix = mop->osib.blink; sop = hash_Search(&sts, gdbroot->oid_ht, &soid); if (sop != NULL) sop->g.sib.flink = mop->osib.newflink; soid.oix = mop->osib.flink; sop = hash_Search(&sts, gdbroot->oid_ht, &soid); if (sop != NULL) sop->g.sib.blink = mop->osib.newblink; } pop = hash_Search(&sts, gdbroot->oid_ht, &mop->npar.oid); if (pop != NULL) { pop->g.soid = mop->npar.soid; soid = mop->npar.oid; soid.oix = mop->nsib.blink; sop = hash_Search(&sts, gdbroot->oid_ht, &soid); if (sop != NULL) sop->g.sib.flink = mop->nsib.newflink; soid.oix = mop->nsib.flink; sop = hash_Search(&sts, gdbroot->oid_ht, &soid); if (sop != NULL) sop->g.sib.blink = mop->nsib.newblink; } if (op != NULL) { vol_LinkObject(&sts, vp, op, vol_mLink_cacheMove); cvol_LinkObject(&sts, vp, op, vol_mLink_cacheMove); } } gdb_ScopeUnlock; }