This source file includes following definitions.
- __printf
- rds_conn_net
- rds_conn_net_set
- rds_rdma_make_cookie
- rds_rdma_cookie_key
- rds_rdma_cookie_offset
- rds_message_zcopy_queue_init
- rds_sk_to_rs
- rds_rs_to_sk
- rds_sk_sndbuf
- rds_sk_rcvbuf
- __rds_wake_sk_sleep
- rds_conn_path_transition
- rds_conn_transition
- rds_conn_path_state
- rds_conn_state
- rds_conn_path_up
- rds_conn_up
- rds_conn_path_connecting
- rds_conn_connecting
- rds_message_make_checksum
- rds_message_verify_checksum
- rds_mr_put
- rds_destroy_pending
   1 
   2 #ifndef _RDS_RDS_H
   3 #define _RDS_RDS_H
   4 
   5 #include <net/sock.h>
   6 #include <linux/scatterlist.h>
   7 #include <linux/highmem.h>
   8 #include <rdma/rdma_cm.h>
   9 #include <linux/mutex.h>
  10 #include <linux/rds.h>
  11 #include <linux/rhashtable.h>
  12 #include <linux/refcount.h>
  13 #include <linux/in6.h>
  14 
  15 #include "info.h"
  16 
  17 
  18 
  19 
  20 #define RDS_PROTOCOL_3_0        0x0300
  21 #define RDS_PROTOCOL_3_1        0x0301
  22 #define RDS_PROTOCOL_4_0        0x0400
  23 #define RDS_PROTOCOL_4_1        0x0401
  24 #define RDS_PROTOCOL_VERSION    RDS_PROTOCOL_3_1
  25 #define RDS_PROTOCOL_MAJOR(v)   ((v) >> 8)
  26 #define RDS_PROTOCOL_MINOR(v)   ((v) & 255)
  27 #define RDS_PROTOCOL(maj, min)  (((maj) << 8) | min)
  28 #define RDS_PROTOCOL_COMPAT_VERSION     RDS_PROTOCOL_3_1
  29 
  30 
  31 
  32 
  33 
  34 
  35 
  36 
  37 
  38 #define RDS_PORT        18634
  39 
  40 #ifdef ATOMIC64_INIT
  41 #define KERNEL_HAS_ATOMIC64
  42 #endif
  43 
  44 #ifdef RDS_DEBUG
  45 #define rdsdebug(fmt, args...) pr_debug("%s(): " fmt, __func__ , ##args)
  46 #else
  47 
  48 static inline __printf(1, 2)
  49 void rdsdebug(char *fmt, ...)
  50 {
  51 }
  52 #endif
  53 
  54 #define RDS_FRAG_SHIFT  12
  55 #define RDS_FRAG_SIZE   ((unsigned int)(1 << RDS_FRAG_SHIFT))
  56 
  57 
  58 #define RDS_MAX_MSG_SIZE        ((unsigned int)(1 << 20))
  59 
  60 #define RDS_CONG_MAP_BYTES      (65536 / 8)
  61 #define RDS_CONG_MAP_PAGES      (PAGE_ALIGN(RDS_CONG_MAP_BYTES) / PAGE_SIZE)
  62 #define RDS_CONG_MAP_PAGE_BITS  (PAGE_SIZE * 8)
  63 
  64 struct rds_cong_map {
  65         struct rb_node          m_rb_node;
  66         struct in6_addr         m_addr;
  67         wait_queue_head_t       m_waitq;
  68         struct list_head        m_conn_list;
  69         unsigned long           m_page_addrs[RDS_CONG_MAP_PAGES];
  70 };
  71 
  72 
  73 
  74 
  75 
  76 
  77 
  78 
  79 enum {
  80         RDS_CONN_DOWN = 0,
  81         RDS_CONN_CONNECTING,
  82         RDS_CONN_DISCONNECTING,
  83         RDS_CONN_UP,
  84         RDS_CONN_RESETTING,
  85         RDS_CONN_ERROR,
  86 };
  87 
  88 
  89 #define RDS_LL_SEND_FULL        0
  90 #define RDS_RECONNECT_PENDING   1
  91 #define RDS_IN_XMIT             2
  92 #define RDS_RECV_REFILL         3
  93 #define RDS_DESTROY_PENDING     4
  94 
  95 
  96 #define RDS_MPATH_WORKERS       8
  97 #define RDS_MPATH_HASH(rs, n) (jhash_1word((rs)->rs_bound_port, \
  98                                (rs)->rs_hash_initval) & ((n) - 1))
  99 
 100 #define IS_CANONICAL(laddr, faddr) (htonl(laddr) < htonl(faddr))
 101 
 102 
 103 struct rds_conn_path {
 104         struct rds_connection   *cp_conn;
 105         struct rds_message      *cp_xmit_rm;
 106         unsigned long           cp_xmit_sg;
 107         unsigned int            cp_xmit_hdr_off;
 108         unsigned int            cp_xmit_data_off;
 109         unsigned int            cp_xmit_atomic_sent;
 110         unsigned int            cp_xmit_rdma_sent;
 111         unsigned int            cp_xmit_data_sent;
 112 
 113         spinlock_t              cp_lock;                
 114         u64                     cp_next_tx_seq;
 115         struct list_head        cp_send_queue;
 116         struct list_head        cp_retrans;
 117 
 118         u64                     cp_next_rx_seq;
 119 
 120         void                    *cp_transport_data;
 121 
 122         atomic_t                cp_state;
 123         unsigned long           cp_send_gen;
 124         unsigned long           cp_flags;
 125         unsigned long           cp_reconnect_jiffies;
 126         struct delayed_work     cp_send_w;
 127         struct delayed_work     cp_recv_w;
 128         struct delayed_work     cp_conn_w;
 129         struct work_struct      cp_down_w;
 130         struct mutex            cp_cm_lock;     
 131         wait_queue_head_t       cp_waitq;
 132 
 133         unsigned int            cp_unacked_packets;
 134         unsigned int            cp_unacked_bytes;
 135         unsigned int            cp_index;
 136 };
 137 
 138 
 139 struct rds_connection {
 140         struct hlist_node       c_hash_node;
 141         struct in6_addr         c_laddr;
 142         struct in6_addr         c_faddr;
 143         int                     c_dev_if; 
 144         int                     c_bound_if; 
 145         unsigned int            c_loopback:1,
 146                                 c_isv6:1,
 147                                 c_ping_triggered:1,
 148                                 c_pad_to_32:29;
 149         int                     c_npaths;
 150         struct rds_connection   *c_passive;
 151         struct rds_transport    *c_trans;
 152 
 153         struct rds_cong_map     *c_lcong;
 154         struct rds_cong_map     *c_fcong;
 155 
 156         
 157         unsigned int            c_proposed_version;
 158         unsigned int            c_version;
 159         possible_net_t          c_net;
 160 
 161         
 162         u8                      c_tos;
 163 
 164         struct list_head        c_map_item;
 165         unsigned long           c_map_queued;
 166 
 167         struct rds_conn_path    *c_path;
 168         wait_queue_head_t       c_hs_waitq; 
 169 
 170         u32                     c_my_gen_num;
 171         u32                     c_peer_gen_num;
 172 };
 173 
 174 static inline
 175 struct net *rds_conn_net(struct rds_connection *conn)
 176 {
 177         return read_pnet(&conn->c_net);
 178 }
 179 
 180 static inline
 181 void rds_conn_net_set(struct rds_connection *conn, struct net *net)
 182 {
 183         write_pnet(&conn->c_net, net);
 184 }
 185 
 186 #define RDS_FLAG_CONG_BITMAP    0x01
 187 #define RDS_FLAG_ACK_REQUIRED   0x02
 188 #define RDS_FLAG_RETRANSMITTED  0x04
 189 #define RDS_MAX_ADV_CREDIT      255
 190 
 191 
 192 
 193 
 194 
 195 
 196 
 197 
 198 #define RDS_FLAG_PROBE_PORT     1
 199 #define RDS_HS_PROBE(sport, dport) \
 200                 ((sport == RDS_FLAG_PROBE_PORT && dport == 0) || \
 201                  (sport == 0 && dport == RDS_FLAG_PROBE_PORT))
 202 
 203 
 204 
 205 #define RDS_HEADER_EXT_SPACE    16
 206 
 207 struct rds_header {
 208         __be64  h_sequence;
 209         __be64  h_ack;
 210         __be32  h_len;
 211         __be16  h_sport;
 212         __be16  h_dport;
 213         u8      h_flags;
 214         u8      h_credit;
 215         u8      h_padding[4];
 216         __sum16 h_csum;
 217 
 218         u8      h_exthdr[RDS_HEADER_EXT_SPACE];
 219 };
 220 
 221 
 222 
 223 
 224 #define RDS_EXTHDR_NONE         0
 225 
 226 
 227 
 228 
 229 
 230 
 231 
 232 
 233 
 234 
 235 
 236 #define RDS_EXTHDR_VERSION      1
 237 struct rds_ext_header_version {
 238         __be32                  h_version;
 239 };
 240 
 241 
 242 
 243 
 244 
 245 #define RDS_EXTHDR_RDMA         2
 246 struct rds_ext_header_rdma {
 247         __be32                  h_rdma_rkey;
 248 };
 249 
 250 
 251 
 252 
 253 
 254 
 255 #define RDS_EXTHDR_RDMA_DEST    3
 256 struct rds_ext_header_rdma_dest {
 257         __be32                  h_rdma_rkey;
 258         __be32                  h_rdma_offset;
 259 };
 260 
 261 
 262 
 263 
 264 #define RDS_EXTHDR_NPATHS       5
 265 #define RDS_EXTHDR_GEN_NUM      6
 266 
 267 #define __RDS_EXTHDR_MAX        16 
 268 #define RDS_RX_MAX_TRACES       (RDS_MSG_RX_DGRAM_TRACE_MAX + 1)
 269 #define RDS_MSG_RX_HDR          0
 270 #define RDS_MSG_RX_START        1
 271 #define RDS_MSG_RX_END          2
 272 #define RDS_MSG_RX_CMSG         3
 273 
 274 
 275 struct rds_inc_usercopy {
 276         rds_rdma_cookie_t       rdma_cookie;
 277         ktime_t                 rx_tstamp;
 278 };
 279 
 280 struct rds_incoming {
 281         refcount_t              i_refcount;
 282         struct list_head        i_item;
 283         struct rds_connection   *i_conn;
 284         struct rds_conn_path    *i_conn_path;
 285         struct rds_header       i_hdr;
 286         unsigned long           i_rx_jiffies;
 287         struct in6_addr         i_saddr;
 288 
 289         struct rds_inc_usercopy i_usercopy;
 290         u64                     i_rx_lat_trace[RDS_RX_MAX_TRACES];
 291 };
 292 
 293 struct rds_mr {
 294         struct rb_node          r_rb_node;
 295         refcount_t              r_refcount;
 296         u32                     r_key;
 297 
 298         
 299         unsigned int            r_use_once:1;
 300         unsigned int            r_invalidate:1;
 301         unsigned int            r_write:1;
 302 
 303         
 304 
 305 
 306 
 307         unsigned long           r_state;
 308         struct rds_sock         *r_sock; 
 309         struct rds_transport    *r_trans;
 310         void                    *r_trans_private;
 311 };
 312 
 313 
 314 #define RDS_MR_DEAD             0
 315 
 316 static inline rds_rdma_cookie_t rds_rdma_make_cookie(u32 r_key, u32 offset)
 317 {
 318         return r_key | (((u64) offset) << 32);
 319 }
 320 
 321 static inline u32 rds_rdma_cookie_key(rds_rdma_cookie_t cookie)
 322 {
 323         return cookie;
 324 }
 325 
 326 static inline u32 rds_rdma_cookie_offset(rds_rdma_cookie_t cookie)
 327 {
 328         return cookie >> 32;
 329 }
 330 
 331 
 332 #define RDS_ATOMIC_TYPE_CSWP            0
 333 #define RDS_ATOMIC_TYPE_FADD            1
 334 
 335 
 336 
 337 
 338 
 339 
 340 
 341 
 342 
 343 
 344 
 345 
 346 
 347 
 348 
 349 
 350 
 351 
 352 
 353 
 354 
 355 
 356 
 357 
 358 
 359 
 360 
 361 
 362 
 363 
 364 #define RDS_MSG_ON_SOCK         1
 365 #define RDS_MSG_ON_CONN         2
 366 #define RDS_MSG_HAS_ACK_SEQ     3
 367 #define RDS_MSG_ACK_REQUIRED    4
 368 #define RDS_MSG_RETRANSMITTED   5
 369 #define RDS_MSG_MAPPED          6
 370 #define RDS_MSG_PAGEVEC         7
 371 #define RDS_MSG_FLUSH           8
 372 
 373 struct rds_znotifier {
 374         struct mmpin            z_mmp;
 375         u32                     z_cookie;
 376 };
 377 
 378 struct rds_msg_zcopy_info {
 379         struct list_head rs_zcookie_next;
 380         union {
 381                 struct rds_znotifier znotif;
 382                 struct rds_zcopy_cookies zcookies;
 383         };
 384 };
 385 
 386 struct rds_msg_zcopy_queue {
 387         struct list_head zcookie_head;
 388         spinlock_t lock; 
 389 };
 390 
 391 static inline void rds_message_zcopy_queue_init(struct rds_msg_zcopy_queue *q)
 392 {
 393         spin_lock_init(&q->lock);
 394         INIT_LIST_HEAD(&q->zcookie_head);
 395 }
 396 
 397 struct rds_iov_vector {
 398         struct rds_iovec *iov;
 399         int               len;
 400 };
 401 
 402 struct rds_iov_vector_arr {
 403         struct rds_iov_vector *vec;
 404         int                    len;
 405         int                    indx;
 406         int                    incr;
 407 };
 408 
 409 struct rds_message {
 410         refcount_t              m_refcount;
 411         struct list_head        m_sock_item;
 412         struct list_head        m_conn_item;
 413         struct rds_incoming     m_inc;
 414         u64                     m_ack_seq;
 415         struct in6_addr         m_daddr;
 416         unsigned long           m_flags;
 417 
 418         
 419 
 420 
 421 
 422 
 423         spinlock_t              m_rs_lock;
 424         wait_queue_head_t       m_flush_wait;
 425 
 426         struct rds_sock         *m_rs;
 427 
 428         
 429         rds_rdma_cookie_t       m_rdma_cookie;
 430 
 431         unsigned int            m_used_sgs;
 432         unsigned int            m_total_sgs;
 433 
 434         void                    *m_final_op;
 435 
 436         struct {
 437                 struct rm_atomic_op {
 438                         int                     op_type;
 439                         union {
 440                                 struct {
 441                                         uint64_t        compare;
 442                                         uint64_t        swap;
 443                                         uint64_t        compare_mask;
 444                                         uint64_t        swap_mask;
 445                                 } op_m_cswp;
 446                                 struct {
 447                                         uint64_t        add;
 448                                         uint64_t        nocarry_mask;
 449                                 } op_m_fadd;
 450                         };
 451 
 452                         u32                     op_rkey;
 453                         u64                     op_remote_addr;
 454                         unsigned int            op_notify:1;
 455                         unsigned int            op_recverr:1;
 456                         unsigned int            op_mapped:1;
 457                         unsigned int            op_silent:1;
 458                         unsigned int            op_active:1;
 459                         struct scatterlist      *op_sg;
 460                         struct rds_notifier     *op_notifier;
 461 
 462                         struct rds_mr           *op_rdma_mr;
 463                 } atomic;
 464                 struct rm_rdma_op {
 465                         u32                     op_rkey;
 466                         u64                     op_remote_addr;
 467                         unsigned int            op_write:1;
 468                         unsigned int            op_fence:1;
 469                         unsigned int            op_notify:1;
 470                         unsigned int            op_recverr:1;
 471                         unsigned int            op_mapped:1;
 472                         unsigned int            op_silent:1;
 473                         unsigned int            op_active:1;
 474                         unsigned int            op_bytes;
 475                         unsigned int            op_nents;
 476                         unsigned int            op_count;
 477                         struct scatterlist      *op_sg;
 478                         struct rds_notifier     *op_notifier;
 479 
 480                         struct rds_mr           *op_rdma_mr;
 481                 } rdma;
 482                 struct rm_data_op {
 483                         unsigned int            op_active:1;
 484                         unsigned int            op_nents;
 485                         unsigned int            op_count;
 486                         unsigned int            op_dmasg;
 487                         unsigned int            op_dmaoff;
 488                         struct rds_znotifier    *op_mmp_znotifier;
 489                         struct scatterlist      *op_sg;
 490                 } data;
 491         };
 492 
 493         struct rds_conn_path *m_conn_path;
 494 };
 495 
 496 
 497 
 498 
 499 
 500 
 501 
 502 
 503 struct rds_notifier {
 504         struct list_head        n_list;
 505         uint64_t                n_user_token;
 506         int                     n_status;
 507 };
 508 
 509 
 510 
 511 
 512 #define RDS_TRANS_LOOP  3
 513 
 514 
 515 
 516 
 517 
 518 
 519 
 520 
 521 
 522 
 523 
 524 
 525 
 526 
 527 
 528 
 529 
 530 
 531 
 532 
 533 
 534 
 535 
 536 
 537 
 538 
 539 
 540 
 541 struct rds_transport {
 542         char                    t_name[TRANSNAMSIZ];
 543         struct list_head        t_item;
 544         struct module           *t_owner;
 545         unsigned int            t_prefer_loopback:1,
 546                                 t_mp_capable:1;
 547         unsigned int            t_type;
 548 
 549         int (*laddr_check)(struct net *net, const struct in6_addr *addr,
 550                            __u32 scope_id);
 551         int (*conn_alloc)(struct rds_connection *conn, gfp_t gfp);
 552         void (*conn_free)(void *data);
 553         int (*conn_path_connect)(struct rds_conn_path *cp);
 554         void (*conn_path_shutdown)(struct rds_conn_path *conn);
 555         void (*xmit_path_prepare)(struct rds_conn_path *cp);
 556         void (*xmit_path_complete)(struct rds_conn_path *cp);
 557         int (*xmit)(struct rds_connection *conn, struct rds_message *rm,
 558                     unsigned int hdr_off, unsigned int sg, unsigned int off);
 559         int (*xmit_rdma)(struct rds_connection *conn, struct rm_rdma_op *op);
 560         int (*xmit_atomic)(struct rds_connection *conn, struct rm_atomic_op *op);
 561         int (*recv_path)(struct rds_conn_path *cp);
 562         int (*inc_copy_to_user)(struct rds_incoming *inc, struct iov_iter *to);
 563         void (*inc_free)(struct rds_incoming *inc);
 564 
 565         int (*cm_handle_connect)(struct rdma_cm_id *cm_id,
 566                                  struct rdma_cm_event *event, bool isv6);
 567         int (*cm_initiate_connect)(struct rdma_cm_id *cm_id, bool isv6);
 568         void (*cm_connect_complete)(struct rds_connection *conn,
 569                                     struct rdma_cm_event *event);
 570 
 571         unsigned int (*stats_info_copy)(struct rds_info_iterator *iter,
 572                                         unsigned int avail);
 573         void (*exit)(void);
 574         void *(*get_mr)(struct scatterlist *sg, unsigned long nr_sg,
 575                         struct rds_sock *rs, u32 *key_ret,
 576                         struct rds_connection *conn);
 577         void (*sync_mr)(void *trans_private, int direction);
 578         void (*free_mr)(void *trans_private, int invalidate);
 579         void (*flush_mrs)(void);
 580         bool (*t_unloading)(struct rds_connection *conn);
 581         u8 (*get_tos_map)(u8 tos);
 582 };
 583 
 584 
 585 
 586 
 587 #define RDS_BOUND_KEY_LEN \
 588         (sizeof(struct in6_addr) + sizeof(__u32) + sizeof(__be16))
 589 
 590 struct rds_sock {
 591         struct sock             rs_sk;
 592 
 593         u64                     rs_user_addr;
 594         u64                     rs_user_bytes;
 595 
 596         
 597 
 598 
 599 
 600         struct rhash_head       rs_bound_node;
 601         u8                      rs_bound_key[RDS_BOUND_KEY_LEN];
 602         struct sockaddr_in6     rs_bound_sin6;
 603 #define rs_bound_addr           rs_bound_sin6.sin6_addr
 604 #define rs_bound_addr_v4        rs_bound_sin6.sin6_addr.s6_addr32[3]
 605 #define rs_bound_port           rs_bound_sin6.sin6_port
 606 #define rs_bound_scope_id       rs_bound_sin6.sin6_scope_id
 607         struct in6_addr         rs_conn_addr;
 608 #define rs_conn_addr_v4         rs_conn_addr.s6_addr32[3]
 609         __be16                  rs_conn_port;
 610         struct rds_transport    *rs_transport;
 611 
 612         
 613 
 614 
 615 
 616         struct rds_connection   *rs_conn;
 617 
 618         
 619         int                     rs_congested;
 620         
 621         int                     rs_seen_congestion;
 622 
 623         
 624         spinlock_t              rs_lock;
 625         struct list_head        rs_send_queue;
 626         u32                     rs_snd_bytes;
 627         int                     rs_rcv_bytes;
 628         struct list_head        rs_notify_queue;        
 629 
 630         
 631 
 632 
 633 
 634 
 635         uint64_t                rs_cong_mask;
 636         uint64_t                rs_cong_notify;
 637         struct list_head        rs_cong_list;
 638         unsigned long           rs_cong_track;
 639 
 640         
 641 
 642 
 643 
 644         rwlock_t                rs_recv_lock;
 645         struct list_head        rs_recv_queue;
 646 
 647         
 648         struct list_head        rs_item;
 649 
 650         
 651         spinlock_t              rs_rdma_lock;
 652         struct rb_root          rs_rdma_keys;
 653 
 654         
 655         unsigned char           rs_recverr,
 656                                 rs_cong_monitor;
 657         u32                     rs_hash_initval;
 658 
 659         
 660         u8                      rs_rx_traces;
 661         u8                      rs_rx_trace[RDS_MSG_RX_DGRAM_TRACE_MAX];
 662         struct rds_msg_zcopy_queue rs_zcookie_queue;
 663         u8                      rs_tos;
 664 };
 665 
 666 static inline struct rds_sock *rds_sk_to_rs(const struct sock *sk)
 667 {
 668         return container_of(sk, struct rds_sock, rs_sk);
 669 }
 670 static inline struct sock *rds_rs_to_sk(struct rds_sock *rs)
 671 {
 672         return &rs->rs_sk;
 673 }
 674 
 675 
 676 
 677 
 678 
 679 
 680 static inline int rds_sk_sndbuf(struct rds_sock *rs)
 681 {
 682         return rds_rs_to_sk(rs)->sk_sndbuf / 2;
 683 }
 684 static inline int rds_sk_rcvbuf(struct rds_sock *rs)
 685 {
 686         return rds_rs_to_sk(rs)->sk_rcvbuf / 2;
 687 }
 688 
 689 struct rds_statistics {
 690         uint64_t        s_conn_reset;
 691         uint64_t        s_recv_drop_bad_checksum;
 692         uint64_t        s_recv_drop_old_seq;
 693         uint64_t        s_recv_drop_no_sock;
 694         uint64_t        s_recv_drop_dead_sock;
 695         uint64_t        s_recv_deliver_raced;
 696         uint64_t        s_recv_delivered;
 697         uint64_t        s_recv_queued;
 698         uint64_t        s_recv_immediate_retry;
 699         uint64_t        s_recv_delayed_retry;
 700         uint64_t        s_recv_ack_required;
 701         uint64_t        s_recv_rdma_bytes;
 702         uint64_t        s_recv_ping;
 703         uint64_t        s_send_queue_empty;
 704         uint64_t        s_send_queue_full;
 705         uint64_t        s_send_lock_contention;
 706         uint64_t        s_send_lock_queue_raced;
 707         uint64_t        s_send_immediate_retry;
 708         uint64_t        s_send_delayed_retry;
 709         uint64_t        s_send_drop_acked;
 710         uint64_t        s_send_ack_required;
 711         uint64_t        s_send_queued;
 712         uint64_t        s_send_rdma;
 713         uint64_t        s_send_rdma_bytes;
 714         uint64_t        s_send_pong;
 715         uint64_t        s_page_remainder_hit;
 716         uint64_t        s_page_remainder_miss;
 717         uint64_t        s_copy_to_user;
 718         uint64_t        s_copy_from_user;
 719         uint64_t        s_cong_update_queued;
 720         uint64_t        s_cong_update_received;
 721         uint64_t        s_cong_send_error;
 722         uint64_t        s_cong_send_blocked;
 723         uint64_t        s_recv_bytes_added_to_socket;
 724         uint64_t        s_recv_bytes_removed_from_socket;
 725         uint64_t        s_send_stuck_rm;
 726 };
 727 
 728 
 729 void rds_sock_addref(struct rds_sock *rs);
 730 void rds_sock_put(struct rds_sock *rs);
 731 void rds_wake_sk_sleep(struct rds_sock *rs);
 732 static inline void __rds_wake_sk_sleep(struct sock *sk)
 733 {
 734         wait_queue_head_t *waitq = sk_sleep(sk);
 735 
 736         if (!sock_flag(sk, SOCK_DEAD) && waitq)
 737                 wake_up(waitq);
 738 }
 739 extern wait_queue_head_t rds_poll_waitq;
 740 
 741 
 742 
 743 int rds_bind(struct socket *sock, struct sockaddr *uaddr, int addr_len);
 744 void rds_remove_bound(struct rds_sock *rs);
 745 struct rds_sock *rds_find_bound(const struct in6_addr *addr, __be16 port,
 746                                 __u32 scope_id);
 747 int rds_bind_lock_init(void);
 748 void rds_bind_lock_destroy(void);
 749 
 750 
 751 int rds_cong_get_maps(struct rds_connection *conn);
 752 void rds_cong_add_conn(struct rds_connection *conn);
 753 void rds_cong_remove_conn(struct rds_connection *conn);
 754 void rds_cong_set_bit(struct rds_cong_map *map, __be16 port);
 755 void rds_cong_clear_bit(struct rds_cong_map *map, __be16 port);
 756 int rds_cong_wait(struct rds_cong_map *map, __be16 port, int nonblock, struct rds_sock *rs);
 757 void rds_cong_queue_updates(struct rds_cong_map *map);
 758 void rds_cong_map_updated(struct rds_cong_map *map, uint64_t);
 759 int rds_cong_updated_since(unsigned long *recent);
 760 void rds_cong_add_socket(struct rds_sock *);
 761 void rds_cong_remove_socket(struct rds_sock *);
 762 void rds_cong_exit(void);
 763 struct rds_message *rds_cong_update_alloc(struct rds_connection *conn);
 764 
 765 
 766 extern u32 rds_gen_num;
 767 int rds_conn_init(void);
 768 void rds_conn_exit(void);
 769 struct rds_connection *rds_conn_create(struct net *net,
 770                                        const struct in6_addr *laddr,
 771                                        const struct in6_addr *faddr,
 772                                        struct rds_transport *trans,
 773                                        u8 tos, gfp_t gfp,
 774                                        int dev_if);
 775 struct rds_connection *rds_conn_create_outgoing(struct net *net,
 776                                                 const struct in6_addr *laddr,
 777                                                 const struct in6_addr *faddr,
 778                                                 struct rds_transport *trans,
 779                                                 u8 tos, gfp_t gfp, int dev_if);
 780 void rds_conn_shutdown(struct rds_conn_path *cpath);
 781 void rds_conn_destroy(struct rds_connection *conn);
 782 void rds_conn_drop(struct rds_connection *conn);
 783 void rds_conn_path_drop(struct rds_conn_path *cpath, bool destroy);
 784 void rds_conn_connect_if_down(struct rds_connection *conn);
 785 void rds_conn_path_connect_if_down(struct rds_conn_path *cp);
 786 void rds_for_each_conn_info(struct socket *sock, unsigned int len,
 787                           struct rds_info_iterator *iter,
 788                           struct rds_info_lengths *lens,
 789                           int (*visitor)(struct rds_connection *, void *),
 790                           u64 *buffer,
 791                           size_t item_len);
 792 
 793 __printf(2, 3)
 794 void __rds_conn_path_error(struct rds_conn_path *cp, const char *, ...);
 795 #define rds_conn_path_error(cp, fmt...) \
 796         __rds_conn_path_error(cp, KERN_WARNING "RDS: " fmt)
 797 
 798 static inline int
 799 rds_conn_path_transition(struct rds_conn_path *cp, int old, int new)
 800 {
 801         return atomic_cmpxchg(&cp->cp_state, old, new) == old;
 802 }
 803 
 804 static inline int
 805 rds_conn_transition(struct rds_connection *conn, int old, int new)
 806 {
 807         WARN_ON(conn->c_trans->t_mp_capable);
 808         return rds_conn_path_transition(&conn->c_path[0], old, new);
 809 }
 810 
 811 static inline int
 812 rds_conn_path_state(struct rds_conn_path *cp)
 813 {
 814         return atomic_read(&cp->cp_state);
 815 }
 816 
 817 static inline int
 818 rds_conn_state(struct rds_connection *conn)
 819 {
 820         WARN_ON(conn->c_trans->t_mp_capable);
 821         return rds_conn_path_state(&conn->c_path[0]);
 822 }
 823 
 824 static inline int
 825 rds_conn_path_up(struct rds_conn_path *cp)
 826 {
 827         return atomic_read(&cp->cp_state) == RDS_CONN_UP;
 828 }
 829 
 830 static inline int
 831 rds_conn_up(struct rds_connection *conn)
 832 {
 833         WARN_ON(conn->c_trans->t_mp_capable);
 834         return rds_conn_path_up(&conn->c_path[0]);
 835 }
 836 
 837 static inline int
 838 rds_conn_path_connecting(struct rds_conn_path *cp)
 839 {
 840         return atomic_read(&cp->cp_state) == RDS_CONN_CONNECTING;
 841 }
 842 
 843 static inline int
 844 rds_conn_connecting(struct rds_connection *conn)
 845 {
 846         WARN_ON(conn->c_trans->t_mp_capable);
 847         return rds_conn_path_connecting(&conn->c_path[0]);
 848 }
 849 
 850 
 851 struct rds_message *rds_message_alloc(unsigned int nents, gfp_t gfp);
 852 struct scatterlist *rds_message_alloc_sgs(struct rds_message *rm, int nents);
 853 int rds_message_copy_from_user(struct rds_message *rm, struct iov_iter *from,
 854                                bool zcopy);
 855 struct rds_message *rds_message_map_pages(unsigned long *page_addrs, unsigned int total_len);
 856 void rds_message_populate_header(struct rds_header *hdr, __be16 sport,
 857                                  __be16 dport, u64 seq);
 858 int rds_message_add_extension(struct rds_header *hdr,
 859                               unsigned int type, const void *data, unsigned int len);
 860 int rds_message_next_extension(struct rds_header *hdr,
 861                                unsigned int *pos, void *buf, unsigned int *buflen);
 862 int rds_message_add_rdma_dest_extension(struct rds_header *hdr, u32 r_key, u32 offset);
 863 int rds_message_inc_copy_to_user(struct rds_incoming *inc, struct iov_iter *to);
 864 void rds_message_inc_free(struct rds_incoming *inc);
 865 void rds_message_addref(struct rds_message *rm);
 866 void rds_message_put(struct rds_message *rm);
 867 void rds_message_wait(struct rds_message *rm);
 868 void rds_message_unmapped(struct rds_message *rm);
 869 void rds_notify_msg_zcopy_purge(struct rds_msg_zcopy_queue *info);
 870 
 871 static inline void rds_message_make_checksum(struct rds_header *hdr)
 872 {
 873         hdr->h_csum = 0;
 874         hdr->h_csum = ip_fast_csum((void *) hdr, sizeof(*hdr) >> 2);
 875 }
 876 
 877 static inline int rds_message_verify_checksum(const struct rds_header *hdr)
 878 {
 879         return !hdr->h_csum || ip_fast_csum((void *) hdr, sizeof(*hdr) >> 2) == 0;
 880 }
 881 
 882 
 883 
 884 int rds_page_remainder_alloc(struct scatterlist *scat, unsigned long bytes,
 885                              gfp_t gfp);
 886 void rds_page_exit(void);
 887 
 888 
 889 void rds_inc_init(struct rds_incoming *inc, struct rds_connection *conn,
 890                   struct in6_addr *saddr);
 891 void rds_inc_path_init(struct rds_incoming *inc, struct rds_conn_path *conn,
 892                        struct in6_addr *saddr);
 893 void rds_inc_put(struct rds_incoming *inc);
 894 void rds_recv_incoming(struct rds_connection *conn, struct in6_addr *saddr,
 895                        struct in6_addr *daddr,
 896                        struct rds_incoming *inc, gfp_t gfp);
 897 int rds_recvmsg(struct socket *sock, struct msghdr *msg, size_t size,
 898                 int msg_flags);
 899 void rds_clear_recv_queue(struct rds_sock *rs);
 900 int rds_notify_queue_get(struct rds_sock *rs, struct msghdr *msg);
 901 void rds_inc_info_copy(struct rds_incoming *inc,
 902                        struct rds_info_iterator *iter,
 903                        __be32 saddr, __be32 daddr, int flip);
 904 void rds6_inc_info_copy(struct rds_incoming *inc,
 905                         struct rds_info_iterator *iter,
 906                         struct in6_addr *saddr, struct in6_addr *daddr,
 907                         int flip);
 908 
 909 
 910 int rds_sendmsg(struct socket *sock, struct msghdr *msg, size_t payload_len);
 911 void rds_send_path_reset(struct rds_conn_path *conn);
 912 int rds_send_xmit(struct rds_conn_path *cp);
 913 struct sockaddr_in;
 914 void rds_send_drop_to(struct rds_sock *rs, struct sockaddr_in6 *dest);
 915 typedef int (*is_acked_func)(struct rds_message *rm, uint64_t ack);
 916 void rds_send_drop_acked(struct rds_connection *conn, u64 ack,
 917                          is_acked_func is_acked);
 918 void rds_send_path_drop_acked(struct rds_conn_path *cp, u64 ack,
 919                               is_acked_func is_acked);
 920 void rds_send_ping(struct rds_connection *conn, int cp_index);
 921 int rds_send_pong(struct rds_conn_path *cp, __be16 dport);
 922 
 923 
 924 void rds_rdma_unuse(struct rds_sock *rs, u32 r_key, int force);
 925 int rds_get_mr(struct rds_sock *rs, char __user *optval, int optlen);
 926 int rds_get_mr_for_dest(struct rds_sock *rs, char __user *optval, int optlen);
 927 int rds_free_mr(struct rds_sock *rs, char __user *optval, int optlen);
 928 void rds_rdma_drop_keys(struct rds_sock *rs);
 929 int rds_rdma_extra_size(struct rds_rdma_args *args,
 930                         struct rds_iov_vector *iov);
 931 int rds_cmsg_rdma_dest(struct rds_sock *rs, struct rds_message *rm,
 932                           struct cmsghdr *cmsg);
 933 int rds_cmsg_rdma_args(struct rds_sock *rs, struct rds_message *rm,
 934                           struct cmsghdr *cmsg,
 935                           struct rds_iov_vector *vec);
 936 int rds_cmsg_rdma_map(struct rds_sock *rs, struct rds_message *rm,
 937                           struct cmsghdr *cmsg);
 938 void rds_rdma_free_op(struct rm_rdma_op *ro);
 939 void rds_atomic_free_op(struct rm_atomic_op *ao);
 940 void rds_rdma_send_complete(struct rds_message *rm, int wc_status);
 941 void rds_atomic_send_complete(struct rds_message *rm, int wc_status);
 942 int rds_cmsg_atomic(struct rds_sock *rs, struct rds_message *rm,
 943                     struct cmsghdr *cmsg);
 944 
 945 void __rds_put_mr_final(struct rds_mr *mr);
 946 static inline void rds_mr_put(struct rds_mr *mr)
 947 {
 948         if (refcount_dec_and_test(&mr->r_refcount))
 949                 __rds_put_mr_final(mr);
 950 }
 951 
 952 static inline bool rds_destroy_pending(struct rds_connection *conn)
 953 {
 954         return !check_net(rds_conn_net(conn)) ||
 955                (conn->c_trans->t_unloading && conn->c_trans->t_unloading(conn));
 956 }
 957 
 958 
 959 DECLARE_PER_CPU_SHARED_ALIGNED(struct rds_statistics, rds_stats);
 960 #define rds_stats_inc_which(which, member) do {         \
 961         per_cpu(which, get_cpu()).member++;             \
 962         put_cpu();                                      \
 963 } while (0)
 964 #define rds_stats_inc(member) rds_stats_inc_which(rds_stats, member)
 965 #define rds_stats_add_which(which, member, count) do {          \
 966         per_cpu(which, get_cpu()).member += count;      \
 967         put_cpu();                                      \
 968 } while (0)
 969 #define rds_stats_add(member, count) rds_stats_add_which(rds_stats, member, count)
 970 int rds_stats_init(void);
 971 void rds_stats_exit(void);
 972 void rds_stats_info_copy(struct rds_info_iterator *iter,
 973                          uint64_t *values, const char *const *names,
 974                          size_t nr);
 975 
 976 
 977 int rds_sysctl_init(void);
 978 void rds_sysctl_exit(void);
 979 extern unsigned long rds_sysctl_sndbuf_min;
 980 extern unsigned long rds_sysctl_sndbuf_default;
 981 extern unsigned long rds_sysctl_sndbuf_max;
 982 extern unsigned long rds_sysctl_reconnect_min_jiffies;
 983 extern unsigned long rds_sysctl_reconnect_max_jiffies;
 984 extern unsigned int  rds_sysctl_max_unacked_packets;
 985 extern unsigned int  rds_sysctl_max_unacked_bytes;
 986 extern unsigned int  rds_sysctl_ping_enable;
 987 extern unsigned long rds_sysctl_trace_flags;
 988 extern unsigned int  rds_sysctl_trace_level;
 989 
 990 
 991 int rds_threads_init(void);
 992 void rds_threads_exit(void);
 993 extern struct workqueue_struct *rds_wq;
 994 void rds_queue_reconnect(struct rds_conn_path *cp);
 995 void rds_connect_worker(struct work_struct *);
 996 void rds_shutdown_worker(struct work_struct *);
 997 void rds_send_worker(struct work_struct *);
 998 void rds_recv_worker(struct work_struct *);
 999 void rds_connect_path_complete(struct rds_conn_path *conn, int curr);
1000 void rds_connect_complete(struct rds_connection *conn);
1001 int rds_addr_cmp(const struct in6_addr *a1, const struct in6_addr *a2);
1002 
1003 
1004 void rds_trans_register(struct rds_transport *trans);
1005 void rds_trans_unregister(struct rds_transport *trans);
1006 struct rds_transport *rds_trans_get_preferred(struct net *net,
1007                                               const struct in6_addr *addr,
1008                                               __u32 scope_id);
1009 void rds_trans_put(struct rds_transport *trans);
1010 unsigned int rds_trans_stats_info_copy(struct rds_info_iterator *iter,
1011                                        unsigned int avail);
1012 struct rds_transport *rds_trans_get(int t_type);
1013 int rds_trans_init(void);
1014 void rds_trans_exit(void);
1015 
1016 #endif