Пример #1
0
int lmv_fld_lookup(struct lmv_obd *lmv,
		   const struct lu_fid *fid,
		   mdsno_t *mds)
{
	int rc;

	/* FIXME: Currently ZFS still use local seq for ROOT unfortunately, and
	 * this fid_is_local check should be removed once LU-2240 is fixed */
	LASSERTF((fid_seq_in_fldb(fid_seq(fid)) ||
		  fid_seq_is_local_file(fid_seq(fid))) &&
		 fid_is_sane(fid), DFID" is insane!\n", PFID(fid));

	rc = fld_client_lookup(&lmv->lmv_fld, fid_seq(fid), mds,
			       LU_SEQ_RANGE_MDT, NULL);
	if (rc) {
		CERROR("Error while looking for mds number. Seq %#llx, err = %d\n",
		       fid_seq(fid), rc);
		return rc;
	}

	CDEBUG(D_INODE, "FLD lookup got mds #%x for fid="DFID"\n",
	       *mds, PFID(fid));

	if (*mds >= lmv->desc.ld_tgt_count) {
		CERROR("FLD lookup got invalid mds #%x (max: %x) "
		       "for fid="DFID"\n", *mds, lmv->desc.ld_tgt_count,
		       PFID(fid));
		rc = -EINVAL;
	}
	return rc;
}
Пример #2
0
int lmv_fld_lookup(struct lmv_obd *lmv, const struct lu_fid *fid, u32 *mds)
{
	struct obd_device *obd = lmv2obd_dev(lmv);
	int rc;

	/*
	 * FIXME: Currently ZFS still use local seq for ROOT unfortunately, and
	 * this fid_is_local check should be removed once LU-2240 is fixed
	 */
	if (!fid_is_sane(fid) || !(fid_seq_in_fldb(fid_seq(fid)) ||
				   fid_seq_is_local_file(fid_seq(fid)))) {
		CERROR("%s: invalid FID " DFID "\n", obd->obd_name, PFID(fid));
		return -EINVAL;
	}

	rc = fld_client_lookup(&lmv->lmv_fld, fid_seq(fid), mds,
			       LU_SEQ_RANGE_MDT, NULL);
	if (rc) {
		CERROR("Error while looking for mds number. Seq %#llx, err = %d\n",
		       fid_seq(fid), rc);
		return rc;
	}

	CDEBUG(D_INODE, "FLD lookup got mds #%x for fid="DFID"\n",
	       *mds, PFID(fid));

	if (*mds >= lmv->desc.ld_tgt_count) {
		CERROR("FLD lookup got invalid mds #%x (max: %x) for fid=" DFID "\n", *mds, lmv->desc.ld_tgt_count,
		       PFID(fid));
		rc = -EINVAL;
	}
	return rc;
}
Пример #3
0
int lmv_fld_lookup(struct lmv_obd *lmv,
                   const struct lu_fid *fid,
                   mdsno_t *mds)
{
	int rc;
	ENTRY;

	LASSERTF(fid_is_sane(fid), DFID" is insane!\n", PFID(fid));

	/* FIXME: Because ZFS still use LOCAL fid sequence for root,
	 * and root will always be in MDT0, for local fid, it will
	 * return 0 directly. And it should be removed once the root
	 * FID has been assigned with special sequence */
	if (fid_seq(fid) == FID_SEQ_LOCAL_FILE) {
		*mds = 0;
		RETURN(0);
	}

	rc = fld_client_lookup(&lmv->lmv_fld, fid_seq(fid), mds,
                               LU_SEQ_RANGE_MDT, NULL);
        if (rc) {
                CERROR("Error while looking for mds number. Seq "LPX64
                       ", err = %d\n", fid_seq(fid), rc);
                RETURN(rc);
        }

        CDEBUG(D_INODE, "FLD lookup got mds #%x for fid="DFID"\n",
               *mds, PFID(fid));

        if (*mds >= lmv->desc.ld_tgt_count) {
                CERROR("FLD lookup got invalid mds #%x (max: %x) "
                       "for fid="DFID"\n", *mds, lmv->desc.ld_tgt_count,
                       PFID(fid));
                rc = -EINVAL;
        }
        RETURN(rc);
}