X-Git-Url: https://git.whamcloud.com/?a=blobdiff_plain;f=lustre%2Finclude%2Flustre_net.h;h=097f7fd0b9c92859b5cf13b43670e0fa6c9c042d;hb=7c3a4c77c23a7d8b065d530b86a2f141579acf1c;hp=b51977018e859e3a89d9b32333bd833c1691ee62;hpb=995c1fbbf92a8776f3a516fea86d0acbef6887e5;p=fs%2Flustre-release.git diff --git a/lustre/include/lustre_net.h b/lustre/include/lustre_net.h index b519770..097f7fd 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 @@ -87,10 +88,11 @@ * considered full when less than ?_MAXREQSIZE is left in them. */ -#define LDLM_THREADS_AUTO_MIN min((int)(smp_num_cpus * smp_num_cpus * 2), 8) +#define LDLM_THREADS_AUTO_MIN \ + min((int)(num_online_cpus() * num_online_cpus() * 2), 8) #define LDLM_THREADS_AUTO_MAX (LDLM_THREADS_AUTO_MIN * 16) #define LDLM_BL_THREADS LDLM_THREADS_AUTO_MIN -#define LDLM_NBUFS (64 * smp_num_cpus) +#define LDLM_NBUFS (64 * num_online_cpus()) #define LDLM_BUFSIZE (8 * 1024) #define LDLM_MAXREQSIZE (5 * 1024) #define LDLM_MAXREPSIZE (1024) @@ -98,17 +100,17 @@ #define MDT_MIN_THREADS 2UL #define MDT_MAX_THREADS 512UL #define MDT_NUM_THREADS max(min_t(unsigned long, MDT_MAX_THREADS, \ - num_physpages >> (25 - PAGE_SHIFT)), 2UL) + num_physpages >> (25 - CFS_PAGE_SHIFT)), 2UL) #define FLD_NUM_THREADS max(min_t(unsigned long, MDT_MAX_THREADS, \ - num_physpages >> (25 - PAGE_SHIFT)), 2UL) + num_physpages >> (25 - CFS_PAGE_SHIFT)), 2UL) #define SEQ_NUM_THREADS max(min_t(unsigned long, MDT_MAX_THREADS, \ - num_physpages >> (25 - PAGE_SHIFT)), 2UL) + num_physpages >> (25 - CFS_PAGE_SHIFT)), 2UL) /* Absolute limits */ #define MDS_THREADS_MIN 2 #define MDS_THREADS_MAX 512 #define MDS_THREADS_MIN_READPAGE 2 -#define MDS_NBUFS (64 * smp_num_cpus) +#define MDS_NBUFS (64 * num_online_cpus()) #define MDS_BUFSIZE (8 * 1024) /* Assume file name length = FNAME_MAX = 256 (true for ext3). * path name length = PATH_MAX = 4096 @@ -145,7 +147,7 @@ #define MGS_THREADS_AUTO_MIN 2 #define MGS_THREADS_AUTO_MAX 32 -#define MGS_NBUFS (64 * smp_num_cpus) +#define MGS_NBUFS (64 * num_online_cpus()) #define MGS_BUFSIZE (8 * 1024) #define MGS_MAXREQSIZE (7 * 1024) #define MGS_MAXREPSIZE (9 * 1024) @@ -153,7 +155,7 @@ /* Absolute limits */ #define OSS_THREADS_MIN 2 #define OSS_THREADS_MAX 512 -#define OST_NBUFS (64 * smp_num_cpus) +#define OST_NBUFS (64 * num_online_cpus()) #define OST_BUFSIZE (8 * 1024) /* OST_MAXREQSIZE ~= 4768 bytes = * lustre_msg + obdo + 16 * obd_ioobj + 256 * niobuf_remote @@ -166,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; @@ -203,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; /* @@ -235,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; @@ -290,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 @@ -330,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 */ @@ -340,7 +351,12 @@ struct ptlrpc_request { rq_auth_gss:1, /* authenticated by gss */ rq_auth_remote:1, /* authed as remote user */ rq_auth_usr_root:1, /* authed as root */ - rq_auth_usr_mdt:1; /* authed as mdt */ + 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; uid_t rq_auth_uid; /* authed uid */ uid_t rq_auth_mapped_uid; /* authed uid mapped to */ @@ -392,17 +408,20 @@ struct ptlrpc_request { void *rq_cb_data; struct ptlrpc_bulk_desc *rq_bulk; /* client side bulk */ - time_t rq_sent; /* when request sent, seconds */ - + time_t rq_sent; /* when request sent, seconds, + * or time when request should + * be sent */ /* Multi-rpc bits */ struct list_head rq_set_chain; 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) @@ -439,24 +458,6 @@ static inline int lustre_rep_swabbed(struct ptlrpc_request *req, int index) return req->rq_rep_swab_mask & (1 << index); } -#define SWAB_PARANOIA 1 - -#if SWAB_PARANOIA -/* unpacking: assert idx not unpacked already */ -#define LASSERT_REQSWAB(rq, idx) lustre_set_req_swabbed(rq, idx) -#define LASSERT_REPSWAB(rq, idx) lustre_set_rep_swabbed(rq, idx) - -/* just looking: assert idx already unpacked */ -#define LASSERT_REQSWABBED(rq, idx) LASSERT(lustre_req_swabbed(rq, idx)) -#define LASSERT_REPSWABBED(rq, idx) LASSERT(lustre_rep_swabbed(rq, idx)) - -#else -#define LASSERT_REQSWAB(rq, idx) -#define LASSERT_REPSWAB(rq, idx) -#define LASSERT_REQSWABBED(rq, idx) -#define LASSERT_REPSWABBED(rq, idx) -#endif - static inline const char * ptlrpc_rqphase2str(const struct ptlrpc_request *req) { @@ -533,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; @@ -686,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); @@ -708,6 +709,7 @@ static inline int ptlrpc_bulk_active (struct ptlrpc_bulk_desc *desc) int ptlrpc_send_reply(struct ptlrpc_request *req, int); int ptlrpc_reply(struct ptlrpc_request *req); +int ptlrpc_send_error(struct ptlrpc_request *req, int difficult); int ptlrpc_error(struct ptlrpc_request *req); void ptlrpc_resend_req(struct ptlrpc_request *request); int ptl_send_rpc(struct ptlrpc_request *request, int noreply); @@ -757,6 +759,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 *); @@ -772,14 +776,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); @@ -854,6 +871,7 @@ int ptlrpc_disconnect_import(struct obd_import *imp, int noclose); int ptlrpc_import_recovery_state_machine(struct obd_import *imp); /* ptlrpc/pack_generic.c */ +int ptlrpc_reconnect_import(struct obd_import *imp); int lustre_msg_swabbed(struct lustre_msg *msg); int lustre_msg_check_version(struct lustre_msg *msg, __u32 version); void lustre_init_msg_v2(struct lustre_msg_v2 *msg, int count, int *lens, @@ -867,10 +885,11 @@ 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); void *lustre_msg_buf(struct lustre_msg *m, int n, int minlen); int lustre_msg_buflen(struct lustre_msg *m, int n); @@ -897,6 +916,10 @@ __u32 lustre_msg_get_opc(struct lustre_msg *msg); __u64 lustre_msg_get_last_xid(struct lustre_msg *msg); __u64 lustre_msg_get_last_committed(struct lustre_msg *msg); __u64 lustre_msg_get_transno(struct lustre_msg *msg); +__u64 lustre_msg_get_slv(struct lustre_msg *msg); +__u32 lustre_msg_get_limit(struct lustre_msg *msg); +void lustre_msg_set_slv(struct lustre_msg *msg, __u64 slv); +void lustre_msg_set_limit(struct lustre_msg *msg, __u64 limit); int lustre_msg_get_status(struct lustre_msg *msg); __u32 lustre_msg_get_conn_cnt(struct lustre_msg *msg); __u32 lustre_msg_get_magic(struct lustre_msg *msg); @@ -908,6 +931,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, @@ -942,9 +967,6 @@ static inline __u32 lustre_request_magic(struct ptlrpc_request *req) static inline int ptlrpc_req_get_repsize(struct ptlrpc_request *req) { switch (req->rq_reqmsg->lm_magic) { - case LUSTRE_MSG_MAGIC_V1: - CERROR("function not supported for lustre_msg V1!\n"); - return -ENOTSUPP; case LUSTRE_MSG_MAGIC_V2: return req->rq_reqmsg->lm_repsize; default: @@ -954,20 +976,13 @@ 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); int client_connect_import(const struct lu_env *env, struct lustre_handle *conn, struct obd_device *obd, - struct obd_uuid *cluuid, struct obd_connect_data *); + struct obd_uuid *cluuid, struct obd_connect_data *, + void *localdata); int client_disconnect_export(struct obd_export *exp); int client_import_add_conn(struct obd_import *imp, struct obd_uuid *uuid, int priority);