X-Git-Url: https://git.whamcloud.com/?p=fs%2Flustre-release.git;a=blobdiff_plain;f=lnet%2Finclude%2Flnet%2Flib-types.h;h=a06e33e6376db5acfb0d1f5408b1c0c6c9934306;hp=4ae355c56d66d3f0799205df7b11ddf03b7cbdcf;hb=06093c1f24da938418a0243259b5307c9fc338d5;hpb=14a611ad680e89523abbcab0a3310511ab808ba8 diff --git a/lnet/include/lnet/lib-types.h b/lnet/include/lnet/lib-types.h index 4ae355c..a06e33e 100644 --- a/lnet/include/lnet/lib-types.h +++ b/lnet/include/lnet/lib-types.h @@ -1,6 +1,4 @@ -/* -*- mode: c; c-basic-offset: 8; indent-tabs-mode: nil; -*- - * vim:expandtab:shiftwidth=8:tabstop=8: - * +/* * GPL HEADER START * * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. @@ -26,7 +24,7 @@ * GPL HEADER END */ /* - * Copyright 2008 Sun Microsystems, Inc. All rights reserved + * Copyright (c) 2003, 2010, Oracle and/or its affiliates. All rights reserved. * Use is subject to license terms. */ /* @@ -58,11 +56,17 @@ #define WIRE_ATTR __attribute__((packed)) +/* Packed version of lnet_process_id_t to transfer via network */ +#include +typedef struct { + lnet_nid_t nid; + lnet_pid_t pid; /* node id / process id */ +} WIRE_ATTR lnet_process_id_packed_t; + /* The wire handle's interface cookie only matches one network interface in * one epoch (i.e. new cookie when the interface restarts or the node * reboots). The object cookie only matches one object on that interface * during that object's lifetime (i.e. no cookie re-use). */ -#include typedef struct { __u64 wh_interface_cookie; __u64 wh_object_cookie; @@ -147,14 +151,11 @@ typedef struct { /* PROTO MAGIC for LNDs */ #define LNET_PROTO_IB_MAGIC 0x0be91b91 -#define LNET_PROTO_OPENIB_MAGIC LNET_PROTO_IB_MAGIC -#define LNET_PROTO_IIB_MAGIC LNET_PROTO_IB_MAGIC -#define LNET_PROTO_VIB_MAGIC LNET_PROTO_IB_MAGIC #define LNET_PROTO_RA_MAGIC 0x0be91b92 #define LNET_PROTO_QSW_MAGIC 0x0be91b93 +#define LNET_PROTO_GNI_MAGIC 0xb00fbabe /* ask Kim */ #define LNET_PROTO_TCP_MAGIC 0xeebc0ded #define LNET_PROTO_PTL_MAGIC 0x50746C4E /* 'PtlN' unique magic */ -#define LNET_PROTO_GM_MAGIC 0x6d797269 /* 'myri'! */ #define LNET_PROTO_MX_MAGIC 0x4d583130 /* 'MX10'! */ #define LNET_PROTO_ACCEPTOR_MAGIC 0xacce7100 #define LNET_PROTO_PING_MAGIC 0x70696E67 /* 'ping' */ @@ -182,87 +183,90 @@ typedef struct { struct lnet_libmd; typedef struct lnet_msg { - struct list_head msg_activelist; - struct list_head msg_list; /* Q for credits/MD */ - - lnet_process_id_t msg_target; - __u32 msg_type; - - unsigned int msg_target_is_router:1; /* sending to a router */ - unsigned int msg_routing:1; /* being forwarded */ - unsigned int msg_ack:1; /* ack on finalize (PUT) */ - unsigned int msg_sending:1; /* outgoing message */ - unsigned int msg_receiving:1; /* being received */ - unsigned int msg_delayed:1; /* had to Q for buffer or tx credit */ - unsigned int msg_txcredit:1; /* taken an NI send credit */ - unsigned int msg_peertxcredit:1; /* taken a peer send credit */ - unsigned int msg_rtrcredit:1; /* taken a globel router credit */ - unsigned int msg_peerrtrcredit:1; /* taken a peer router credit */ - unsigned int msg_onactivelist:1; /* on the activelist */ - - struct lnet_peer *msg_txpeer; /* peer I'm sending to */ - struct lnet_peer *msg_rxpeer; /* peer I received from */ - - void *msg_private; - struct lnet_libmd *msg_md; - - unsigned int msg_len; - unsigned int msg_wanted; - unsigned int msg_offset; - unsigned int msg_niov; - struct iovec *msg_iov; - lnet_kiov_t *msg_kiov; - - lnet_event_t msg_ev; - lnet_hdr_t msg_hdr; + cfs_list_t msg_activelist; + cfs_list_t msg_list; /* Q for credits/MD */ + + lnet_process_id_t msg_target; + /* where is it from, it's only for building event */ + lnet_nid_t msg_from; + __u32 msg_type; + + unsigned int msg_vmflush:1; /* VM trying to free memory */ + unsigned int msg_target_is_router:1; /* sending to a router */ + unsigned int msg_routing:1; /* being forwarded */ + unsigned int msg_ack:1; /* ack on finalize (PUT) */ + unsigned int msg_sending:1; /* outgoing message */ + unsigned int msg_receiving:1; /* being received */ + unsigned int msg_delayed:1; /* had to Q for buffer or tx credit */ + unsigned int msg_txcredit:1; /* taken an NI send credit */ + unsigned int msg_peertxcredit:1; /* taken a peer send credit */ + unsigned int msg_rtrcredit:1; /* taken a globel router credit */ + unsigned int msg_peerrtrcredit:1; /* taken a peer router credit */ + unsigned int msg_onactivelist:1; /* on the activelist */ + + struct lnet_peer *msg_txpeer; /* peer I'm sending to */ + struct lnet_peer *msg_rxpeer; /* peer I received from */ + + void *msg_private; + struct lnet_libmd *msg_md; + + unsigned int msg_len; + unsigned int msg_wanted; + unsigned int msg_offset; + unsigned int msg_niov; + struct iovec *msg_iov; + lnet_kiov_t *msg_kiov; + + lnet_event_t msg_ev; + lnet_hdr_t msg_hdr; } lnet_msg_t; typedef struct lnet_libhandle { - struct list_head lh_hash_chain; - __u64 lh_cookie; + cfs_list_t lh_hash_chain; + __u64 lh_cookie; } lnet_libhandle_t; #define lh_entry(ptr, type, member) \ ((type *)((char *)(ptr)-(char *)(&((type *)0)->member))) typedef struct lnet_eq { - struct list_head eq_list; - lnet_libhandle_t eq_lh; - lnet_seq_t eq_enq_seq; - lnet_seq_t eq_deq_seq; - unsigned int eq_size; - lnet_event_t *eq_events; - int eq_refcount; - lnet_eq_handler_t eq_callback; + cfs_list_t eq_list; + lnet_libhandle_t eq_lh; + lnet_seq_t eq_enq_seq; + lnet_seq_t eq_deq_seq; + unsigned int eq_size; + lnet_event_t *eq_events; + int eq_refcount; + lnet_eq_handler_t eq_callback; } lnet_eq_t; typedef struct lnet_me { - struct list_head me_list; - lnet_libhandle_t me_lh; - lnet_process_id_t me_match_id; - unsigned int me_portal; - __u64 me_match_bits; - __u64 me_ignore_bits; - lnet_unlink_t me_unlink; - struct lnet_libmd *me_md; + cfs_list_t me_list; + lnet_libhandle_t me_lh; + lnet_process_id_t me_match_id; + unsigned int me_portal; + __u64 me_match_bits; + __u64 me_ignore_bits; + lnet_unlink_t me_unlink; + struct lnet_libmd *me_md; } lnet_me_t; typedef struct lnet_libmd { - struct list_head md_list; - lnet_libhandle_t md_lh; - lnet_me_t *md_me; - char *md_start; - unsigned int md_offset; - unsigned int md_length; - unsigned int md_max_size; - int md_threshold; - int md_refcount; - unsigned int md_options; - unsigned int md_flags; - void *md_user_ptr; - lnet_eq_t *md_eq; - unsigned int md_niov; /* # frags */ + cfs_list_t md_list; + lnet_libhandle_t md_lh; + lnet_me_t *md_me; + char *md_start; + unsigned int md_offset; + unsigned int md_length; + unsigned int md_max_size; + int md_threshold; + int md_refcount; + unsigned int md_options; + unsigned int md_flags; + void *md_user_ptr; + lnet_eq_t *md_eq; + unsigned int md_niov; /* # frags */ union { struct iovec iov[LNET_MAX_IOV]; lnet_kiov_t kiov[LNET_MAX_IOV]; @@ -275,30 +279,31 @@ typedef struct lnet_libmd { #ifdef LNET_USE_LIB_FREELIST typedef struct { - void *fl_objs; /* single contiguous array of objects */ - int fl_nobjs; /* the number of them */ - int fl_objsize; /* the size (including overhead) of each of them */ - struct list_head fl_list; /* where they are enqueued */ + void *fl_objs; /* single contiguous array of objects */ + int fl_nobjs; /* the number of them */ + int fl_objsize; /* the size (including overhead) of each of them */ + cfs_list_t fl_list; /* where they are enqueued */ } lnet_freelist_t; typedef struct { - struct list_head fo_list; /* enqueue on fl_list */ - void *fo_contents; /* aligned contents */ + cfs_list_t fo_list; /* enqueue on fl_list */ + void *fo_contents; /* aligned contents */ } lnet_freeobj_t; #endif typedef struct { /* info about peers we are trying to fail */ - struct list_head tp_list; /* ln_test_peers */ - lnet_nid_t tp_nid; /* matching nid */ - unsigned int tp_threshold; /* # failures to simulate */ + cfs_list_t tp_list; /* ln_test_peers */ + lnet_nid_t tp_nid; /* matching nid */ + unsigned int tp_threshold; /* # failures to simulate */ } lnet_test_peer_t; #define LNET_COOKIE_TYPE_MD 1 #define LNET_COOKIE_TYPE_ME 2 #define LNET_COOKIE_TYPE_EQ 3 -#define LNET_COOKIE_TYPES 4 +#define LNET_COOKIE_TYPE_BITS 2 +#define LNET_COOKIE_TYPES (1 << LNET_COOKIE_TYPE_BITS) /* LNET_COOKIE_TYPES must be a power of 2, so the cookie type can be * extracted by masking with (LNET_COOKIE_TYPES - 1) */ @@ -307,11 +312,11 @@ struct lnet_ni; /* forward ref */ typedef struct lnet_lnd { /* fields managed by portals */ - struct list_head lnd_list; /* stash in the LND table */ - int lnd_refcount; /* # active instances */ + cfs_list_t lnd_list; /* stash in the LND table */ + int lnd_refcount; /* # active instances */ /* fields initialised by the LND */ - unsigned int lnd_type; + unsigned int lnd_type; int (*lnd_startup) (struct lnet_ni *ni); void (*lnd_shutdown) (struct lnet_ni *ni); @@ -386,8 +391,8 @@ typedef struct { #define LNET_MAX_INTERFACES 16 typedef struct lnet_ni { - struct list_head ni_list; /* chain on ln_nis */ - struct list_head ni_txq; /* messages waiting for tx credits */ + cfs_list_t ni_list; /* chain on ln_nis */ + cfs_list_t ni_txq; /* messages waiting for tx credits */ int ni_maxtxcredits; /* # tx credits */ int ni_txcredits; /* # tx credits free */ int ni_mintxcredits; /* lowest it's been */ @@ -398,14 +403,20 @@ typedef struct lnet_ni { void *ni_data; /* instance-specific data */ lnd_t *ni_lnd; /* procedural interface */ int ni_refcount; /* reference count */ - cfs_time_t ni_last_alive; /* when I was last alive */ - lnet_ni_status_t *ni_status; /* my health status */ - char *ni_interfaces[LNET_MAX_INTERFACES]; /* equivalent interfaces to use */ + /* when I was last alive */ + long ni_last_alive; + lnet_ni_status_t *ni_status; /* my health status */ + /* equivalent interfaces to use */ + char *ni_interfaces[LNET_MAX_INTERFACES]; } lnet_ni_t; #define LNET_PROTO_PING_MATCHBITS 0x8000000000000000LL -#define LNET_PROTO_PING_VERSION 2 -#define LNET_PROTO_PING_VERSION1 1 +enum { + LNET_PROTO_PING_UNKNOWN = 0, /* unknown */ + LNET_PROTO_PING_VERSION_1 = 1, /* old version */ + LNET_PROTO_PING_VERSION = 2, /* current version */ +}; + typedef struct { __u32 pi_magic; __u32 pi_version; @@ -418,16 +429,18 @@ typedef struct { #define LNET_MAX_RTR_NIS 16 #define LNET_PINGINFO_SIZE offsetof(lnet_ping_info_t, pi_ni[LNET_MAX_RTR_NIS]) typedef struct { - struct list_head rcd_list; /* chain on the_lnet.ln_zombie_rcd */ - lnet_handle_md_t rcd_mdh; /* ping buffer MD */ - lnet_ping_info_t *rcd_pinginfo; /* ping buffer */ + /* chain on the_lnet.ln_zombie_rcd or ln_deathrow_rcd */ + cfs_list_t rcd_list; + lnet_handle_md_t rcd_mdh; /* ping buffer MD */ + struct lnet_peer *rcd_gateway; /* reference to gateway */ + lnet_ping_info_t *rcd_pinginfo; /* ping buffer */ } lnet_rc_data_t; typedef struct lnet_peer { - struct list_head lp_hashlist; /* chain on peer hash */ - struct list_head lp_txq; /* messages blocking for tx credits */ - struct list_head lp_rtrq; /* messages blocking for router credits */ - struct list_head lp_rtr_list; /* chain on router list */ + cfs_list_t lp_hashlist; /* chain on peer hash */ + cfs_list_t lp_txq; /* messages blocking for tx credits */ + cfs_list_t lp_rtrq; /* messages blocking for router credits */ + cfs_list_t lp_rtr_list; /* chain on router list */ int lp_txcredits; /* # tx credits available */ int lp_mintxcredits; /* low water mark */ int lp_rtrcredits; /* # router credits */ @@ -448,34 +461,55 @@ typedef struct lnet_peer { lnet_nid_t lp_nid; /* peer's NID */ int lp_refcount; /* # refs */ int lp_rtr_refcount; /* # refs from lnet_route_t::lr_gateway */ - lnet_rc_data_t *lp_rcd; /* router checker state */ + /* returned RC ping version */ + unsigned int lp_ping_version; + cfs_list_t lp_routes; /* routers on this peer */ + lnet_rc_data_t *lp_rcd; /* router checker state */ } lnet_peer_t; + +/* peer hash size */ +#define LNET_PEER_HASH_BITS 9 +#define LNET_PEER_HASH_SIZE (1 << LNET_PEER_HASH_BITS) + +/* peer hash table */ +struct lnet_peer_table { + int pt_version; /* /proc validity stamp */ + int pt_number; /* # peers extant */ + cfs_list_t pt_deathrow; /* zombie peers */ + cfs_list_t *pt_hash; /* NID->peer hash */ +}; + +#define lnet_peer_aliveness_enabled(lp) ((lp)->lp_ni->ni_peertimeout > 0) + typedef struct { - struct list_head lr_list; /* chain on net */ - lnet_peer_t *lr_gateway; /* router node */ - unsigned int lr_hops; /* how far I am */ + cfs_list_t lr_list; /* chain on net */ + cfs_list_t lr_gwlist; /* chain on gateway */ + lnet_peer_t *lr_gateway; /* router node */ + __u32 lr_net; /* remote network number */ + unsigned int lr_downis; /* number of down NIs */ + unsigned int lr_hops; /* how far I am */ } lnet_route_t; typedef struct { - struct list_head lrn_list; /* chain on ln_remote_nets */ - struct list_head lrn_routes; /* routes to me */ + cfs_list_t lrn_list; /* chain on ln_remote_nets */ + cfs_list_t lrn_routes; /* routes to me */ __u32 lrn_net; /* my net number */ } lnet_remotenet_t; typedef struct { - struct list_head rbp_bufs; /* my free buffer pool */ - struct list_head rbp_msgs; /* messages blocking for a buffer */ - int rbp_npages; /* # pages in each buffer */ - int rbp_nbuffers; /* # buffers */ - int rbp_credits; /* # free buffers / blocked messages */ - int rbp_mincredits; /* low water mark */ + cfs_list_t rbp_bufs; /* my free buffer pool */ + cfs_list_t rbp_msgs; /* messages blocking for a buffer */ + int rbp_npages; /* # pages in each buffer */ + int rbp_nbuffers; /* # buffers */ + int rbp_credits; /* # free buffers / blocked messages */ + int rbp_mincredits; /* low water mark */ } lnet_rtrbufpool_t; typedef struct { - struct list_head rb_list; /* chain on rbp_bufs */ - lnet_rtrbufpool_t *rb_pool; /* owning pool */ - lnet_kiov_t rb_kiov[0]; /* the buffer space */ + cfs_list_t rb_list; /* chain on rbp_bufs */ + lnet_rtrbufpool_t *rb_pool; /* owning pool */ + lnet_kiov_t rb_kiov[0]; /* the buffer space */ } lnet_rtrbuf_t; #include @@ -498,119 +532,158 @@ typedef struct { #define LNET_NRBPOOLS 3 /* # different router buffer pools */ +enum { + /* Didn't match anything */ + LNET_MATCHMD_NONE = (1 << 0), + /* Matched OK */ + LNET_MATCHMD_OK = (1 << 1), + /* Must be discarded */ + LNET_MATCHMD_DROP = (1 << 2), +}; + /* Options for lnet_portal_t::ptl_options */ #define LNET_PTL_LAZY (1 << 0) -typedef struct { - struct list_head ptl_ml; /* match list */ - struct list_head ptl_msgq; /* messages blocking for MD */ - __u64 ptl_ml_version; /* validity stamp, only changed for new attached MD */ - __u64 ptl_msgq_version; /* validity stamp */ - unsigned int ptl_options; +#define LNET_PTL_MATCH_UNIQUE (1 << 1) /* unique match, for RDMA */ +#define LNET_PTL_MATCH_WILDCARD (1 << 2) /* wildcard match, request portal */ + +/* ME hash of RDMA portal */ +#define LNET_PORTAL_HASH_BITS 8 +#define LNET_PORTAL_HASH_SIZE (1 << LNET_PORTAL_HASH_BITS) + +typedef struct lnet_portal { + unsigned int ptl_index; /* portal ID, reserved */ + cfs_list_t *ptl_mhash; /* match hash */ + cfs_list_t ptl_mlist; /* match list */ + cfs_list_t ptl_msgq; /* messages blocking for MD */ + __u64 ptl_ml_version; /* validity stamp, only changed for new attached MD */ + __u64 ptl_msgq_version; /* validity stamp */ + unsigned int ptl_options; } lnet_portal_t; +#define LNET_LH_HASH_BITS 12 +#define LNET_LH_HASH_SIZE (1ULL << LNET_LH_HASH_BITS) +#define LNET_LH_HASH_MASK (LNET_LH_HASH_SIZE - 1) + +/* resource container (ME, MD, EQ) */ +struct lnet_res_container { + unsigned int rec_type; /* container type */ + __u64 rec_lh_cookie; /* cookie generator */ + cfs_list_t rec_active; /* active resource list */ + cfs_list_t *rec_lh_hash; /* handle hash */ +#ifdef LNET_USE_LIB_FREELIST + lnet_freelist_t rec_freelist; /* freelist for resources */ +#endif +}; + +/* message container */ +struct lnet_msg_container { + int msc_init; /* initialized or not */ + /* max # threads finalizing */ + int msc_nfinalizers; + /* msgs waiting to complete finalizing */ + cfs_list_t msc_finalizing; + cfs_list_t msc_active; /* active message list */ + /* threads doing finalization */ + void **msc_finalizers; +#ifdef LNET_USE_LIB_FREELIST + lnet_freelist_t msc_freelist; /* freelist for messages */ +#endif +}; + /* Router Checker states */ -#define LNET_RC_STATE_SHUTDOWN 0 /* not started */ -#define LNET_RC_STATE_RUNNING 1 /* started up OK */ -#define LNET_RC_STATE_STOPTHREAD 2 /* telling thread to stop */ -#define LNET_RC_STATE_UNLINKING 3 /* unlinking RC MD */ -#define LNET_RC_STATE_UNLINKED 4 /* RC's MD has been unlinked */ +#define LNET_RC_STATE_SHUTDOWN 0 /* not started */ +#define LNET_RC_STATE_RUNNING 1 /* started up OK */ +#define LNET_RC_STATE_STOPPING 2 /* telling thread to stop */ typedef struct { /* Stuff initialised at LNetInit() */ - int ln_init; /* LNetInit() called? */ - int ln_refcount; /* LNetNIInit/LNetNIFini counter */ - int ln_niinit_self; /* Have I called LNetNIInit myself? */ + int ln_init; /* LNetInit() called? */ + int ln_refcount; /* LNetNIInit/LNetNIFini counter */ + int ln_niinit_self; /* Have I called LNetNIInit myself? */ + /* shutdown in progress */ + int ln_shutdown; - struct list_head ln_lnds; /* registered LNDs */ + cfs_list_t ln_lnds; /* registered LNDs */ #ifdef __KERNEL__ - spinlock_t ln_lock; - cfs_waitq_t ln_waitq; - struct semaphore ln_api_mutex; - struct semaphore ln_lnd_mutex; + cfs_spinlock_t ln_lock; + cfs_mutex_t ln_api_mutex; + cfs_mutex_t ln_lnd_mutex; + cfs_waitq_t ln_eq_waitq; #else # ifndef HAVE_LIBPTHREAD - int ln_lock; - int ln_api_mutex; - int ln_lnd_mutex; + int ln_lock; + int ln_api_mutex; + int ln_lnd_mutex; # else - pthread_cond_t ln_cond; - pthread_mutex_t ln_lock; - pthread_mutex_t ln_api_mutex; - pthread_mutex_t ln_lnd_mutex; + pthread_mutex_t ln_lock; + pthread_mutex_t ln_api_mutex; + pthread_mutex_t ln_lnd_mutex; + pthread_cond_t ln_eq_cond; # endif #endif + /* ME container */ + struct lnet_res_container ln_me_container; + /* MD container */ + struct lnet_res_container ln_md_container; + /* Event Queue container */ + struct lnet_res_container ln_eq_container; - /* Stuff initialised at LNetNIInit() */ + /* # portals */ + int ln_nportals; + /* the vector of portals */ + lnet_portal_t **ln_portals; - int ln_shutdown; /* shutdown in progress */ - int ln_nportals; /* # portals */ - lnet_portal_t *ln_portals; /* the vector of portals */ + lnet_pid_t ln_pid; /* requested pid */ - lnet_pid_t ln_pid; /* requested pid */ + cfs_list_t ln_nis; /* LND instances */ + lnet_ni_t *ln_loni; /* the loopback NI */ + /* NI to wait for events in */ + lnet_ni_t *ln_eq_waitni; - struct list_head ln_nis; /* LND instances */ - lnet_ni_t *ln_loni; /* the loopback NI */ - lnet_ni_t *ln_eqwaitni; /* NI to wait for events in */ - struct list_head ln_zombie_nis; /* dying LND instances */ - int ln_nzombie_nis; /* # of NIs to wait for */ + cfs_list_t ln_zombie_nis; /* dying LND instances */ + int ln_nzombie_nis; /* # of NIs to wait for */ - struct list_head ln_remote_nets; /* remote networks with routes to them */ - __u64 ln_remote_nets_version; /* validity stamp */ + cfs_list_t ln_remote_nets; /* remote networks with routes to them */ + __u64 ln_remote_nets_version; /* validity stamp */ - struct list_head ln_routers; /* list of all known routers */ - __u64 ln_routers_version; /* validity stamp */ + cfs_list_t ln_routers; /* list of all known routers */ + __u64 ln_routers_version; /* validity stamp */ - struct list_head *ln_peer_hash; /* NID->peer hash */ - int ln_npeers; /* # peers extant */ - int ln_peertable_version; /* /proc validity stamp */ + int ln_routing; /* am I a router? */ + lnet_rtrbufpool_t ln_rtrpools[LNET_NRBPOOLS]; /* router buffer pools */ - int ln_routing; /* am I a router? */ - lnet_rtrbufpool_t ln_rtrpools[LNET_NRBPOOLS]; /* router buffer pools */ + __u64 ln_interface_cookie; /* uniquely identifies this ni in this epoch */ - int ln_lh_hash_size; /* size of lib handle hash table */ - struct list_head *ln_lh_hash_table; /* all extant lib handles, this interface */ - __u64 ln_next_object_cookie; /* cookie generator */ - __u64 ln_interface_cookie; /* uniquely identifies this ni in this epoch */ + char *ln_network_tokens; /* space for network names */ + int ln_network_tokens_nob; - char *ln_network_tokens; /* space for network names */ - int ln_network_tokens_nob; + int ln_testprotocompat; /* test protocol compatibility flags */ - int ln_testprotocompat; /* test protocol compatibility flags */ + cfs_list_t ln_test_peers; /* failure simulation */ - struct list_head ln_finalizeq; /* msgs waiting to complete finalizing */ -#ifdef __KERNEL__ - void **ln_finalizers; /* threads doing finalization */ - int ln_nfinalizers; /* max # threads finalizing */ -#else - int ln_finalizing; -#endif - struct list_head ln_test_peers; /* failure simulation */ + /* message container */ + struct lnet_peer_table *ln_peer_table; + struct lnet_msg_container ln_msg_container; - lnet_handle_md_t ln_ping_target_md; - lnet_handle_eq_t ln_ping_target_eq; - lnet_ping_info_t *ln_ping_info; + lnet_handle_md_t ln_ping_target_md; + lnet_handle_eq_t ln_ping_target_eq; + lnet_ping_info_t *ln_ping_info; #ifdef __KERNEL__ - struct semaphore ln_rc_signal; /* serialise startup/shutdown */ -#endif - int ln_rc_state; /* router checker startup/shutdown state */ - lnet_handle_eq_t ln_rc_eqh; /* router checker's event queue */ - lnet_handle_md_t ln_rc_mdh; - struct list_head ln_zombie_rcd; - -#ifdef LNET_USE_LIB_FREELIST - lnet_freelist_t ln_free_mes; - lnet_freelist_t ln_free_msgs; - lnet_freelist_t ln_free_mds; - lnet_freelist_t ln_free_eqs; + cfs_semaphore_t ln_rc_signal; /* serialise startup/shutdown */ #endif - struct list_head ln_active_msgs; - struct list_head ln_active_mds; - struct list_head ln_active_eqs; + /* router checker startup/shutdown state */ + int ln_rc_state; + /* router checker's event queue */ + lnet_handle_eq_t ln_rc_eqh; + /* rcd still pending on net */ + cfs_list_t ln_rcd_deathrow; + /* rcd ready for free */ + cfs_list_t ln_rcd_zombie; - lnet_counters_t ln_counters; + lnet_counters_t ln_counters; #ifndef __KERNEL__ /* Temporary workaround to allow uOSS and test programs force @@ -618,7 +691,7 @@ typedef struct * lnet_prepare(). The only way to turn this flag on is to * call lnet_server_mode() */ - int ln_server_mode_flag; + int ln_server_mode_flag; #endif } lnet_t;