Example #1
0
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;
}
Example #2
0
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);
  }
}
Example #3
0
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;
}