Whamcloud - gitweb
LU-2775 fid: allow FID-on-OST in fid_seq_is_mdt()
authorAndreas Dilger <andreas.dilger@intel.com>
Mon, 18 Feb 2013 06:58:14 +0000 (23:58 -0700)
committerOleg Drokin <oleg.drokin@intel.com>
Wed, 13 Mar 2013 18:55:14 +0000 (14:55 -0400)
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 <andreas.dilger@intel.com>
Change-Id: I74bc9198799045b8bd91510cb45e8f876012cab0
Reviewed-on: http://review.whamcloud.com/5456
Tested-by: Hudson
Reviewed-by: John Hammond <johnlockwoodhammond@gmail.com>
Reviewed-by: wangdi <di.wang@intel.com>
Tested-by: Maloo <whamcloud.maloo@gmail.com>
Reviewed-by: Oleg Drokin <oleg.drokin@intel.com>
lustre/include/obd.h
lustre/lov/lov_obd.c
lustre/osc/osc_request.c

index 74a8104..5149e4b 100644 (file)
@@ -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;
index 534f40d..39c6844 100644 (file)
@@ -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];
index 442fef2..d2058b6 100644 (file)
@@ -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,