int rc;
ENTRY;
+ mdt_lprocfs_time_start(info->mti_mdt, &info->mti_time,
+ LPROC_MDT_GETATTR);
+
reqbody = req_capsule_client_get(pill, &RMF_MDT_BODY);
LASSERT(reqbody);
RETURN(err_serious(rc));
rc = mdt_renew_capa(info);
mdt_shrink_reply(info, REPLY_REC_OFF + 1, 0, 0);
- RETURN(rc);
+ GOTO(out, rc);
}
LASSERT(obj != NULL);
rc = req_capsule_pack(pill);
if (rc != 0)
- RETURN(err_serious(rc));
+ GOTO(out, rc = err_serious(rc));
repbody = req_capsule_server_get(pill, &RMF_MDT_BODY);
LASSERT(repbody != NULL);
else
rc = mdt_check_ucred(info);
if (rc)
- GOTO(out, rc);
+ GOTO(out_shrink, rc);
info->mti_spec.sp_ck_split = !!(reqbody->valid & OBD_MD_FLCKSPLIT);
info->mti_cross_ref = !!(reqbody->valid & OBD_MD_FLCROSSREF);
if (reqbody->valid & OBD_MD_FLRMTPERM)
mdt_exit_ucred(info);
EXIT;
-out:
+out_shrink:
mdt_shrink_reply(info, REPLY_REC_OFF + 1, 1, 0);
+out:
+ mdt_lprocfs_time_end(info->mti_mdt, &info->mti_time,
+ LPROC_MDT_GETATTR);
return rc;
}
int rc;
ENTRY;
+ mdt_lprocfs_time_start(info->mti_mdt, &info->mti_time,
+ LPROC_MDT_GETATTR_NAME);
+
reqbody = req_capsule_client_get(&info->mti_pill, &RMF_MDT_BODY);
LASSERT(reqbody != NULL);
repbody = req_capsule_server_get(&info->mti_pill, &RMF_MDT_BODY);
EXIT;
out:
mdt_shrink_reply(info, REPLY_REC_OFF + 1, 1, 0);
+ mdt_lprocfs_time_end(info->mti_mdt, &info->mti_time,
+ LPROC_MDT_GETATTR_NAME);
return rc;
}
int rc;
ENTRY;
+ mdt_lprocfs_time_start(info->mti_mdt, &info->mti_time,
+ LPROC_MDT_INTENT_GETATTR);
+
reqbody = req_capsule_client_get(&info->mti_pill, &RMF_MDT_BODY);
LASSERT(reqbody);
mdt_exit_ucred(info);
out:
mdt_shrink_reply(info, DLM_REPLY_REC_OFF + 1, 1, 0);
+ mdt_lprocfs_time_end(info->mti_mdt, &info->mti_time,
+ LPROC_MDT_INTENT_GETATTR);
return rc;
}
ENTRY;
+ mdt_lprocfs_time_start(info->mti_mdt, &info->mti_time,
+ LPROC_MDT_INTENT_REINT);
+
opc = mdt_reint_opcode(info, intent_fmts);
if (opc < 0)
- RETURN(opc);
+ GOTO(out, rc = opc);
if (mdt_it_flavor[opcode].it_reint != opc) {
CERROR("Reint code %ld doesn't match intent: %d\n",
opc, opcode);
- RETURN(err_serious(-EPROTO));
+ GOTO(out, rc = err_serious(-EPROTO));
}
/* Get lock from request for possible resent case. */
if (mdt_info_req(info)->rq_repmsg != NULL)
rep = req_capsule_server_get(&info->mti_pill, &RMF_DLM_REP);
if (rep == NULL)
- RETURN(err_serious(-EFAULT));
+ GOTO(out, rc = err_serious(-EFAULT));
/* MDC expects this in any case */
if (rc != 0)
mdt_set_disposition(info, rep, DISP_LOOKUP_EXECD);
- /* cross-ref case, the lock should be returned to the client */
+ /* Cross-ref case, the lock should be returned to the client */
if (rc == -EREMOTE) {
LASSERT(lustre_handle_is_used(&lhc->mlh_reg_lh));
rep->lock_policy_res2 = 0;
- RETURN(mdt_intent_lock_replace(info, lockp, NULL, lhc, flags));
+ rc = mdt_intent_lock_replace(info, lockp, NULL, lhc, flags);
+ GOTO(out, rc);
}
rep->lock_policy_res2 = clear_serious(rc);
lhc->mlh_reg_lh.cookie = 0ull;
- RETURN(ELDLM_LOCK_ABORTED);
+ rc = ELDLM_LOCK_ABORTED;
+ EXIT;
+out:
+ mdt_lprocfs_time_end(info->mti_mdt, &info->mti_time,
+ LPROC_MDT_INTENT_REINT);
+ return rc;
}
static int mdt_intent_code(long itcode)
struct md_object *next;
struct mdt_body *repbody;
int rc;
-
ENTRY;
+ mdt_lprocfs_time_start(info->mti_mdt, &info->mti_time,
+ LPROC_MDT_REINT_SETATTR);
+
DEBUG_REQ(D_INODE, req, "setattr "DFID" %x", PFID(rr->rr_fid1),
(unsigned int)ma->ma_attr.la_valid);
repbody = req_capsule_server_get(&info->mti_pill, &RMF_MDT_BODY);
mo = mdt_object_find(info->mti_env, info->mti_mdt, rr->rr_fid1);
if (IS_ERR(mo))
- RETURN(rc = PTR_ERR(mo));
+ GOTO(out, rc = PTR_ERR(mo));
if (info->mti_epoch && (info->mti_epoch->flags & MF_EPOCH_OPEN)) {
/* Truncate case. */
rc = mdt_write_get(info->mti_mdt, mo);
if (rc)
- GOTO(out, rc);
+ GOTO(out_put, rc);
mfd = mdt_mfd_new();
if (mfd == NULL)
- GOTO(out, rc = -ENOMEM);
+ GOTO(out_put, rc = -ENOMEM);
mdt_epoch_open(info, mo);
repbody->ioepoch = mo->mot_ioepoch;
rc = mdt_attr_set(info, mo, rr->rr_flags);
if (rc)
- GOTO(out, rc);
+ GOTO(out_put, rc);
if (info->mti_epoch && (info->mti_epoch->flags & MF_SOM_CHANGE)) {
LASSERT(info->mti_epoch);
"fid = "DFID": cookie = "LPX64"\n",
PFID(info->mti_rr.rr_fid1),
info->mti_epoch->handle.cookie);
- GOTO(out, rc = -ESTALE);
+ GOTO(out_put, rc = -ESTALE);
}
LASSERT(mfd->mfd_mode == FMODE_SOM);
next = mdt_object_child(mo);
rc = mo_attr_get(info->mti_env, next, ma);
if (rc != 0)
- GOTO(out, rc);
+ GOTO(out_put, rc);
mdt_pack_attr2body(info, repbody, &ma->ma_attr, mdt_object_fid(mo));
capa->lc_opc = CAPA_OPC_OSS_DEFAULT | CAPA_OPC_OSS_TRUNC;
rc = mo_capa_get(info->mti_env, mdt_object_child(mo), capa, 0);
if (rc)
- GOTO(out, rc);
+ GOTO(out_put, rc);
repbody->valid |= OBD_MD_FLOSSCAPA;
}
EXIT;
-out:
+out_put:
mdt_object_put(info->mti_env, mo);
+out:
+ mdt_lprocfs_time_end(info->mti_mdt, &info->mti_time,
+ LPROC_MDT_REINT_SETATTR);
return rc;
}
LPROC_MDT_REINT_CREATE);
if (MDT_FAIL_CHECK(OBD_FAIL_MDS_REINT_CREATE))
- RETURN(err_serious(-ESTALE));
+ GOTO(out, rc = err_serious(-ESTALE));
switch (info->mti_attr.ma_attr.la_mode & S_IFMT) {
case S_IFDIR:{
default:
rc = err_serious(-EOPNOTSUPP);
}
+ EXIT;
+out:
mdt_lprocfs_time_end(info->mti_mdt, &info->mti_time,
LPROC_MDT_REINT_CREATE);
- RETURN(rc);
+ return rc;
}
static int mdt_reint_unlink(struct mdt_thread_info *info,
int rc;
ENTRY;
+ mdt_lprocfs_time_start(info->mti_mdt, &info->mti_time,
+ LPROC_MDT_REINT_UNLINK);
+
DEBUG_REQ(D_INODE, req, "unlink "DFID"/%s\n", PFID(rr->rr_fid1),
rr->rr_name);
mdt_object_unlock_put(info, mp, parent_lh, rc);
out:
mdt_shrink_reply(info, REPLY_REC_OFF + 1, 0, 0);
+ mdt_lprocfs_time_end(info->mti_mdt, &info->mti_time,
+ LPROC_MDT_REINT_UNLINK);
return rc;
}
int rc;
ENTRY;
+ mdt_lprocfs_time_start(info->mti_mdt, &info->mti_time,
+ LPROC_MDT_REINT_LINK);
+
DEBUG_REQ(D_INODE, req, "link "DFID" to "DFID"/%s",
PFID(rr->rr_fid1), PFID(rr->rr_fid2), rr->rr_name);
if (MDT_FAIL_CHECK(OBD_FAIL_MDS_REINT_LINK))
- RETURN(err_serious(-ENOENT));
+ GOTO(out, rc = err_serious(-ENOENT));
if (info->mti_cross_ref) {
/* MDT holding name ask us to add ref. */
ms = mdt_object_find_lock(info, rr->rr_fid1, lhs,
MDS_INODELOCK_UPDATE);
if (IS_ERR(ms))
- RETURN(PTR_ERR(ms));
+ GOTO(out, rc = PTR_ERR(ms));
mdt_set_capainfo(info, 0, rr->rr_fid1, BYPASS_CAPA);
rc = mo_ref_add(info->mti_env, mdt_object_child(ms));
mdt_object_unlock_put(info, ms, lhs, rc);
- RETURN(rc);
+ mdt_lprocfs_time_end(info->mti_mdt, &info->mti_time,
+ LPROC_MDT_REINT_LINK);
+ GOTO(out, rc);
}
/* Invalid case so return error immediately instead of
* processing it */
if (lu_fid_eq(rr->rr_fid1, rr->rr_fid2))
- RETURN(-EPERM);
+ GOTO(out, rc = -EPERM);
/* step 1: find & lock the target parent dir */
lhp = &info->mti_lh[MDT_LH_PARENT];
mp = mdt_object_find_lock(info, rr->rr_fid2, lhp,
MDS_INODELOCK_UPDATE);
if (IS_ERR(mp))
- RETURN(PTR_ERR(mp));
+ GOTO(out, rc = PTR_ERR(mp));
/* step 2: find & lock the source */
lhs = &info->mti_lh[MDT_LH_CHILD];
mdt_object_unlock_put(info, ms, lhs, rc);
out_unlock_parent:
mdt_object_unlock_put(info, mp, lhp, rc);
+out:
+ mdt_lprocfs_time_end(info->mti_mdt, &info->mti_time,
+ LPROC_MDT_REINT_LINK);
return rc;
}
int rc;
ENTRY;
+ mdt_lprocfs_time_start(info->mti_mdt, &info->mti_time,
+ LPROC_MDT_REINT_RENAME);
+
if (info->mti_cross_ref) {
rc = mdt_reint_rename_tgt(info);
+ mdt_lprocfs_time_end(info->mti_mdt, &info->mti_time,
+ LPROC_MDT_REINT_RENAME);
RETURN(rc);
}
mdt_rename_unlock(&rename_lh);
out:
mdt_shrink_reply(info, REPLY_REC_OFF + 1, 0, 0);
+ mdt_lprocfs_time_end(info->mti_mdt, &info->mti_time,
+ LPROC_MDT_REINT_RENAME);
return rc;
}