int rc, rc2;
ENTRY;
- reqbody = req_capsule_client_get(pill, &RMF_MDT_BODY);
- LASSERT(reqbody);
- LASSERT(obj != NULL);
+ if (unlikely(info->mti_object == NULL))
+ RETURN(-EPROTO);
+
+ reqbody = req_capsule_client_get(pill, &RMF_MDT_BODY);
+ LASSERT(reqbody);
LASSERT(lu_object_assert_exists(&obj->mot_obj));
/* Special case for Data-on-MDT files to get data version */
RETURN(-EOPNOTSUPP);
info = tsi2mdt_info(tsi);
+ if (unlikely(info->mti_object == NULL))
+ RETURN(-EPROTO);
if (info->mti_dlm_req != NULL)
ldlm_request_cancel(req, info->mti_dlm_req, 0, LATF_SKIP);
} else {
struct mdt_thread_info *info = tsi2mdt_info(tsi);
+ if (unlikely(info->mti_object == NULL))
+ RETURN(-EPROTO);
+
/* sync an object */
rc = mdt_object_sync(tsi->tsi_env, tsi->tsi_exp,
info->mti_object);
u64);
enum tgt_handler_flags it_handler_flags = 0;
struct ldlm_reply *rep;
+ bool check_mdt_object = false;
int rc;
ENTRY;
it_handler = &mdt_intent_open;
break;
case IT_GETATTR:
+ check_mdt_object = true;
case IT_LOOKUP:
it_format = &RQF_LDLM_INTENT_GETATTR;
it_handler = &mdt_intent_getattr;
it_handler_flags = HAS_REPLY;
break;
case IT_GETXATTR:
+ check_mdt_object = true;
it_format = &RQF_LDLM_INTENT_GETXATTR;
it_handler = &mdt_intent_getxattr;
it_handler_flags = HAS_BODY;
if (rc < 0)
RETURN(rc);
+ if (unlikely(info->mti_object == NULL && check_mdt_object))
+ RETURN(-EPROTO);
+
if (it_handler_flags & IS_MUTABLE && mdt_rdonly(req->rq_export))
RETURN(-EROFS);
struct mdt_thread_info *info = tsi2mdt_info(tsi);
int rc;
+ if (unlikely(info->mti_object == NULL))
+ return -EPROTO;
+
rc = mdt_getxattr(info);
mdt_thread_info_fini(info);