From d1876b7b9bedd40d0e5538a59d863f9da8f6a1c5 Mon Sep 17 00:00:00 2001 From: huanghua Date: Tue, 27 Jun 2006 07:32:36 +0000 Subject: [PATCH] add a skeleton for close. some small fix in mdt_hander.c --- lustre/include/lustre_req_layout.h | 1 + lustre/mdt/mdt_handler.c | 23 +++++++++++++++++++---- lustre/mdt/mdt_reint.c | 5 ++--- lustre/ptlrpc/layout.c | 20 ++++++++++++++++++-- 4 files changed, 40 insertions(+), 9 deletions(-) diff --git a/lustre/include/lustre_req_layout.h b/lustre/include/lustre_req_layout.h index 7ec55d5..05bac3e 100644 --- a/lustre/include/lustre_req_layout.h +++ b/lustre/include/lustre_req_layout.h @@ -95,6 +95,7 @@ extern const struct req_format RQF_MDS_SYNC; extern const struct req_format RQF_MDS_GETXATTR; extern const struct req_format RQF_MDS_SETXATTR; extern const struct req_format RQF_MDS_GETATTR; +extern const struct req_format RQF_MDS_CLOSE; extern const struct req_format RQF_MDS_CONNECT; extern const struct req_format RQF_MDS_DISCONNECT; diff --git a/lustre/mdt/mdt_handler.c b/lustre/mdt/mdt_handler.c index eb2062f..609bed6 100644 --- a/lustre/mdt/mdt_handler.c +++ b/lustre/mdt/mdt_handler.c @@ -467,10 +467,8 @@ static struct mdt_device *mdt_dev(struct lu_device *d) 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) { @@ -569,6 +567,15 @@ static int mdt_reint(struct mdt_thread_info *info) 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; } @@ -579,15 +586,22 @@ static int mdt_done_writing(struct mdt_thread_info *info) 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; @@ -600,6 +614,7 @@ static int mdt_sync(struct mdt_thread_info *info) 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); @@ -2265,7 +2280,7 @@ static int mdt_obd_connect(struct lustre_handle *conn, struct obd_device *obd, 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) @@ -2488,7 +2503,7 @@ DEF_MDT_HNDL_F(HABEO_CORPUS, GETXATTR, mdt_getxattr), 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), diff --git a/lustre/mdt/mdt_reint.c b/lustre/mdt/mdt_reint.c index 65e9031..6ab98b9 100644 --- a/lustre/mdt/mdt_reint.c +++ b/lustre/mdt/mdt_reint.c @@ -465,10 +465,10 @@ out_unlock_source: RETURN(-EOPNOTSUPP); } +#ifdef MDT_CODE /* partial operation for rename */ static int mdt_reint_rename_tgt(struct mdt_thread_info *info) { -#ifdef MDT_CODE struct lu_attr *attr = &info->mti_attr; struct mdt_reint_record *rr = &info->mti_rr; struct req_capsule *pill = &info->mti_pill; @@ -534,9 +534,8 @@ out_unlock_tgtdir: mdt_object_put(info->mti_ctxt, mtgtdir); out: return rc; -#endif } - +#endif static int mdt_reint_rename(struct mdt_thread_info *info) diff --git a/lustre/ptlrpc/layout.c b/lustre/ptlrpc/layout.c index 603c242..0c9ec7f 100644 --- a/lustre/ptlrpc/layout.c +++ b/lustre/ptlrpc/layout.c @@ -221,6 +221,12 @@ static const struct req_msg_field *mds_getattr_server[] = { #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, @@ -232,6 +238,8 @@ static const struct req_format *req_formats[] = { &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, @@ -243,7 +251,8 @@ static const struct req_format *req_formats[] = { &RQF_FLD_QUERY, &RQF_MDS_GETXATTR, &RQF_MDS_SETXATTR, - &RQF_MDS_SYNC + &RQF_MDS_SYNC, + &RQF_MDS_CLOSE }; struct req_msg_field { @@ -379,11 +388,13 @@ const struct req_msg_field RMF_REC_SETATTR = 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 = @@ -531,6 +542,11 @@ const struct req_format RQF_LDLM_INTENT_UNLINK = 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) -- 1.8.3.1