}
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;
}
static int cmr_attr_get(const struct lu_context *ctx, struct md_object *mo,
- struct lu_attr *attr)
+ struct md_attr *attr)
{
RETURN(-EREMOTE);
}
*/
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);
/* 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);
}
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;
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);
}
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;
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))
} 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))
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,
{
struct dt_object *next;
int rc = 0;
- int lmm_size;
ENTRY;
next = mdd_object_child(md2mdd_obj(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);
*
* Copyright (C) 2002-2006 Cluster File Systems, Inc.
* Author: Huang Hua <huanghua@clusterfs.com>
+ * Author; Pershin Mike <tappro@clusterfs.com>
*
* This file is part of the Lustre file system, http://www.lustre.org
* Lustre is a trademark of Cluster File Systems, Inc.
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?
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
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);
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) &&
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;
&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);
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);