From: John L. Hammond Date: Wed, 1 May 2013 02:52:01 +0000 (-0500) Subject: LU-3253 mdt: use lu_object/device in mdt_object/device X-Git-Tag: 2.4.52~47 X-Git-Url: https://git.whamcloud.com/?p=fs%2Flustre-release.git;a=commitdiff_plain;h=bca113c04840b05aa1261b52769836add3787f8c LU-3253 mdt: use lu_object/device in mdt_object/device 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 Change-Id: Icf48d8f1288895ba1ffecdf55f0d036df5961d6e Reviewed-on: http://review.whamcloud.com/6222 Tested-by: Hudson Tested-by: Maloo Reviewed-by: Alex Zhuravlev Reviewed-by: Mike Pershin Reviewed-by: Oleg Drokin --- diff --git a/lustre/mdt/mdt_handler.c b/lustre/mdt/mdt_handler.c index 832aad6..d13acbb 100644 --- a/lustre/mdt/mdt_handler.c +++ b/lustre/mdt/mdt_handler.c @@ -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); diff --git a/lustre/mdt/mdt_internal.h b/lustre/mdt/mdt_internal.h index 4873b02..9b0a6d1 100644 --- a/lustre/mdt/mdt_internal.h +++ b/lustre/mdt/mdt_internal.h @@ -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); diff --git a/lustre/mdt/mdt_open.c b/lustre/mdt/mdt_open.c index 2538f57..6ac5eee 100644 --- a/lustre/mdt/mdt_open.c +++ b/lustre/mdt/mdt_open.c @@ -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 { diff --git a/lustre/mdt/mdt_reint.c b/lustre/mdt/mdt_reint.c index 1545724..f8ab022 100644 --- a/lustre/mdt/mdt_reint.c +++ b/lustre/mdt/mdt_reint.c @@ -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; diff --git a/lustre/mdt/mdt_xattr.c b/lustre/mdt/mdt_xattr.c index 4e2276e..1ba61e5 100644 --- a/lustre/mdt/mdt_xattr.c +++ b/lustre/mdt/mdt_xattr.c @@ -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));