Whamcloud - gitweb
LU-6142 lnet: convert kiblnd/ksocknal_thread_start to vararg
[fs/lustre-release.git] / lnet / klnds / socklnd / socklnd.h
index 49055d0..1c64f5b 100644 (file)
@@ -156,6 +156,11 @@ struct ksock_tunables {
 #if SOCKNAL_VERSION_DEBUG
         int              *ksnd_protocol;        /* protocol version */
 #endif
+       int              *ksnd_conns_per_peer;  /* for typed mode, yields:
+                                                * 1 + 2*conns_per_peer total
+                                                * for untyped:
+                                                * conns_per_peer total
+                                                */
 };
 
 struct ksock_net {
@@ -163,6 +168,7 @@ struct ksock_net {
        struct list_head  ksnn_list;            /* chain on global list */
        atomic_t          ksnn_npeers;          /* # peers */
        struct ksock_interface ksnn_interface;  /* IP interface */
+       struct lnet_ni    *ksnn_ni;
 };
 /* When the ksock_net is shut down, this (negative) bias is added to
  * ksnn_npeers, which prevents new peers from being added.
@@ -357,6 +363,8 @@ struct ksock_conn {
        time64_t                ksnc_tx_last_post;
 };
 
+#define SOCKNAL_CONN_COUNT_MAX_BITS    8       /* max conn count bits */
+
 struct ksock_conn_cb {
        struct list_head        ksnr_connd_list;/* chain on ksnr_connd_routes */
        struct ksock_peer_ni   *ksnr_peer;      /* owning peer_ni */
@@ -371,7 +379,11 @@ struct ksock_conn_cb {
        unsigned int            ksnr_connecting:1;/* connection in progress */
        unsigned int            ksnr_connected:4;/* connections by type */
        unsigned int            ksnr_deleted:1; /* been removed from peer_ni? */
-       int                     ksnr_conn_count;/* # conns for this route */
+       unsigned int            ksnr_ctrl_conn_count:1; /* # conns by type */
+       unsigned int            ksnr_blki_conn_count:8;
+       unsigned int            ksnr_blko_conn_count:8;
+       int                     ksnr_conn_count;/* total # conns for this cb */
+
 };
 
 #define SOCKNAL_KEEPALIVE_PING          1       /* cookie for keepalive ping */
@@ -444,6 +456,11 @@ extern const struct ksock_proto ksocknal_protocol_v3x;
 #define CPU_MASK_NONE   0UL
 #endif
 
+#if LINUX_VERSION_CODE < KERNEL_VERSION(3, 11, 0)
+#undef netdev_notifier_info_to_dev
+#define netdev_notifier_info_to_dev(ndev) ndev
+#endif
+
 static inline __u32 ksocknal_csum(__u32 crc, unsigned char const *p, size_t len)
 {
 #if 1
@@ -557,9 +574,12 @@ ksocknal_peer_decref(struct ksock_peer_ni *peer_ni)
 
 static inline int ksocknal_timeout(void)
 {
-       return *ksocknal_tunables.ksnd_timeout ?
-               *ksocknal_tunables.ksnd_timeout :
-               lnet_get_lnd_timeout();
+       return *ksocknal_tunables.ksnd_timeout ?: lnet_get_lnd_timeout();
+}
+
+static inline int ksocknal_conns_per_peer(void)
+{
+       return *ksocknal_tunables.ksnd_conns_per_peer ?: 1;
 }
 
 int ksocknal_startup(struct lnet_ni *ni);
@@ -601,7 +621,15 @@ extern void ksocknal_next_tx_carrier(struct ksock_conn *conn);
 extern void ksocknal_queue_tx_locked(struct ksock_tx *tx, struct ksock_conn *conn);
 extern void ksocknal_txlist_done(struct lnet_ni *ni, struct list_head *txlist,
                                 int error);
-extern int ksocknal_thread_start(int (*fn)(void *arg), void *arg, char *name);
+#define ksocknal_thread_start(fn, data, namefmt, arg...)               \
+       ({                                                              \
+               struct task_struct *__task = kthread_run(fn, data,      \
+                                                        namefmt, ##arg); \
+               if (!IS_ERR(__task))                                    \
+                       atomic_inc(&ksocknal_data.ksnd_nthreads);       \
+               PTR_ERR_OR_ZERO(__task);                                \
+       })
+
 extern void ksocknal_thread_fini(void);
 extern void ksocknal_launch_all_connections_locked(struct ksock_peer_ni *peer_ni);
 extern struct ksock_conn_cb *ksocknal_find_connectable_conn_cb_locked(struct ksock_peer_ni *peer_ni);