relock:
ma = &info->mti_attr;
+ OBD_FAIL_TIMEOUT(OBD_FAIL_MDS_RESEND, obd_timeout*2);
mdt_lock_handle_init(lhc);
mdt_lock_reg_init(lhc, LCK_PR);
/* Debugging code. */
res_id = &lock->l_resource->lr_name;
- LDLM_DEBUG(lock, "Returning lock to client\n");
+ LDLM_DEBUG(lock, "Returning lock to client");
LASSERTF(fid_res_name_eq(mdt_object_fid(child),
&lock->l_resource->lr_name),
"Lock res_id: %lu/%lu/%lu, Fid: "DFID".\n",
CERROR("Bad changelog_clear setinfo size %d\n", vallen);
RETURN(-EINVAL);
}
- if (lustre_msg_swabbed(req->rq_reqmsg)) {
+ if (ptlrpc_req_need_swab(req)) {
__swab64s(&cs->cs_recno);
__swab32s(&cs->cs_id);
}
int rc;
ENTRY;
- if (OBD_FAIL_CHECK(OBD_FAIL_MDS_QUOTACHECK_NET))
- RETURN(0);
-
oqctl = req_capsule_client_get(pill, &RMF_OBD_QUOTACTL);
if (oqctl == NULL)
RETURN(-EPROTO);
int id, rc;
ENTRY;
- if (OBD_FAIL_CHECK(OBD_FAIL_MDS_QUOTACTL_NET))
- RETURN(0);
-
oqctl = req_capsule_client_get(pill, &RMF_OBD_QUOTACTL);
if (oqctl == NULL)
RETURN(-EPROTO);
*
* \param info thread info object
* \param o mdt object
- * \param h mdt lock handle referencing regular and PDO locks
+ * \param lh mdt lock handle referencing regular and PDO locks
* \param decref force immediate lock releasing
*/
void mdt_object_unlock(struct mdt_thread_info *info, struct mdt_object *o,
* Checking for various OBD_FAIL_$PREF_$OPC_NET codes. _Do_ not try
* to put same checks into handlers like mdt_close(), mdt_reint(),
* etc., without talking to mdt authors first. Checking same thing
- * there again is useless and returning 0 error wihtout packing reply
+ * there again is useless and returning 0 error without packing reply
* is buggy! Handlers either pack reply or return error.
*
* We return 0 here and do not send any reply in order to emulate
if (likely(rc == 0)) {
rc = mdt_recovery(info);
if (likely(rc == +1)) {
- switch (lustre_msg_get_opc(msg)) {
- case MDS_READPAGE:
- req->rq_bulk_read = 1;
- break;
- case MDS_WRITEPAGE:
- req->rq_bulk_write = 1;
- break;
- }
-
h = mdt_handler_find(lustre_msg_get_opc(msg),
supported);
if (likely(h != NULL)) {
fpin = key + size_round(sizeof(KEY_FID2PATH));
fpout = val;
- if (lustre_msg_swabbed(mdt_info_req(info)->rq_reqmsg))
+ if (ptlrpc_req_need_swab(info->mti_pill->rc_req))
lustre_swab_fid2path(fpin);
memcpy(fpout, fpin, sizeof(*fpin));
RETURN(rc);
}
+static int mdt_ioc_version_get(struct mdt_thread_info *mti, void *karg)
+{
+ struct obd_ioctl_data *data = karg;
+ struct lu_fid *fid = (struct lu_fid *)data->ioc_inlbuf1;
+ __u64 version;
+ struct mdt_object *obj;
+ struct mdt_lock_handle *lh;
+ int rc;
+ ENTRY;
+ CDEBUG(D_IOCTL, "getting version for "DFID"\n", PFID(fid));
+ if (!fid_is_sane(fid))
+ RETURN(-EINVAL);
+
+ lh = &mti->mti_lh[MDT_LH_PARENT];
+ mdt_lock_reg_init(lh, LCK_CR);
+
+ obj = mdt_object_find_lock(mti, fid, lh, MDS_INODELOCK_UPDATE);
+ if (IS_ERR(obj))
+ RETURN(PTR_ERR(obj));
+
+ rc = mdt_object_exists(obj);
+ if (rc < 0) {
+ rc = -EREMOTE;
+ /**
+ * before calling version get the correct MDS should be
+ * fid, this is error to find remote object here
+ */
+ CERROR("nonlocal object "DFID"\n", PFID(fid));
+ } else if (rc == 0) {
+ rc = -ENOENT;
+ CDEBUG(D_IOCTL, "no such object: "DFID"\n", PFID(fid));
+ } else {
+ version = mo_version_get(mti->mti_env, mdt_object_child(obj));
+ if (version < 0) {
+ rc = (int)version;
+ } else {
+ *(__u64 *)data->ioc_inlbuf2 = version;
+ rc = 0;
+ }
+ }
+ mdt_object_unlock_put(mti, obj, lh, 1);
+ RETURN(rc);
+}
+
/* ioctls on obd dev */
static int mdt_iocontrol(unsigned int cmd, struct obd_export *exp, int len,
void *karg, void *uarg)
case OBD_IOC_CHANGELOG_CLEAR:
rc = mdt_ioc_child(&env, mdt, cmd, len, karg);
break;
+ case OBD_IOC_GET_OBJ_VERSION: {
+ struct mdt_thread_info *mti;
+ mti = lu_context_key_get(&env.le_ctx, &mdt_thread_key);
+ memset(mti, 0, sizeof *mti);
+ mti->mti_env = &env;
+ mti->mti_mdt = mdt;
+ mti->mti_exp = exp;
+
+ rc = mdt_ioc_version_get(mti, karg);
+ break;
+ }
default:
CERROR("Not supported cmd = %d for device %s\n",
cmd, obd->obd_name);
}
/**
- * Enable/disable COS.
+ * Enable/disable COS (Commit On Sharing).
*
* Set/Clear the COS flag in mdt options.
*
}
/**
- * Check COS status.
+ * Check COS (Commit On Sharing) status.
*
- * Return COS flag status/
+ * Return COS flag status.
*
* \param mdt mdt device
*/