Example #1
0
int
svz_sisis_clean_bmap(struct thread * thread)
{
  uint16_t * chcksum_ptr;
  struct bmap * bmap;

  chcksum_ptr = (uint16_t *)THREAD_ARG(thread);

  pthread_mutex_lock(&bmap_mutex);
  bmap = bmap_lookup(*chcksum_ptr);

  if(bmap)
  {
    zlog_debug("periodic called to clean up bmap for checksum [%d]: cleaning...", *chcksum_ptr);
    bmap_unset(*chcksum_ptr);
  }
  else
  {
    zlog_debug("periodic called to clean up bmap for checksum [%d]: already cleaned...", *chcksum_ptr);
  }
  clear_checksum_streams(*chcksum_ptr);
  pthread_mutex_unlock(&bmap_mutex);

  free(chcksum_ptr); 
  return 0;
}
Example #2
0
/*
 * Handle a BMAPCHWRMODE request to upgrade a client bmap lease from
 * READ-only to READ+WRITE.
 * @rq: RPC request.
 */
int
slm_rmc_handle_bmap_chwrmode(struct pscrpc_request *rq)
{
	struct bmap_mds_lease *bml = NULL;
	struct srm_bmap_chwrmode_req *mq;
	struct srm_bmap_chwrmode_rep *mp;
	struct fidc_membh *f = NULL;
	struct bmapc_memb *b = NULL;
	struct bmap_mds_info *bmi;

	SL_RSX_ALLOCREP(rq, mq, mp);
	mp->rc = -slm_fcmh_get(&mq->sbd.sbd_fg, &f);
	if (mp->rc)
		PFL_GOTOERR(out, mp->rc);
	mp->rc = bmap_lookup(f, mq->sbd.sbd_bmapno, &b);
	if (mp->rc)
		PFL_GOTOERR(out, mp->rc);

	bmi = bmap_2_bmi(b);

	bml = mds_bmap_getbml(b, mq->sbd.sbd_seq,
	    mq->sbd.sbd_nid, mq->sbd.sbd_pid);

	if (bml == NULL)
		PFL_GOTOERR(out, mp->rc = -EINVAL);

	mp->rc = mds_bmap_bml_chwrmode(bml, mq->prefios[0]);
	if (mp->rc == -PFLERR_ALREADY)
		mp->rc = 0;
	else if (mp->rc)
		PFL_GOTOERR(out, mp->rc);

	mp->sbd = mq->sbd;
	mp->sbd.sbd_seq = bml->bml_seq;
	mp->sbd.sbd_key = bmi->bmi_assign->odtr_crc;

	psc_assert(bmi->bmi_wr_ion);
	mp->sbd.sbd_ios = rmmi2resm(bmi->bmi_wr_ion)->resm_res_id;

 out:
	if (bml)
		mds_bmap_bml_release(bml);
	if (b)
		bmap_op_done(b);
	if (f)
		fcmh_op_done(f);
	return (0);
}
Example #3
0
int
nandfs_bmap_lookup(struct nandfs_node *node, nandfs_lbn_t lblk,
    nandfs_daddr_t *vblk)
{
	int error = 0;

	if (node->nn_ino == NANDFS_GC_INO && lblk >= 0)
		*vblk = lblk;
	else
		error = bmap_lookup(node, lblk, vblk);

	DPRINTF(TRANSLATE, ("%s: error %d ino %#jx lblocknr %#jx -> %#jx\n",
	    __func__, error, (uintmax_t)node->nn_ino, (uintmax_t)lblk,
	    (uintmax_t)*vblk));

	if (error)
		nandfs_error("%s: returned %d", __func__, error);

	return (error);
}