+/**
+ * Implementation of dt_object_operations::do_declare_create
+ *
+ * For non-remote transaction, it will add an OUT_CREATE sub-request
+ * into the OUT RPC that will be flushed when the transaction start.
+ *
+ * \param[in] env execution environment
+ * \param[in] dt remote object to be created
+ * \param[in] attr attribute of the created object
+ * \param[in] hint creation hint
+ * \param[in] dof creation format information
+ * \param[in] th the transaction handle
+ *
+ * \retval 0 if the insertion succeeds.
+ * \retval negative errno if the insertion fails.
+ */
+int osp_md_declare_object_create(const struct lu_env *env,
+ struct dt_object *dt,
+ struct lu_attr *attr,
+ struct dt_allocation_hint *hint,
+ struct dt_object_format *dof,
+ struct thandle *th)
+{
+ int rc = 0;
+
+ if (!is_only_remote_trans(th)) {
+ rc = __osp_md_declare_object_create(env, dt, attr, hint,
+ dof, th);
+
+ CDEBUG(D_INFO, "declare create md_object "DFID": rc = %d\n",
+ PFID(&dt->do_lu.lo_header->loh_fid), rc);
+ }
+
+ return rc;
+}
+
+/**
+ * Implementation of dt_object_operations::do_create
+ *
+ * For remote transaction, it will add an OUT_CREATE sub-request into
+ * the OUT RPC that will be flushed when the transaction stop.
+ *
+ * It sets necessary flags for created object. In DNE phase I,
+ * remote updates are actually executed during transaction start,
+ * i.e. the object has already been created when calling this method.
+ *
+ * \param[in] env execution environment
+ * \param[in] dt object to be created
+ * \param[in] attr attribute of the created object
+ * \param[in] hint creation hint
+ * \param[in] dof creation format information
+ * \param[in] th the transaction handle
+ *
+ * \retval only return 0 for now
+ */