Whamcloud - gitweb
LU-2675 lmv: remove lmv_init_{lock,unlock}()
[fs/lustre-release.git] / lnet / ulnds / socklnd / usocklnd.h
index 82680ba..865d549 100644 (file)
@@ -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.
  * GPL HEADER END
  */
 /*
- * Copyright  2008 Sun Microsystems, Inc. All rights reserved
+ * Copyright (c) 2007, 2010, Oracle and/or its affiliates. All rights reserved.
  * Use is subject to license terms.
+ *
+ * Copyright (c) 2012, Intel Corporation.
  */
 /*
  * This file is part of Lustre, http://www.lustre.org/
@@ -46,7 +46,7 @@
 #include <lnet/socklnd.h>
 
 typedef struct {
-        struct list_head tx_list;    /* neccessary to form tx list */
+       struct list_head       tx_list;    /* neccessary to form tx list */
         lnet_msg_t      *tx_lnetmsg; /* lnet message for lnet_finalize() */
         ksock_msg_t      tx_msg;     /* buffer for wire header of ksock msg */
         int              tx_resid;   /* # of residual bytes */
@@ -60,7 +60,7 @@ typedef struct {
 struct usock_peer_s;
 
 typedef struct {
-        int                  uc_fd;          /* socket */
+        cfs_socket_t        *uc_sock;        /* socket */
         int                  uc_type;        /* conn type */
         int                  uc_activeflag;  /* active side of connection? */
         int                  uc_flip;        /* is peer other endian? */
@@ -73,8 +73,8 @@ typedef struct {
         struct usock_preq_s  *uc_preq;       /* preallocated request */
         __u32                 uc_peer_ip;    /* IP address of the peer */
         __u16                 uc_peer_port;  /* port of the peer */
-        struct list_head      uc_stale_list; /* orphaned connections */
-        
+       struct list_head            uc_stale_list; /* orphaned connections */
+
         /* Receive state */
         int                uc_rx_state;      /* message or hello state */
         ksock_hello_msg_t *uc_rx_hello;      /* hello buffer */
@@ -89,16 +89,16 @@ typedef struct {
         ksock_msg_t        uc_rx_msg;        /* message buffer */
 
         /* Send state */
-        struct list_head   uc_tx_list;       /* pending txs */
-        struct list_head   uc_zcack_list;    /* pending zc_acks */
+       struct list_head         uc_tx_list;       /* pending txs */
+       struct list_head         uc_zcack_list;    /* pending zc_acks */
         cfs_time_t         uc_tx_deadline;   /* when to time out */
         int                uc_tx_flag;       /* deadline valid? */
         int                uc_sending;       /* send op is in progress */
         usock_tx_t        *uc_tx_hello;      /* fake tx with hello */
-        
-        cfs_atomic_t       uc_refcount;      /* # of users */
+
+       mt_atomic_t    uc_refcount;      /* # of users */
         pthread_mutex_t    uc_lock;          /* serialize */
-        int                uc_errored;       /* a flag for lnet_notify() */ 
+        int                uc_errored;       /* a flag for lnet_notify() */
 } usock_conn_t;
 
 /* Allowable conn states are: */
@@ -123,38 +123,40 @@ typedef struct {
 #define N_CONN_TYPES 3 /* CONTROL, BULK_IN and BULK_OUT */
 
 typedef struct usock_peer_s {
-        struct list_head  up_list;         /* neccessary to form peer list */
-        lnet_process_id_t up_peerid;       /* id of remote peer */
+       /* neccessary to form peer list */
+       struct list_head  up_list;
+        lnet_process_id_t up_peerid;      /* id of remote peer */
         usock_conn_t     *up_conns[N_CONN_TYPES]; /* conns that connect us
-                                                   * us with the peer */
-        lnet_ni_t        *up_ni;           /* pointer to parent NI */
-        __u64             up_incarnation;  /* peer's incarnation */
-        int               up_incrn_is_set; /* 0 if peer's incarnation
-                                            * hasn't been set so far */
-        cfs_atomic_t      up_refcount;     /* # of users */
-        pthread_mutex_t   up_lock;         /* serialize */
-        int               up_errored;      /* a flag for lnet_notify() */ 
-        cfs_time_t        up_last_alive;   /* when the peer was last alive */
+                                                       * us with the peer */
+        lnet_ni_t        *up_ni;          /* pointer to parent NI */
+        __u64             up_incarnation; /* peer's incarnation */
+        int               up_incrn_is_set;/* 0 if peer's incarnation
+                                               * hasn't been set so far */
+       mt_atomic_t       up_refcount;    /* # of users */
+        pthread_mutex_t   up_lock;        /* serialize */
+        int               up_errored;     /* a flag for lnet_notify() */
+        cfs_time_t        up_last_alive;  /* when the peer was last alive */
 } usock_peer_t;
 
 typedef struct {
-        int               upt_notifier_fd;       /* notifier fd for writing */
-        struct pollfd    *upt_pollfd;            /* poll fds */
-        int               upt_nfds;              /* active poll fds */
-        int               upt_npollfd;           /* allocated poll fds */
-        usock_conn_t    **upt_idx2conn;          /* conns corresponding to
-                                                  * upt_pollfd[idx] */
-        int              *upt_skip;              /* skip chain */
-        int              *upt_fd2idx;            /* index into upt_pollfd[]
-                                                  * by fd */
-        int               upt_nfd2idx;           /* # of allocated elements
-                                                  * of upt_fd2idx[] */
-        struct list_head  upt_stale_list;        /* list of orphaned conns */
-        struct list_head  upt_pollrequests;      /* list of poll requests */
-        pthread_mutex_t   upt_pollrequests_lock; /* serialize */
-        int               upt_errno;             /* non-zero if errored */
-        struct cfs_completion upt_completion;    /* wait/signal facility for
-                                                  * syncronizing shutdown */
+        cfs_socket_t       *upt_notifier[2];    /* notifier sockets: 1st for
+                                                 * writing, 2nd for reading */
+        struct pollfd      *upt_pollfd;         /* poll fds */
+        int                 upt_nfds;           /* active poll fds */
+        int                 upt_npollfd;        /* allocated poll fds */
+        usock_conn_t      **upt_idx2conn;       /* conns corresponding to
+                                                 * upt_pollfd[idx] */
+        int                *upt_skip;           /* skip chain */
+        int                *upt_fd2idx;         /* index into upt_pollfd[]
+                                                 * by fd */
+        int                 upt_nfd2idx;        /* # of allocated elements
+                                                 * of upt_fd2idx[] */
+       struct list_head    upt_stale_list;     /* list of orphaned conns */
+       struct list_head    upt_pollrequests;   /* list of poll requests */
+        pthread_mutex_t     upt_pollrequests_lock; /* serialize */
+        int                 upt_errno;         /* non-zero if errored */
+       struct completion   upt_completion;     /* wait/signal facility for
+                                                * syncronizing shutdown */
 } usock_pollthread_t;
 
 /* Number of elements in upt_pollfd[], upt_idx2conn[] and upt_fd2idx[]
@@ -170,7 +172,7 @@ typedef struct {
         usock_pollthread_t *ud_pollthreads;    /* their state */
         int                 ud_shutdown;       /* shutdown flag */
         int                 ud_nets_count;     /* # of instances */
-        struct list_head    ud_peers[UD_PEER_HASH_SIZE]; /* peer hash table */
+       struct list_head    ud_peers[UD_PEER_HASH_SIZE]; /* peer hash table */
         pthread_rwlock_t    ud_peers_lock;     /* serialize */
 } usock_data_t;
 
@@ -187,7 +189,7 @@ typedef struct {
         pthread_cond_t  un_cond;        /* condvar to wait for notifications */
         pthread_mutex_t un_lock;        /* a lock to protect un_cond */
 } usock_net_t;
-        
+
 typedef struct {
         int ut_poll_timeout;  /* the third arg for poll(2) (seconds) */
         int ut_timeout;       /* "stuck" socket timeout (seconds) */
@@ -204,11 +206,11 @@ typedef struct {
 extern usock_tunables_t usock_tuns;
 
 typedef struct usock_preq_s {
-        int              upr_type;  /* type of requested action */
+        int              upr_type;   /* type of requested action */
         short            upr_value; /* bitmask of POLLIN and POLLOUT bits */
         usock_conn_t *   upr_conn;  /* a conn for the sake of which
                                      * action will be performed */
-        struct list_head upr_list;  /* neccessary to form list */
+       struct list_head       upr_list;  /* neccessary to form list */
 } usock_pollrequest_t;
 
 /* Allowable poll request types are: */
@@ -219,15 +221,15 @@ typedef struct usock_preq_s {
 #define POLL_SET_REQUEST 5
 
 typedef struct {
-        struct list_head zc_list;   /* neccessary to form zc_ack list */
+       struct list_head       zc_list;   /* neccessary to form zc_ack list */
         __u64            zc_cookie; /* zero-copy cookie */
 } usock_zc_ack_t;
 
 static inline void
 usocklnd_conn_addref(usock_conn_t *conn)
 {
-        LASSERT (cfs_atomic_read(&conn->uc_refcount) > 0);
-        cfs_atomic_inc(&conn->uc_refcount);
+       LASSERT(mt_atomic_read(&conn->uc_refcount) > 0);
+       mt_atomic_inc(&conn->uc_refcount);
 }
 
 void usocklnd_destroy_conn(usock_conn_t *conn);
@@ -235,16 +237,16 @@ void usocklnd_destroy_conn(usock_conn_t *conn);
 static inline void
 usocklnd_conn_decref(usock_conn_t *conn)
 {
-        LASSERT (cfs_atomic_read(&conn->uc_refcount) > 0);
-        if (cfs_atomic_dec_and_test(&conn->uc_refcount))
+       LASSERT(mt_atomic_read(&conn->uc_refcount) > 0);
+       if (mt_atomic_dec_and_test(&conn->uc_refcount))
                 usocklnd_destroy_conn(conn);
 }
 
 static inline void
 usocklnd_peer_addref(usock_peer_t *peer)
 {
-        LASSERT (cfs_atomic_read(&peer->up_refcount) > 0);
-        cfs_atomic_inc(&peer->up_refcount);
+       LASSERT(mt_atomic_read(&peer->up_refcount) > 0);
+       mt_atomic_inc(&peer->up_refcount);
 }
 
 void usocklnd_destroy_peer(usock_peer_t *peer);
@@ -252,8 +254,8 @@ void usocklnd_destroy_peer(usock_peer_t *peer);
 static inline void
 usocklnd_peer_decref(usock_peer_t *peer)
 {
-        LASSERT (cfs_atomic_read(&peer->up_refcount) > 0);
-        if (cfs_atomic_dec_and_test(&peer->up_refcount))
+       LASSERT(mt_atomic_read(&peer->up_refcount) > 0);
+       if (mt_atomic_dec_and_test(&peer->up_refcount))
                 usocklnd_destroy_peer(peer);
 }
 
@@ -276,7 +278,7 @@ int usocklnd_send(lnet_ni_t *ni, void *private, lnet_msg_t *lntmsg);
 int usocklnd_recv(lnet_ni_t *ni, void *private, lnet_msg_t *msg, int delayed,
                   unsigned int niov, struct iovec *iov, lnet_kiov_t *kiov,
                   unsigned int offset, unsigned int mlen, unsigned int rlen);
-int usocklnd_accept(lnet_ni_t *ni, int sock_fd);
+int usocklnd_accept(lnet_ni_t *ni, cfs_socket_t *sock);
 
 int usocklnd_poll_thread(void *arg);
 int usocklnd_add_pollrequest(usock_conn_t *conn, int type, short value);
@@ -296,8 +298,8 @@ int usocklnd_read_hello(usock_conn_t *conn, int *cont_flag);
 int usocklnd_activeconn_hellorecv(usock_conn_t *conn);
 int usocklnd_passiveconn_hellorecv(usock_conn_t *conn);
 int usocklnd_write_handler(usock_conn_t *conn);
-usock_tx_t * usocklnd_try_piggyback(struct list_head *tx_list_p,
-                                    struct list_head *zcack_list_p);
+usock_tx_t *usocklnd_try_piggyback(struct list_head *tx_list_p,
+                                  struct list_head *zcack_list_p);
 int usocklnd_activeconn_hellosent(usock_conn_t *conn);
 int usocklnd_passiveconn_hellosent(usock_conn_t *conn);
 int usocklnd_send_tx(usock_conn_t *conn, usock_tx_t *tx);
@@ -318,12 +320,15 @@ usock_conn_t *usocklnd_conn_allocate();
 void usocklnd_conn_free(usock_conn_t *conn);
 void usocklnd_tear_peer_conn(usock_conn_t *conn);
 void usocklnd_check_peer_stale(lnet_ni_t *ni, lnet_process_id_t id);
-int usocklnd_create_passive_conn(lnet_ni_t *ni, int fd, usock_conn_t **connp);
+int usocklnd_create_passive_conn(lnet_ni_t *ni,
+                                 cfs_socket_t *sock, usock_conn_t **connp);
 int usocklnd_create_active_conn(usock_peer_t *peer, int type,
                                 usock_conn_t **connp);
-int usocklnd_connect_srv_mode(int *fdp, __u32 dst_ip, __u16 dst_port);
-int usocklnd_connect_cli_mode(int *fdp, __u32 dst_ip, __u16 dst_port);
-int usocklnd_set_sock_options(int fd);
+int usocklnd_connect_srv_mode(cfs_socket_t **sockp,
+                              __u32 dst_ip, __u16 dst_port);
+int usocklnd_connect_cli_mode(cfs_socket_t **sockp,
+                              __u32 dst_ip, __u16 dst_port);
+int usocklnd_set_sock_options(cfs_socket_t *sock);
 usock_tx_t *usocklnd_create_noop_tx(__u64 cookie);
 usock_tx_t *usocklnd_create_tx(lnet_msg_t *lntmsg);
 void usocklnd_init_hello_msg(ksock_hello_msg_t *hello,
@@ -346,7 +351,7 @@ int usocklnd_find_or_create_peer(lnet_ni_t *ni, lnet_process_id_t id,
 int usocklnd_find_or_create_conn(usock_peer_t *peer, int type,
                                  usock_conn_t **connp,
                                  usock_tx_t *tx, usock_zc_ack_t *zc_ack,
-                                 int *send_immediately_flag);                                 
+                                 int *send_immediately_flag);
 void usocklnd_link_conn_to_peer(usock_conn_t *conn, usock_peer_t *peer, int idx);
 int usocklnd_invert_type(int type);
 void usocklnd_conn_new_state(usock_conn_t *conn, int new_state);