From: Andreas Dilger Date: Mon, 18 Feb 2013 06:58:14 +0000 (-0700) Subject: LU-2775 fid: allow FID-on-OST in fid_seq_is_mdt() X-Git-Tag: 2.3.63~70 X-Git-Url: https://git.whamcloud.com/?p=fs%2Flustre-release.git;a=commitdiff_plain;h=20b3c42dfca56b79b891cb290768b2c9ace80d0b LU-2775 fid: allow FID-on-OST in fid_seq_is_mdt() The LASSERT_SEQ_IS_MDT() macro used fid_seq_is_mdt() in several places to verify that a FID was "sane" for where it was being used. However, there should never be LASSERTs for data from the network or disk. The use of LASSERT_SEQ_IS_MDT() is removed from clients, since this is "validating" data from the network. This macro is no longer used, so remove it. The old CMD objseq_to_mdsno() and mdt_to_obd_objseq() helpers are also no longer needed for DNE, and can be removed. Signed-off-by: Andreas Dilger Change-Id: I74bc9198799045b8bd91510cb45e8f876012cab0 Reviewed-on: http://review.whamcloud.com/5456 Tested-by: Hudson Reviewed-by: John Hammond Reviewed-by: wangdi Tested-by: Maloo Reviewed-by: Oleg Drokin --- diff --git a/lustre/include/obd.h b/lustre/include/obd.h index 74a8104..5149e4b 100644 --- a/lustre/include/obd.h +++ b/lustre/include/obd.h @@ -958,37 +958,6 @@ struct target_recovery_data { struct completion trd_finishing; }; -/** - * In HEAD for CMD, the object is created in group number which is 3>= - * or indexing starts from 3. To test this assertions are added to disallow - * group 0. But to run 2.0 mds server on 1.8.x disk format (i.e. interop_mode) - * object in group 0 needs to be allowed. - * So for interop mode following changes needs to be done: - * 1. No need to assert on group 0 or allow group 0 - * 2. The group number indexing starts from 0 instead of 3 - */ - -#define LASSERT_SEQ_IS_MDT(seq) LASSERT(fid_seq_is_mdt(seq)) - -static inline __u64 objseq_to_mdsno(obd_seq seq) -{ - LASSERT_SEQ_IS_MDT(seq); - if (seq == FID_SEQ_OST_MDT0) - return 0; - return seq - FID_SEQ_OST_MDT1 + 1; -} - -static inline int mdt_to_obd_objseq(int mdtid) -{ - /** - * MDS0 uses seq 0 pre FID-on-OST, other MDSes will use seq from - * FID_SEQ_OST_MDT1 - */ - if (mdtid) - return FID_SEQ_OST_MDT1 + mdtid - 1; - return 0; -} - struct obd_llog_group { cfs_list_t olg_list; int olg_seq; diff --git a/lustre/lov/lov_obd.c b/lustre/lov/lov_obd.c index 534f40d..39c6844 100644 --- a/lustre/lov/lov_obd.c +++ b/lustre/lov/lov_obd.c @@ -1687,7 +1687,6 @@ static int lov_change_cbdata(struct obd_export *exp, continue; } - LASSERT_SEQ_IS_MDT(loi->loi_seq); submd.lsm_object_id = loi->loi_id; submd.lsm_object_seq = loi->loi_seq; submd.lsm_stripe_count = 0; @@ -1724,7 +1723,6 @@ static int lov_find_cbdata(struct obd_export *exp, continue; } - LASSERT_SEQ_IS_MDT(loi->loi_seq); submd.lsm_object_id = loi->loi_id; submd.lsm_object_seq = loi->loi_seq; submd.lsm_stripe_count = 0; @@ -1753,7 +1751,6 @@ static int lov_cancel(struct obd_export *exp, struct lov_stripe_md *lsm, if (!exp || !exp->exp_obd) RETURN(-ENODEV); - LASSERT_SEQ_IS_MDT(lsm->lsm_object_seq); LASSERT(lockh); lov = &exp->exp_obd->u.lov; rc = lov_prep_cancel_set(exp, &oinfo, lsm, mode, lockh, &set); @@ -1809,7 +1806,6 @@ static int lov_cancel_unused(struct obd_export *exp, ASSERT_LSM_MAGIC(lsm); - LASSERT_SEQ_IS_MDT(lsm->lsm_object_seq); for (i = 0; i < lsm->lsm_stripe_count; i++) { struct lov_stripe_md submd; struct lov_oinfo *loi = lsm->lsm_oinfo[i]; diff --git a/lustre/osc/osc_request.c b/lustre/osc/osc_request.c index 442fef2..d2058b6 100644 --- a/lustre/osc/osc_request.c +++ b/lustre/osc/osc_request.c @@ -69,97 +69,99 @@ int osc_cleanup(struct obd_device *obd); /* Pack OSC object metadata for disk storage (LE byte order). */ static int osc_packmd(struct obd_export *exp, struct lov_mds_md **lmmp, - struct lov_stripe_md *lsm) + struct lov_stripe_md *lsm) { - int lmm_size; - ENTRY; + int lmm_size; + ENTRY; - lmm_size = sizeof(**lmmp); - if (!lmmp) - RETURN(lmm_size); + lmm_size = sizeof(**lmmp); + if (lmmp == NULL) + RETURN(lmm_size); - if (*lmmp && !lsm) { - OBD_FREE(*lmmp, lmm_size); - *lmmp = NULL; - RETURN(0); - } + if (*lmmp != NULL && lsm == NULL) { + OBD_FREE(*lmmp, lmm_size); + *lmmp = NULL; + RETURN(0); + } else if (unlikely(lsm != NULL && lsm->lsm_object_id == 0)) { + RETURN(-EBADF); + } - if (!*lmmp) { - OBD_ALLOC(*lmmp, lmm_size); - if (!*lmmp) - RETURN(-ENOMEM); - } + if (*lmmp == NULL) { + OBD_ALLOC(*lmmp, lmm_size); + if (*lmmp == NULL) + RETURN(-ENOMEM); + } - if (lsm) { - LASSERT(lsm->lsm_object_id); - LASSERT_SEQ_IS_MDT(lsm->lsm_object_seq); - (*lmmp)->lmm_object_id = cpu_to_le64(lsm->lsm_object_id); - (*lmmp)->lmm_object_seq = cpu_to_le64(lsm->lsm_object_seq); - } + if (lsm != NULL) { + (*lmmp)->lmm_object_id = cpu_to_le64(lsm->lsm_object_id); + (*lmmp)->lmm_object_seq = cpu_to_le64(lsm->lsm_object_seq); + } - RETURN(lmm_size); + RETURN(lmm_size); } /* Unpack OSC object metadata from disk storage (LE byte order). */ static int osc_unpackmd(struct obd_export *exp, struct lov_stripe_md **lsmp, - struct lov_mds_md *lmm, int lmm_bytes) + struct lov_mds_md *lmm, int lmm_bytes) { - int lsm_size; - struct obd_import *imp = class_exp2cliimp(exp); - ENTRY; + int lsm_size; + struct obd_import *imp = class_exp2cliimp(exp); + ENTRY; - if (lmm != NULL) { - if (lmm_bytes < sizeof (*lmm)) { - CERROR("lov_mds_md too small: %d, need %d\n", - lmm_bytes, (int)sizeof(*lmm)); - RETURN(-EINVAL); - } - /* XXX LOV_MAGIC etc check? */ + if (lmm != NULL) { + if (lmm_bytes < sizeof(*lmm)) { + CERROR("%s: lov_mds_md too small: %d, need %d\n", + exp->exp_obd->obd_name, lmm_bytes, + (int)sizeof(*lmm)); + RETURN(-EINVAL); + } + /* XXX LOV_MAGIC etc check? */ - if (lmm->lmm_object_id == 0) { - CERROR("lov_mds_md: zero lmm_object_id\n"); - RETURN(-EINVAL); - } - } + if (unlikely(lmm->lmm_object_id == 0)) { + CERROR("%s: zero lmm_object_id\n", + exp->exp_obd->obd_name); + RETURN(-EINVAL); + } + } - lsm_size = lov_stripe_md_size(1); - if (lsmp == NULL) - RETURN(lsm_size); + lsm_size = lov_stripe_md_size(1); + if (lsmp == NULL) + RETURN(lsm_size); - if (*lsmp != NULL && lmm == NULL) { - OBD_FREE((*lsmp)->lsm_oinfo[0], sizeof(struct lov_oinfo)); - OBD_FREE(*lsmp, lsm_size); - *lsmp = NULL; - RETURN(0); - } + if (*lsmp != NULL && lmm == NULL) { + OBD_FREE((*lsmp)->lsm_oinfo[0], sizeof(struct lov_oinfo)); + OBD_FREE(*lsmp, lsm_size); + *lsmp = NULL; + RETURN(0); + } - if (*lsmp == NULL) { - OBD_ALLOC(*lsmp, lsm_size); - if (*lsmp == NULL) - RETURN(-ENOMEM); - OBD_ALLOC((*lsmp)->lsm_oinfo[0], sizeof(struct lov_oinfo)); - if ((*lsmp)->lsm_oinfo[0] == NULL) { - OBD_FREE(*lsmp, lsm_size); - RETURN(-ENOMEM); - } - loi_init((*lsmp)->lsm_oinfo[0]); - } + if (*lsmp == NULL) { + OBD_ALLOC(*lsmp, lsm_size); + if (unlikely(*lsmp == NULL)) + RETURN(-ENOMEM); + OBD_ALLOC((*lsmp)->lsm_oinfo[0], sizeof(struct lov_oinfo)); + if (unlikely((*lsmp)->lsm_oinfo[0] == NULL)) { + OBD_FREE(*lsmp, lsm_size); + RETURN(-ENOMEM); + } + loi_init((*lsmp)->lsm_oinfo[0]); + } else if (unlikely((*lsmp)->lsm_object_id == 0)) { + RETURN(-EBADF); + } - if (lmm != NULL) { - /* XXX zero *lsmp? */ - (*lsmp)->lsm_object_id = le64_to_cpu (lmm->lmm_object_id); - (*lsmp)->lsm_object_seq = le64_to_cpu (lmm->lmm_object_seq); - LASSERT((*lsmp)->lsm_object_id); - LASSERT_SEQ_IS_MDT((*lsmp)->lsm_object_seq); - } + if (lmm != NULL) { + /* XXX zero *lsmp? */ + (*lsmp)->lsm_object_id = le64_to_cpu(lmm->lmm_object_id); + (*lsmp)->lsm_object_seq = le64_to_cpu(lmm->lmm_object_seq); + } - if (imp != NULL && - (imp->imp_connect_data.ocd_connect_flags & OBD_CONNECT_MAXBYTES)) - (*lsmp)->lsm_maxbytes = imp->imp_connect_data.ocd_maxbytes; - else - (*lsmp)->lsm_maxbytes = LUSTRE_STRIPE_MAXBYTES; + if (imp != NULL && + (imp->imp_connect_data.ocd_connect_flags & OBD_CONNECT_MAXBYTES)) + (*lsmp)->lsm_maxbytes = imp->imp_connect_data.ocd_maxbytes; + else + (*lsmp)->lsm_maxbytes = LUSTRE_STRIPE_MAXBYTES; - RETURN(lsm_size); + RETURN(lsm_size); } static inline void osc_pack_capa(struct ptlrpc_request *req,