repbody->max_cookiesize = info->mti_mdt->mdt_max_cookiesize;
repbody->max_mdsize = info->mti_mdt->mdt_max_mdsize;
repbody->valid |= OBD_MD_FLMODEASIZE;
+ CDEBUG(D_INODE, "I am going to change the MAX_MD_SIZE to : %d:%d\n",
+ repbody->max_cookiesize,
+ repbody->max_mdsize);
}
if (rc != 0)
ENTRY;
LASSERT(info->mti_object != NULL);
- CDEBUG(D_INFO, "getattr with lock for "DFID3"/%s, ldlm_rep = %p\n",
+ CDEBUG(D_INODE, "getattr with lock for "DFID3"/%s, ldlm_rep = %p\n",
PFID3(mdt_object_fid(parent)), name, ldlm_rep);
name = req_capsule_client_get(&info->mti_pill, &RMF_NAME);
/* only open the child. parent is on another node. */
intent_set_disposition(ldlm_rep, DISP_LOOKUP_POS);
child = parent;
- CDEBUG(D_INFO, "partial getattr_name child_fid = "DFID3
+ CDEBUG(D_INODE, "partial getattr_name child_fid = "DFID3
", ldlm_rep=%p\n",
PFID3(mdt_object_fid(child)), ldlm_rep);
static int mdt_reint(struct mdt_thread_info *info)
{
long opc;
- int rc;
+ int rc = 0;
static const struct req_format *reint_fmts[REINT_MAX] = {
[REINT_SETATTR] = &RQF_MDS_REINT_SETATTR,
if (opc >= 0) {
OBD_FAIL_RETURN(OBD_FAIL_MDS_REINT_NET, 0);
- rc = req_capsule_pack(&info->mti_pill);
+ if (opc != REINT_UNLINK)
+ rc = req_capsule_pack(&info->mti_pill);
if (rc == 0)
rc = mdt_reint_internal(info, opc);
} else
if (rc == 0) {
last_transno = info->mti_transno;
} else {
+ if (info->mti_transno != 0)
+ CERROR("replay %s transno "LPU64" failed: rc %d\n",
+ libcfs_nid2str(exp->exp_connection->c_peer.nid),
+ info->mti_transno, rc);
last_transno = 0;
- CERROR("replay %s transno "LPU64" failed: rc %d\n",
- libcfs_nid2str(exp->exp_connection->c_peer.nid),
- info->mti_transno, rc);
}
- CDEBUG(D_INFO, "last_transno = %llu, last_committed = %llu\n",
+ CDEBUG(D_INODE, "last_transno = %llu, last_committed = %llu\n",
last_transno, last_committed);
req->rq_repmsg->transno = req->rq_transno = last_transno;
int rc = 0;
ENTRY;
- CDEBUG(D_INFO, "object init, fid = "DFID3"\n",
+ CDEBUG(D_INODE, "object init, fid = "DFID3"\n",
PFID3(&o->lo_header->loh_fid));
under = &d->mdt_child->md_lu_dev;
ENTRY;
h = o->lo_header;
- CDEBUG(D_INFO, "object free, fid = "DFID3"\n", PFID3(&h->loh_fid));
+ CDEBUG(D_INODE, "object free, fid = "DFID3"\n", PFID3(&h->loh_fid));
lu_object_fini(o);
lu_object_header_fini(h);
DEF_MDT_HNDL_F(0 |HABEO_REFERO, STATFS, mdt_statfs),
DEF_MDT_HNDL_F(0 |MUTABOR,
REINT, mdt_reint),
-DEF_MDT_HNDL_F(HABEO_CORPUS|HABEO_REFERO, CLOSE, mdt_close),
+DEF_MDT_HNDL_F(HABEO_CORPUS, CLOSE, mdt_close),
DEF_MDT_HNDL_0(0, DONE_WRITING, mdt_done_writing),
DEF_MDT_HNDL_F(0 |HABEO_REFERO, PIN, mdt_pin),
DEF_MDT_HNDL_0(0, SYNC, mdt_sync),
int mdt_done_writing(struct mdt_thread_info *info);
int mdt_handle_last_unlink(struct mdt_thread_info *, struct mdt_object *,
- const struct req_format *);
+ int need_get_attr, const struct req_format *);
/* debug issues helper starts here*/
#include "mdt_internal.h"
+static void mdt_dump_lmm(int level, struct lov_mds_md *lmm)
+{
+ struct lov_ost_data_v1 *lod;
+ int i;
+
+ CDEBUG_EX(level, "objid "LPX64", magic 0x%08X, pattern %#X\n",
+ le64_to_cpu(lmm->lmm_object_id), le32_to_cpu(lmm->lmm_magic),
+ le32_to_cpu(lmm->lmm_pattern));
+ CDEBUG_EX(level,"stripe_size %u, stripe_count %u\n",
+ le32_to_cpu(lmm->lmm_stripe_size),
+ le32_to_cpu(lmm->lmm_stripe_count));
+ for (i = 0, lod = lmm->lmm_objects;
+ i < le32_to_cpu(lmm->lmm_stripe_count); i++, lod++)
+ CDEBUG_EX(level, "stripe %u idx %u subobj "LPX64"/"LPX64"\n",
+ i, le32_to_cpu(lod->l_ost_idx),
+ le64_to_cpu(lod->l_object_gr),
+ le64_to_cpu(lod->l_object_id));
+}
+
/* if object is dying, pack the lov/llog data,
* parameter info->mti_attr should be valid at this point! */
-int mdt_handle_last_unlink(struct mdt_thread_info *info,
- struct mdt_object *mo, const struct req_format *fmt)
+int mdt_handle_last_unlink(struct mdt_thread_info *info, struct mdt_object *mo,
+ int need_get_attr, const struct req_format *fmt)
{
- struct mdt_body *body;
- struct lu_attr *la = &info->mti_attr.ma_attr;
+ struct mdt_body *repbody;
+ struct md_attr *ma = &info->mti_attr;
+ struct lu_attr *la = &ma->ma_attr;
int rc = 0;
ENTRY;
- body = req_capsule_server_get(&info->mti_pill,
- &RMF_MDT_BODY);
- mdt_pack_attr2body(body, la, mdt_object_fid(mo));
-
/* if last unlinked object reference so client should destroy ost
* objects*/
if (S_ISREG(la->la_mode) &&
la->la_nlink == 0 && mo->mot_header.loh_ref == 1) {
- struct lov_mds_md *lmm;
+ CDEBUG(D_INODE, "Last reference is released on "DFID3
+ "need_get_attr = %d for it?\n",
+ PFID3(mdt_object_fid(mo)),
+ need_get_attr);
/* reply should contains more data,
* * so we need to extend it */
req_capsule_extend(&info->mti_pill, fmt);
-
- lmm = req_capsule_server_get(&info->mti_pill,
- &RMF_MDT_MD);
-
-
- /*TODO: lmm data & llog cookie
- * rc = mo_xattr_get(info->mti_ctxt, mdt_object_child(o),
- * lmm, info->mti_mdt->mdt_max_mdsize,
- * MDS_LOV_MD_NAME);
- * if (rc >= 0) {
- * if (S_ISDIR(info->mti_attr.la_mode))
- * body->valid |= OBD_MD_FLDIREA;
- * else
- * body->valid |= OBD_MD_FLEASIZE;
- * body->eadatasize = rc;
- * rc = 0;
- * }
- */
- }
+
+ req_capsule_pack(&info->mti_pill);
+ if (need_get_attr) {
+ ma->ma_lmm = req_capsule_server_get(&info->mti_pill,
+ &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(mo), la);
+ if (rc == 0) {
+ ma->ma_valid |= MA_INODE;
+ rc = mo_xattr_get(info->mti_ctxt,
+ mdt_object_child(mo),
+ 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;
+ mdt_dump_lmm(D_ERROR, ma->ma_lmm);
+ }
+ }
+ }
+
+ repbody = req_capsule_server_get(&info->mti_pill,
+ &RMF_MDT_BODY);
+ if (ma->ma_valid & MA_INODE)
+ mdt_pack_attr2body(repbody, la, mdt_object_fid(mo));
+ if (ma->ma_lmm_size && ma->ma_valid & MA_LOV) {
+ repbody->eadatasize = ma->ma_lmm_size;
+ repbody->valid |= OBD_MD_FLEASIZE;
+ }
+ } else
+ req_capsule_pack(&info->mti_pill);
RETURN(rc);
}
if (mfd == NULL) {
spin_unlock(&med->med_open_lock);
CDEBUG(D_INODE, "no handle for file close: fid = "DFID3
- ": cookie = "LPX64, PFID3(&info->mti_body->fid1),
+ ": cookie = "LPX64"\n", PFID3(&info->mti_body->fid1),
info->mti_body->handle.cookie);
rc = -ESTALE;
} else {
list_del_init(&mfd->mfd_list);
spin_unlock(&med->med_open_lock);
- rc = mdt_handle_last_unlink(info, mfd->mfd_object,
+ rc = mdt_handle_last_unlink(info, mfd->mfd_object, 1,
&RQF_MDS_CLOSE_LAST);
mdt_mfd_close(info->mti_ctxt, mfd);
struct mdt_object *mc;
struct mdt_lock_handle *lhp;
struct mdt_lock_handle *lhc;
- struct mdt_body *repbody;
struct lu_fid *child_fid = &info->mti_tmp_fid1;
int rc;
GOTO(out_unlock_parent, rc);
}
- repbody = req_capsule_server_get(&info->mti_pill, &RMF_MDT_BODY);
-
/*step 2: find & lock the child */
lhc = &info->mti_lh[MDT_LH_CHILD];
lhc->mlh_mode = LCK_EX;
if (rc)
GOTO(out_unlock_child, rc);
- rc = mdt_handle_last_unlink(info, mc, &RQF_MDS_REINT_UNLINK_LAST);
+ rc = mdt_handle_last_unlink(info, mc, 0, &RQF_MDS_REINT_UNLINK_LAST);
GOTO(out_unlock_child, rc);
out_unlock_child: