Whamcloud - gitweb
LU-3253 mdt: use lu_object/device in mdt_object/device 22/6222/2
authorJohn L. Hammond <john.hammond@intel.com>
Wed, 1 May 2013 02:52:01 +0000 (21:52 -0500)
committerOleg Drokin <oleg.drokin@intel.com>
Wed, 10 Jul 2013 02:02:54 +0000 (02:02 +0000)
Have MDT object/device include a LU object/device rather than an MD
object/device as the MDT layer does not define MD operations.

Signed-off-by: John L. Hammond <john.hammond@intel.com>
Change-Id: Icf48d8f1288895ba1ffecdf55f0d036df5961d6e
Reviewed-on: http://review.whamcloud.com/6222
Tested-by: Hudson
Tested-by: Maloo <whamcloud.maloo@gmail.com>
Reviewed-by: Alex Zhuravlev <alexey.zhuravlev@intel.com>
Reviewed-by: Mike Pershin <mike.pershin@intel.com>
Reviewed-by: Oleg Drokin <oleg.drokin@intel.com>
lustre/mdt/mdt_handler.c
lustre/mdt/mdt_internal.h
lustre/mdt/mdt_open.c
lustre/mdt/mdt_reint.c
lustre/mdt/mdt_xattr.c

index 832aad6..d13acbb 100644 (file)
@@ -950,9 +950,9 @@ int mdt_getattr(struct mdt_thread_info *info)
         }
 
         LASSERT(obj != NULL);
-        LASSERT(lu_object_assert_exists(&obj->mot_obj.mo_lu));
+       LASSERT(lu_object_assert_exists(&obj->mot_obj));
 
-        mode = lu_object_attr(&obj->mot_obj.mo_lu);
+       mode = lu_object_attr(&obj->mot_obj);
 
         /* old clients may not report needed easize, use max value then */
         req_capsule_set_size(pill, &RMF_MDT_MD, RCL_SERVER,
@@ -1224,7 +1224,7 @@ static int mdt_getattr_name_lock(struct mdt_thread_info *info,
 
        if (unlikely(!mdt_object_exists(parent))) {
                LU_OBJECT_DEBUG(D_INODE, info->mti_env,
-                               &parent->mot_obj.mo_lu,
+                               &parent->mot_obj,
                                "Parent doesn't exist!\n");
                RETURN(-ESTALE);
        } else if (!info->mti_cross_ref) {
@@ -1284,7 +1284,7 @@ static int mdt_getattr_name_lock(struct mdt_thread_info *info,
 
         if (lname) {
                 /* step 1: lock parent only if parent is a directory */
-                if (S_ISDIR(lu_object_attr(&parent->mot_obj.mo_lu))) {
+               if (S_ISDIR(lu_object_attr(&parent->mot_obj))) {
                         lhp = &info->mti_lh[MDT_LH_PARENT];
                         mdt_lock_pdo_init(lhp, LCK_PR, name, namelen);
                         rc = mdt_object_lock(info, parent, lhp,
@@ -1355,7 +1355,7 @@ relock:
 
                if (!mdt_object_exists(child)) {
                        LU_OBJECT_DEBUG(D_INODE, info->mti_env,
-                                       &child->mot_obj.mo_lu,
+                                       &child->mot_obj,
                                        "Object doesn't exist!\n");
                        GOTO(out_child, rc = -ENOENT);
                }
@@ -1387,7 +1387,7 @@ relock:
                LASSERT(!(child_bits & MDS_INODELOCK_LAYOUT));
                if (!OBD_FAIL_CHECK(OBD_FAIL_MDS_NO_LL_GETATTR) &&
                    exp_connect_layout(info->mti_exp) &&
-                   S_ISREG(lu_object_attr(&child->mot_obj.mo_lu)) &&
+                   S_ISREG(lu_object_attr(&child->mot_obj)) &&
                    ldlm_rep != NULL) {
                        /* try to grant layout lock for regular file. */
                        try_layout = true;
@@ -2351,8 +2351,8 @@ int mdt_quota_dqacq(struct mdt_thread_info *info)
 
 static struct mdt_object *mdt_obj(struct lu_object *o)
 {
-        LASSERT(lu_device_is_mdt(o->lo_dev));
-        return container_of0(o, struct mdt_object, mot_obj.mo_lu);
+       LASSERT(lu_device_is_mdt(o->lo_dev));
+       return container_of0(o, struct mdt_object, mot_obj);
 }
 
 struct mdt_object *mdt_object_new(const struct lu_env *env,
@@ -2365,7 +2365,7 @@ struct mdt_object *mdt_object_new(const struct lu_env *env,
        ENTRY;
 
        CDEBUG(D_INFO, "Allocate object for "DFID"\n", PFID(f));
-       o = lu_object_find(env, &d->mdt_md_dev.md_lu_dev, f, &conf);
+       o = lu_object_find(env, &d->mdt_lu_dev, f, &conf);
        if (unlikely(IS_ERR(o)))
                m = (struct mdt_object *)o;
        else
@@ -2374,20 +2374,21 @@ struct mdt_object *mdt_object_new(const struct lu_env *env,
 }
 
 struct mdt_object *mdt_object_find(const struct lu_env *env,
-                                   struct mdt_device *d,
-                                   const struct lu_fid *f)
+                                  struct mdt_device *d,
+                                  const struct lu_fid *f)
 {
-        struct lu_object *o;
-        struct mdt_object *m;
-        ENTRY;
+       struct lu_object *o;
+       struct mdt_object *m;
+       ENTRY;
 
-        CDEBUG(D_INFO, "Find object for "DFID"\n", PFID(f));
-        o = lu_object_find(env, &d->mdt_md_dev.md_lu_dev, f, NULL);
-        if (unlikely(IS_ERR(o)))
-                m = (struct mdt_object *)o;
-        else
-                m = mdt_obj(o);
-        RETURN(m);
+       CDEBUG(D_INFO, "Find object for "DFID"\n", PFID(f));
+       o = lu_object_find(env, &d->mdt_lu_dev, f, NULL);
+       if (unlikely(IS_ERR(o)))
+               m = (struct mdt_object *)o;
+       else
+               m = mdt_obj(o);
+
+       RETURN(m);
 }
 
 /**
@@ -2582,8 +2583,8 @@ static int mdt_object_lock0(struct mdt_thread_info *info, struct mdt_object *o,
                         RETURN(-ESTALE);
                 } else {
                         /* Non-dir object shouldn't have PDO lock */
-                        if (!S_ISDIR(lu_object_attr(&o->mot_obj.mo_lu)))
-                                RETURN(-ENOTDIR);
+                       if (!S_ISDIR(lu_object_attr(&o->mot_obj)))
+                               RETURN(-ENOTDIR);
                 }
         }
 
@@ -4403,8 +4404,8 @@ static int mdt_stack_init(const struct lu_env *env, struct mdt_device *mdt,
        site = mdt->mdt_child_exp->exp_obd->obd_lu_dev->ld_site;
        LASSERT(site);
        LASSERT(mdt_lu_site(mdt) == NULL);
-       mdt->mdt_md_dev.md_lu_dev.ld_site = site;
-       site->ls_top_dev = &mdt->mdt_md_dev.md_lu_dev;
+       mdt->mdt_lu_dev.ld_site = site;
+       site->ls_top_dev = &mdt->mdt_lu_dev;
        mdt->mdt_child = lu2md_dev(mdt->mdt_child_exp->exp_obd->obd_lu_dev);
 
 
@@ -4421,7 +4422,7 @@ static int mdt_stack_init(const struct lu_env *env, struct mdt_device *mdt,
        if (rc != 0)
                CERROR("Failure to refill session: '%d'\n", rc);
 
-       lu_dev_add_linkage(site, &mdt->mdt_md_dev.md_lu_dev);
+       lu_dev_add_linkage(site, &mdt->mdt_lu_dev);
 
        EXIT;
 class_detach:
@@ -4532,7 +4533,7 @@ static int mdt_quota_init(const struct lu_env *env, struct mdt_device *mdt,
 
        /* configure local quota objects */
        rc = mdt->mdt_qmt_dev->ld_ops->ldo_prepare(env,
-                                                  &mdt->mdt_md_dev.md_lu_dev,
+                                                  &mdt->mdt_lu_dev,
                                                   mdt->mdt_qmt_dev);
        if (rc)
                GOTO(class_cleanup, rc);
@@ -4589,8 +4590,8 @@ static void mdt_quota_fini(const struct lu_env *env, struct mdt_device *mdt)
 
 static void mdt_fini(const struct lu_env *env, struct mdt_device *m)
 {
-        struct md_device  *next = m->mdt_child;
-        struct lu_device  *d    = &m->mdt_md_dev.md_lu_dev;
+       struct md_device  *next = m->mdt_child;
+       struct lu_device  *d    = &m->mdt_lu_dev;
         struct obd_device *obd = mdt2obd_dev(m);
         ENTRY;
 
@@ -4692,7 +4693,7 @@ static int mdt_init0(const struct lu_env *env, struct mdt_device *m,
         mntopt_t                   mntopts;
         ENTRY;
 
-        md_device_init(&m->mdt_md_dev, ldt);
+       lu_device_init(&m->mdt_lu_dev, ldt);
         /*
          * Environment (env) might be missing mdt_thread_key values at that
          * point, if device is allocated when mdt_thread_key is in QUIESCENT
@@ -4749,10 +4750,10 @@ static int mdt_init0(const struct lu_env *env, struct mdt_device *m,
        m->mdt_enable_remote_dir = 0;
        m->mdt_enable_remote_dir_gid = 0;
 
-        m->mdt_md_dev.md_lu_dev.ld_ops = &mdt_lu_ops;
-        m->mdt_md_dev.md_lu_dev.ld_obd = obd;
-        /* set this lu_device to obd, because error handling need it */
-        obd->obd_lu_dev = &m->mdt_md_dev.md_lu_dev;
+       m->mdt_lu_dev.ld_ops = &mdt_lu_ops;
+       m->mdt_lu_dev.ld_obd = obd;
+       /* Set this lu_device to obd for error handling purposes. */
+       obd->obd_lu_dev = &m->mdt_lu_dev;
 
        /* init the stack */
        rc = mdt_stack_init((struct lu_env *)env, m, cfg);
@@ -5007,7 +5008,7 @@ static struct lu_object *mdt_object_alloc(const struct lu_env *env,
                 struct lu_object *o;
                 struct lu_object_header *h;
 
-                o = &mo->mot_obj.mo_lu;
+               o = &mo->mot_obj;
                 h = &mo->mot_header;
                 lu_object_header_init(h);
                 lu_object_init(o, h, d);
@@ -6046,12 +6047,13 @@ static struct lu_device* mdt_device_fini(const struct lu_env *env,
 static struct lu_device *mdt_device_free(const struct lu_env *env,
                                          struct lu_device *d)
 {
-        struct mdt_device *m = mdt_dev(d);
-        ENTRY;
+       struct mdt_device *m = mdt_dev(d);
+       ENTRY;
 
-        md_device_fini(&m->mdt_md_dev);
-        OBD_FREE_PTR(m);
-        RETURN(NULL);
+       lu_device_fini(&m->mdt_lu_dev);
+       OBD_FREE_PTR(m);
+
+       RETURN(NULL);
 }
 
 static struct lu_device *mdt_device_alloc(const struct lu_env *env,
@@ -6065,7 +6067,7 @@ static struct lu_device *mdt_device_alloc(const struct lu_env *env,
         if (m != NULL) {
                 int rc;
 
-                l = &m->mdt_md_dev.md_lu_dev;
+               l = &m->mdt_lu_dev;
                 rc = mdt_init0(env, m, t, cfg);
                 if (rc != 0) {
                         mdt_device_free(env, l);
index 4873b02..9b0a6d1 100644 (file)
@@ -90,17 +90,9 @@ struct mdt_file_data {
 #define MDT_FL_SYNCED 1
 
 struct mdt_device {
-        /* super-class */
-        struct md_device           mdt_md_dev;
+       /* super-class */
+       struct lu_device           mdt_lu_dev;
        struct seq_server_site     mdt_seq_site;
-        struct ptlrpc_service     *mdt_regular_service;
-        struct ptlrpc_service     *mdt_readpage_service;
-       struct ptlrpc_service     *mdt_out_service;
-        struct ptlrpc_service     *mdt_setattr_service;
-        struct ptlrpc_service     *mdt_mdsc_service;
-        struct ptlrpc_service     *mdt_mdss_service;
-        struct ptlrpc_service     *mdt_dtss_service;
-        struct ptlrpc_service     *mdt_fld_service;
         /* DLM name-space for meta-data locks maintained by this server */
         struct ldlm_namespace     *mdt_namespace;
         /* ptlrpc handle for MDS->client connections (for lock ASTs). */
@@ -189,8 +181,8 @@ struct mdt_device {
 #define MDT_COS_DEFAULT         (0)
 
 struct mdt_object {
-        struct lu_object_header mot_header;
-        struct md_object        mot_obj;
+       struct lu_object_header mot_header;
+       struct lu_object        mot_obj;
         __u64                   mot_ioepoch;
         __u64                   mot_flags;
         int                     mot_ioepoch_count;
@@ -543,8 +535,8 @@ mdt_child_ops(struct mdt_device * m)
 
 static inline struct md_object *mdt_object_child(struct mdt_object *o)
 {
-        LASSERT(o);
-        return lu2md(lu_object_next(&o->mot_obj.mo_lu));
+       LASSERT(o);
+       return lu2md(lu_object_next(&o->mot_obj));
 }
 
 static inline struct ptlrpc_request *mdt_info_req(struct mdt_thread_info *info)
@@ -565,39 +557,39 @@ static inline __u64 mdt_conn_flags(struct mdt_thread_info *info)
 }
 
 static inline void mdt_object_get(const struct lu_env *env,
-                                  struct mdt_object *o)
+                                 struct mdt_object *o)
 {
-        ENTRY;
-        lu_object_get(&o->mot_obj.mo_lu);
-        EXIT;
+       ENTRY;
+       lu_object_get(&o->mot_obj);
+       EXIT;
 }
 
 static inline void mdt_object_put(const struct lu_env *env,
-                                  struct mdt_object *o)
+                                 struct mdt_object *o)
 {
-        ENTRY;
-        lu_object_put(env, &o->mot_obj.mo_lu);
-        EXIT;
+       ENTRY;
+       lu_object_put(env, &o->mot_obj);
+       EXIT;
 }
 
 static inline int mdt_object_exists(const struct mdt_object *o)
 {
-        return lu_object_exists(&o->mot_obj.mo_lu);
+       return lu_object_exists(&o->mot_obj);
 }
 
 static inline int mdt_object_remote(const struct mdt_object *o)
 {
-       return lu_object_remote(&o->mot_obj.mo_lu);
+       return lu_object_remote(&o->mot_obj);
 }
 
 static inline const struct lu_fid *mdt_object_fid(const struct mdt_object *o)
 {
-        return lu_object_fid(&o->mot_obj.mo_lu);
+       return lu_object_fid(&o->mot_obj);
 }
 
 static inline struct lu_site *mdt_lu_site(const struct mdt_device *mdt)
 {
-        return mdt->mdt_md_dev.md_lu_dev.ld_site;
+       return mdt->mdt_lu_dev.ld_site;
 }
 
 static inline struct seq_server_site *mdt_seq_site(struct mdt_device *mdt)
@@ -821,18 +813,18 @@ int mdt_fix_attr_ucred(struct mdt_thread_info *, __u32);
 
 static inline struct mdt_device *mdt_dev(struct lu_device *d)
 {
-//        LASSERT(lu_device_is_mdt(d));
-        return container_of0(d, struct mdt_device, mdt_md_dev.md_lu_dev);
+       return container_of0(d, struct mdt_device, mdt_lu_dev);
 }
 
 static inline struct dt_object *mdt_obj2dt(struct mdt_object *mo)
 {
-        struct lu_object *lo;
-        struct mdt_device *mdt = mdt_dev(mo->mot_obj.mo_lu.lo_dev);
+       struct lu_object        *lo;
+       struct mdt_device       *mdt = mdt_dev(mo->mot_obj.lo_dev);
+
+       lo = lu_object_locate(mo->mot_obj.lo_header,
+                             mdt->mdt_bottom->dd_lu_dev.ld_type);
 
-        lo = lu_object_locate(mo->mot_obj.mo_lu.lo_header,
-                              mdt->mdt_bottom->dd_lu_dev.ld_type);
-        return lu2dt(lo);
+       return lu2dt(lo);
 }
 
 /* mdt/mdt_identity.c */
@@ -1063,7 +1055,7 @@ static inline void mdt_dump_capainfo(struct mdt_thread_info *info)
 
 static inline struct obd_device *mdt2obd_dev(const struct mdt_device *mdt)
 {
-        return mdt->mdt_md_dev.md_lu_dev.ld_obd;
+       return mdt->mdt_lu_dev.ld_obd;
 }
 
 extern const struct lu_device_operations mdt_lu_ops;
@@ -1077,12 +1069,12 @@ static inline struct mdt_device *lu2mdt_dev(struct lu_device *d)
 {
        LASSERTF(lu_device_is_mdt(d), "It is %s instead of MDT %p %p\n",
                 d->ld_type->ldt_name, d->ld_ops, &mdt_lu_ops);
-       return container_of0(d, struct mdt_device, mdt_md_dev.md_lu_dev);
+       return container_of0(d, struct mdt_device, mdt_lu_dev);
 }
 
 static inline char *mdt_obd_name(struct mdt_device *mdt)
 {
-       return mdt->mdt_md_dev.md_lu_dev.ld_obd->obd_name;
+       return mdt->mdt_lu_dev.ld_obd->obd_name;
 }
 
 int mds_mod_init(void);
index 2538f57..6ac5eee 100644 (file)
@@ -173,9 +173,9 @@ int mdt_ioepoch_open(struct mdt_thread_info *info, struct mdt_object *o,
         int rc = 0;
         ENTRY;
 
-        if (!(mdt_conn_flags(info) & OBD_CONNECT_SOM) ||
-            !S_ISREG(lu_object_attr(&o->mot_obj.mo_lu)))
-                RETURN(0);
+       if (!(mdt_conn_flags(info) & OBD_CONNECT_SOM) ||
+           !S_ISREG(lu_object_attr(&o->mot_obj)))
+               RETURN(0);
 
        mutex_lock(&o->mot_ioepoch_mutex);
        if (mdt_ioepoch_opened(o)) {
@@ -438,12 +438,12 @@ error_up:
  */
 static int mdt_ioepoch_close(struct mdt_thread_info *info, struct mdt_object *o)
 {
-        struct ptlrpc_request *req = mdt_info_req(info);
-        ENTRY;
+       struct ptlrpc_request *req = mdt_info_req(info);
+       ENTRY;
 
-        if (!(mdt_conn_flags(info) & OBD_CONNECT_SOM) ||
-            !S_ISREG(lu_object_attr(&o->mot_obj.mo_lu)))
-                RETURN(0);
+       if (!(mdt_conn_flags(info) & OBD_CONNECT_SOM) ||
+           !S_ISREG(lu_object_attr(&o->mot_obj)))
+               RETURN(0);
 
         LASSERT(o->mot_ioepoch_count);
         LASSERT(info->mti_ioepoch == NULL ||
@@ -472,16 +472,16 @@ static int mdt_ioepoch_close(struct mdt_thread_info *info, struct mdt_object *o)
  */
 int mdt_som_au_close(struct mdt_thread_info *info, struct mdt_object *o)
 {
-        struct ptlrpc_request *req = mdt_info_req(info);
-        __u64 ioepoch = 0;
-        int act = MDT_SOM_ENABLE;
-        int rc = 0;
-        ENTRY;
+       struct ptlrpc_request   *req = mdt_info_req(info);
+       __u64                    ioepoch = 0;
+       int                      act = MDT_SOM_ENABLE;
+       int                      rc = 0;
+       ENTRY;
 
-        LASSERT(!req || info->mti_ioepoch);
-        if (!(mdt_conn_flags(info) & OBD_CONNECT_SOM) ||
-            !S_ISREG(lu_object_attr(&o->mot_obj.mo_lu)))
-                RETURN(0);
+       LASSERT(!req || info->mti_ioepoch);
+       if (!(mdt_conn_flags(info) & OBD_CONNECT_SOM) ||
+           !S_ISREG(lu_object_attr(&o->mot_obj)))
+               RETURN(0);
 
         /* No size whereas MF_SOM_CHANGE is set means client failed to
          * obtain ost attributes, drop the SOM cache on disk if so. */
@@ -903,9 +903,10 @@ int mdt_finish_open(struct mdt_thread_info *info,
                         RETURN(rc);
                 repbody->valid |= OBD_MD_FLMDSCAPA;
         }
+
        if (info->mti_mdt->mdt_opts.mo_oss_capa &&
            exp_connect_flags(exp) & OBD_CONNECT_OSS_CAPA &&
-           S_ISREG(lu_object_attr(&o->mot_obj.mo_lu))) {
+           S_ISREG(lu_object_attr(&o->mot_obj))) {
                 struct lustre_capa *capa;
 
                 capa = req_capsule_server_get(info->mti_pill, &RMF_CAPA2);
@@ -1176,7 +1177,7 @@ static int mdt_object_open_lock(struct mdt_thread_info *info,
                *ibits = MDS_INODELOCK_LOOKUP | MDS_INODELOCK_OPEN;
        }
 
-       if (S_ISREG(lu_object_attr(&obj->mot_obj.mo_lu))) {
+       if (S_ISREG(lu_object_attr(&obj->mot_obj))) {
                if (ma->ma_need & MA_LOV && !(ma->ma_valid & MA_LOV) &&
                    md_should_create(open_flags))
                        create_layout = true;
@@ -1375,7 +1376,7 @@ static int mdt_cross_open(struct mdt_thread_info *info,
                CERROR("%s: "DFID" isn't on this server!: rc = %d\n",
                       mdt_obd_name(info->mti_mdt), PFID(fid), -EFAULT);
                LU_OBJECT_DEBUG(D_WARNING, info->mti_env,
-                               &o->mot_obj.mo_lu,
+                               &o->mot_obj,
                                "Object isn't on this server! FLD error?\n");
                 rc = -EFAULT;
        } else {
index 1545724..f8ab022 100644 (file)
@@ -462,7 +462,7 @@ int mdt_add_dirty_flag(struct mdt_thread_info *info, struct mdt_object *mo,
        rc = mdt_attr_get_complex(info, mo, ma);
        if (rc) {
                CERROR("file attribute read error for "DFID": %d.\n",
-                       PFID(lu_object_fid(&mo->mot_obj.mo_lu)), rc);
+                       PFID(mdt_object_fid(mo)), rc);
                RETURN(rc);
        }
 
@@ -474,7 +474,7 @@ int mdt_add_dirty_flag(struct mdt_thread_info *info, struct mdt_object *mo,
                rc = mdt_hsm_attr_set(info, mo, &ma->ma_hsm);
                if (rc) {
                        CERROR("file attribute change error for "DFID": %d\n",
-                               PFID(lu_object_fid(&mo->mot_obj.mo_lu)), rc);
+                               PFID(mdt_object_fid(mo)), rc);
                        RETURN(rc);
                }
        }
@@ -597,7 +597,7 @@ static int mdt_reint_setattr(struct mdt_thread_info *info,
 
        if (info->mti_mdt->mdt_opts.mo_oss_capa &&
            exp_connect_flags(info->mti_exp) & OBD_CONNECT_OSS_CAPA &&
-           S_ISREG(lu_object_attr(&mo->mot_obj.mo_lu)) &&
+           S_ISREG(lu_object_attr(&mo->mot_obj)) &&
            (ma->ma_attr.la_valid & LA_SIZE) && !som_au) {
                 struct lustre_capa *capa;
 
index 4e2276e..1ba61e5 100644 (file)
@@ -122,7 +122,7 @@ int mdt_getxattr(struct mdt_thread_info *info)
         ENTRY;
 
         LASSERT(info->mti_object != NULL);
-        LASSERT(lu_object_assert_exists(&info->mti_object->mot_obj.mo_lu));
+       LASSERT(lu_object_assert_exists(&info->mti_object->mot_obj));
 
         CDEBUG(D_INODE, "getxattr "DFID"\n", PFID(&info->mti_body->fid1));