static int mdt_connect(struct mdt_thread_info *info)
{
int result;
- struct req_capsule *pill;
struct ptlrpc_request *req;
- pill = &info->mti_pill;
req = mdt_info_req(info);
result = target_handle_connect(req, mdt_handle);
if (result == 0) {
static int mdt_close(struct mdt_thread_info *info)
{
+#ifdef MDT_CODE
+ /* TODO: dual to open handling, orphan handling */
+ struct mdt_body * reqbody;
+ struct mdt_body * repbody;
+
+ reqbody = req_capsule_client_get(&info->mti_pill, &RMF_MDT_BODY);
+ repbody = req_capsule_server_get(&info->mti_pill, &RMF_MDT_BODY);
+
+#endif
return -EOPNOTSUPP;
}
static int mdt_pin(struct mdt_thread_info *info)
{
+#ifdef MDT_CODE
+ /* TODO: This is open handling. */
+#endif
return -EOPNOTSUPP;
}
#ifdef MDT_CODE
+/* TODO these two methods not available now. */
+
+/* this should sync the whole device */
static int mdt_device_sync(struct mdt_device *mdt)
{
return 0;
}
+/* this should sync this object */
static int mdt_object_sync(struct mdt_object *m)
{
return 0;
int rc;
ENTRY;
+ /* The fid may be zero, so we req_capsule_set manually */
req_capsule_set(pill, &RQF_MDS_SYNC);
body = req_capsule_client_get(pill, &RMF_MDT_BODY);
int rc;
struct mdt_device *mdt;
struct mds_export_data *med;
- struct mds_client_data *mcd = NULL;
+ struct mds_client_data *mcd;
ENTRY;
if (!conn || !obd || !cluuid)
DEF_MDT_HNDL_F(0 |HABEO_REFERO, STATFS, mdt_statfs),
DEF_MDT_HNDL_0(HABEO_CORPUS, READPAGE, mdt_readpage),
DEF_MDT_HNDL_F(0, REINT, mdt_reint),
-DEF_MDT_HNDL_0(HABEO_CORPUS, CLOSE, mdt_close),
+DEF_MDT_HNDL_F(HABEO_CORPUS|HABEO_REFERO, CLOSE, mdt_close),
DEF_MDT_HNDL_0(0, DONE_WRITING, mdt_done_writing),
DEF_MDT_HNDL_0(0, PIN, mdt_pin),
DEF_MDT_HNDL_0(0, SYNC, mdt_sync),
#endif
};
+static const struct req_msg_field *mds_close_server[] = {
+ &RMF_MDT_BODY,
+ &RMF_MDT_MD,
+ &RMF_LOGCOOKIES
+};
+
static const struct req_format *req_formats[] = {
&RQF_MDS_CONNECT,
&RQF_MDS_DISCONNECT,
&RQF_MDS_REINT_CREATE,
&RQF_MDS_REINT_OPEN,
&RQF_MDS_REINT_UNLINK,
+ &RQF_MDS_REINT_LINK,
+ &RQF_MDS_REINT_RENAME,
&RQF_MDS_REINT_SETATTR,
&RQF_LDLM_ENQUEUE,
&RQF_LDLM_INTENT,
&RQF_FLD_QUERY,
&RQF_MDS_GETXATTR,
&RQF_MDS_SETXATTR,
- &RQF_MDS_SYNC
+ &RQF_MDS_SYNC,
+ &RQF_MDS_CLOSE
};
struct req_msg_field {
lustre_swab_mdt_rec_setattr);
EXPORT_SYMBOL(RMF_REC_SETATTR);
+/* Huang Hua changed the size from 0 to 16 to avoid ASSERT failure */
+
const struct req_msg_field RMF_EADATA = DEFINE_MSGF("eadata", 0, 16, NULL);
EXPORT_SYMBOL(RMF_EADATA);
const struct req_msg_field RMF_LOGCOOKIES =
- DEFINE_MSGF("logcookies", 0, 0, NULL);
+ DEFINE_MSGF("logcookies", 0, 16, NULL);
EXPORT_SYMBOL(RMF_LOGCOOKIES);
const struct req_msg_field RMF_REINT_OPC =
ldlm_intent_unlink_client, ldlm_intent_server);
EXPORT_SYMBOL(RQF_LDLM_INTENT_UNLINK);
+const struct req_format RQF_MDS_CLOSE =
+ DEFINE_REQ_FMT0("MDS_CLOSE",
+ mdt_body_only, mds_close_server);
+EXPORT_SYMBOL(RQF_MDS_CLOSE);
+
#if !defined(__REQ_LAYOUT_USER__)
int req_layout_init(void)