From: tappro Date: Mon, 31 Jul 2006 05:56:33 +0000 (+0000) Subject: attr_get is changed. It takes now md_attr() and does 'lov' getting inside X-Git-Tag: v1_8_0_110~486^2~1315 X-Git-Url: https://git.whamcloud.com/?a=commitdiff_plain;h=992edcbe2d5de2ba89dceb9ecf3e09ba0a280555;p=fs%2Flustre-release.git attr_get is changed. It takes now md_attr() and does 'lov' getting inside --- diff --git a/lustre/cmm/cmm_object.c b/lustre/cmm/cmm_object.c index 99586d1..6944976 100644 --- a/lustre/cmm/cmm_object.c +++ b/lustre/cmm/cmm_object.c @@ -221,7 +221,7 @@ static int cml_object_create(const struct lu_context *ctx, } static int cml_attr_get(const struct lu_context *ctx, struct md_object *mo, - struct lu_attr *attr) + struct md_attr *attr) { int rc; ENTRY; @@ -529,7 +529,7 @@ static int cmr_object_create(const struct lu_context *ctx, } static int cmr_attr_get(const struct lu_context *ctx, struct md_object *mo, - struct lu_attr *attr) + struct md_attr *attr) { RETURN(-EREMOTE); } diff --git a/lustre/include/md_object.h b/lustre/include/md_object.h index d09c49f..36b9384 100644 --- a/lustre/include/md_object.h +++ b/lustre/include/md_object.h @@ -67,7 +67,7 @@ struct md_attr { */ struct md_object_operations { int (*moo_attr_get)(const struct lu_context *ctxt, struct md_object *dt, - struct lu_attr *attr); + struct md_attr *attr); int (*moo_attr_set)(const struct lu_context *ctxt, struct md_object *dt, const struct lu_attr *attr); @@ -194,7 +194,7 @@ static inline void md_device_fini(struct md_device *md) /* md operations */ static inline int mo_attr_get(const struct lu_context *cx, struct md_object *m, - struct lu_attr *at) + struct md_attr *at) { LASSERT(m->mo_ops->moo_attr_get); return m->mo_ops->moo_attr_get(cx, m, at); diff --git a/lustre/mdd/mdd_handler.c b/lustre/mdd/mdd_handler.c index 450f954..6e4967d 100644 --- a/lustre/mdd/mdd_handler.c +++ b/lustre/mdd/mdd_handler.c @@ -127,7 +127,7 @@ static void mdd_object_free(const struct lu_context *ctxt, struct lu_object *o) } static int mdd_attr_get(const struct lu_context *ctxt, - struct md_object *obj, struct lu_attr *attr) + struct md_object *obj, struct md_attr *ma) { struct mdd_object *mdd_obj = md2mdd_obj(obj); struct dt_object *next; @@ -138,8 +138,19 @@ static int mdd_attr_get(const struct lu_context *ctxt, LASSERT(lu_object_exists(ctxt, &obj->mo_lu)); next = mdd_object_child(mdd_obj); - rc = next->do_ops->do_attr_get(ctxt, next, attr); - + rc = next->do_ops->do_attr_get(ctxt, next, &ma->ma_attr); + if (rc == 0) { + ma->ma_valid |= MA_INODE; + if (S_ISREG(ma->ma_attr.la_mode) && + ma->ma_lmm != 0 && ma->ma_lmm_size > 0) { + rc = mdd_get_md(ctxt, obj, ma->ma_lmm, &ma->ma_lmm_size, 0); + if (rc >= 0) { + ma->ma_valid |= MA_LOV; + rc = 0; + } + } + /*TODO: get DIREA for directory */ + } RETURN(rc); } @@ -403,11 +414,8 @@ static int __mdd_object_create(const struct lu_context *ctxt, if (!lu_object_exists(ctxt, mdd2lu_obj(obj))) { next = mdd_object_child(obj); rc = next->do_ops->do_create(ctxt, next, attr, handle); - if (rc == 0) { - rc = mdd_attr_get(ctxt, &obj->mod_obj, &ma->ma_attr); - if (rc == 0) - ma->ma_valid |= MA_INODE; - } + if (rc == 0) + rc = mdd_attr_get(ctxt, &obj->mod_obj, ma); } else rc = -EEXIST; @@ -660,12 +668,6 @@ static int mdd_unlink(const struct lu_context *ctxt, struct md_object *pobj, int rc; ENTRY; - rc = mdd_attr_get(ctxt, cobj, &ma->ma_attr); - if (rc == 0) - ma->ma_valid |= MA_INODE; - else - RETURN(rc); - /* sanity checks */ if (dt_try_as_dir(ctxt, dt_cobj)) { if (!S_ISDIR(ma->ma_attr.la_mode)) @@ -673,13 +675,6 @@ static int mdd_unlink(const struct lu_context *ctxt, struct md_object *pobj, } else if (S_ISDIR(ma->ma_attr.la_mode)) RETURN(rc = -ENOTDIR); - if (S_ISREG(ma->ma_attr.la_mode) && ma && - ma->ma_lmm != 0 && ma->ma_lmm_size > 0) { - rc = mdd_get_md(ctxt, cobj, ma->ma_lmm, &ma->ma_lmm_size, 0); - if (rc > 0) - ma->ma_valid |= MA_LOV; - } - mdd_txn_param_build(ctxt, &MDD_TXN_UNLINK); handle = mdd_trans_start(ctxt, mdd); if (IS_ERR(handle)) @@ -1188,11 +1183,8 @@ __mdd_ref_del(const struct lu_context *ctxt, struct mdd_object *obj, LASSERT(lu_object_exists(ctxt, mdd2lu_obj(obj))); next->do_ops->do_ref_del(ctxt, next, handle); - if (ma != NULL) { - int rc = mdd_attr_get(ctxt, &obj->mod_obj, &ma->ma_attr); - if (rc == 0) - ma->ma_valid |= MA_INODE; - } + if (ma != NULL) + mdd_attr_get(ctxt, &obj->mod_obj, ma); } static int mdd_ref_del(const struct lu_context *ctxt, struct md_object *obj, diff --git a/lustre/mdd/mdd_lov.c b/lustre/mdd/mdd_lov.c index 544c5aa..6a28665 100644 --- a/lustre/mdd/mdd_lov.c +++ b/lustre/mdd/mdd_lov.c @@ -249,7 +249,6 @@ int mdd_get_md(const struct lu_context *ctxt, struct md_object *obj, { struct dt_object *next; int rc = 0; - int lmm_size; ENTRY; next = mdd_object_child(md2mdd_obj(obj)); @@ -265,10 +264,8 @@ int mdd_get_md(const struct lu_context *ctxt, struct md_object *obj, } else if (rc < 0) { CERROR("Error %d reading eadata \n", rc); } else if (rc > 0) { - lmm_size = rc; /*FIXME convert lov EA necessary for this version?*/ - *md_size = lmm_size; - rc = lmm_size; + *md_size = rc; } RETURN (rc); diff --git a/lustre/mdt/mdt_fs.c b/lustre/mdt/mdt_fs.c index 8413aac..bf9d7c2 100644 --- a/lustre/mdt/mdt_fs.c +++ b/lustre/mdt/mdt_fs.c @@ -6,6 +6,7 @@ * * Copyright (C) 2002-2006 Cluster File Systems, Inc. * Author: Huang Hua + * Author; Pershin Mike * * This file is part of the Lustre file system, http://www.lustre.org * Lustre is a trademark of Cluster File Systems, Inc. diff --git a/lustre/mdt/mdt_handler.c b/lustre/mdt/mdt_handler.c index 0ca29fa..727c2a5 100644 --- a/lustre/mdt/mdt_handler.c +++ b/lustre/mdt/mdt_handler.c @@ -223,7 +223,7 @@ static int mdt_getattr_internal(struct mdt_thread_info *info, RETURN(-ENOMEM); } - rc = mo_attr_get(ctxt, next, la); + rc = mo_attr_get(ctxt, next, &info->mti_attr); if (rc == -EREMOTE) { /* FIXME: This object is located on remote node. * What value should we return to client? @@ -413,7 +413,7 @@ static int mdt_getattr_name_lock(struct mdt_thread_info *info, intent_set_disposition(ldlm_rep, DISP_LOOKUP_EXECD); if (strlen(name) == 0) { - /* only open the child. parent is on another node. */ + /* only getattr on the child. parent is on another node. */ intent_set_disposition(ldlm_rep, DISP_LOOKUP_POS); child = parent; CDEBUG(D_INODE, "partial getattr_name child_fid = "DFID3 @@ -761,7 +761,7 @@ static int mdt_sync(struct mdt_thread_info *info) next = mdt_object_child(info->mti_object); fid = mdt_object_fid(info->mti_object); rc = mo_attr_get(info->mti_ctxt, - next, &info->mti_attr.ma_attr); + next, &info->mti_attr); if (rc == 0) { body = req_capsule_server_get(pill, &RMF_MDT_BODY); diff --git a/lustre/mdt/mdt_open.c b/lustre/mdt/mdt_open.c index 5940fb4..6592783 100644 --- a/lustre/mdt/mdt_open.c +++ b/lustre/mdt/mdt_open.c @@ -88,22 +88,7 @@ static int mdt_mfd_open(struct mdt_thread_info *info, if (!created) { /* we have to get attr & lov ea for this object*/ - rc = mo_attr_get(info->mti_ctxt, mdt_object_child(o), la); - if (rc == 0) { - ma->ma_valid |= MA_INODE; - if (S_ISREG(la->la_mode)) { - rc = mo_xattr_get(info->mti_ctxt, - mdt_object_child(o), - ma->ma_lmm, - ma->ma_lmm_size, - XATTR_NAME_LOV); - if (rc >= 0) { - ma->ma_lmm_size = rc; - rc = 0; - ma->ma_valid |= MA_LOV; - } - } - } + rc = mo_attr_get(info->mti_ctxt, mdt_object_child(o), ma); } if (rc == 0){ if (!S_ISREG(la->la_mode) && @@ -352,7 +337,6 @@ void mdt_mfd_close(const struct lu_context *ctxt, int mdt_close(struct mdt_thread_info *info) { struct md_attr *ma = &info->mti_attr; - struct lu_attr *la = &ma->ma_attr; struct mdt_export_data *med; struct mdt_file_data *mfd; struct mdt_object *o; @@ -379,23 +363,10 @@ int mdt_close(struct mdt_thread_info *info) &RMF_MDT_MD); ma->ma_lmm_size = req_capsule_get_size(&info->mti_pill, &RMF_MDT_MD, RCL_SERVER); - rc = mo_attr_get(info->mti_ctxt, mdt_object_child(o), la); - if (rc == 0 && S_ISREG(la->la_mode)) { - ma->ma_valid |= MA_INODE; - rc = mo_xattr_get(info->mti_ctxt, - mdt_object_child(o), - ma->ma_lmm, - ma->ma_lmm_size, - XATTR_NAME_LOV); - if (rc > 0) { - ma->ma_lmm_size = rc; - rc = 0; - ma->ma_valid |= MA_LOV; - } else if (rc == -ENODATA || rc == -EOPNOTSUPP) - rc = 0; - if (rc == 0) - rc = mdt_handle_last_unlink(info, o); - } + rc = mo_attr_get(info->mti_ctxt, mdt_object_child(o), ma); + if (rc == 0) + rc = mdt_handle_last_unlink(info, o); + mdt_mfd_close(info->mti_ctxt, mfd); } mdt_shrink_reply(info); diff --git a/lustre/mdt/mdt_reint.c b/lustre/mdt/mdt_reint.c index 0683bf2..fee76be 100644 --- a/lustre/mdt/mdt_reint.c +++ b/lustre/mdt/mdt_reint.c @@ -155,7 +155,7 @@ static int mdt_reint_setattr(struct mdt_thread_info *info) if (rc != 0) GOTO(out_unlock, rc); - rc = mo_attr_get(info->mti_ctxt, next, attr); + rc = mo_attr_get(info->mti_ctxt, next, &info->mti_attr); if (rc != 0) GOTO(out_unlock, rc);