Whamcloud - gitweb
LU-12477 lnet: Remove obsolete config options
[fs/lustre-release.git] / lnet / klnds / socklnd / socklnd.h
index ff71b3a..bc77359 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * Copyright (c) 2003, 2010, Oracle and/or its affiliates. All rights reserved.
  *
- * Copyright (c) 2011, 2016, Intel Corporation.
+ * Copyright (c) 2011, 2017, Intel Corporation.
  *
  *   Author: Zach Brown <zab@zabbo.net>
  *   Author: Peter J. Braam <braam@clusterfs.com>
@@ -41,6 +41,7 @@
 #include <linux/list.h>
 #include <linux/mm.h>
 #include <linux/module.h>
+#include <linux/pagemap.h>
 #include <linux/stat.h>
 #include <linux/string.h>
 #include <linux/syscalls.h>
 #include <net/sock.h>
 #include <net/tcp.h>
 
-#include <libcfs/libcfs.h>
 #include <lnet/lib-lnet.h>
 #include <lnet/socklnd.h>
 
-#ifdef HAVE_TCP_SENDPAGE_USE_SOCKET
-# define cfs_tcp_sendpage(sk, page, offset, size, flags) \
-       tcp_sendpage((sk)->sk_socket, page, offset, size, flags)
-#else /* !HAVE_TCP_SENDPAGE_USE_SOCKET */
-# define cfs_tcp_sendpage(sk, page, offset, size, flags) \
-       tcp_sendpage(sk, page, offset, size, flags)
-#endif /* HAVE_TCP_SENDPAGE_USE_SOCKET */
-
 #ifndef NETIF_F_CSUM_MASK
 # define NETIF_F_CSUM_MASK NETIF_F_ALL_CSUM
 #endif
 # define SOCKNAL_RISK_KMAP_DEADLOCK  1
 #endif
 
-struct ksock_sched_info;
-
-struct ksock_sched {                           /* per scheduler state */
-       spinlock_t              kss_lock;       /* serialise */
-       struct list_head        kss_rx_conns;   /* conn waiting to be read */
+/* per scheduler state */
+struct ksock_sched {
+       /* serialise */
+       spinlock_t kss_lock;
        /* conn waiting to be written */
-       struct list_head        kss_tx_conns;
+       struct list_head kss_rx_conns;
+       struct list_head kss_tx_conns;
        /* zombie noop tx list */
-       struct list_head        kss_zombie_noop_txs;
-       wait_queue_head_t       kss_waitq;      /* where scheduler sleeps */
+       struct list_head kss_zombie_noop_txs;
+       /* where scheduler sleeps */
+       wait_queue_head_t kss_waitq;
        /* # connections assigned to this scheduler */
-       int                     kss_nconns;
-       struct ksock_sched_info *kss_info;      /* owner of it */
-#if !SOCKNAL_SINGLE_FRAG_RX
-       struct page             *kss_rx_scratch_pgs[LNET_MAX_IOV];
-#endif
-#if !SOCKNAL_SINGLE_FRAG_TX || !SOCKNAL_SINGLE_FRAG_RX
-       struct kvec             kss_scratch_iov[LNET_MAX_IOV];
-#endif
-};
-
-struct ksock_sched_info {
-       int                     ksi_nthreads_max; /* max allowed threads */
-       int                     ksi_nthreads;   /* number of threads */
-       int                     ksi_cpt;        /* CPT id */
-       struct ksock_sched      *ksi_scheds;    /* array of schedulers */
+       int kss_nconns;
+       /* max allowed threads */
+       int kss_nthreads_max;
+       /* number of threads */
+       int kss_nthreads;
+       /* CPT id */
+       int kss_cpt;
 };
 
 #define KSOCK_CPT_SHIFT                        16
@@ -159,9 +144,7 @@ struct ksock_tunables {
         unsigned int     *ksnd_zc_min_payload;  /* minimum zero copy payload size */
         int              *ksnd_zc_recv;         /* enable ZC receive (for Chelsio TOE) */
         int              *ksnd_zc_recv_min_nfrags; /* minimum # of fragments to enable ZC receive */
-#ifdef CPU_AFFINITY
         int              *ksnd_irq_affinity;    /* enable IRQ affinity? */
-#endif
 #ifdef SOCKNAL_BACKOFF
         int              *ksnd_backoff_init;    /* initial TCP backoff */
         int              *ksnd_backoff_max;     /* maximum TCP backoff */
@@ -178,7 +161,7 @@ struct ksock_net {
        int               ksnn_npeers;          /* # peers */
        int               ksnn_shutdown;        /* shutting down? */
        int               ksnn_ninterfaces;     /* IP interfaces */
-       struct ksock_interface ksnn_interfaces[LNET_NUM_INTERFACES];
+       struct ksock_interface ksnn_interfaces[LNET_INTERFACES_NUM];
 };
 
 /** connd timeout */
@@ -199,7 +182,7 @@ struct ksock_nal_data {
        int                     ksnd_nthreads;  /* # live threads */
        int                     ksnd_shuttingdown; /* tell threads to exit */
        /* schedulers information */
-       struct ksock_sched_info **ksnd_sched_info;
+       struct ksock_sched      **ksnd_schedulers;
 
        atomic_t      ksnd_nactive_txs;    /* #active txs */
 
@@ -282,6 +265,7 @@ struct ksock_tx {                   /* transmit packet */
        time64_t           tx_deadline; /* when (in secs) tx times out */
        struct ksock_msg   tx_msg;         /* socklnd message buffer */
         int            tx_desc_size;   /* size of this descriptor */
+       enum lnet_msg_hstatus tx_hstatus; /* health status of tx */
         union {
                 struct {
                        struct kvec iov;        /* virt hdr */
@@ -348,7 +332,7 @@ struct ksock_conn {
         lnet_kiov_t          *ksnc_rx_kiov;     /* the page frags */
        union ksock_rxiovspace  ksnc_rx_iov_space;/* space for frag descriptors */
         __u32                 ksnc_rx_csum;     /* partial checksum for incoming data */
-        void                 *ksnc_cookie;      /* rx lnet_finalize passthru arg */
+       struct lnet_msg      *ksnc_lnet_msg;    /* rx lnet_finalize arg*/
        struct ksock_msg        ksnc_msg;       /* incoming message buffer:
                                                 * V2.x message takes the
                                                 * whole struct
@@ -402,7 +386,6 @@ struct ksock_peer_ni {
        time64_t                ksnp_last_alive;/* when (in seconds) I was last alive */
        struct lnet_process_id  ksnp_id;        /* who's on the other end(s) */
        atomic_t              ksnp_refcount; /* # users */
-       int                   ksnp_sharecount;  /* lconf usage counter */
        int                   ksnp_closing;  /* being closed */
        int                   ksnp_accepting;/* # passive connections pending */
        int                   ksnp_error;    /* errno on closing last conn */
@@ -418,7 +401,7 @@ struct ksock_peer_ni {
        time64_t                ksnp_send_keepalive; /* time to send keepalive */
        struct lnet_ni       *ksnp_ni;       /* which network */
        int                   ksnp_n_passive_ips; /* # of... */
-       __u32                 ksnp_passive_ips[LNET_NUM_INTERFACES]; /* preferred local interfaces */
+       __u32                 ksnp_passive_ips[LNET_INTERFACES_NUM]; /* preferred local interfaces */
 };
 
 struct ksock_connreq {
@@ -633,8 +616,8 @@ 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 void ksocknal_notify(struct lnet_ni *ni, lnet_nid_t gw_nid, int alive);
-extern void ksocknal_query(struct lnet_ni *ni, lnet_nid_t nid, cfs_time_t *when);
+extern void ksocknal_notify(lnet_nid_t gw_nid);
+extern void ksocknal_query(struct lnet_ni *ni, lnet_nid_t nid, time64_t *when);
 extern int ksocknal_thread_start(int (*fn)(void *arg), void *arg, char *name);
 extern void ksocknal_thread_fini(void);
 extern void ksocknal_launch_all_connections_locked(struct ksock_peer_ni *peer_ni);
@@ -661,11 +644,15 @@ extern void ksocknal_lib_reset_callback(struct socket *sock,
 extern void ksocknal_lib_push_conn(struct ksock_conn *conn);
 extern int ksocknal_lib_get_conn_addrs(struct ksock_conn *conn);
 extern int ksocknal_lib_setup_sock(struct socket *so);
-extern int ksocknal_lib_send_iov(struct ksock_conn *conn, struct ksock_tx *tx);
-extern int ksocknal_lib_send_kiov(struct ksock_conn *conn, struct ksock_tx *tx);
+extern int ksocknal_lib_send_iov(struct ksock_conn *conn, struct ksock_tx *tx,
+                                struct kvec *scratch_iov);
+extern int ksocknal_lib_send_kiov(struct ksock_conn *conn, struct ksock_tx *tx,
+                                 struct kvec *scratch_iov);
 extern void ksocknal_lib_eager_ack(struct ksock_conn *conn);
-extern int ksocknal_lib_recv_iov(struct ksock_conn *conn);
-extern int ksocknal_lib_recv_kiov(struct ksock_conn *conn);
+extern int ksocknal_lib_recv_iov(struct ksock_conn *conn,
+                                struct kvec *scratchiov);
+extern int ksocknal_lib_recv_kiov(struct ksock_conn *conn, struct page **pages,
+                      struct kvec *scratchiov);
 extern int ksocknal_lib_get_conn_tunables(struct ksock_conn *conn, int *txmem,
                                          int *rxmem, int *nagle);