X-Git-Url: https://git.whamcloud.com/?a=blobdiff_plain;ds=sidebyside;f=lustre%2Finclude%2Flustre_net.h;h=748fe49fb7ac726eb05067614515ecacec9ac9b4;hb=10d49b6e200bb4234a2611e2882e646bf811cd68;hp=b91714ccab3d723e306e2a041ebb5f7f721ebfa1;hpb=f50d3d56f80184bc21f729e1640422d6a2a31158;p=fs%2Flustre-release.git diff --git a/lustre/include/lustre_net.h b/lustre/include/lustre_net.h index b91714c..748fe49 100644 --- a/lustre/include/lustre_net.h +++ b/lustre/include/lustre_net.h @@ -42,6 +42,7 @@ #include #include #include +#include /* MD flags we _always_ use */ #define PTLRPC_MD_OPTIONS 0 @@ -167,6 +168,7 @@ struct ptlrpc_connection { struct list_head c_link; + struct hlist_node c_hash; lnet_nid_t c_self; lnet_process_id_t c_peer; struct obd_uuid c_remote_uuid; @@ -204,16 +206,21 @@ struct ptlrpc_request_set { cfs_waitq_t set_waitq; cfs_waitq_t *set_wakeup_ptr; struct list_head set_requests; + struct list_head set_cblist; /* list of completion callbacks */ set_interpreter_func set_interpret; /* completion callback */ void *set_arg; /* completion context */ - void *set_countp; /* pointer to NOB counter in case - * of directIO (bug11737) */ /* locked so that any old caller can communicate requests to * the set holder who can then fold them into the lock-free set */ spinlock_t set_new_req_lock; struct list_head set_new_requests; }; +struct ptlrpc_set_cbdata { + struct list_head psc_item; + set_interpreter_func psc_interpret; + void *psc_data; +}; + struct ptlrpc_bulk_desc; /* @@ -236,12 +243,12 @@ struct ptlrpc_reply_state { struct list_head rs_debug_list; #endif /* updates to following flag serialised by srv_request_lock */ - unsigned int rs_difficult:1; /* ACK/commit stuff */ - unsigned int rs_scheduled:1; /* being handled? */ - unsigned int rs_scheduled_ever:1;/* any schedule attempts? */ - unsigned int rs_handled:1; /* been handled yet? */ - unsigned int rs_on_net:1; /* reply_out_callback pending? */ - unsigned int rs_prealloc:1; /* rs from prealloc list */ + unsigned long rs_difficult:1; /* ACK/commit stuff */ + unsigned long rs_scheduled:1; /* being handled? */ + unsigned long rs_scheduled_ever:1;/* any schedule attempts? */ + unsigned long rs_handled:1; /* been handled yet? */ + unsigned long rs_on_net:1; /* reply_out_callback pending? */ + unsigned long rs_prealloc:1; /* rs from prealloc list */ int rs_size; __u64 rs_transno; @@ -291,7 +298,7 @@ struct ptlrpc_request { int rq_status; spinlock_t rq_lock; /* client-side flags */ - unsigned int rq_intr:1, rq_replied:1, rq_err:1, + unsigned long rq_intr:1, rq_replied:1, rq_err:1, rq_timedout:1, rq_resend:1, rq_restart:1, /* * when ->rq_replay is set, request is kept by the client even @@ -331,9 +338,12 @@ struct ptlrpc_request { struct ptlrpc_cli_ctx *rq_cli_ctx; /* client's half ctx */ struct ptlrpc_svc_ctx *rq_svc_ctx; /* server's half ctx */ struct list_head rq_ctx_chain; /* link to waited ctx */ - ptlrpc_sec_flavor_t rq_sec_flavor; /* client & server */ - /* client security flags */ - unsigned int rq_ctx_init:1, /* context initiation */ + + struct sptlrpc_flavor rq_flvr; /* client & server */ + enum lustre_sec_part rq_sp_from; + + unsigned long /* client/server security flags */ + rq_ctx_init:1, /* context initiation */ rq_ctx_fini:1, /* context destroy */ rq_bulk_read:1, /* request bulk read */ rq_bulk_write:1, /* request bulk write */ @@ -342,6 +352,9 @@ struct ptlrpc_request { rq_auth_remote:1, /* authed as remote user */ rq_auth_usr_root:1, /* authed as root */ rq_auth_usr_mdt:1, /* authed as mdt */ + /* security tfm flags */ + rq_pack_udesc:1, + rq_pack_bulk:1, /* doesn't expect reply FIXME */ rq_no_reply:1; @@ -403,10 +416,12 @@ struct ptlrpc_request { struct ptlrpc_request_set *rq_set; void *rq_interpret_reply; /* Async completion handler */ union ptlrpc_async_args rq_async_args; /* Async completion context */ - void *rq_ptlrpcd_data; struct ptlrpc_request_pool *rq_pool; /* Pool if request from preallocated list */ struct lu_context rq_session; + + /* request format */ + struct req_capsule rq_pill; }; static inline void ptlrpc_close_replay_seq(struct ptlrpc_request *req) @@ -519,10 +534,10 @@ struct ptlrpc_bulk_page { #define BULK_PUT_SOURCE 3 struct ptlrpc_bulk_desc { - unsigned int bd_success:1; /* completed successfully */ - unsigned int bd_network_rw:1; /* accessible to the network */ - unsigned int bd_type:2; /* {put,get}{source,sink} */ - unsigned int bd_registered:1; /* client side */ + unsigned long bd_success:1; /* completed successfully */ + unsigned long bd_network_rw:1; /* accessible to the network */ + unsigned long bd_type:2; /* {put,get}{source,sink} */ + unsigned long bd_registered:1; /* client side */ spinlock_t bd_lock; /* serialise with callback */ int bd_import_generation; struct obd_export *bd_export; @@ -672,7 +687,7 @@ struct ptlrpc_connection *ptlrpc_get_connection(lnet_process_id_t peer, lnet_nid_t self, struct obd_uuid *uuid); int ptlrpc_put_connection(struct ptlrpc_connection *c); struct ptlrpc_connection *ptlrpc_connection_addref(struct ptlrpc_connection *); -void ptlrpc_init_connection(void); +int ptlrpc_init_connection(void); void ptlrpc_cleanup_connection(void); extern lnet_pid_t ptl_get_pid(void); @@ -743,6 +758,8 @@ void ptlrpc_restart_req(struct ptlrpc_request *req); void ptlrpc_abort_inflight(struct obd_import *imp); struct ptlrpc_request_set *ptlrpc_prep_set(void); +int ptlrpc_set_add_cb(struct ptlrpc_request_set *set, + set_interpreter_func fn, void *data); int ptlrpc_set_next_timeout(struct ptlrpc_request_set *); int ptlrpc_check_set(struct ptlrpc_request_set *set); int ptlrpc_set_wait(struct ptlrpc_request_set *); @@ -758,14 +775,27 @@ void ptlrpc_free_rq_pool(struct ptlrpc_request_pool *pool); void ptlrpc_add_rqs_to_pool(struct ptlrpc_request_pool *pool, int num_rq); struct ptlrpc_request_pool *ptlrpc_init_rq_pool(int, int, void (*populate_pool)(struct ptlrpc_request_pool *, int)); +struct ptlrpc_request *ptlrpc_request_alloc(struct obd_import *imp, + const struct req_format *format); +struct ptlrpc_request *ptlrpc_request_alloc_pool(struct obd_import *imp, + struct ptlrpc_request_pool *, + const struct req_format *format); +void ptlrpc_request_free(struct ptlrpc_request *request); +int ptlrpc_request_pack(struct ptlrpc_request *request, + __u32 version, int opcode); +struct ptlrpc_request *ptlrpc_request_alloc_pack(struct obd_import *imp, + const struct req_format *format, + __u32 version, int opcode); +int ptlrpc_request_bufs_pack(struct ptlrpc_request *request, + __u32 version, int opcode, char **bufs, + struct ptlrpc_cli_ctx *ctx); struct ptlrpc_request *ptlrpc_prep_req(struct obd_import *imp, __u32 version, int opcode, int count, int *lengths, char **bufs); struct ptlrpc_request *ptlrpc_prep_req_pool(struct obd_import *imp, __u32 version, int opcode, int count, int *lengths, char **bufs, - struct ptlrpc_request_pool *pool, - struct ptlrpc_cli_ctx *ctx); + struct ptlrpc_request_pool *pool); void ptlrpc_free_req(struct ptlrpc_request *request); void ptlrpc_req_finished(struct ptlrpc_request *request); void ptlrpc_req_finished_with_imp_lock(struct ptlrpc_request *request); @@ -853,8 +883,10 @@ int lustre_pack_reply_v2(struct ptlrpc_request *req, int count, int lustre_shrink_msg(struct lustre_msg *msg, int segment, unsigned int newlen, int move_data); void lustre_free_reply_state(struct ptlrpc_reply_state *rs); +int lustre_msg_hdr_size(__u32 magic, int count); int lustre_msg_size(__u32 magic, int count, int *lengths); int lustre_msg_size_v2(int count, int *lengths); +int lustre_packed_msg_size(struct lustre_msg *msg); int lustre_unpack_msg(struct lustre_msg *m, int len); void *lustre_msg_buf_v1(void *msg, int n, int min_size); void *lustre_msg_buf_v2(struct lustre_msg_v2 *m, int n, int min_size); @@ -898,6 +930,8 @@ void lustre_msg_set_last_committed(struct lustre_msg *msg,__u64 last_committed); void lustre_msg_set_transno(struct lustre_msg *msg, __u64 transno); void lustre_msg_set_status(struct lustre_msg *msg, __u32 status); void lustre_msg_set_conn_cnt(struct lustre_msg *msg, __u32 conn_cnt); +void ptlrpc_req_set_repsize(struct ptlrpc_request *req, int count, int *sizes); +void ptlrpc_request_set_replen(struct ptlrpc_request *req); static inline void lustre_shrink_reply(struct ptlrpc_request *req, int segment, @@ -944,14 +978,6 @@ static inline int ptlrpc_req_get_repsize(struct ptlrpc_request *req) } } -static inline void -ptlrpc_req_set_repsize(struct ptlrpc_request *req, int count, int *lens) -{ - req->rq_replen = lustre_msg_size(req->rq_reqmsg->lm_magic, count, lens); - if (req->rq_reqmsg->lm_magic == LUSTRE_MSG_MAGIC_V2) - req->rq_reqmsg->lm_repsize = req->rq_replen; -} - /* ldlm/ldlm_lib.c */ int client_obd_setup(struct obd_device *obddev, struct lustre_cfg *lcfg); int client_obd_cleanup(struct obd_device *obddev);