linux/net/sunrpc/xprtsock.c
<<
>>
Prefs
   1/*
   2 * linux/net/sunrpc/xprtsock.c
   3 *
   4 * Client-side transport implementation for sockets.
   5 *
   6 * TCP callback races fixes (C) 1998 Red Hat
   7 * TCP send fixes (C) 1998 Red Hat
   8 * TCP NFS related read + write fixes
   9 *  (C) 1999 Dave Airlie, University of Limerick, Ireland <airlied@linux.ie>
  10 *
  11 * Rewrite of larges part of the code in order to stabilize TCP stuff.
  12 * Fix behaviour when socket buffer is full.
  13 *  (C) 1999 Trond Myklebust <trond.myklebust@fys.uio.no>
  14 *
  15 * IP socket transport implementation, (C) 2005 Chuck Lever <cel@netapp.com>
  16 *
  17 * IPv6 support contributed by Gilles Quillard, Bull Open Source, 2005.
  18 *   <gilles.quillard@bull.net>
  19 */
  20
  21#include <linux/types.h>
  22#include <linux/slab.h>
  23#include <linux/module.h>
  24#include <linux/capability.h>
  25#include <linux/pagemap.h>
  26#include <linux/errno.h>
  27#include <linux/socket.h>
  28#include <linux/in.h>
  29#include <linux/net.h>
  30#include <linux/mm.h>
  31#include <linux/udp.h>
  32#include <linux/tcp.h>
  33#include <linux/sunrpc/clnt.h>
  34#include <linux/sunrpc/sched.h>
  35#include <linux/sunrpc/xprtsock.h>
  36#include <linux/file.h>
  37
  38#include <net/sock.h>
  39#include <net/checksum.h>
  40#include <net/udp.h>
  41#include <net/tcp.h>
  42
  43/*
  44 * xprtsock tunables
  45 */
  46unsigned int xprt_udp_slot_table_entries = RPC_DEF_SLOT_TABLE;
  47unsigned int xprt_tcp_slot_table_entries = RPC_DEF_SLOT_TABLE;
  48
  49unsigned int xprt_min_resvport = RPC_DEF_MIN_RESVPORT;
  50unsigned int xprt_max_resvport = RPC_DEF_MAX_RESVPORT;
  51
  52/*
  53 * We can register our own files under /proc/sys/sunrpc by
  54 * calling register_sysctl_table() again.  The files in that
  55 * directory become the union of all files registered there.
  56 *
  57 * We simply need to make sure that we don't collide with
  58 * someone else's file names!
  59 */
  60
  61#ifdef RPC_DEBUG
  62
  63static unsigned int min_slot_table_size = RPC_MIN_SLOT_TABLE;
  64static unsigned int max_slot_table_size = RPC_MAX_SLOT_TABLE;
  65static unsigned int xprt_min_resvport_limit = RPC_MIN_RESVPORT;
  66static unsigned int xprt_max_resvport_limit = RPC_MAX_RESVPORT;
  67
  68static struct ctl_table_header *sunrpc_table_header;
  69
  70/*
  71 * FIXME: changing the UDP slot table size should also resize the UDP
  72 *        socket buffers for existing UDP transports
  73 */
  74static ctl_table xs_tunables_table[] = {
  75        {
  76                .ctl_name       = CTL_SLOTTABLE_UDP,
  77                .procname       = "udp_slot_table_entries",
  78                .data           = &xprt_udp_slot_table_entries,
  79                .maxlen         = sizeof(unsigned int),
  80                .mode           = 0644,
  81                .proc_handler   = &proc_dointvec_minmax,
  82                .strategy       = &sysctl_intvec,
  83                .extra1         = &min_slot_table_size,
  84                .extra2         = &max_slot_table_size
  85        },
  86        {
  87                .ctl_name       = CTL_SLOTTABLE_TCP,
  88                .procname       = "tcp_slot_table_entries",
  89                .data           = &xprt_tcp_slot_table_entries,
  90                .maxlen         = sizeof(unsigned int),
  91                .mode           = 0644,
  92                .proc_handler   = &proc_dointvec_minmax,
  93                .strategy       = &sysctl_intvec,
  94                .extra1         = &min_slot_table_size,
  95                .extra2         = &max_slot_table_size
  96        },
  97        {
  98                .ctl_name       = CTL_MIN_RESVPORT,
  99                .procname       = "min_resvport",
 100                .data           = &xprt_min_resvport,
 101                .maxlen         = sizeof(unsigned int),
 102                .mode           = 0644,
 103                .proc_handler   = &proc_dointvec_minmax,
 104                .strategy       = &sysctl_intvec,
 105                .extra1         = &xprt_min_resvport_limit,
 106                .extra2         = &xprt_max_resvport_limit
 107        },
 108        {
 109                .ctl_name       = CTL_MAX_RESVPORT,
 110                .procname       = "max_resvport",
 111                .data           = &xprt_max_resvport,
 112                .maxlen         = sizeof(unsigned int),
 113                .mode           = 0644,
 114                .proc_handler   = &proc_dointvec_minmax,
 115                .strategy       = &sysctl_intvec,
 116                .extra1         = &xprt_min_resvport_limit,
 117                .extra2         = &xprt_max_resvport_limit
 118        },
 119        {
 120                .ctl_name = 0,
 121        },
 122};
 123
 124static ctl_table sunrpc_table[] = {
 125        {
 126                .ctl_name       = CTL_SUNRPC,
 127                .procname       = "sunrpc",
 128                .mode           = 0555,
 129                .child          = xs_tunables_table
 130        },
 131        {
 132                .ctl_name = 0,
 133        },
 134};
 135
 136#endif
 137
 138/*
 139 * Time out for an RPC UDP socket connect.  UDP socket connects are
 140 * synchronous, but we set a timeout anyway in case of resource
 141 * exhaustion on the local host.
 142 */
 143#define XS_UDP_CONN_TO          (5U * HZ)
 144
 145/*
 146 * Wait duration for an RPC TCP connection to be established.  Solaris
 147 * NFS over TCP uses 60 seconds, for example, which is in line with how
 148 * long a server takes to reboot.
 149 */
 150#define XS_TCP_CONN_TO          (60U * HZ)
 151
 152/*
 153 * Wait duration for a reply from the RPC portmapper.
 154 */
 155#define XS_BIND_TO              (60U * HZ)
 156
 157/*
 158 * Delay if a UDP socket connect error occurs.  This is most likely some
 159 * kind of resource problem on the local host.
 160 */
 161#define XS_UDP_REEST_TO         (2U * HZ)
 162
 163/*
 164 * The reestablish timeout allows clients to delay for a bit before attempting
 165 * to reconnect to a server that just dropped our connection.
 166 *
 167 * We implement an exponential backoff when trying to reestablish a TCP
 168 * transport connection with the server.  Some servers like to drop a TCP
 169 * connection when they are overworked, so we start with a short timeout and
 170 * increase over time if the server is down or not responding.
 171 */
 172#define XS_TCP_INIT_REEST_TO    (3U * HZ)
 173#define XS_TCP_MAX_REEST_TO     (5U * 60 * HZ)
 174
 175/*
 176 * TCP idle timeout; client drops the transport socket if it is idle
 177 * for this long.  Note that we also timeout UDP sockets to prevent
 178 * holding port numbers when there is no RPC traffic.
 179 */
 180#define XS_IDLE_DISC_TO         (5U * 60 * HZ)
 181
 182#ifdef RPC_DEBUG
 183# undef  RPC_DEBUG_DATA
 184# define RPCDBG_FACILITY        RPCDBG_TRANS
 185#endif
 186
 187#ifdef RPC_DEBUG_DATA
 188static void xs_pktdump(char *msg, u32 *packet, unsigned int count)
 189{
 190        u8 *buf = (u8 *) packet;
 191        int j;
 192
 193        dprintk("RPC:       %s\n", msg);
 194        for (j = 0; j < count && j < 128; j += 4) {
 195                if (!(j & 31)) {
 196                        if (j)
 197                                dprintk("\n");
 198                        dprintk("0x%04x ", j);
 199                }
 200                dprintk("%02x%02x%02x%02x ",
 201                        buf[j], buf[j+1], buf[j+2], buf[j+3]);
 202        }
 203        dprintk("\n");
 204}
 205#else
 206static inline void xs_pktdump(char *msg, u32 *packet, unsigned int count)
 207{
 208        /* NOP */
 209}
 210#endif
 211
 212struct sock_xprt {
 213        struct rpc_xprt         xprt;
 214
 215        /*
 216         * Network layer
 217         */
 218        struct socket *         sock;
 219        struct sock *           inet;
 220
 221        /*
 222         * State of TCP reply receive
 223         */
 224        __be32                  tcp_fraghdr,
 225                                tcp_xid;
 226
 227        u32                     tcp_offset,
 228                                tcp_reclen;
 229
 230        unsigned long           tcp_copied,
 231                                tcp_flags;
 232
 233        /*
 234         * Connection of transports
 235         */
 236        struct delayed_work     connect_worker;
 237        struct sockaddr_storage addr;
 238        unsigned short          port;
 239
 240        /*
 241         * UDP socket buffer size parameters
 242         */
 243        size_t                  rcvsize,
 244                                sndsize;
 245
 246        /*
 247         * Saved socket callback addresses
 248         */
 249        void                    (*old_data_ready)(struct sock *, int);
 250        void                    (*old_state_change)(struct sock *);
 251        void                    (*old_write_space)(struct sock *);
 252        void                    (*old_error_report)(struct sock *);
 253};
 254
 255/*
 256 * TCP receive state flags
 257 */
 258#define TCP_RCV_LAST_FRAG       (1UL << 0)
 259#define TCP_RCV_COPY_FRAGHDR    (1UL << 1)
 260#define TCP_RCV_COPY_XID        (1UL << 2)
 261#define TCP_RCV_COPY_DATA       (1UL << 3)
 262
 263static inline struct sockaddr *xs_addr(struct rpc_xprt *xprt)
 264{
 265        return (struct sockaddr *) &xprt->addr;
 266}
 267
 268static inline struct sockaddr_in *xs_addr_in(struct rpc_xprt *xprt)
 269{
 270        return (struct sockaddr_in *) &xprt->addr;
 271}
 272
 273static inline struct sockaddr_in6 *xs_addr_in6(struct rpc_xprt *xprt)
 274{
 275        return (struct sockaddr_in6 *) &xprt->addr;
 276}
 277
 278static void xs_format_ipv4_peer_addresses(struct rpc_xprt *xprt,
 279                                          const char *protocol,
 280                                          const char *netid)
 281{
 282        struct sockaddr_in *addr = xs_addr_in(xprt);
 283        char *buf;
 284
 285        buf = kzalloc(20, GFP_KERNEL);
 286        if (buf) {
 287                snprintf(buf, 20, NIPQUAD_FMT,
 288                                NIPQUAD(addr->sin_addr.s_addr));
 289        }
 290        xprt->address_strings[RPC_DISPLAY_ADDR] = buf;
 291
 292        buf = kzalloc(8, GFP_KERNEL);
 293        if (buf) {
 294                snprintf(buf, 8, "%u",
 295                                ntohs(addr->sin_port));
 296        }
 297        xprt->address_strings[RPC_DISPLAY_PORT] = buf;
 298
 299        xprt->address_strings[RPC_DISPLAY_PROTO] = protocol;
 300
 301        buf = kzalloc(48, GFP_KERNEL);
 302        if (buf) {
 303                snprintf(buf, 48, "addr="NIPQUAD_FMT" port=%u proto=%s",
 304                        NIPQUAD(addr->sin_addr.s_addr),
 305                        ntohs(addr->sin_port),
 306                        protocol);
 307        }
 308        xprt->address_strings[RPC_DISPLAY_ALL] = buf;
 309
 310        buf = kzalloc(10, GFP_KERNEL);
 311        if (buf) {
 312                snprintf(buf, 10, "%02x%02x%02x%02x",
 313                                NIPQUAD(addr->sin_addr.s_addr));
 314        }
 315        xprt->address_strings[RPC_DISPLAY_HEX_ADDR] = buf;
 316
 317        buf = kzalloc(8, GFP_KERNEL);
 318        if (buf) {
 319                snprintf(buf, 8, "%4hx",
 320                                ntohs(addr->sin_port));
 321        }
 322        xprt->address_strings[RPC_DISPLAY_HEX_PORT] = buf;
 323
 324        buf = kzalloc(30, GFP_KERNEL);
 325        if (buf) {
 326                snprintf(buf, 30, NIPQUAD_FMT".%u.%u",
 327                                NIPQUAD(addr->sin_addr.s_addr),
 328                                ntohs(addr->sin_port) >> 8,
 329                                ntohs(addr->sin_port) & 0xff);
 330        }
 331        xprt->address_strings[RPC_DISPLAY_UNIVERSAL_ADDR] = buf;
 332
 333        xprt->address_strings[RPC_DISPLAY_NETID] = netid;
 334}
 335
 336static void xs_format_ipv6_peer_addresses(struct rpc_xprt *xprt,
 337                                          const char *protocol,
 338                                          const char *netid)
 339{
 340        struct sockaddr_in6 *addr = xs_addr_in6(xprt);
 341        char *buf;
 342
 343        buf = kzalloc(40, GFP_KERNEL);
 344        if (buf) {
 345                snprintf(buf, 40, NIP6_FMT,
 346                                NIP6(addr->sin6_addr));
 347        }
 348        xprt->address_strings[RPC_DISPLAY_ADDR] = buf;
 349
 350        buf = kzalloc(8, GFP_KERNEL);
 351        if (buf) {
 352                snprintf(buf, 8, "%u",
 353                                ntohs(addr->sin6_port));
 354        }
 355        xprt->address_strings[RPC_DISPLAY_PORT] = buf;
 356
 357        xprt->address_strings[RPC_DISPLAY_PROTO] = protocol;
 358
 359        buf = kzalloc(64, GFP_KERNEL);
 360        if (buf) {
 361                snprintf(buf, 64, "addr="NIP6_FMT" port=%u proto=%s",
 362                                NIP6(addr->sin6_addr),
 363                                ntohs(addr->sin6_port),
 364                                protocol);
 365        }
 366        xprt->address_strings[RPC_DISPLAY_ALL] = buf;
 367
 368        buf = kzalloc(36, GFP_KERNEL);
 369        if (buf) {
 370                snprintf(buf, 36, NIP6_SEQFMT,
 371                                NIP6(addr->sin6_addr));
 372        }
 373        xprt->address_strings[RPC_DISPLAY_HEX_ADDR] = buf;
 374
 375        buf = kzalloc(8, GFP_KERNEL);
 376        if (buf) {
 377                snprintf(buf, 8, "%4hx",
 378                                ntohs(addr->sin6_port));
 379        }
 380        xprt->address_strings[RPC_DISPLAY_HEX_PORT] = buf;
 381
 382        buf = kzalloc(50, GFP_KERNEL);
 383        if (buf) {
 384                snprintf(buf, 50, NIP6_FMT".%u.%u",
 385                                NIP6(addr->sin6_addr),
 386                                ntohs(addr->sin6_port) >> 8,
 387                                ntohs(addr->sin6_port) & 0xff);
 388        }
 389        xprt->address_strings[RPC_DISPLAY_UNIVERSAL_ADDR] = buf;
 390
 391        xprt->address_strings[RPC_DISPLAY_NETID] = netid;
 392}
 393
 394static void xs_free_peer_addresses(struct rpc_xprt *xprt)
 395{
 396        unsigned int i;
 397
 398        for (i = 0; i < RPC_DISPLAY_MAX; i++)
 399                switch (i) {
 400                case RPC_DISPLAY_PROTO:
 401                case RPC_DISPLAY_NETID:
 402                        continue;
 403                default:
 404                        kfree(xprt->address_strings[i]);
 405                }
 406}
 407
 408#define XS_SENDMSG_FLAGS        (MSG_DONTWAIT | MSG_NOSIGNAL)
 409
 410static int xs_send_kvec(struct socket *sock, struct sockaddr *addr, int addrlen, struct kvec *vec, unsigned int base, int more)
 411{
 412        struct msghdr msg = {
 413                .msg_name       = addr,
 414                .msg_namelen    = addrlen,
 415                .msg_flags      = XS_SENDMSG_FLAGS | (more ? MSG_MORE : 0),
 416        };
 417        struct kvec iov = {
 418                .iov_base       = vec->iov_base + base,
 419                .iov_len        = vec->iov_len - base,
 420        };
 421
 422        if (iov.iov_len != 0)
 423                return kernel_sendmsg(sock, &msg, &iov, 1, iov.iov_len);
 424        return kernel_sendmsg(sock, &msg, NULL, 0, 0);
 425}
 426
 427static int xs_send_pagedata(struct socket *sock, struct xdr_buf *xdr, unsigned int base, int more)
 428{
 429        struct page **ppage;
 430        unsigned int remainder;
 431        int err, sent = 0;
 432
 433        remainder = xdr->page_len - base;
 434        base += xdr->page_base;
 435        ppage = xdr->pages + (base >> PAGE_SHIFT);
 436        base &= ~PAGE_MASK;
 437        for(;;) {
 438                unsigned int len = min_t(unsigned int, PAGE_SIZE - base, remainder);
 439                int flags = XS_SENDMSG_FLAGS;
 440
 441                remainder -= len;
 442                if (remainder != 0 || more)
 443                        flags |= MSG_MORE;
 444                err = sock->ops->sendpage(sock, *ppage, base, len, flags);
 445                if (remainder == 0 || err != len)
 446                        break;
 447                sent += err;
 448                ppage++;
 449                base = 0;
 450        }
 451        if (sent == 0)
 452                return err;
 453        if (err > 0)
 454                sent += err;
 455        return sent;
 456}
 457
 458/**
 459 * xs_sendpages - write pages directly to a socket
 460 * @sock: socket to send on
 461 * @addr: UDP only -- address of destination
 462 * @addrlen: UDP only -- length of destination address
 463 * @xdr: buffer containing this request
 464 * @base: starting position in the buffer
 465 *
 466 */
 467static int xs_sendpages(struct socket *sock, struct sockaddr *addr, int addrlen, struct xdr_buf *xdr, unsigned int base)
 468{
 469        unsigned int remainder = xdr->len - base;
 470        int err, sent = 0;
 471
 472        if (unlikely(!sock))
 473                return -ENOTCONN;
 474
 475        clear_bit(SOCK_ASYNC_NOSPACE, &sock->flags);
 476        if (base != 0) {
 477                addr = NULL;
 478                addrlen = 0;
 479        }
 480
 481        if (base < xdr->head[0].iov_len || addr != NULL) {
 482                unsigned int len = xdr->head[0].iov_len - base;
 483                remainder -= len;
 484                err = xs_send_kvec(sock, addr, addrlen, &xdr->head[0], base, remainder != 0);
 485                if (remainder == 0 || err != len)
 486                        goto out;
 487                sent += err;
 488                base = 0;
 489        } else
 490                base -= xdr->head[0].iov_len;
 491
 492        if (base < xdr->page_len) {
 493                unsigned int len = xdr->page_len - base;
 494                remainder -= len;
 495                err = xs_send_pagedata(sock, xdr, base, remainder != 0);
 496                if (remainder == 0 || err != len)
 497                        goto out;
 498                sent += err;
 499                base = 0;
 500        } else
 501                base -= xdr->page_len;
 502
 503        if (base >= xdr->tail[0].iov_len)
 504                return sent;
 505        err = xs_send_kvec(sock, NULL, 0, &xdr->tail[0], base, 0);
 506out:
 507        if (sent == 0)
 508                return err;
 509        if (err > 0)
 510                sent += err;
 511        return sent;
 512}
 513
 514static void xs_nospace_callback(struct rpc_task *task)
 515{
 516        struct sock_xprt *transport = container_of(task->tk_rqstp->rq_xprt, struct sock_xprt, xprt);
 517
 518        transport->inet->sk_write_pending--;
 519        clear_bit(SOCK_ASYNC_NOSPACE, &transport->sock->flags);
 520}
 521
 522/**
 523 * xs_nospace - place task on wait queue if transmit was incomplete
 524 * @task: task to put to sleep
 525 *
 526 */
 527static void xs_nospace(struct rpc_task *task)
 528{
 529        struct rpc_rqst *req = task->tk_rqstp;
 530        struct rpc_xprt *xprt = req->rq_xprt;
 531        struct sock_xprt *transport = container_of(xprt, struct sock_xprt, xprt);
 532
 533        dprintk("RPC: %5u xmit incomplete (%u left of %u)\n",
 534                        task->tk_pid, req->rq_slen - req->rq_bytes_sent,
 535                        req->rq_slen);
 536
 537        /* Protect against races with write_space */
 538        spin_lock_bh(&xprt->transport_lock);
 539
 540        /* Don't race with disconnect */
 541        if (xprt_connected(xprt)) {
 542                if (test_bit(SOCK_ASYNC_NOSPACE, &transport->sock->flags)) {
 543                        /*
 544                         * Notify TCP that we're limited by the application
 545                         * window size
 546                         */
 547                        set_bit(SOCK_NOSPACE, &transport->sock->flags);
 548                        transport->inet->sk_write_pending++;
 549                        /* ...and wait for more buffer space */
 550                        xprt_wait_for_buffer_space(task, xs_nospace_callback);
 551                }
 552        } else {
 553                clear_bit(SOCK_ASYNC_NOSPACE, &transport->sock->flags);
 554                task->tk_status = -ENOTCONN;
 555        }
 556
 557        spin_unlock_bh(&xprt->transport_lock);
 558}
 559
 560/**
 561 * xs_udp_send_request - write an RPC request to a UDP socket
 562 * @task: address of RPC task that manages the state of an RPC request
 563 *
 564 * Return values:
 565 *        0:    The request has been sent
 566 *   EAGAIN:    The socket was blocked, please call again later to
 567 *              complete the request
 568 * ENOTCONN:    Caller needs to invoke connect logic then call again
 569 *    other:    Some other error occured, the request was not sent
 570 */
 571static int xs_udp_send_request(struct rpc_task *task)
 572{
 573        struct rpc_rqst *req = task->tk_rqstp;
 574        struct rpc_xprt *xprt = req->rq_xprt;
 575        struct sock_xprt *transport = container_of(xprt, struct sock_xprt, xprt);
 576        struct xdr_buf *xdr = &req->rq_snd_buf;
 577        int status;
 578
 579        xs_pktdump("packet data:",
 580                                req->rq_svec->iov_base,
 581                                req->rq_svec->iov_len);
 582
 583        status = xs_sendpages(transport->sock,
 584                              xs_addr(xprt),
 585                              xprt->addrlen, xdr,
 586                              req->rq_bytes_sent);
 587
 588        dprintk("RPC:       xs_udp_send_request(%u) = %d\n",
 589                        xdr->len - req->rq_bytes_sent, status);
 590
 591        if (status >= 0) {
 592                task->tk_bytes_sent += status;
 593                if (status >= req->rq_slen)
 594                        return 0;
 595                /* Still some bytes left; set up for a retry later. */
 596                status = -EAGAIN;
 597        }
 598
 599        switch (status) {
 600        case -EAGAIN:
 601                xs_nospace(task);
 602                break;
 603        case -ENETUNREACH:
 604        case -EPIPE:
 605        case -ECONNREFUSED:
 606                /* When the server has died, an ICMP port unreachable message
 607                 * prompts ECONNREFUSED. */
 608                clear_bit(SOCK_ASYNC_NOSPACE, &transport->sock->flags);
 609                break;
 610        default:
 611                clear_bit(SOCK_ASYNC_NOSPACE, &transport->sock->flags);
 612                dprintk("RPC:       sendmsg returned unrecognized error %d\n",
 613                        -status);
 614        }
 615
 616        return status;
 617}
 618
 619/**
 620 * xs_tcp_shutdown - gracefully shut down a TCP socket
 621 * @xprt: transport
 622 *
 623 * Initiates a graceful shutdown of the TCP socket by calling the
 624 * equivalent of shutdown(SHUT_WR);
 625 */
 626static void xs_tcp_shutdown(struct rpc_xprt *xprt)
 627{
 628        struct sock_xprt *transport = container_of(xprt, struct sock_xprt, xprt);
 629        struct socket *sock = transport->sock;
 630
 631        if (sock != NULL)
 632                kernel_sock_shutdown(sock, SHUT_WR);
 633}
 634
 635static inline void xs_encode_tcp_record_marker(struct xdr_buf *buf)
 636{
 637        u32 reclen = buf->len - sizeof(rpc_fraghdr);
 638        rpc_fraghdr *base = buf->head[0].iov_base;
 639        *base = htonl(RPC_LAST_STREAM_FRAGMENT | reclen);
 640}
 641
 642/**
 643 * xs_tcp_send_request - write an RPC request to a TCP socket
 644 * @task: address of RPC task that manages the state of an RPC request
 645 *
 646 * Return values:
 647 *        0:    The request has been sent
 648 *   EAGAIN:    The socket was blocked, please call again later to
 649 *              complete the request
 650 * ENOTCONN:    Caller needs to invoke connect logic then call again
 651 *    other:    Some other error occured, the request was not sent
 652 *
 653 * XXX: In the case of soft timeouts, should we eventually give up
 654 *      if sendmsg is not able to make progress?
 655 */
 656static int xs_tcp_send_request(struct rpc_task *task)
 657{
 658        struct rpc_rqst *req = task->tk_rqstp;
 659        struct rpc_xprt *xprt = req->rq_xprt;
 660        struct sock_xprt *transport = container_of(xprt, struct sock_xprt, xprt);
 661        struct xdr_buf *xdr = &req->rq_snd_buf;
 662        int status;
 663
 664        xs_encode_tcp_record_marker(&req->rq_snd_buf);
 665
 666        xs_pktdump("packet data:",
 667                                req->rq_svec->iov_base,
 668                                req->rq_svec->iov_len);
 669
 670        /* Continue transmitting the packet/record. We must be careful
 671         * to cope with writespace callbacks arriving _after_ we have
 672         * called sendmsg(). */
 673        while (1) {
 674                status = xs_sendpages(transport->sock,
 675                                        NULL, 0, xdr, req->rq_bytes_sent);
 676
 677                dprintk("RPC:       xs_tcp_send_request(%u) = %d\n",
 678                                xdr->len - req->rq_bytes_sent, status);
 679
 680                if (unlikely(status < 0))
 681                        break;
 682
 683                /* If we've sent the entire packet, immediately
 684                 * reset the count of bytes sent. */
 685                req->rq_bytes_sent += status;
 686                task->tk_bytes_sent += status;
 687                if (likely(req->rq_bytes_sent >= req->rq_slen)) {
 688                        req->rq_bytes_sent = 0;
 689                        return 0;
 690                }
 691
 692                if (status != 0)
 693                        continue;
 694                status = -EAGAIN;
 695                break;
 696        }
 697
 698        switch (status) {
 699        case -EAGAIN:
 700                xs_nospace(task);
 701                break;
 702        case -ECONNRESET:
 703                xs_tcp_shutdown(xprt);
 704        case -ECONNREFUSED:
 705        case -ENOTCONN:
 706        case -EPIPE:
 707                status = -ENOTCONN;
 708                clear_bit(SOCK_ASYNC_NOSPACE, &transport->sock->flags);
 709                break;
 710        default:
 711                dprintk("RPC:       sendmsg returned unrecognized error %d\n",
 712                        -status);
 713                clear_bit(SOCK_ASYNC_NOSPACE, &transport->sock->flags);
 714                xs_tcp_shutdown(xprt);
 715        }
 716
 717        return status;
 718}
 719
 720/**
 721 * xs_tcp_release_xprt - clean up after a tcp transmission
 722 * @xprt: transport
 723 * @task: rpc task
 724 *
 725 * This cleans up if an error causes us to abort the transmission of a request.
 726 * In this case, the socket may need to be reset in order to avoid confusing
 727 * the server.
 728 */
 729static void xs_tcp_release_xprt(struct rpc_xprt *xprt, struct rpc_task *task)
 730{
 731        struct rpc_rqst *req;
 732
 733        if (task != xprt->snd_task)
 734                return;
 735        if (task == NULL)
 736                goto out_release;
 737        req = task->tk_rqstp;
 738        if (req->rq_bytes_sent == 0)
 739                goto out_release;
 740        if (req->rq_bytes_sent == req->rq_snd_buf.len)
 741                goto out_release;
 742        set_bit(XPRT_CLOSE_WAIT, &task->tk_xprt->state);
 743out_release:
 744        xprt_release_xprt(xprt, task);
 745}
 746
 747static void xs_save_old_callbacks(struct sock_xprt *transport, struct sock *sk)
 748{
 749        transport->old_data_ready = sk->sk_data_ready;
 750        transport->old_state_change = sk->sk_state_change;
 751        transport->old_write_space = sk->sk_write_space;
 752        transport->old_error_report = sk->sk_error_report;
 753}
 754
 755static void xs_restore_old_callbacks(struct sock_xprt *transport, struct sock *sk)
 756{
 757        sk->sk_data_ready = transport->old_data_ready;
 758        sk->sk_state_change = transport->old_state_change;
 759        sk->sk_write_space = transport->old_write_space;
 760        sk->sk_error_report = transport->old_error_report;
 761}
 762
 763/**
 764 * xs_close - close a socket
 765 * @xprt: transport
 766 *
 767 * This is used when all requests are complete; ie, no DRC state remains
 768 * on the server we want to save.
 769 */
 770static void xs_close(struct rpc_xprt *xprt)
 771{
 772        struct sock_xprt *transport = container_of(xprt, struct sock_xprt, xprt);
 773        struct socket *sock = transport->sock;
 774        struct sock *sk = transport->inet;
 775
 776        if (!sk)
 777                goto clear_close_wait;
 778
 779        dprintk("RPC:       xs_close xprt %p\n", xprt);
 780
 781        write_lock_bh(&sk->sk_callback_lock);
 782        transport->inet = NULL;
 783        transport->sock = NULL;
 784
 785        sk->sk_user_data = NULL;
 786
 787        xs_restore_old_callbacks(transport, sk);
 788        write_unlock_bh(&sk->sk_callback_lock);
 789
 790        sk->sk_no_check = 0;
 791
 792        sock_release(sock);
 793clear_close_wait:
 794        smp_mb__before_clear_bit();
 795        clear_bit(XPRT_CLOSE_WAIT, &xprt->state);
 796        clear_bit(XPRT_CLOSING, &xprt->state);
 797        smp_mb__after_clear_bit();
 798        xprt_disconnect_done(xprt);
 799}
 800
 801/**
 802 * xs_destroy - prepare to shutdown a transport
 803 * @xprt: doomed transport
 804 *
 805 */
 806static void xs_destroy(struct rpc_xprt *xprt)
 807{
 808        struct sock_xprt *transport = container_of(xprt, struct sock_xprt, xprt);
 809
 810        dprintk("RPC:       xs_destroy xprt %p\n", xprt);
 811
 812        cancel_rearming_delayed_work(&transport->connect_worker);
 813
 814        xs_close(xprt);
 815        xs_free_peer_addresses(xprt);
 816        kfree(xprt->slot);
 817        kfree(xprt);
 818        module_put(THIS_MODULE);
 819}
 820
 821static inline struct rpc_xprt *xprt_from_sock(struct sock *sk)
 822{
 823        return (struct rpc_xprt *) sk->sk_user_data;
 824}
 825
 826/**
 827 * xs_udp_data_ready - "data ready" callback for UDP sockets
 828 * @sk: socket with data to read
 829 * @len: how much data to read
 830 *
 831 */
 832static void xs_udp_data_ready(struct sock *sk, int len)
 833{
 834        struct rpc_task *task;
 835        struct rpc_xprt *xprt;
 836        struct rpc_rqst *rovr;
 837        struct sk_buff *skb;
 838        int err, repsize, copied;
 839        u32 _xid;
 840        __be32 *xp;
 841
 842        read_lock(&sk->sk_callback_lock);
 843        dprintk("RPC:       xs_udp_data_ready...\n");
 844        if (!(xprt = xprt_from_sock(sk)))
 845                goto out;
 846
 847        if ((skb = skb_recv_datagram(sk, 0, 1, &err)) == NULL)
 848                goto out;
 849
 850        if (xprt->shutdown)
 851                goto dropit;
 852
 853        repsize = skb->len - sizeof(struct udphdr);
 854        if (repsize < 4) {
 855                dprintk("RPC:       impossible RPC reply size %d!\n", repsize);
 856                goto dropit;
 857        }
 858
 859        /* Copy the XID from the skb... */
 860        xp = skb_header_pointer(skb, sizeof(struct udphdr),
 861                                sizeof(_xid), &_xid);
 862        if (xp == NULL)
 863                goto dropit;
 864
 865        /* Look up and lock the request corresponding to the given XID */
 866        spin_lock(&xprt->transport_lock);
 867        rovr = xprt_lookup_rqst(xprt, *xp);
 868        if (!rovr)
 869                goto out_unlock;
 870        task = rovr->rq_task;
 871
 872        if ((copied = rovr->rq_private_buf.buflen) > repsize)
 873                copied = repsize;
 874
 875        /* Suck it into the iovec, verify checksum if not done by hw. */
 876        if (csum_partial_copy_to_xdr(&rovr->rq_private_buf, skb)) {
 877                UDPX_INC_STATS_BH(sk, UDP_MIB_INERRORS);
 878                goto out_unlock;
 879        }
 880
 881        UDPX_INC_STATS_BH(sk, UDP_MIB_INDATAGRAMS);
 882
 883        /* Something worked... */
 884        dst_confirm(skb->dst);
 885
 886        xprt_adjust_cwnd(task, copied);
 887        xprt_update_rtt(task);
 888        xprt_complete_rqst(task, copied);
 889
 890 out_unlock:
 891        spin_unlock(&xprt->transport_lock);
 892 dropit:
 893        skb_free_datagram(sk, skb);
 894 out:
 895        read_unlock(&sk->sk_callback_lock);
 896}
 897
 898static inline void xs_tcp_read_fraghdr(struct rpc_xprt *xprt, struct xdr_skb_reader *desc)
 899{
 900        struct sock_xprt *transport = container_of(xprt, struct sock_xprt, xprt);
 901        size_t len, used;
 902        char *p;
 903
 904        p = ((char *) &transport->tcp_fraghdr) + transport->tcp_offset;
 905        len = sizeof(transport->tcp_fraghdr) - transport->tcp_offset;
 906        used = xdr_skb_read_bits(desc, p, len);
 907        transport->tcp_offset += used;
 908        if (used != len)
 909                return;
 910
 911        transport->tcp_reclen = ntohl(transport->tcp_fraghdr);
 912        if (transport->tcp_reclen & RPC_LAST_STREAM_FRAGMENT)
 913                transport->tcp_flags |= TCP_RCV_LAST_FRAG;
 914        else
 915                transport->tcp_flags &= ~TCP_RCV_LAST_FRAG;
 916        transport->tcp_reclen &= RPC_FRAGMENT_SIZE_MASK;
 917
 918        transport->tcp_flags &= ~TCP_RCV_COPY_FRAGHDR;
 919        transport->tcp_offset = 0;
 920
 921        /* Sanity check of the record length */
 922        if (unlikely(transport->tcp_reclen < 4)) {
 923                dprintk("RPC:       invalid TCP record fragment length\n");
 924                xprt_force_disconnect(xprt);
 925                return;
 926        }
 927        dprintk("RPC:       reading TCP record fragment of length %d\n",
 928                        transport->tcp_reclen);
 929}
 930
 931static void xs_tcp_check_fraghdr(struct sock_xprt *transport)
 932{
 933        if (transport->tcp_offset == transport->tcp_reclen) {
 934                transport->tcp_flags |= TCP_RCV_COPY_FRAGHDR;
 935                transport->tcp_offset = 0;
 936                if (transport->tcp_flags & TCP_RCV_LAST_FRAG) {
 937                        transport->tcp_flags &= ~TCP_RCV_COPY_DATA;
 938                        transport->tcp_flags |= TCP_RCV_COPY_XID;
 939                        transport->tcp_copied = 0;
 940                }
 941        }
 942}
 943
 944static inline void xs_tcp_read_xid(struct sock_xprt *transport, struct xdr_skb_reader *desc)
 945{
 946        size_t len, used;
 947        char *p;
 948
 949        len = sizeof(transport->tcp_xid) - transport->tcp_offset;
 950        dprintk("RPC:       reading XID (%Zu bytes)\n", len);
 951        p = ((char *) &transport->tcp_xid) + transport->tcp_offset;
 952        used = xdr_skb_read_bits(desc, p, len);
 953        transport->tcp_offset += used;
 954        if (used != len)
 955                return;
 956        transport->tcp_flags &= ~TCP_RCV_COPY_XID;
 957        transport->tcp_flags |= TCP_RCV_COPY_DATA;
 958        transport->tcp_copied = 4;
 959        dprintk("RPC:       reading reply for XID %08x\n",
 960                        ntohl(transport->tcp_xid));
 961        xs_tcp_check_fraghdr(transport);
 962}
 963
 964static inline void xs_tcp_read_request(struct rpc_xprt *xprt, struct xdr_skb_reader *desc)
 965{
 966        struct sock_xprt *transport = container_of(xprt, struct sock_xprt, xprt);
 967        struct rpc_rqst *req;
 968        struct xdr_buf *rcvbuf;
 969        size_t len;
 970        ssize_t r;
 971
 972        /* Find and lock the request corresponding to this xid */
 973        spin_lock(&xprt->transport_lock);
 974        req = xprt_lookup_rqst(xprt, transport->tcp_xid);
 975        if (!req) {
 976                transport->tcp_flags &= ~TCP_RCV_COPY_DATA;
 977                dprintk("RPC:       XID %08x request not found!\n",
 978                                ntohl(transport->tcp_xid));
 979                spin_unlock(&xprt->transport_lock);
 980                return;
 981        }
 982
 983        rcvbuf = &req->rq_private_buf;
 984        len = desc->count;
 985        if (len > transport->tcp_reclen - transport->tcp_offset) {
 986                struct xdr_skb_reader my_desc;
 987
 988                len = transport->tcp_reclen - transport->tcp_offset;
 989                memcpy(&my_desc, desc, sizeof(my_desc));
 990                my_desc.count = len;
 991                r = xdr_partial_copy_from_skb(rcvbuf, transport->tcp_copied,
 992                                          &my_desc, xdr_skb_read_bits);
 993                desc->count -= r;
 994                desc->offset += r;
 995        } else
 996                r = xdr_partial_copy_from_skb(rcvbuf, transport->tcp_copied,
 997                                          desc, xdr_skb_read_bits);
 998
 999        if (r > 0) {
1000                transport->tcp_copied += r;
1001                transport->tcp_offset += r;
1002        }
1003        if (r != len) {
1004                /* Error when copying to the receive buffer,
1005                 * usually because we weren't able to allocate
1006                 * additional buffer pages. All we can do now
1007                 * is turn off TCP_RCV_COPY_DATA, so the request
1008                 * will not receive any additional updates,
1009                 * and time out.
1010                 * Any remaining data from this record will
1011                 * be discarded.
1012                 */
1013                transport->tcp_flags &= ~TCP_RCV_COPY_DATA;
1014                dprintk("RPC:       XID %08x truncated request\n",
1015                                ntohl(transport->tcp_xid));
1016                dprintk("RPC:       xprt = %p, tcp_copied = %lu, "
1017                                "tcp_offset = %u, tcp_reclen = %u\n",
1018                                xprt, transport->tcp_copied,
1019                                transport->tcp_offset, transport->tcp_reclen);
1020                goto out;
1021        }
1022
1023        dprintk("RPC:       XID %08x read %Zd bytes\n",
1024                        ntohl(transport->tcp_xid), r);
1025        dprintk("RPC:       xprt = %p, tcp_copied = %lu, tcp_offset = %u, "
1026                        "tcp_reclen = %u\n", xprt, transport->tcp_copied,
1027                        transport->tcp_offset, transport->tcp_reclen);
1028
1029        if (transport->tcp_copied == req->rq_private_buf.buflen)
1030                transport->tcp_flags &= ~TCP_RCV_COPY_DATA;
1031        else if (transport->tcp_offset == transport->tcp_reclen) {
1032                if (transport->tcp_flags & TCP_RCV_LAST_FRAG)
1033                        transport->tcp_flags &= ~TCP_RCV_COPY_DATA;
1034        }
1035
1036out:
1037        if (!(transport->tcp_flags & TCP_RCV_COPY_DATA))
1038                xprt_complete_rqst(req->rq_task, transport->tcp_copied);
1039        spin_unlock(&xprt->transport_lock);
1040        xs_tcp_check_fraghdr(transport);
1041}
1042
1043static inline void xs_tcp_read_discard(struct sock_xprt *transport, struct xdr_skb_reader *desc)
1044{
1045        size_t len;
1046
1047        len = transport->tcp_reclen - transport->tcp_offset;
1048        if (len > desc->count)
1049                len = desc->count;
1050        desc->count -= len;
1051        desc->offset += len;
1052        transport->tcp_offset += len;
1053        dprintk("RPC:       discarded %Zu bytes\n", len);
1054        xs_tcp_check_fraghdr(transport);
1055}
1056
1057static int xs_tcp_data_recv(read_descriptor_t *rd_desc, struct sk_buff *skb, unsigned int offset, size_t len)
1058{
1059        struct rpc_xprt *xprt = rd_desc->arg.data;
1060        struct sock_xprt *transport = container_of(xprt, struct sock_xprt, xprt);
1061        struct xdr_skb_reader desc = {
1062                .skb    = skb,
1063                .offset = offset,
1064                .count  = len,
1065        };
1066
1067        dprintk("RPC:       xs_tcp_data_recv stasted\n"8ef">r = ,count  = rlae=r>8efmarker/sunnecessary1012" class="line" name="L1012">1012+c="a href="net/sunrpc/xprtsock.c#L1004" id="L100Csocwe ever/1">lassexpepc/to ge nam03810121032                if (transport->tcp_flagssref">transport->1043static <"L1054" class="line" name="L1tic <"L1054"="sref">transport = 1039       a href="+code=xdr_skb_reader"RPC:     7 +c="RPC:     7ef="+code= class="sref">transport_e= cl>+c=tcp="cp_>+c=>;
1012e"+co>+c=0;
 936                if (transport->tcp_flagstransport->TCP_RCV_COPYcllas>+c=inlread_discard(struct 1039       a href="+code=xdr_skb_reader"RPC:     7 xs_tcp_darequest not found!\n&quodareq>+c="RPC:     7L1058" clap_xid" class="sref">tcp_lap_x>+c=transport_+c cl>+c c;
1012 980             co0">>+c 1032                if (transport->tcp_flagstransport-> 981+c >,
1043static inline f">transport = 1039       a href="+code=xdr_skb_reader"RPC:     8 +c "RPC:     8ef="+code=" class="sref">rq_private=" c>+c ="ode>+c >;
1012tcp_offe"et">+c inline read_discard(struct 1039       a href="+code=xdr_skb_reader"RPC:     8"L1066" clmy_desc" class="sref">myclmy_>+c "RPC:     8 xs_tcp_da class="line" name="L987da cl>+c >;
1067        ef">dprintk("RPC:     8L1058" clafset" class="sref">tcp_olafse>+c transport"RPC:     9a href="+c_desc" class="sref">my_d+c_de>+c_da href="net/sunrpc/xprtsock.c#L1055" id=9 href="+co="+code=len" class="srefco="+>+c_>;
tcp_cdepie>+c_1012xdr_skb_read_="ass>+c_3a href="net/sunrpc/xprtsoc *"+code=dprintk"ady re">dpri" namk"ady">dpri callback" claass 210121012+c_1012 995    e"nam>+c_1012tcp_cclpie>+c_1012xdr_skb_read_daass>+c_8a href="nete" name="L1043">1043staprintk"ady" class="line" name="L1057">1adyine" of" class="sref">containera>(rd_descsk_buss="s             .size_tr &g1; 0) 101059        struct "RPC:    1a5b163c3081a4eaaae46b4733da368fd961_1/100010xs_tcp_data_xprt" class="sref">rpc_xprt *"RPC:    1a2b163c3081aied" class="sref">tcp_cd1r1
sk_buss="_data_recv" class="ode="RPC:    1a3b163c3081ass="sref">xdr_skb_read_=1     10>}
1067        dprintk("RPC:    1 when copy1ng to the receive buffer,1/span101039                     sk_callbackc#L973" id="L973" clak_callbackc#L97namer"RPC:    1onal buffe1 pages. All we can do now1/span10 = L973" id="L973" cl1038"/a> = L97 read_discard & 1020                go1 not recei1e any additional updates,1/span10spin_shutdowid="L1049" classshutdowief="+code=size_t" class="sref">size_t      1          * and time out.1/span111020                go1remaining 1ata from this record will1/span11>;
      1          * be discarded.1/span11a>
1012                 */1/span11rpc_xprt * = rd_desc->"RPC:    1Y_DATA" cl1ss="sref">TCP_RCV_COPY_DA1A1
rpc_xprt *"RPC:    1Yuse we we1xid" class="sref">tcp_xid1/a>))1
 read_discard1039       ="+code=read_descriptor_t" class="sme="L1043">1043staprintk"57" class="line" name="L1057">1057"RPC:    1%p, tc1_copied = %lu, "1/span11"RPC:    1&f TCP_RCV1_reclen = %u\n"<1span>1
1036<1de=tcp_cop1ed" class="sref">tcp_copi1d111039                     sk_callbackc#L973" id="L973" clak_callbackc#L97namer"RPC:    1e=tcp_recl1n" class="sref">tcp_recle1)12da href="net/sunrpc/xprtsock.c#L1055" id1o o1t12>;
1021  1     12101211221012124a href="net/sunrpc/xprtsoc *"@sk: 21012), 1)1210121012tcp_copi1d121043staef="e_change" class="line" name="Lef="e_changeine" of" class="sref">containera>(rd_descsize_ttcp_recle1)1211281059        struct "RPC:    1ref="+code1buflen" class="sref">bufl1n1
"RPC:    1r TCP_RCV_COPY_DA1A131039                     sk_callbackc#L973" id="L973" clak_callbackc#L97namer"RPC:    1=tcp_recle1" class="sref">tcp_reclen1/a>) 1
 = L973" id="L973" cl1038"/a> = L97 read_discard & TCP_RCV_LAST_FR1G1
1020                go1Y_DATA" cl1ss="sref">TCP_RCV_COPY_DA1A131067        printk...ef">dprintks="sref">xprt, struct sock_xprt, 1class="lin1" name="L1034">1034  1     131025        dprintkcode=count" class="sref">count 1="L1035" c1ass="line" name="L1035">1135              sk_ef="e3" id="L973" clak_ef="eass="sme="L1043">10431nnect href="+code=tran1nnect h f">transport = count 1=e=tcp_cop1+code=out" class="sref">o1t13( read_discardcount 1==tcp_recl1s="sref">TCP_RCV_COPY_DAT1)1
( read_discardsock_xprt, 1c"L1028" c1d" class="sref">tcp_copie1)1
sock_xprt, 1ort_lock" 1lass="sref">transport_loc1)1
              sk_ef="e3" id="L973" clak_ef="eass=/ref">transport->transpor1)14              ass=ESTABLISHEe=tcp_flags" claass=ESTABLISHEename36" class="line" name="L1036">1036<1"L1041" cl1ss="line" name="L1041">101114>,
1039        spin_unlock(&xprt->114210431nnect href="+code=tran1nnect h f">transport = transport->de1c141060        struct sock_xprt *transport = transport->101414xprt, struct sock_xprt, 1> l1n1
11461012tcp_offs1t141031        else if (sock_xprt, 1>"L1028" c1e=count" class="sref">cou1t1
1031        else if= sock_xprt, 1 href="+co1e=count" class="sref">cou1t151031        else if (sock_xprt, 1 de=transp1+code=len" class="sref">l1n151031        else if (sock_xprt, 1 L1041" cl1+code=len" class="sref">l1n15>,
tcp_flags |">transport->tcp_flags<_xprt" class="sref">sock_xprt, 1 "L1042" c1+code=len" class="sref">l1n15>}
le1)151043transport = "RPC:    1ode=transp1rt" class="sref">transpor1)151015151039        spin_unlock(&xprt->1156xprt->l1n15              ass=FIN_WAIT1=tcp_flags" class="FIN_WAIT1name36" class="line" name="L1036">1036<1"L1058" cl1ss="line" name="L1058">101815initiss="sa shutdowi of /a><21012da1a16spin_>1nnectrt"okie3" id="L973" cl>1nnectrt"okielock++">xprt->xpr1)16spin_reestablish_lass"L1020" class="linreestablish_lass"L1ss="sr 0_xprt" class="sref">sock_xprt, 1href="+cod1=desc" class="sref">desc<1a> = 1
transport1039        spin_sf="e3" id="L973" claf="eass=/_xprt" class="sref">sock_xprt, 1h"L1042" c1+code=skb" class="sref">s1b1
spin_smp_mb__before_ clar"bi1060" class="linemp_mb__before_ clar"bi1="sre/_xprt" class="sref">sock_xprt, 1hoffs1t1
spin_>clar"bi1060" class="lin clar"bi1="sref">transport1039        spin_sf="e3" id="L973" claf="eass=/_xprt" class="sref">sock_xprt, 1hde=transp1+code=len" class="sref">l1n16transport1039        spin_sf="e3" id="L973" claf="eass=/_xprt" class="sref">sock_xprt, 1hL1055" cl1 name="L1065">1065   1    }16sock_xprt, 1h"L1056" c1ass="line" name="L1066">1166xprt->              ass=CLOSE_WAITe=tcp_flags" class=CLOSE_WAITname36" class="line" name="L1036">1036<1eL1058" cl1e=rcvbuf" class="sref">rl1e=r>81f<21012+1="a href="net/sunrpc/xprtsock.c#L1016=e8"bi1060" class="linee8"bi1="sref">transport1039        spin_sf="e3" id="L973" claf="eass=/_xprt" class="sref">sock_xprt, 17 href="+c1href="+code=r" class="src1hre>+1=inl1nnect3" id="L973" cl1038"/orce">inl1nnect f">transport = sock_xprt, 17ref="+cod1 class="line" name="L971d1 cl>+1=>,
              ass=SYN_SENTe=tcp_flags" class=SYN_SENTname36" class="line" name="L1036">1036<17 +1=spin_>1nnectrt"okie3" id="L973" cl>1nnectrt"okielock++">xprt->transport_e1 cl>+1=              ass=CLOSINde=tcp_flags" class=CLOSINdname36" class="line" name="L1036">1036<17de=transp1cp_xid" class="sref">tcp=1cp_>+1=>;
1012e1+co>+17<>1nnection, mak><2ure /aat2" class="line" name="L1012">1012TCP_RCV_COPYc1las>+171012+1=1012tcp_l1p_x>+1=spin_reestablish_lass"L1020" class="linreestablish_lass"L1ss="s&l" name="L1048">104XS_ass=INIT_REEST_TOe=tcp_flags" clXS_ass=INIT_REEST_TOaine)s="line" name="L1012">1012transport_+1 cl>+1 c;
spin_reestablish_lass"L1020" class="linreestablish_lass"L1ss="sr ame="L1048">104XS_ass=INIT_REEST_TOe=tcp_flags" clXS_ass=INIT_REEST_TOaine">xprt-> 980             c10">>+1 xprt-> 981+18>,
              ass=f">tcACKe=tcp_flags" class=f">tcACKname36" class="line" name="L1036">1036<18 spin_smp_mb__before_ clar"bi1060" class="linemp_mb__before_ clar"bi1="sre/_xprt" class="sref">sock_xprt, 18ef="+code1" class="sref">rq_private1" c>+1 spin_>clar"bi1060" class="lin clar"bi1="sref">transport1039        spin_sf="e3" id="L973" claf="eass=/_xprt" class="sref">sock_xprt, 18 =1ode>+1 >;
sock_xprt, 18ass="line1et" class="sref">tcp_offe1et">+1 xprt->myc1my_>+1               ass=CLOSEe=tcp_flags" class=CLOSEname36" class="line" name="L1036">1036<18 xs_tcp_d1 class="line" name="L987d1 cl>+18sock_xprt, 18L1058" cl1fset" class="sref">tcp_ol1fse>+18transport1039        spin_sf="e3" id="L973" claf="eass=/_xprt" class="sref">sock_xprt, 19a href="+1_desc" class="sref">my_d+1_de>+19"a href="net/sunrpc/xprtsock.c#L1016>clar"bi1060" class="lin clar"bi1="sref">transport1039        spin_sf="e3" id="L973" claf="eass=/_xprt" class="sref">sock_xprt, 19 href="+c1="+code=len" class="srefc1="+>+19sock_xprt, 1_ref="+cod1pied" class="sref">tcp_cd1pie>+191012xdr_skb_read_=1ass>+19inl1nnect_ef">3" id="L973" cl1038">inl1nnect_ef"> f">transport = sock_xprt, 19ef="+code1href="+code=r" class="sre1hre>+191036<19ass="line1name="L995"> 995    e1nam>+19n;
1039                     sk_callbackc#L973" id="L973" clak_callbackc#L97namer"RPC:    19"L1066" c1pied" class="sref">tcp_cc1pie>+1_xdr_skb_read_d1ass>+1_8a hrf="net/sunrpc/xprtsock.c#L1055" id19L1058" cl1 class="line" name="L998l1 cl>+1_9a href="net/sunrpc/xprtsoc/**2" class="line" name="L1012">1012r &g2; 0) 2010121012tcp_cd2r201012xdr_skb_read_=2     201043staerror_ret" ccontainera>(rd_descsize_t) 2
transport->1059        struct "RPC:    2ause we we2en't able to allocate2/span201039                     sk_callbackc#L973" id="L973" clak_callbackc#L97namer"RPC:    2ff TCP_RCV2COPY_DATA, so the request2/span20              sk_err3" id="L973" clak_erra hre!r ame="L1048">104ECONNRESETe=tcp_flags" clECONNRESETa hre||">transport-              sk_ef="e3" id="L973" clak_ef="eass=e!r ame="L1048">104ass=ESTABLISHEe=tcp_flags" claass=ESTABLISHEename+code=size_t" class="sref">size_t1020                go2nt">      2          * and time out.2/span21 = L973" id="L973" cl1038"/a> = L97 read_discard & 1020                go2n2b163c3082          * be discarded.2/span211025        printk...ef">dprintk"L1020">1020                go2n3b163c3082ment">                 */2/span211025        dprintkcode=count" class="sref">count 2Y_DATA" cl2ss="sref">TCP_RCV_COPY_DA2A21skb,/             .              sk_err3" id="L973" clak_erra hrr"RPC:    2 %08x 2runcated request\n"<2span>21tcp_xid2/a>))21n;
inl1nnect3" id="L973" cl1038"/orce">inl1nnect f">transport = sock_xprt, 2%p, tc2_copied = %lu, "2/span211036<2&f TCP_RCV2_reclen = %u\n"<2span>21>;
1039                     sk_callbackc#L973" id="L973" clak_callbackc#L97namer"RPC:    2de=tcp_cop2ed" class="sref">tcp_copi2d21tcp_recle2)22"RPC:    2o o2t2210121021  2     22101212221012224a href="net/sunrpc/xprtsoc *"@sk: 21012), 2)2210121012tcp_copi2d22dprik_buificant">dprintk"L1020">1020                go2e=tcp_recl2n" class="sref">tcp_recle2)22101212281012bufl2n231012TCP_RCV_COPY_DA2A231043containera>(rd_descsize_ttcp_reclen2/a>) 2
transport->TCP_RCV_LAST_FR2G231039                     sk_callbackc#L973" id="L973" clak_callbackc#L97namer"RPC:    2Y_DATA" cl2ss="sref">TCP_RCV_COPY_DA2A23"RPC:    2Y>), 1034  2     2310121235(transport->o2t23container href="+code=tran2rd_desc("RPC:    2Y=tcp_recl2s="sref">TCP_RCV_COPY_DAT2)2
1059        struct "RPC:    2c"L1028" c2d" class="sref">tcp_copie2)2
sock_xprt, 2ort_lock" 2lass="sref">transport_loc2)24"a href="net/sunrpc/xsunrpc/xprtsock.c#L039ikely" class="line" 039ikely pc/xprtsock.c#L10inera>(              sk_ener href="+code=tran2k_ener h" cl)/a> & transpor2)241020                go2"L1041" cl2ss="line" name="L1041">102124>,
transport1039       inera>("RPC:    2="L1042" c2ass="line" name="L1042">1242}
de2c24 pc/xprtsock.c#L10    struct  = L973" id="L973" cl1038"/a> = L97 read_discard & 1024241020                go2"use we we2+code=len" class="sref">l2n240;
clar"bi1060" class="liniest_and_>clar"bi1="sref">transport1039       inera>( & 12461020                go2"=tcp_recl2et" class="sref">tcp_offs2t248a hrf="net/sunrpc/xprtsock.c#L1055" id2>"L1028" c2e=count" class="sref">cou2t2
 f">transport = sock_xprt, 2 href="+co2e=count" class="sref">cou2t25l2n25>;
l2n25>,
1036<2 "L1042" c2+code=len" class="sref">l2n251039                     sk_callbackc#L973" id="L973" clak_callbackc#L97namer"RPC:    2 le2)25), transpor2)25102525101212561012l2n2510121028259a href="net/sunrpc/xprtsock* @sk: 21012da2a261012xpr2)261012desc<2a> = 26y can mak><">dprik_buificant">dprintk"L1020">1020                go2h"L1042" c2+code=skb" class="sref">s2b263a href="net/sunrpc/xprtsoc *"progress, o/a>rwie" wentk9;llmwaste 10sources thrash51012offs2t264a href="net/sunrpc/xprtsoc *"with=a esnch of small >inlines.ef class="line" name="L1012">1012l2n2610121065   2    }261043stawrite_f="cecontainera>(rd_descsize_t1266transport->1039                     sk_callbackc#L973" id="L973" clak_callbackc#L97namer"RPC:    2eL1058" cl2e=rcvbuf" class="sref">rl2e=r>826sock_xprt, 27a href="+2="+code=len" class="sref+2="+>+2="a href="net/srtsock.c#L1004" id="L100/a>  ="stcore/;tss=m: :ek_efss=m_write_f="ce *12" class="line" name="L1012">1012 read_discard read_discardtransport->container href="+code=tran2rd_desc("RPC:    27 +2=1059        struct "RPC:    27ef="+code2 class="sref">transport_e2 cl>+27"RPC:    27de=transp2cp_xid" class="sref">tcp=2cp_>+2=>;
 pc/xprtsock.c#L10inera>(              sk_ener href="+code=tran2k_ener h" cl)/a> & e2+co>+271020                go27"L1056" c2lass="sref">TCP_RCV_COPYc2las>+27transport1039       inera>("RPC:    27 xs_tcp_d2request not found!\n&quod2req>+278a hrf="net/sunrpc/xprtsock.c#L1055" id27L1058" cl2p_xid" class="sref">tcp_l2p_x>+2= pc/xprtsock.c#L10    struct  = L973" id="L973" cl1038"/a> = L97 read_discard & transport_+2 cl>+2 c;
1020                go28 href="+c20"> 980             c20">>+2 clar"bi1060" class="liniest_and_>clar"bi1="sref">transport1039       inera>( & 1020                go28ref="+cod2ine" name="L981"> 981+28>,
1020                go28 rq_private2" c>+2 spin_1038"write_f="cetransport = sock_xprt, 28 =2ode>+2 >;
tcp_offe2et">+28myc2my_>+2 1036<28 xs_tcp_d2 class="line" name="L987d2 cl>+28>;
1039                     sk_callbackc#L973" id="L973" clak_callbackc#L97namer"RPC:    28L1058" cl2fset" class="sref">tcp_ol2fse>+28my_d+2_de>+29"RPC:    29 href="+c2="+code=len" class="srefc2="+>+291043conta9" id="L1059" class="line" name="L1059">1059        struct tcp_cd2pie>+29transport->xdr_skb_read_=2ass>+291060        struct sock_xprt *transport = xprt, struct sock_xprt, 29ef="+code2href="+code=r" class="sre2hre>+29containera>(rd_descsock_xp id="L1031" class="line" name="L1031">1031        elsr" 31" class="line"r" 3name="L1020">1020                go29  995    e2nam>+291031        elsrcvsizetransport->tcp_cc2pie>+29              sk_user#L97 href="+code=trask_user#L97 a hre|ss="sref">sock_xpSOCK_RCVBUF_LOCKe=tcp_flags" clSOCK_RCVBUF_LOCKname="L1020">1020                go29 xs_tcp_d2ass="sref">xdr_skb_read_d2ass>+29              sk_rcveschref="+code=trask_rcvesc" class="sref">sock_xp id="L1031" class="line" name="L1031">1031        elsrcvsizespin_max_req href="+code=tramax_req lass *x2="L1020">1020                go29L1058" cl2 class="line" name="L998l2 cl>+29r &g3; 0) 30sock_xp id="L1031" class="line" name="L1031">1031        elssndsizetransport->              sk_user#L97 href="+code=trask_user#L97 a hre|ss="sref">sock_xpSOCK_SNDBUF_LOCKe=tcp_flags" clSOCK_SNDBUF_LOCKname="L1020">1020                go3a2b163c3083aied" class="sref">tcp_cd3r30              sk_endeschref="+code=trask_endesc" class="sref">sock_xp id="L1031" class="line" name="L1031">1031        elssndsizespin_max_req href="+code=tramax_req lass *x2="L1020">1020                go3a3b163c3083ass="sref">xdr_skb_read_=3     30spin_s/             .              sk_write_f="ce read_discard1020                go3a4b163c3083aref="+code=r" class="sre3/a>) 30;
 995    e3/span3010121012101: ge clnet name="L103 class="line" name="L1012">1012      3          * and time out.3/span31inlineed size of sendsesc"er, in byteref class="line" name="L1012">1012inlineed size of receive esc"er, in byteref class="line" name="L1012">10121012                 */3/span313a href="net/sunrpc/xprtsoc *"S cls1012TCP_RCV_COPY_DA3A314a href="net/sunrpc/xprtsoc *12" class="line" name="L1012">1012311043conta9" id="L1059" class="line" name="L1059">1059        struct skb,ize_1060" class="lineize_1a hreck.c#L1020" id=sndsizeskb,ize_1060" class="lineize_1a hreck.c#L1020" id=rcvsize1012tcp_xid3/a>))31n;
transport->1060        struct sock_xprt *transport = xprt, struct sock_xprt, 3&f TCP_RCV3_reclen = %u\n"<3span>318a hrf="net/sunrpc/xprtsock.c#L1055" id3de=tcp_cop3ed" class="sref">tcp_copi3d31sock_xp id="L1031" class="line" name="L1031">1031        elssndsizesock_xprt, 3e=tcp_recl3n" class="sref">tcp_recle3)32sock_xpsndsizesock_xprt, 3eemaining 3+code=out" class="sref">o3t321031        elssndsizesock_xprt, 3e2b163c3083" name="L1021">1021  3     321031        elsrcvsizesock_xprt, 3e3b163c3083ass="line" name="L1022">1322sock_xprcvsize101232spin_ id="L1031" class="line" name="L1031">1031        elsrcvsizesock_xprt, 3e%08x 3f="+code=r" class="sref">3)32xprt, struct sock_xprt, 3a#37;p, tc3ed" class="sref">tcp_copi3d32tcp_recle3)328a hrf="net/sunrpc/xprtsock.c#L1055" id3="L1028" c3ass="line" name="L1028">13281012bufl3n331012TCP_RCV_COPY_DA3A331012tcp_reclen3/a>) 331012TCP_RCV_LAST_FR3G333a href="net/sunrpc/xprtsoc *"Adjust /a><>1ngineion1012TCP_RCV_COPY_DA3A334a href="net/sunrpc/xprtsoc *12" class="line" name="L1012">1012), 1034  3     331043conta9" i="+c1059" class="line" ="+cL1060">1060       "+c1059" class="li="+cL106rs="line" name="L1012">10121335transport->o3t33xprt "+c1059" class="li="+cL106, -"sref">xprtETIMEDOUTe=tcp_flags" clETIMEDOUT=sock_xprt" class="sref">sock_xprt, 3Y=tcp_recl3s="sref">TCP_RCV_COPY_DAT3)3
tcp_copie3)3
sock_xprt, 3ort_lock" 3lass="sref">transport_loc3)34"a href="netunk_bued sh" c me="L1043">10431012transpor3)34transport->103134>,
1043range1059" class="linangelass r         elsc038"max_resvt" c        elsc038"min_resvt" c1020                go3="L1042" c3ass="line" name="L1042">13421043rand1043ne8"namdom1043range1059" class="linangelass="L1020">1020                go3=_DATA" cl3ode=desc" class="sref">de3c341043rand1020                go3=>), 103434>;
l3n3413461012tcp_offs3t341012cou3t349a href="net/sunrpc/xprtsock* @>101: ge clnet name="L103 class="line" name="L1012">1012cou3t351012l3n351012l3n351012l3n351043conta9" id="L1059" class="line" name="L1059">1059        struct 1043t" c1012le3)35transport->transpor3)35>;
1059    addr060" class="linaddr="L10r         elscs_addr060" class="lincs_addrine" "sref">xprt, struct sock_xprt, 3"L1055" cl3ss="line" name="L1055">10353513561025        printketomprintuef">dprintkcs/xprtsock.c#L10    struct skbt" csock_xprt, 3"=tcp_recl3+code=len" class="sref">l3n358a hrf="net/sunrpc/xprtsock.c#L1055" id3"L1058" cl3ss="line" name="L1058">103835sock_xpaddr060" class="linaddr="L1>1031        elssa_family" class="line" sa_familylassr ef">transport->da3a36              AF_INETe=tcp_flags" clAF_INETa hr36" class="line" name="L1036">1036<3xpr3)36containeraddr_in060" class="line" naddr_in="L105)="sref">sock_xpaddr060" class="linaddr="L1)>1031        elssin_t" cxprtt" csock_xprt, 3href="+cod3=desc" class="sref">desc<3a> = 36xprt->s3b363a href="net/cae" >              AF_INET6e=tcp_flags" clAF_INET6a hr36" class="line" name="L1036">1036<3<offs3t36containeraddr_in6e=tcp_flags" clineraddr_in6="L105)="sref">sock_xpaddr060" class="linaddr="L1)>1031        elssin6_t" cxprtt" csock_xprt, 3h>), l3n36>;
xprt->1065   3    }36n;
1036<3<"L1056" c3ass="line" name="L1066">1366xprt->rl3e=r>836+37"RPC:    37 href="+c3href="+code=r" class="src3hre>+371043conta0" id="L1060" class="line" name="L1060">1060        struct rd_desc(1012transport->1043t" csock_xp id="L1031" class="line" name="L1031">1031        elst" cxprt->transport_e3 cl>+37"RPC:    37de=transp3cp_xid" class="sref">tcp=3cp_>+3=>;
sock_xpt" c039">s="sref">sock_xp id="L1031" class="line" name="L1031">1031        els    struct conta9esvt" c1012e3+co>+371043t" csock_xpxprt->TCP_RCV_COPYc3las>+371043t" cxprt->tcp_l3p_x>+37sock_xprt, 38a href="+3 class="sref">transport_+3 cl>+38"a href="netunk_bued sh" c me="L1043">1043conta0" id="L1060" class="line" name="L1060">1060        struct rd_desc(1043t" c1012 980             c30">>+38transport-> 981+38>,
sock_xp id="L1031" class="line" name="L1031">1031        elst" c & 1020                go38 spin_ id="L1031" class="line" name="L1031">1031        elst" csock_xprt, 38ef="+code3" class="sref">rq_private3" c>+3 sock_xp id="L1031" class="line" name="L1031">1031        els    struct conta9esvt" c1012=3ode>+38>;
sock_xprt, 38L1055" cl3et" class="sref">tcp_offe3et">+38transport-t" c        elsc038"max_resvt" c1012myc3my_>+381043c038"max_resvt" csock_xprt, 38=tcp_recl3 class="line" name="L987d3 cl>+38>;
xprtt" cxprt->tcp_ol3fse>+38my_d+3_de>+39"RPC:    39 href="+c3="+code=len" class="srefc3="+>+391043conta0" id="L1060" class="line" name="L1060">1060        struct rd_desc(1012tcp_cd3pie>+39transport->xdr_skb_read_=3ass>+39transport->contasin_family" class="line" sin_familyine"ass="sref">sock_xpAF_INETe=tcp_flags" clAF_INETa hrcode=count" class="sref">count 39 xprt-> 995    e3nam>+39containeraddr_in060" class="line" naddr_in="L105        elssa" class="line" saine"">xprt->tcp_cc3pie>+391043err3" id="L973" clerra hrss="sref">skbnloop3" id="L973" clnloopine"ar 0_xprt" class="sref">sock_xprt, 39 xs_tcp_d3ass="sref">xdr_skb_read_d3ass>+391043t" csock_xp1060        struct rd_desc(sock_xprt, 39L1058" cl3 class="line" name="L998l3 cl>+391043s=" xprt->r &g4; 0) 40"RPC:    4a5b163c3084a4eaaae46b4733da368fd961_4/100040containeraddr_in060" class="line" naddr_in="L105)039">1039        id="L1031" class="line" name="L1031">1031        elsaddr060" class="linaddr="L1">xprt->tcp_cd4r40contasin_addr060" class="linein_addrine"ass="sref">sock_xpsa" class="line" saine">1031        elssin_addr060" class="linein_addrine"">xprt->xdr_skb_read_=4     40transport->contasin_t" cxprtt" csock_xprt, 4 when copy4ng to the receive buffer,4/span40>;
1043err3" id="L973" clerra hr0r         elskernel_bind3" id="L973" clkernel_bindine" "sref">xprt(containeraddr060" class="line" naddr="L105)s039">1039       myaddr060" class="linmyaddrine"code=count" class="sref">count 4 6hen copy4name="L995"> 995    e4/span40xprtmyaddr060" class="linmyaddrine")r_xprt" class="sref">sock_xprt, 4 7hen copy4nied" class="sref">tcp_cc4/span40sock_xpt" c1012xprt->transport->      4          * and time out.4/span41c;
spin_ id="L1031" class="line" name="L1031">1031        elst" cxprtt" cxprt->xprt->                 */4/span41spin_s=" xprtt" cxprt->TCP_RCV_COPY_DA4A41sock_xp1060        struct rd_desc(skbt" csock_xprt, 4 %08x 4runcated request\n"<4span>41>;
        elss=" 1012tcp_xid4/a>))41skbnloop3" id="L973" clnloopine"++_xprt" class="sref">sock_xprt, 4 7hen copy4_copied = %lu, "4/span41xprtEADDRINUSE3" id="L973" clEADDRINUSEine"a&39">039">s="sref">sock_xpnloop3" id="L973" clnloopine"a!= 2r_xprt" class="sref">sock_xprt, 4 f TCP_RCV4_reclen = %u\n"<4span>41>;
1025        dprintket/sunrpc/xprtsNIPQUAD_FMTe=tcp_flags" clNIPQUAD_FMTine"name="L1025">1025      :printu:"prints (printd)ef">dprintkcxprt" class="sref">sock_xprt, 4 9 TCP_RCV4ed" class="sref">tcp_copi4d41skbNIPQUADe=tcp_flags" clNIPQUADine" >1060      myaddr060" class="linmyaddrine".ss="sref">contasin_addr060" class="linein_addrine")cxprt" class="sref">sock_xprt, 4e=tcp_recl4n" class="sref">tcp_recle4)42c;
spin_t" cskberr3" id="L973" clerra hr0? name="L1025">1025      failed">dprintk : name="L1025">1025      ok">dprintkcs/xprtsock.c#L10err3" id="L973" clerra hrr_xprt" class="sref">sock_xprt, 4eemaining 4+code=out" class="sref">o4t421043err3" id="L973" clerra hr_xprt" class="sref">sock_xprt, 4e2b163c3084" name="L1021">1021  4     421422}
421043conta0" id="L1060" class="line" name="L1060">1060        struct rd_desc(10124)42transport->containeraddr_in6e=tcp_flags" clineraddr_in6="L10xprtsock.c#L106myaddr060" class="linmyaddrine"ar ef">transport->tcp_copi4d42contasin6_family" class="line" sin6_familyine"ass="sref">sock_xpAF_INET6e=tcp_flags" clAF_INET6a hrcxprt" class="sref">sock_xprt, 4ef TCP_RCV4n" class="sref">tcp_recle4)42>;
sock_xprt, 4e9 TCP_RCV4ass="line" name="L1028">1428containeraddr_in6e=tcp_flags" clineraddr_in6="L105        elssa" class="line" saine"">xprt->bufl4n431043err3" id="L973" clerra hrss="sref">skbnloop3" id="L973" clnloopine"ar 0_xprt" class="sref">sock_xprt, 4r TCP_RCV_COPY_DA4A431043t" csock_xp1060        struct rd_desc(sock_xprt, 4r2b163c3084" class="sref">tcp_reclen4/a>) 43>,
1043s=" xprt->TCP_RCV_LAST_FR4G43>}
TCP_RCV_COPY_DA4A43containeraddr_in6e=tcp_flags" clineraddr_in6="L105)039">1039        id="L1031" class="line" name="L1031">1031        elsaddr060" class="linaddr="L1">xprt->1034  4     435a href="net/        elsmyaddr060" class="linmyaddrine".ss="sref">contasin6_addr060" class="linein6_addrine"ass="sref">sock_xpsa" class="line" saine">1031        elssin6_addr060" class="linein6_addrine"">xprt->1435transport->o4t43contasin6_t" cxprtt" csock_xprt, 4Y=tcp_recl4s="sref">TCP_RCV_COPY_DAT4)43        elskernel_bind3" id="L973" clkernel_bindine" "sref">xprt(containeraddr060" class="line" naddr="L105)s039">1039       myaddr060" class="linmyaddrine"code=count" clasef">sock_xprt, 4Y9 TCP_RCV4d" class="sref">tcp_copie4)43xprtmyaddr060" class="linmyaddrine")r_xprt" class="sref">sock_xprt, 4ort_lock" 4lass="sref">transport_loc4)44c;
sock_xpt" c1012transpor4)44xprt->104144transport->14421031        elst" cxprtt" cxprt->de4c44xprt->), 104444>;
l4n441043s=" xprtt" cxprt->1446sock_xp1060        struct rd_desc(skbt" cso="+code=trans4o=tcp_recl4et" class="sref">tcp_offs4t44        elss=" 1012cou4t44sock_xprt, 4 href="+co4e=count" class="sref">cou4t45c;
xprtEADDRINUSE3" id="L973" clEADDRINUSEine"a&39">039">s="sref">sock_xpnloop3" id="L973" clnloopine"a!= 2r_xprt" class="sref">sock_xprt, 4 de=transp4+code=len" class="sref">l4n451025        dprintket/sunrpc/xprtsNIP6_FMTe=tcp_flags" clNIP6_FMTine"name="L1025">1025      :printu:"prints (printd)ef">dprintkcxprt" class="sref">sock_xprt, 4 L1041" cl4+code=len" class="sref">l4n451060      myaddr060" class="linmyaddrine".ss="sref">contasin6_addr060" class="linein6_addrine")ss="sref">skbt" cskberr3" id="L973" clerra hr0? name="L1025">1025      failed">dprintk : name="L1025">1025      ok">dprintkcs/xprtsock.c#L10err3" id="L973" clerra hrr_xprt" class="sref">sock_xprt, 4 "L1042" c4+code=len" class="sref">l4n451043err3" id="L973" clerra hr_xprt" class="sref">sock_xprt, 4 le4)45), transpor4)451045451043CONFIG_DEBUG_LOCK_ALLOC3" id="L973" clCONFIG_DEBUG_LOCK_ALLOCa href="net/sunrpc/xprtsock.c#L1035" i4"e=tcp_cop4ass="line" name="L1056">1456conta#L97_"line_key" class="line" #L97_"line_key="L10xprtsock.c#L106xe_key" class="line" xe_key="L1[2]_xprt" class="sref">sock_xprt, 4 =tcp_recl4+code=len" class="sref">l4n458a href="netof" class="sref">conta#L97_"line_key" class="line" #L97_"line_key="L10xprtsock.c#L106xe_s#L97_key" class="line" xe_s#L97_key="L1[2]_xprt" class="sref">sock_xprt, 4 "L1028" c4ss="line" name="L1058">104845sock_xprt, 4da4a46"a href="netxprtsock.c#L106inlass="class="line" inlass="L10e" name="L1043">1043conta0" i href="+code=tran2rd_desc(1012xpr4)46transport->desc<4a> = 46containera>(rd_descsock_xpinera>(sock_xprt, 4h"L1042" c4+code=skb" class="sref">s4b46>}
offs4t46xprtxprtsock_xprt, 4h>), l4n465a href="net/        else" na#L97_init_"line_and_"sre060" class="line" na#L97_init_"line_and_"sreine" "sref">xprt1025      s#L97-AF_INET-  <">dprintkcxprt" class="sref">sock_xprt, 4hL1055" cl4 name="L1065">1065   4    }461039       xe_s#L97_key" class="line" xe_s#L97_key="L1[0], name="L1025">1025      sna#L97-AF_INET-  <">dprintkcx039">1039       xe_key" class="line" xe_key="L1[0]r_xprt" class="sref">sock_xprt, 4he=tcp_cop4ass="line" name="L1066">14668468a hrf="net/sunrpc/xprtsock.c#L1055" id4eL1058" cl4e=rcvbuf" class="sref">rl4e=r>8461043conta0" i href="+code=tran2rd_desc(1012+47transport->containera>(rd_descsock_xpinera>(sock_xprt, 47ref="+cod4 class="line" name="L971d4 cl>+47sock_xprt, 47"L1042" c4orresponding to this xid=4orr>+473,
xprtxprtsock_xprt, 47ef="+code4 class="sref">transport_e4 cl>+47xprt1025      s#L97-AF_INET6-  <">dprintkcxprt" class="sref">sock_xprt, 47de=transp4cp_xid" class="sref">tcp=4cp_>+47>;
1039       xe_s#L97_key" class="line" xe_s#L97_key="L1[1], name="L1025">1025      sna#L97-AF_INET6-  <">dprintkcx039">1039       xe_key" class="line" xe_key="L1[1]r_xprt" class="sref">sock_xprt, 47L1055" cl4+code=req" class="sref">e4+co>+47TCP_RCV_COPYc4las>+47+478a href="netxprtsock.c#L106inlass="class="line" inlass="L10e" name="L1043">1043conta0" i href="+code=tran2rd_desc(1012tcp_l4p_x>+47transport->transport_+4 cl>+48"a href="net/sunrpc/xprtsock.c#L1055" id48 href="+c40"> 980             c40">>+48 981+48>,
1043conta0" i href="+code=tran2rd_desc(10#L1055" id48"L1042" c4 class="line" name="L982=4 cl>+48transport->rq_private4" c>+48=4ode>+48>;
tcp_offe4et">+48myc4my_>+481043contar" id="L1059" class="line" name="L1059">1059        struct conta0" i href="+code=tran2rd_desc(10#L1055" id48=tcp_recl4 class="line" name="L987d4 cl>+48>;
transport->tcp_ol4fse>+489a href="net/of" class="sref">containerd="L1060" class="line" name="L1060">1060        struct sock_xprt *transport = xprt, struct sock_xprt, 49a href="+4_desc" class="sref">my_d+4_de>+49"RPC:    49 href="+c4="+code=len" class="srefc4="+>+491a href="net/sunrp="sref">sock_xp id="L1031" class="line" name="L1031">1031        els cl31" class="line" cl3=sock ef">transport->tcp_cd4pie>+49containera>(rd_descsock_xpinera>(sock_xprt, 49 xdr_skb_read_=4ass>+49>}
              writea#L97_bh             .1039       sk             .              sk_callba na#L97             .sock_xprt, 49  995    e4nam>+491043xe_save_old_callba n href="+code=traxe_save_old_callba n ="sref">transportrd_descsock_xprt, 49"L1056" c4pied" class="sref">tcp_cc4pie>+49sock_xprt, 49=tcp_recl4ass="sref">xdr_skb_read_d4ass>+49              sk_user_data" class="line" sk_user_data" class="sref">sock_xp, struct sock_xprt, 49L1058" cl4 class="line" name="L998l4 cl>+49              sk_dataaready" class="line" sk_dataaready" class="sref">sock_xp,/audp_dataaready" class="line" ,/audp_dataaready=soc_xprt" class="sref">sock_xprt, 5href="+cod5=r" class="sref">r &g5; 0) 50c;
              sk_writeaspace060" class="linek_writeaspace" class="sref">sock_xp,/audp_writeaspace060" class="lin,/audp_writeaspace=soc_xprt" class="sref">sock_xprt, 5h1ef="+cod5="+code=len" class="srefc5/100050              sk_no_che97             .sock_xpUDP_CSUM_NORCV             .sock_xprt, 5h2ef="+cod5=ied" class="sref">tcp_cd5r50              sk_allocaeion             .sock_xpGFP_ATOMIC3" id="L973" clGFP_ATOMIC=soc_xprt" class="sref">sock_xprt, 5h3ef="+cod5=ss="sref">xdr_skb_read_=5     50>}
transport = sock_xprt, 5 when copy5ng to the receive buffer,5/span50 995    e5/span501012tcp_cc5/span50sock_xp id="L1031" class="line" name="L1031">1031        elsinera>(sock_xpinera>(sock_xprt, 5 8hen copy5nss="sref">xdr_skb_read_d5/span50sock_xp id="L1031" class="line" name="L1031">1031        els cl31" class="line" cl3=socsss="sref">sock_xpik             .sock_xprt, 509 TCP_RCV5Cclass="line" name="L998l5/span50sock_xprt, 5nt">      5          * and time out.5/span51c;
1039       sk             .              sk_callba na#L97             .sock_xprt, 5remaining 5ata from this record will5/span51sock_xp,/audp_doase8"buffer_size" class="line" ,/audp_doase8"buffer_size="sref">transport = sock_xprt, 5r3b163c3085ment">                 */5/span51TCP_RCV_COPY_DA5A51"RPC:    5 %08x 5runcated request\n"<5span>51>;
1012tcp_xid5/a>))5110121012511012tcp_copi5d519a href="net/sunrpc/xprtsock* Invoked by a work queue tasklet.ef class="line" name="L1012">1012tcp_recle5)521012o5t521043contawork_of" cl             .rd_descwork             .10#L1055" id5e2b163c3085" name="L1021">1021  5     52transport->15221060        struct transport-> *transportxprtconnect_workerref="+code=transponect_workerL106.ss="sref">contawork             .sock_xprt, 5e%08x 5f="+code=r" class="sref">5)52>;
1059        struct 1039        id="L1031" class="line" name="L1031">1031        els, struct sock_xprt, 5ause we we5p_offset = %u, "5/span52container href="+code=tran2rd_desc(sock_xp id="L1031" class="line" name="L1031">1031        elsinera>(sock_xprt, 5a#37;p, tc5ed" class="sref">tcp_copi5d521043err3" id="L973" clerra hrss="sref">skbef="u href="+code=traef="u  claass-"sref">xprtEIOhref="+code=traEIO cla_xprt" class="sref">sock_xprt, 5a8hen copy5n" class="sref">tcp_recle5)528a hrf="net/sunrpc/xprtsock.c#L1055" id5e9 TCP_RCV5ass="line" name="L1028">15281031        elsihutdown             .sock_xptsocabound3" id="L973" cltsocabound="sref">transport = 10#L1055" id5ref="+code5buflen" class="sref">bufl5n53c;
transportsock_xprt, 5r TCP_RCV_COPY_DA5A53tcp_reclen5/a>) 53>,
1012TCP_RCV_LAST_FR5G533,
transport = sock_xprt, 5Y_DATA" cl5ss="sref">TCP_RCV_COPY_DA5A53"RPC:    5Y>), 1034  5     53>;
transport1039       snera>(transport->15351043.c#L1025" id="L1025" class="line" name="L1025">1025        dprintkcs-"sref">xprterr3" id="L973" clerra hrr_xprt" class="sref">sock_xprt, 5=e=tcp_cop5+code=out" class="sref">o5t53transportsock_xprt, 5r8hen copy5s="sref">TCP_RCV_COPY_DAT5)53tcp_copie5)53       snera>(sock_xprt, 5ort_lock" 5lass="sref">transport_loc5)54"RPC:    5ode=transp5rt" class="sref">transpor5)541a href="net/sunr        els,/abind4transportrd_desc(transport->105154       snera>(sock_xprt, 5o_FRAG" cl5ass="line" name="L1042">1542transportsock_xprt, 5=_DATA" cl5ode=desc" class="sref">de5c54), 105454l5n541043.c#L1025" id="L1025" class="line" name="L1025">1025        dprintkcxprt" class="sref">sock_xprt, 5oe=tcp_cop5ass="line" name="L1046">1546        els, = 1031        elsaddress_1025        els  <_DISPLAY_ALLhref="+code=tra  <_DISPLAY_ALL=soc]r_xprt" class="sref">sock_xprt, 5o=tcp_recl5et" class="sref">tcp_offs5t548a hrf="net/sunrpc/xprtsock.c#L1055" id5""L1028" c5e=count" class="sref">cou5t54        els, = sock_xprt, 5 href="+co5e=count" class="sref">cou5t55c;
skbef="u href="+code=traef="u  claass0_xprt" class="sref">sock_xprt, 5 de=transp5+code=len" class="sref">l5n55transportsock_xprt, 5 L1041" cl5+code=len" class="sref">l5n55sock_xp,socawake_pending_task href="+code=traxsocawake_pending_task ine"         els, = sock_xprt, 5 _FRAG" cl5+code=len" class="sref">l5n553,
transport = sock_xprt, 5 le5)55), transpor5)55105555101215561012l5n5510121058559a href="net/sunrpc/xprtsock*ef class="line" name="L1012">1012da5a561012xpr5)561012desc<5a> = 56>,
1043contawork_of" cl             .rd_descwork             .10#L1055" id5h"L1042" c5+code=skb" class="sref">s5b56transport->offs5t561060        struct transport->l5n56>;
transportxprtconnect_workerref="+code=transponect_workerL106.ss="sref">contawork             .sock_xprt, 5hL1055" cl5 name="L1065">1065   5    }56contar" id="L1059" class="line" name="L1059">1059        struct 1039        id="L1031" class="line" name="L1031">1031        els, struct sock_xprt, 5he=tcp_cop5ass="line" name="L1066">1566rd_desc(sock_xp id="L1031" class="line" name="L1031">1031        elsinera>(sock_xprt, 5h=tcp_recl5ta_recv stasted\n"8561043err3" id="L973" clerra hrss="sref">skbef="u href="+code=traef="u  claass-"sref">xprtEIOhref="+code=traEIO cla_xprt" class="sref">sock_xprt, 5eL1058" cl5e=rcvbuf" class="sref">rl5e=r>856sock_xprt, 57a href="+5="+code=len" class="sref+5="+>+571031        elsihutdown             .sock_xptsocabound3" id="L973" cltsocabound="sref">transport = 10#L1055" id57 href="+c5href="+code=r" class="src5hre>+57transportsock_xprt, 57ref="+cod5 class="line" name="L971d5 cl>+57sock_xprt, 57"L1042" c5orresponding to this xid=5orr>+573,
1012transport_e5 cl>+57transport = sock_xprt, 57de=transp5cp_xid" class="sref">tcp=5cp_>+57e5+co>+576a href="net/sunrrpc/xprtsock.c#Lerr3" id="L973" clerra hr0r/xprtsock.c#L1060" idcre="e_kern060" class="line" nacre="e_kern="sref">transport1039       snera>(transport->TCP_RCV_COPYc5las>+57sock_xp.c#L1025" id="L1025" class="line" name="L1025">1025        dprintkcs-"sref">xprterr3" id="L973" clerra hrr_xprt" class="sref">sock_xprt, 57=tcp_recl5request not found!\n&quod5req>+57transportsock_xprt, 57L1058" cl5p_xid" class="sref">tcp_l5p_x>+57transport_+5 cl>+58c;
skb(sock_xprt, 58 href="+c50"> 980             c50">>+58 981+582a href="net/sunrpc/xprtsock.c#L,/abind6e=tcp_flags" cltransportrd_desc(transport->spin_0" idrelease" class="line" 0" idreleaseine" 1039       snera>(sock_xprt, 58ef="+code5" class="sref">rq_private5" c>+58transportsock_xprt, 58 =5ode>+585a href="net/ef="net/sunrpc/xprtsock.c#L1055" id58L1055" cl5et" class="sref">tcp_offe5et">+58myc5my_>+587;
skb.c#L1025" id="L1025" class="line" name="L1025">1025        dprintkcxprt" class="sref">sock_xprt, 58=tcp_recl5 class="line" name="L987d5 cl>+58skb< = 1031        elsaddress_1025        els  <_DISPLAY_ALLhref="+code=tra  <_DISPLAY_ALL=soc]r_xprt" class="sref">sock_xprt, 58L1058" cl5fset" class="sref">tcp_ol5fse>+58sock_xprt, 59a href="+5_desc" class="sref">my_d+5_de>+59c;
skb        els, = sock_xprt, 59 href="+c5="+code=len" class="srefc5="+>+59sock_xprt, 5_ref="+cod5pied" class="sref">tcp_cd5pie>+59transportsock_xprt, 59 xdr_skb_read_=5ass>+593,
        els, = sock_xprt, 59ef="+code5href="+code=r" class="sre5hre>+59transport = sock_xprt, 59  995    e5nam>+59tcp_cc5pie>+591012xdr_skb_read_d5ass>+5910121012r &g6; 0) 6010121043contar" id="L1059" class="line" name="L1059">1059        struct 10#L1055" id6h2ef="+cod6=ied" class="sref">tcp_cd6r60transport->xdr_skb_read_=6     603,
1043resulL1059" class="linesulL cla_xprt" class="sref">sock_xprt, 6a4b163c3086aref="+code=r" class="sre6/a>) 601060        struct sock_xprt *transport = xprt, struct sock_xprt, 6 when copy6ng to the receive buffer,6/span60>;
sock_xprt, 6a6hen copy6name="L995"> 995    e6/span60tcp_cc6/span607;
skb.c#L1025" id="L1025" class="line" name="L1025">1025        dprintkcs"sref">xprt, struct sock_xprt, 6 8hen copy6nss="sref">xdr_skb_read_d6/span608a hrf="net/sunrpc/xprtsock.c#L1055" id609 TCP_RCV6Cclass="line" name="L998l6/span601012      6          * and time out.6/span61101210121012                 */6/span613,
1039       any" class="line" any cla, 0,nsizeof "sref">xprtany" class="line" any cla)r_xprt" class="sref">sock_xprt, 6r4b163c3086ss="sref">TCP_RCV_COPY_DA6A61contasa_family" class="line" sa_family" class="sref">sock_xpAF_UNSPEC" class="line" AF_UNSPEC cla_xprt" class="sref">sock_xprt, 6 %08x 6runcated request\n"<6span>615a href="net/        elsresulL1059" class="linesulL claass="sref">sock_xpkernel_connect1059" class="likernel_connectine" f">transport1031        elsinera>(1039       any" class="line" any cla, sizeof "sref">xprtany" class="line" any cla), 0r_xprt" class="sref">sock_xprt, 6r6hen copy6xid" class="sref">tcp_xid6/a>))616a href="net/sunr        elsresulL1059" class="linesulL clars="line" name="L1012">10#L1055" id6 7hen copy6_copied = %lu, "6/span61sock_xp.c#L1025" id="L1025" class="line" name="L1025">1025        dprintkcxprt" class="sref">sock_xprt, 6 8hen copy6_reclen = %u\n"<6span>61sock_xprt, 6r9 TCP_RCV6ed" class="sref">tcp_copi6d619a href="net/sunrpc/xprtsock.c#L1055" id6e=tcp_recl6n" class="sref">tcp_recle6)62"RPC:    6eemaining 6+code=out" class="sref">o6t621043contar" id="L1059" class="line" name="L1059">1059        struct conta0" i href="+code=tran2rd_desc(10#L1055" id6e2b163c3086" name="L1021">1021  6     62transport->16221060        struct sock_xprt *transport = xprt, struct sock_xprt, 6e4b163c3086ad %Zd bytes\n"<6span>62"RPC:    6e%08x 6f="+code=r" class="sref">6)62>;
sock_xp id="L1031" class="line" name="L1031">1031        els cl31" class="line" cl3=sock ef">transport->r6_desc62code=traxe_save_old_callba n ="sref">tr6sref">tcp_6opi5d52sock_xprt, 49 xdr_skb_read_=4ass>+49>}
   6ref">skbef="u href="+code=traef=6u  cl62        elsaddress_10251031        elsihu6down 6           .tcp_copi6dsock_xprt, 49  995    e4nam>+4910#L1055" id5ref="+code5buflen" cla6s="sref">b6fl5n53c;
sock_xpUD1056" c4pied" class="sref">tcp_cc4pie>+49sock_xprt, 49=tcp_recl4ass="sref">xdr_skb_read_d4as6>53transportsock_xp, struct , 49L1058" cl4 cl5" ick_xprtxdr_skb_read_d4as6>=transportT63xdr_skb_read_d4as6>L1060" id=close" class="line" ,/acl6se="s63sock_xp,/audp_dataaready" class="line" ,/audp_dataaready=soc_xprt" class="sref">5" i_xprt, 5href="+cod5=r" cl5" i_xprt, 9=tcp_recl4ass="sref">xdr_skb_read_d4as6>C:    6ejSOCK_DGRAMe=tcp_flags"6clSOC6_DGRAMa hrc/xprtsock.c#L106IPPROTO_UDe" sk_dataaready" class="sref">sock_xp,/audp_derrorprte>+495" ierrorprte>+495" ierrorprte>+49=tcp_recl4ass="sref">xdr_skb_read_d4as6>ef="+code65" class="line" name="L1065">1065        sock_xp,/audp_dP_CSUM_NORCV             .sock_xprt, 5h2ef="+cod5=ied" class="sref">tcp_cd5r501025        o5t63t63           .tcp_copie5)63sock_xp,/audp_dtcp_ claa>, 59 tcp_cd5r50xprt" class="ssunrrLINGER>, 59     e4nam>+49        els6/abin64trans5" ir cl)r_xprt" clas5" ir f="+code=r" class="s" cl)r_xprt" class="sre)="sref">sock_xp,/aud/a>ger2cl)r_xprt" clas/a>ger2RCV=sochref="+code=container.pc/xprtsock.c#6cod5"L10416 cl5ss="line" name="L10416>10516/a>54trans5" ir cl)r_xprt" clas5" ir f="+code=r" class="s" cl)r_xprt" class="sre)="sref">sock_xp,/audnonagl 5href="+cod5=r"nonagl      |oc_xprt" class="sTCP_NAGLE_OFF5href="+cod5=r"TCP_NAGLE_OFFd" class="sref">tcp_cd5r501542t64sock_xprt1622C:    6e&#f">sock_xprt, 5=_DATA6 cl5o64 buffer,6/span60>;
10436c#L1065" id="L1025" class="l href="+code=containe)_xprt" class="sref">sock_xprt, 5 when copy5ng to the receive b6sock.c#L, 6truct 1031        elsinera>(31        els, struct 1566        els6 <_DI64           .           1031        elsinera>(sock_xpinera>(sock_xprt, 5 8hen copy5nss="sref">xdr_skb_rea6/     6  els,/audp_finish_connec6inge=65       elsresulL1059" class="linesulL clsnera>(sock_xprt, 509 TCP_RCV5Cclass="line" name="L998l5/span50sock_xprt, 5nt">      5          * and time out.5/span51c;
skb"sref">soc6_xp,socawake_pending_task6href=65 " cl32              sk_allocaeion 6" cl5+code6len" class="sref">l5n653,
<65 href="+code=thref="+code=containe)_xpTelle>+59soclayerlasss cla_er so the r..ck_xprt, 5 when copy5ng to the receive b6nge=tcp_fl6gs" cldprintkcxprt" crt      5       t      5      unrpc/xpcoun/ny" ++span51c;
sock_xprt,65 de5crintp /o address:"printsef">dprintkcxprt" crt      5       t      5      unrpc/xps cla+code=x cla_xprt" clasjiffiea>, 59 , 5 8hen copy5nss="sref">xdr_skb_rea6/n54t6anspo65" id="L1025" ars="lifamily" class="sref">sock_xpAF_UNSPEC" class="line" AF_UNSPEC cla_xprt" class=;<6span>615a href="net/  prt" class="sref">c#L1060" id="L1060"f">c#L1" name="L1022">1622dprintkcxprt" classleRCV             lassleR  prt" class="sreO_NONBLunr>, 59 10626spa5"ecopy6_reclen = %u\n"<6span>"address_16 2le5)5510125" i;RPC:    5 %08esulL cla TCP9soc="ne armote endpoinsunrpc/xprtsoc *",/audp_connect_worker6 -"6sunrpc/xpr6soc * Invoked by a work q6eue t66ata from this record will6/se="L1056">1556l5n5510121058559a href="ne6<offs6t66c3085ment">                ck_xprt, 5 when copy5ng to the receive b6lar.sunrpc6xprtsock.c#L1060" id="L1060" cl6ss="lief class="line" name="L1012">1012tcp_recle6) *12" class="line" name="L1012">1012desc<5a> = 56>,
1046lass="line6 name="L1059">1059   6    s6ruct 62"Rref="+code6tran2r6_desc6nera>(10#L1055" id5h"L1042" c5+code=skb" class="sref">s5b56transport->           " id="L1060" class="line" name="L1060">1060        struct transport->l5n56>;
tran>transport->skbef="u href="+code=traef=6u  cl6ass-"sref">xpr="L106s="sref">xprtconnect_workerref="+code=transponect_workerL106.ss="sref">contawork             .sock_xprt, 5hL1055" cl5 name="L1065">1065   5    }56contar" id="L1059" 6ef="+code=6oc>1031        elsihu6down 6           .1039        id="L1031" class="line" name="L1031">1031        els, struct sock_xprt, 5he=tcp_cop5ass="line" name="L1066">1566sock_xp id="L1031" class="line" name="L1031">1031        elsinera>(sock_xprt, 5h=tcp_recl5ta_recv st6r" class="6rc5hre>+57              sk_allocaeion 6+57sock_xprt6/a>, 67"L1042" c5orrtEIOhref="+code=traEIO cla_xprt" class="sref">sock_xprt, 5eL1058" cl5e=rcvbuf" class="sref">rl5e=r>856sock_xprt, 57a href="+5="+code=len" class="sref+5="+>+571016spin_0" idrelease" class="line" 0" idreleaseine" 1039       sn6     els,/6close" class="line" ,/acl6se="s67 buffer,6/span60>;
, struct 62"R5" id="L1065" class="line" name="L1065">1065        , 5 when copy5ng to the receive b6rr3" id="L673" clerra hrr_xprt" clas6="sre67           . = sock_xprt, 57de=transp5cp_xid" class="sref">tcp=5cp_>+571034 STRE>+576a href="net/sunrrSTRE>+r5" name="L1034">1034c#L1060"TCP576a href="net/c#L1060"TCPr5" na_kern060" class="line" nacre="e_kern="sref">transport+67t68           sk_dataarea " cl32           Pe=tcp_flags" clIPPROTO_UDPa hrc/039">1039       snera>(transport->TCP_RCV_COPYc5las>+57sock_xp.c#L106f="+5 clas6="sref">transport_+5 cl>+68c;
<68       sk_writeaspacesunrpc/xpc/xss="sref">spin_0" idrelease" class="line" 0" idreleaseine" 1039       sn6es6e=tcp_f6ags" cltransportsock_xprt, 5r8hen copy5s="sref">TCP_RCV_COPY_DAT5)53((sock_xprt, 5ort_lock" 5lass="sref">transport_loc5)54"RPC:    5odportt68DGRAMa hrc/xprtsock.cnd6ine" f">transportrd_desc(transport->sock_xprt, 58 spin_0" idrelease" class="line" 0" idreleaseine" 1039       sn6e" id="L106skb6c#L1065" id="L1025" class="lcopy6_reclen = %u\n"<6span>hr3" id="L6truct +59so,1046" i5l6/s>+59_CSUl56" c5k_xprt, 5 when copy5ng to the receive b6n="sref">s6b1012r &g6; 0) 601622(10#L1055" id57 href="+c5href="+code6        el6ef="u href="+code=traef="6  cla6ss0_xprt" class="sref">sock_x585a href="net/ef="net/sunrpc/xprtsock.c#L1055" id58L1055" cl5et" class="sref">tcp_offe5et">+58my6/a>       6els,socawake_pending_task6href=6+code=traxsoca  sk_writeaspace060" class="lin"a62dprintkcxprt" class="sref">sock_xprt, 58=tcp_recl5 class="line" name="L987d5 cl>+58skb< =   6nge=tcp_fl6gs" clde5cL1031">1031        elsinera>(<060" class="lin">1012<9a href="net/sunrpc/xprtsock.c#L1055" id6e=tcp_recl6n" class=060" class="lin"a62(transport->sock_xprt,659         elsany" class="line" any cla_xprt" class="sref">sock_xprt, 6a6hen copy6name="L995ame="L1012">10#L1055" id6 7hen copy6_copied = %lu, &q055" id59a6s="line5name="L995"> 995<6a>   69" id="L1025" class="line" name="L1025">1025        TCL1031">1031        elsineratsnnecting ck.c"printainer.pcass="sref">sock_xprt1622x69           .de5cL">transport->      5         rttransport->1012xprtEIOhref="+codeL1031">1031        elsinera>ortEIOhref="+codeL1031">1031        elsineraPF_INET6e=tcp_flags" clPF_INET6a hrc/7d2RPCtrepl7eef="+code=x clar_xprt" c7   .<70contar" 7d="L1059" class="line" na7e="L170lags" clspin_0" i/=contdrelease" class="l/=contine" 0" idreleaseine" 1039       sn7e=transpor7" class="sref">transport<7a> = 70sock_xprt,7naddr70" id="L1025" class="line" nammmmmmmmmatsock_xprf">so,1aftf">a delay5k_xprt, 5 when copy5ng to the receive b7.c#L1025" 7d="L1025" class="line" na7e="L170k_xp.c#L1025" id="L1025" class="line"break 0" idreleaseine" 1039       sn7e9#L1025" 7da>70           .+59xdr_skb_read_d7/span71           sk_dataarea " cl32mmmmmmmmatsock_xprf">so,1anduretryuk_xprt, 5 when copy5ng to the receive b7e="L1012">7012      6  7     71       sk_writeaspacesunrpc/xmmmmmmmma60" class="lin">1012101216221012spin_0" idrelease" class="line"lass="srefc5="+>+59        e7sany"7class="line" any cla.ss="srefprt, 5_ref="+cod5pied" class="sref">tcp_cd5pie>+59transportsock_xprt, 59 xdr_skb_read_=5ass>+593,
1031    7   el7inera>s="sref">spin_0" i/=contdrelease" class="l/=contine"lass="srefc5="+>+59sock_xprt, 59ef="7uot;6/span71s71pa5"ecopy6_reclen = %u\n"<6span7ntkcxp7t" class="sref">sock_xprt7/a>, 71        elsaddress_1025le5)55sock_xprt,76r9 T72">10125" i;RPC:    5 $08esulL cla TCP9soc="ne armote endpoinsunrpc/xprtsoc *",/audp_connect_worker6 -"7L1059" cla7s="line" name="L1059">1057 72ata from this record will6/se="L1056">1556cont70" i href="+code=tran2l5n55transport<7a> = 72="sretef class="line" name="L1012">10121058559a href="ne7#L1060" id7"L1060" class="line" name7"L10672c3085ment">                ck_xprt, 5 when copy5ng to the receive b7PC:    6e&737;08x 6f="+code=r" class7"sref72s="lief class="line" name="L1012">1012tcp_recle6) *12" class="line" name="L1012">1012desc<5a> = 56>,
1047ref="+code7tran2r7_desc72uct 62"7sref">tcp_7opi5d5210#L1055" id5h"L1042" c5+code=skb" class="sref">s5b56transport->skbef="u href="+code=traef=7u  cl72           .           " id="L1060" class="line" name="L1060">1060        struct transport->l5n56>;
tran>transport->1031        elsihu7down 73ss-"sref">xpr="L106s="sref">xprtconnect_workerref="+code=transponect_workerL106.ss="sref">contawork             .sock_xprt, 5hL1055" cl5 name="L1065">1065   5    }56contar" id="L1059" 7 1039        id="L1031" class="line" name="L1031">1031        els, struct sock_xprt, 5he=tcp_cop5ass="line" name="L1066">1566b7fl5n53c;
sock_xp id="L1031" class="line" name="L1031">1031        elsinera>(sock_xprt, 5h=tcp_recl5ta_recv st7>53              sk_allocaeion 7>=transpor7T73sock_xprt, 5eL1058" cl5e=rcvbuf" class="sref">rl5e=r>856sock_xprt, 57a href="+5="+code=len" class="sref+5="+>+57spin_0" idrelease" class="line" 0" idreleaseine" 1039       sn7>C:    6e&7106SOCK_DGRAMe=tcp_flags"7clSOC73 buffer,6/span60>;
1073DGRAMa hrc/xpa>, struct 62"7rr3" id="L773" clerra hrr_xprt" clas7="sre73        , 5 when copy5ng to the receive b7f">o5t73t73           . = sock_xprt, 57de=transp5cp_xid" class="sref">tcp=5cp_>+57e5STRE>+576a href="net/sunrrSTRE>+r5" name="L1034">1034c#L1060"TCP576a href="net/c#L1060"TCPr5" na_kern060" class="line" nacre="e_kern="sref">transporttcp_copie5)73           Pe=tcp_flags" clIPPROTO_UDPa hrc/039">1039       snera>(transport->TCP_RCV_COPYc5las>+57sock_xp.c#L107es4spin_0" idrelease" class="line" 0" idreleaseine" 1039       sn7>)541a hre7="net/sunr        els7/abin74transu  cla_xprt" class="sref">sock_xprt, 57L1058" cl5p_xid" class="sref">tcp_l5p_x>+571542t74sock_xprt, 58 href="+c50"> 980             c50">>+58 981+582a7>C:    6e&7f">sock_xprt, 5=_DATA7 cl5o74DGRAMa hrc/xprtsock.cnd6ine" f">transportrd_desc(transport->10437c#L1075" id="L1025" class="lsunrpc/xpc/xss="sref">spin_0" idrelease" class="line" 0" idreleaseine" 1039       sn7>r3" id="L7truct o5t725        els7 <_DI74>sock_xprt elseopy6_reclen = %u\n"<6span7/     7  els,/audp_finish_connec7inge=75           sk_dataareatso,1046" i5l6/s>+59_CSUl56" c5k_xprt, 5 when copy5ng to the receive b7snera>(1012r &g6; 0) 601622skb10#L1055" id57 href="+c5href="+code7"sref">soc7_xp,socawake_pending_task7href=75s0_xprt" class="sref">sock_x585a href="net/ef="net/sunrpc/xprtsock.c#L1055" id58L1055" cl5et" class="sref">tcp_offe5et">+58my7" cl5+code7len" class="sref">l5n753,
<75code=traxsoca  sk_writeaspacesportsock_xrintp /o address:"printsef">dprintkcxprt" class="sref">sock_xprt, 58=tcp_recl5 class="line" name="L987d5 cl>+58skb< =   7eC:    6e&7ass="sref">sock_xprt,75 de5cL1031">1031        elsinera>(<060" class="lin">1012<9a href="net/sunrpc/xprtsock.c#L1055" id6e=tcp_recl6n" class=060" class="lin"a62(transport->t7anspo75L10        elsany" class="line" any cla_xprt" class="sref">sock_xprt, 6a6hen copy6name="L995ame="L1012">10#L1055" id6 7hen copy6_copied = %lu, &7eock.c#L, 7ss="line" name="L1012">107275" id="L1025" class="line" name="L1025">1025        TCL1031">1031        elsineratsnnecting ck.c"printainer.pcass="sref">sock_xprt1622de5cL">transport->      5         rttransport->1031        elsinera>ortEIOhref="+codeL1031">1031        elsineraPF_INET6e=tcp_flags" clPF_INET6a hrc/7/sunrpc/xp7tsock*ef class="line" nam7="L1076       sk_writeaspacesunrpc/xclr.spin_0" i/=contdrelease" class="l/=contine" 0" idreleaseine" 1039       sn7awork_of" 7l             .offs7t76sock_xprf">so,1aftf">a delay5k_xprt, 5 when copy5ng to the receive b7lass="line7 name="L1059">1059   7    s76" id="L1025" class="line" nammmmmmmmmbreak 0" idreleaseine" 1039       sn7ref="+code7tran2r7_desc76" id="L1025" class="line" namdefaultlass="srefc5="+>+59sock_xprf">so,1anduretryuk_xprt, 5 when copy5ng to the receive b7ref">skbef="u href="+code=traef=7u  cl77           sk_dataarea " cl32mmmmmmmma60" class="lin">101210121622spin_0" idrelease" class="line"lass="srefc5="+>+59sock_xprt7/a>, 77"L1042" c5orrnnecting ck.c"printaa>, 5_ref="+cod5pied" class="sref">tcp_cd5pie>+59transportsock_xprt, 59 xdr_skb_read_=5ass>+593,
1017spin_0" i/=contdrelease" class="l/=contine"lass="srefc5="+>+59de5crint/=container.pc  els, = sock_xprt, 59ef="7prtsock.c#7106SOCK_DGRAMe=tcp_flags"7clSOC7_DGRAMcopy6_reclen = %u\n"<6span7ref="+code75" class="line" name="L1075">10775">1025        le5)55t788a hrf="net/sunrpc/xprtsock.e f">esulL cl08esulL cla soc="ne armote endpoinsunrpc/xprtsoc *",/audp_connect_worker6 -"7f="+5 clas7="sref">transport_+5 cl>+78c;
<78">10121017="+code=x clar_xprt" clas7="sre78c3085ment">                ck UDP9socer so ts are synchronous, but we ur.t78DGRAMment">                ck ="nguarantee that even unprivilegedstcp_ procunrespct">" clup aunrpc/xprtsoc *",/audp_connect_worker6 -"7frtsock.c#7f">sock_xprt, 58                 ck soconprivilegeds6" crunrpc/xprtsoc *",/audp_connect_worker6 -"7fef="+code7skb7c#L1075" id=tef class="line" name="Lunrpc/xprtsoc *",/audp_connect_worker6 -"7fr3" id="L7truct socer so t fails, >+59delay5behavior here preventsunrpc/xprtsoc *",/audp_connect_worker6 -"7aaddress_1725        els7 <_DI798a hrf="net/sunrpc/xprtsock.e retryufloods (hard moun/s)runrpc/xprtsoc *",/audp_connect_worker6 -"7n="sref">s7b10121ef class="line" name="L1012">1ock_xpAF_UNSPEC" class">1ock_xpArtsoc="L106s="sref">xprtcon6hrfF_UNSPEC" class>con6hrfline" name="L1031">106hrfF_UNSPEC" class6hrflineet/sunrpc/xprtsock.c#L, struct        7els,socawake_pending_task7href=7+code=traxsoca="L106s="sref">xprtconnect_workerref="+code=transponect_workerL106.ss="sref">contawork             .name="L1031">106hrfF_UNSPEC" class6hrfline"line" sk_user_data"tsock_xprt, 59ef="7code5href=7+code=r" class="sre5hre>+79xprt10#L1055" id5h"L1042" c5+code=skb" class="sref">s5b56transport->16221060        struct sock_xprt *sock_xprt,759 , "sref">de5crint/tess_and_g 5ainer.pc  els, =  995<7a>   79" id="L1025" class="lars="l="sref">sock_xprt *x79        elsaddress_10251012xprtEIOhref="+code1031        elsinera>(31        els, struct transportNUf="net/sunrpc/x hNUf=neraPF_INET6e=tcp_flags" clPF_INET6a hrc/8d RPCtrepl8es when we geskaround /o 8econn80       sk_writeaspace  elsany" class="line" any cla_xprt" class="sref">sock_xprt, 6a6hen copy6name="L995f">esulL cldelayeds">+5810#L1055"INET6e=tcp_flags" clPF_INET6a hrc/8d2RPCtrepl8eef="+code=x clar_xprt" c8   .<80my8">contar" 8d="L1059" class="line" na8e="L180lags" clde5crint"+code=ou  cla:xprt" class="sref">sock_xrintp /o address:"printsef">dprintkcxprt" creessabl=tcptime" idrelease" classreessabl=tcptime" iags" /ss="sref">sock_xHZdrelease" classHZclass="sref">sock_xprt *sock_x "L10_delayed_de=transport" class "L10_delayed_de=trtsock.c#Lsf="u href/a>iod_de=t "L10_workerref="+code=iod_de=t "L10" cla"sref">sock_xprt *sock_xprt, 5hL1055" cl5 name="L1065">106556>;
sock_xprt *de5crint"+code=ou  cla:xprt" cl>dprintkcxprt" creessabl=tcptime" idrelease" classreessabl=tcptime" iags"s="sref">sock_xprt *sock_xprt,8naddr80" id="L1025" class="ls="sref">sock_xrintp /o address:"printsef">dprintkcxprt" creessabl=tcptime" idrelease" classreessabl=tcptime" iags" ortsock_xprt * 995<8e="L180k_xp.c#L1025" id="L10tEIOhref="+code=traEIO cla_xprt" class="sref">sock_xprt, 5reessabl=tcptime" idrelease" classreessabl=tcptime" iags" o">sls="sref">sock_xXS"TCP_MAX_REEST_Ta_xprt" class="sXS"TCP_MAX_REEST_Talineet/sunrpc/xprtsock.c#L, struct 80           .EIOhref="+code=traEIO cla_xprt" class="sref">sock_xprt, 5reessabl=tcptime" idrelease" classreessabl=tcptime" iags" ef">transportXS"TCP_MAX_REEST_Ta_xprt" class="sXS"TCP_MAX_REEST_Taline="sref">sock_xprt *xdr_skb_read_d8/span81           sk> elseF_INET6e=tcp_flags" clPF_INET6a hrc/8e="L1012">8012      6  8     81       sk_writeaspace  elsany" class="line" any cla_xprt" class="sref">sock_xprt, 6a6hen copy6name="L995f">esulL clscheduleds">+58sock_xprt *1012sock_x "L10_delayed_de=transport" class "L10_delayed_de=trtsock.c#Lsf="u href/a>iod_de=t "L10_workerref="+code=iod_de=t "L10" cla"sref">sock_xprt *sock_xprt, 5hL1055" cl5 name="L1065">106556>;
sock_xprt *        e8sany"8class=copy6_reclen = %u\n"<6span8 6contar" 8ock_xprt" cl>1031    8   el81 buffer,6/span60>;
10121012xprtcon6hrfF_UNSPEC" class>con6hrfline" name="L1031">106hrfF_UNSPEC" class6hrflineet/sunrpc/xprtsock.c#L, struct s81pa5"e_INET6e=tcp_flags" clPF_INET6a hrc/8e9#L1025" 8t" class="sref">sock_xprt8/a>, 81           .<="L106s="sref">xprtconnect_workerref="+code=transponect_workerL106.ss="sref">contawork             .name="L1031">106hrfF_UNSPEC" class6hrfline"line" sk_user_data"tsock_xprt, 59ef="861sock_xprt,86r9 T82       sk_wriatof/>+59soct, 5 when copy5ng to the receive b8L1059" cla8s="line" name="L1059">1058 82pc/xprtsock.c#EIOhref="+code1ess_bief="+cod5h>), sock_xprt, 5rt      5       tcont80" i href="+code=tran254transu  01210121622transport<8a> = 824      sk_wriatsoceL1058" >ref="mpletede_xprt, 5 when copy5ng to the receive b8L=transpor8"L1060" class="line" name8"L106825c/xprtsock.c#EIOhref="+code1ess_bief="+cod5h>), sock_xprt, 5rt      5       tsock_xprt *r8_desc82L10        elsany" classp>1ock_xpAF_UNSPEC" class">1ock_xpArtsocname="L1031">106hrfF_UNSPEC" class6hrflinee="sref">sock_xprt *skbef="u href="+code=traef=8u  cl82        elsaddress_10251031        elsihu8down 83onnectef class="line" name=>le5)551012udp_lass= rtso-specifcprtb8fl5n53c;
cont8net/sunrpc/xprtsock.c#L1085" id83conne12T83="sretef class="line" name="Lunrpc/xprtsoc *",/audp_connect_worker6 -"8>L1060" id8close" class="line" ,/acl8se="s83c3085ment">                ck_xprt, 5 when copy5ng to the receive b8>C:    6e&8106SOCK_DGRAMe=tcp_flags"8clSOC83s="lief class="line" name="L1012">1udp_lass= rt1udp_lass= rtxprtconnect_workerref="+code=transponect_workerL106.ss="sref">contawork           tsock.c#L1060" id="L1060"eq_file">      5       eq_fileponect_workerL106.ss= eq">      5       eqlineet/sunrpc/xprtsock.c#L, struct ef="+code85" class="line" name="L1085">1083uct 62"8rr3" id="L873" clerra hrr_xprt" clas8="sre83era>(10#L1055" id5h"L1042" c5+code=skb" class="sref">s5b56transport->16221060        struct sock_xprt *o5t83t83        elsaddress_1025tcp_copie5)831622< eq">      5       eqline,e sock_xprt, 6a6hen copy\tct_w:\tudp8my8es4sock_xprt, 5hL1055" cl5 name="L1065">1065sock_xprt,  c50">>+"L1056" c5my_desc" class="sref">my8e="sref">b8="net/sunr        els8/abin84sock_xprt, 5rt      5       t *      5      ref"1ocun/0">>+"L1056" c5my_desc" class="sref">my8eref">cont8 cl5ss="line" name="L10418>10518/a>54sock_xprt, 5rt      5       t *>+"L1056" c5my_desc" class="sref">my8e=transpor8="+code=x clar_xprt" clas8="sre84code=traxsoca  sk_writeaspacesportsock_xprt, 5rt      5       t *>+"L1056" c5my_desc" class="sref">my8eL1060" id84t84sock_xprt, 5rt      5       t *>+"L1056" c5my_desc" class="sref">my8eC:    6e&8f">sock_xprt, 5=_DATA8 cl5o84DGRAMa hrc/xprtsock.cnd6ine" f">transportsock_xprt, 5rt      5       t *>+"L1056" c5my_desc" class="sref">my8eef="+code8href="net/me="L1043">10438c#L1085" id="L1025" class="lsunrpc/x  elsany" classptraEIO cla_xprt" class="sref">sock_xprt, 5rt      5       t *sock_xprt *8031o5t825        els8 <_DI84        elsaddress_1025     8  els,/audp_finish_connec8inge=85onnectef class="line" name=>le5)5510125" ilass= rtso-specifcprtskbsoc8_xp,socawake_pending_task8href=85conne12l5n853,
<85="sretef class="line" name="Lunrpc/xprtsoc *",/audp_connect_worker6 -"8nge=tcp_fl8gs" cl                ck_xprt, 5 when copy5ng to the receive b8eC:    6e&8ass="sref">sock_xprt,85 10121012xprtconnect_workerref="+code=transponect_workerL106.ss="sref">contawork           tsock.c#L1060" id="L1060"eq_file">      5       eq_fileponect_workerL106.ss= eq">      5       eqlineet/sunrpc/xprtsock.c#L, struct 54t8anspo85uct 62"8eock.c#L, 8ss="line" name="L1012">108285era>(10#L1055" id5h"L1042" c5+code=skb" class="sref">s5b56transport->16221060        struct sock_xprt *sock_xprt *de5crint/iner.pcass="sref">sock_xprt16221622sock_xprt, 5 clt_usass="sref">sock_x clt_usas/xpr< /ss="sref">sock_xHZdrelease" classHZclas="sref">sock_xprt *soc8ect_worker6e=tcp_flags" c8              sk_allocaeion 8awork_of" 8l             .1622< eq">      5       eqline,e sock_xprt, 6a6hen copy\tct_w:\t0128my8<offs8t86sock_xprt, 5hL1055" cl5 name="L1065">1065sock_xprt,  c50">>+"L1056" c5my_desc" class="sref">my8lar.sunrpc8xprtsock.c#L1060" id="L1080" cl86DGRAMa hrc/xprtsock.cnd6ine"   elsany" classptraEIO cla_xprt" class="sref">sock_xprt, 5rt      5       t *      5      ref"1ocun/0">>+"L1056" c5my_desc" class="sref">my8lass="line8 name="L1059">1059   8    s86" id="L1025" class="line" nam  elsany" classptraEIO cla_xprt" class="sref">sock_xprt, 5rt      5       t *      5      unrpc/xpocun/0">>+"L1056" c5my_desc" class="sref">my8lock.c#L, 8tran2r8_desc86" id="L1025" class="line" nam  elsany" classptraEIO cla_xprt" class="sref">sock_xprt, 5rt      5       t *>+"L1056" c5my_desc" class="sref">my8laddress_18;856my8ref">skbef="u href="+code=traef=8u  cl87           sk_dataarea " cl32  elsany" classptraEIO cla_xprt" class="sref">sock_xprt, 5rt      5       t *>+"L1056" c5my_desc" class="sref">my8ef="+code=8oc>1031        elsihu8down 87       sk_writeaspacea " cl32  elsany" classptraEIO cla_xprt" class="sref">sock_xprt, 5rt      5       t *>+"L1056" c5my_desc" class="sref">my8         elsany" classptraEIO cla_xprt" class="sref">sock_xprt, 5rt      5       t *>+"L1056" c5my_desc" class="sref">my8r" class="8rc5hre>+57        elsany" classptraEIO cla_xprt" class="sref">sock_xprt, 5rt      5       t *>+"L1056" c5my_desc" class="sref">my8+57sock_xprt8/a>, 87"L1042" c5orre=c/abina>        elsany" classptraEIO cla_xprt" class="sref">sock_xprt, 5rt      5       t *sock_xprt *1018xprtconnect_opa>, 59 1udp_opa>, 59 1udp_opa62"8ref="+code85" class="line" name="L1085">1087" id="L1025" a> *      5       et_buffer_size id="L1025" (<060" class="lin">1udp_set_buffer_size">      5      ">1udp_set_buffer_size0">>+"L1056" c5my_desc" class="sref">my8+address_1873" clerra hrr_xprt" clas8="sre879 id="L1025" a> *>+"L1056" c5my_desc" class="sref">my8quod5req>+87t880 id="L1025" a> *>+"L1056" c5my_desc" class="sref">my8qf="+code=8="sref">transport_+5 cl>+88c;
<881 id="L1025" a> *, 59 >+"L1056" c5my_desc" class="sref">my8q *sock_xprt,set_ref"L1042" c5orre=c/abi(<060" class="lin">1set_ref">sock_xprt,">1set_ref"0">>+"L1056" c5my_desc" class="sref">my8q" class="8unrpc/xprtsock.c#L,/abind8e=tcp883 id="L1025" a> *1ock_xpArtso+"L1056" c5my_desc" class="sref">my8q57 *my8q1012">1018="+code=x clar_xprt" clas8="sre885 id="L1025" a> *      5      buf_freeL1042" c5orre=c/abi(<060" class="linrco_free">      5      rco_freertso+"L1056" c5my_desc" class="sref">my8qar.sunrpc88t886 id="L1025" a> *1udp_send_arquess>, 59 1udp_send_arquessrtso+"L1056" c5my_desc" class="sref">my8qrtsock.c#8f">sock_xprt, 58  *my8qef="+code8skb8c#L1088" id="L1025" a> *(<060" class="lin">1udp_timehref="net/sunrps">1udp_timehrtso+"L1056" c5my_desc" class="sref">my8qaddress_18truct  *my8aaddress_1825        els8 <_DI890 id="L1025" a> *(<060" class="lin">1"n1"nmy8af="+code=8b *1dessroyrtso+"L1056" c5my_desc" class="sref">my8a *(<060" class="lin">1udp_lass= rt1udp_lass= rtmy8a" class="8ef="u href="+code=traef="8  cla8ss0_xp}="sref">sock_xprt *sock_xprt *1018+code=r" class="sre5hre>+89xprtconnect_opa>, 59 1012, 59 101262"8nge=tcp_fl8gs" cl *my8artsock.c#8ass="sref">sock_xprt,859  *rrmy8aef="+code8s="line5name="L995"> 995<8a>   89" id="L1025" a> *, 59 >+"L1056" c5my_desc" class="sref">my8nr3" id="L8/a>x899 id="L1025" a> *sock_xprt,set_ref"L1042" c5orre=c/abi(<060" class="lin">1set_ref">sock_xprt,">1set_ref"0">>+"L1056" c5my_desc" class="sref">my9" name="L1912">1012 *1012my9"1name="L191 *my9d2RPCtrepl9eef="+code=x clar_xprt" c9   .<902 id="L1025" a> *      5      buf_freeL1042" c5orre=c/abi(<060" class="linrco_free">      5      rco_freertso+"L1056" c5my_desc" class="sref">my9">contar" 9d="L1059" class="line" na9e="L1903 id="L1025" a> *1012, 59 1012my9"4contar" 9dls,socawake_pending_task9port<904 id="L1025" a> *my9"5contar" 9dcode=r" class="sre5hre>+9a> = 905 id="L1025" a> *(<060" class="lin">10121012my9"6contar" 9ds" cl *1dessroyrtso+"L1056" c5my_desc" class="sref">my9"7contar" 9dss="sref">sock_xprt,9naddr907 id="L1025" a> *(<060" class="lin">10121012my9"8contar" 9d="line5name="L995"> 995<9e="L190k_xp.}="sref">sock_xprt *90        elsaddress_1025xdr_skb_read_d9/span91     ef clas="L106s="sref">xprtconnect>, 59 1setupnnect_workerref="+co"efsetupnnectrtsoc="L106s="sref">xprt      5      nect/=re, 58=trgsrtso+"L1056" c5my_desc" class="sref">my9e="L1012">9012      6  9     91       sk_writeaspaceeeeeeeeeeeeeeeeeeeeeeeunsigned ss=a1060" id="L1060"lot_sable_size">      5       lot_sable_sizeclass"L1056" c5my_desc" class="sref">my9e2RPCtrepl9="L1012">101262"9NSPEC.  Th9s should/re urn ixprdiate9y...e91lags" clxprtconnect_workerref="+code=transponect_workerL106.ss="sref">contawork           ="sref">sock_xprt *10#L1055" id5h"L1042" c5new="line" name="Lnew    ="sref">sock_xprt *transport_e5 cl>+571031    9   el916 id="L1025" a>, "sref">de5carock_xprt, 58=trgsrtso>dprintkcxprt" classle cl5e=rcvbuf" cllassle  id="o">slsizeofa>EIOhref="+code=traEIO cla_xprt" class="sref">sock_xprt, 5lasscl5e=rcvbuf" cllassclassPF_INET6e=tcp_flags" clPF_INET6a hrc/9 7transpor9ine" any cla), 0r_xprt" c9ass="91" id="L1025" class="ls="sref">sock_x="line" any cla_xprt" class="sref">sock_xprt, 6a6hen copy6name="L995f">setupnnect:net/sunr too ltrgeock.c#L1046" i5s="sref">sock_xprt *s91" id="L1025" class="lars="lls="sref">sock_xERR_PTR any cla_xprt" ERR_PTRsref"a href="+code=x cBADF any cla_xprt" EBADFclass="sref">sock_xprt *sock_xprt9/a>, 91           .sock_xprt,96r9 T92       sk_wriaid5h"L1042" c5new="line" name="Lnew    >(<060" class="linkzalloc>, 59 de5cGFP_KERNE="net/sunrpc/x hGFP_KERNE=class="sref">sock_xprt *1059 92pc/xprtsock.c#EIOhref="+codenew="line" name="Lnew    >(ef">transportNUf="net/sunrpc/x hNUf=neraPF_INET6e=tcp_flags" clPF_INET6a hrc/9sref">cont90" i href="+code=tran254trans="line" any cla_xprt" class="sref">sock_xprt, 6a6hen copy6name="L995f">setupnnect:ncouldn't alloca2">10#L1055"INET6e=tcp_flags" clPF_INET6a hrc/9e=transpor9" class="sref">transport<9a> = 924      sk_wriiiiiiiiiiiiiiiiiiiiiiiii>sock_xprt, 6a6hen copyde=transock.c#L1046" i5s="sref">sock_xprt *sock_xERR_PTR any cla_xprt" ERR_PTRsref"a href="+code=x cNOMEM any cla_xprt" ENOMEMclass="sref">sock_xprt *r9_desc92L10        elsany" classptraEIO cla_xprt" class="sr>(<sock_xprt, 5"sref">contawork           ="sref">sock_xprt *1025        skbef="u href="+code=traef=9u  cl92910        elsany" classptraEIO cla_xprt" class="sref">sock_xprt, 5max_arqck_xprt, 58=max_arqc    >(<060" class="lin"lot_sable_size">      5       lot_sable_sizeclas="sref">sock_xprt *1031        elsihu9down 93           sk1060" id="L1060ptraEIO cla_xprt" class="sref">sock_xprt, 5rlot">      5       lot    >(<060" class="linkcalloc>, 59 sock_xprt, 5max_arqck_xprt, 58=max_arqc    ,lsizeofa="L106s="sref">xprtconrqst_workerref="+code=trqst    < ="sref">de5cGFP_KERNE="net/sunrpc/x hGFP_KERNE=class="sref">sock_xprt *de5crintEIO cla_xprt" class="sref">sock_xprt, 5rlot">      5       lot    >(ef">transportNUf="net/sunrpc/x hNUf=neraPF_INET6e=tcp_flags" clPF_INET6a hrc/9s="sref">b9fl5n53c;
      5      kfreertsofe="L1022">1622cont9net/sunrpc/xprtsock.c#L1095" id93a>54trans="line" any cla_xprt" class="sref">sock_xprt, 6a6hen copy6name="L995f">setupnnect:ncouldn't alloc lot>a2">10#L1055"INET6e=tcp_flags" clPF_INET6a hrc/9s=transpor9T934      sk_wriiiiiiiiiiiiiiiiiiiiiiiii>sock_xprt, 6a6hen copysableock.c#L1046" i5s="sref">sock_xprt *sock_xERR_PTR any cla_xprt" ERR_PTRsref"a href="+code=x cNOMEM any cla_xprt" ENOMEMclass="sref">sock_xprt *ef="+code95" class="line" name="L1095">1093uct ot;6/span973" clerra hrr_xprt" clas9="sre93era>(, 5memcpyF_UNSPEC" classmemcpysref"sock_xprt, 5lasscl5e=rcvbuf" cllassclas ="sref">de5carock_xprt, 58=trgsrtso>dprintkcxprt" cdstlasscl5e=rcvbuf" cldstlassclas ="sref">de5carock_xprt, 58=trgsrtso>dprintkcxprt" classle cl5e=rcvbuf" cllassle  id=s="sref">sock_xprt *skbt93910        elsany" classptraEIO cla_xprt" class="sref">sock_xprt, 5lassle cl5e=rcvbuf" cllassle  id="ef">transportarock_xprt, 58=trgsrtso>dprintkcxprt" classle cl5e=rcvbuf" cllassle  id=="sref">sock_xprt *tcp_copie5)93xprtEIOhref="+codearock_xprt, 58=trgsrtso>dprintkcxprt" csrclasscl5e=rcvbuf" clsrclassclass"L1056" c5my_desc" class="sref">my9es4, 5memcpyF_UNSPEC" classmemcpysref"sock_xprt, 5lasscl5e=rcvbuf" cllassclas ="sref">de5carock_xprt, 58=trgsrtso>dprintkcxprt" csrclasscl5e=rcvbuf" clsrclassclas ="sref">de5carock_xprt, 58=trgsrtso>dprintkcxprt" classle cl5e=rcvbuf" cllassle  id=s="sref">sock_xprt *b9="net/sunr        els9/abin94sock_xprt *cont9 cl5ss="line" name="L10419>10519/a>54sock_x"sref">contawork           ="sref">sock_xprt *t94>transport_e5 cl>+57sock_xprt, 5=_DATA9 cl5o94s="lief clasconsti="L106s="sref">xprtcontime" idrelease" classrcontime" i>541udp_defaultntime" idrelease" class">1udp_defaultntime" i id="ef_INET6e=tcp_flags" clPF_INET6a hrc/9eef="+code9href="net/me="L1043">10439c#L10947 id="L1025" a> *sock_xHZdrelease" classHZclas+"L1056" c5my_desc" class="sref">my9>r3" id="L9truct  *sock_xHZdrelease" classHZclas+"L1056" c5my_desc" class="sref">my9>ef">skb        els9 <_DI949 id="L1025" a> *sock_xHZdrelease" classHZclas+"L1056" c5my_desc" class="sref">my9/     9  els,/audp_finish_connec9inge=950 id="L1025" a> *my9/s4101}="sref">sock_xprt *skbsock_xprt *soc9_xp,socawake_pending_task9href=95conne12le5)55l5n953,
<95="sretef class="line" name="L5f">setupnudp8- Set up  5hL1055">refuse a5UDP9so5)55                ck @trgs: de=  5hL1055">=resock_xprt,95 54t9anspo95uct                 ck_xprt, 5 when copy5ng to the receive b9eock.c#L, 9ss="line" name="L1012">109295era>(ef clas="L106s="sref">xprtconnect>, 59 1setupnudp_workerref="+co"efsetupnudprtsoc="L106s="sref">xprt      5      nect/=re, 58=trgsrtsos"L1056" c5my_desc" class="sref">my9"address_19 2transportarock_xprt, 58=trgsrtso>dprintkcxprt" cdstlasscl5e=rcvbuf" cldstlassclas="sref">sock_xprt *xprtconnect_workerref="+code=transponect_workerL106.ss="sref">contawork           ="sref">sock_xprt *10#L1055" id5h"L1042" c5+code=skb" class="sref">s5b56sock_xprt *soc9ect_worker6e=tcp_flags" c9              sk_allocaeion 9awork_of" 9l             .1setupnnect_workerref="+co"efsetupnnectrtsoc">transportarock_xprt, 58=trgsrtso       struct sock_xprt *offs9t961622my9lar.sunrpc9xprtsock.c#L1060" id="L1090" cl96DGRAMa hrc/xprtsock.cars="lls="sref">sock_x"sref">contawork           ="sref">sock_xprt *1059   9    s96L10        elsany" class+code=skb" class="sref">s5b56transport->16221060        struct sock_xprt *r9_desc965">1025                elsany" classptraEIO cla_xprt" class="sref">sock_xprt, 5prot">      5      prottransportIPPROTO_UDP any cla_xprt" IPPROTO_UDP    ="sref">sock_xprt *skbef="u href="+code=traef=9u  cl97           sk1060" id="L1060ptraEIO cla_xprt" class="sref">sock_xprt, 5tsh_size">      5      tsh_sizesock_xprt *1031        elsihu9down 97       sk_wriatsock_xprt, 5max_payloa">, 59 1622sock_xprt *              sk_allocaeion 9+57sock_xprt9/a>, 97code=traxsoca1060" id="L1060ptraEIO cla_xprt" class="sref">sock_xprt, 5ref"1time" idrelease" classref"1time" itransportXS_BIND_Ta_xprt" class="sXS"BIND_Ta    ="sref">sock_xprt *sock_xprt, 5unrpc/xptime" idrelease" classunrpc/xptime" itransportXS_UDP_CONN_Ta_xprt" class="sXS"UDP_CONN_Ta    ="sref">sock_xprt *sock_xprt, 5reessablish_time" idrelease" classreessablish_time" itransportXS_UDP_REEST_Ta_xprt" class="sXS"UDP_REEST_Ta    ="sref">sock_xprt *        elsany" classptraEIO cla_xprt" class="sref">sock_xprt, 5idleptime" idrelease" classidleptime" itransportXS_IDLE_DISC_Ta_xprt" class="sXS"IDLE_DISC_Ta    ="sref">sock_xprt *10975">1025        sock_xprt, 5opa>, 59 1udp_opa>, 59 1udp_opasock_xprt *t98       elsresulL1059" class="linesulL c9qf="+code=9="sref">transport_+5 cl>+98c;
<98       sk_wriaid5h"L1042" c5ptraEIO cla_xprt" class="sref">sock_xprt, 5time" idrelease" classtime" i1udp_defaultntime" idrelease" class">1udp_defaultntime" i id=="sref">sock_xprt *sock_xprt *EIOhref="+codeaasscl5e=rcvbuf" cllassclas>dprintkcxprt" csa_familyF_UNSPEC" classsa_familyclassf_INET6e=tcp_flags" clPF_INET6a hrc/9q57xprtEIOhref="+codeaasscl5e=rcvbuf" cllassclas)>dprintkcxprt" csin_ref">sock_xprt,sin_ref"L1055!ef">transporthtona>, 59 my9qar.sunrpc98t98DGRAMa hrc/xprtsock.cnd6ine"   elsany" classptra_set_bouf">, 59 1622sock_xprt *sock_xprt, 58 skb9c#L1098" id="L1025" class="l">transportINIT_DELAYED_WORK any cla_xprt" INIT_DELAYED_WORKsref"sock_xprt, 5hL1055" cl5 name="L1065">1065my9qaddress_19truct 1udp_unrpc/xpworkeh4drelease" class">1udp_unrpc/xpworkeh4/xpr<="sref">sock_xprt *1format_ipv4_peer_et/sunresF_UNSPEC" classh>1format_ipv4_peer_et/sunres" name="L1022">1622sock_xprt *sock_xprt *54xprtEIOhref="+codeaasscl5e=rcvbuf" cllassclas)>dprintkcxprt" csin6_ref">sock_xprt,sin6_ref"L1055!ef">transporthtona>, 59 my9/a>       9els,socawake_pending_task9href=99"L1042" c5orre=c/abina>        elsany" classptra_set_bouf">, 59 1622sock_xprt *1019+code=r" class="sre5hre>+99transport_e5 cl>+57transportINIT_DELAYED_WORK any cla_xprt" INIT_DELAYED_WORKsref"sock_xprt, 5hL1055" cl5 name="L1065">1065my9artsock.c#9ass="sref">sock_xprt,959 1udp_unrpc/xpworkeh6F_UNSPEC" classp>1udp_unrpc/xpworkeh6/xpr<="sref">sock_xprt * 995<9a>   99" id="L1025" class="l">transporth>1format_ipv6_peer_et/sunresF_UNSPEC" classh>1format_ipv6_peer_et/sunres" name="L1022">1622sock_xprt *x99           .sock_xprt *20"           .sref">sock_xprt *20"       sk_writeaspaceock_xprt, 5kfree">      5      kfreertsofe="L1022">162220"sock_xERR_PTR any cla_xprt" ERR_PTRsref"a href="+code=x cAFNOSUPPORTF_UNSPEC" classcAFNOSUPPORT/xpr    e4nam>+4920"a>5420"code="sref">sock_xprt *20"5ode=traxsoca1060" id="L1060="line" any cla_xprt" class="sref">sock_xprt, 6a6hen copy6name="L995set up  5hL1055">refet/sunr 1a hrsock.c#L1046" i58"L1056" c5my_desc" class="sref">m20"6name="L20"s" cl20"DGRAMa hrc/xprtsock.cnd6ine"   elsany" classptraEIO cla_xprt" class="sref">sock_xprt, 5et/sunr_>, 6a6ck_xprt, 58=tt/sunr_>, 6a6c="sr[  elsany" classRPC_DISPLAY_Af="net/sunrpc/x hRPC_DISPLAY_Af=="sr]    e4nam>+49sock_xprt20"ss>20"uct  99520"=">20"" id="L1025" tEIOhref="+codetry_module_get>sock_xprt, 5y_module_getrtsofe="L1022">1622sock_xprt,THIS_MODULE/xprm20"9name="L20"a>>20"           .sock_x"sref">contawork           ="sref">sock_xprt *xdr_skb_read_20nss>20nsct       6 20012>20n       sk_wriaid5h"L1042" c5kfree">      5      kfreertsofe="L1022">1622sock_xprt, 5rlot">      5       lot        e4nam>+49101220n      5      kfreertsofe="L1022">1622sock_xERR_PTR any cla_xprt" ERR_PTRsref"a href="+code=x cINVA="net/sunrpc/x hcINVA=/xpr    e4nam>+49 20n6name="L20ock_xprt" cl>1031   20ock>20ns="lief clasconsti="L106s="sref">xprtcontime" idrelease" classrcontime" i>541012101220n7 id="L1025" a> *sock_xHZdrelease" classHZclas+"L1056" c5my_desc" class="sref">m20n8name="L20120n" id="L1025" a> *sock_xHZdrelease" classHZclas+"L1056" c5my_desc" class="sref">m20n9name="L20t" class="sref">sock_xpr20t" >20n9 id="L1025" a> *m202 name="L20net/sunrpc/x href="nef="20net>20neode=c/a>    e4nam>+49sock_xprt20ass>20n1transport_e5 cl>+571020s=">20nle5)5520nconne12setupn0128- Set up  5hL1055">refuse a5TCP9so5)55transport20" c>20n="sretef class="line" name="L5@trgs: de=  5hL1055">=re20nc3085ment">                ckunrpc/xprtsoc *",/audp_connect_worker6 -20n6name="L2037;08x 6f="+code=r" clas2037;>20ns="litef class="line" name="L_xprt, 5 when copy5ng to the receive 20n7name="L20tran220tra>20nL10xprtconnectdrelease" classrconransponect_workerL106.ss="">setupn012drelease" class">1setupn012sref"="L106s="sref">xprt      5      nect/=re, 58=trgsrtsos"L1056" c5my_desc" class="sref">m20n8name="L20opi5d52transportarock_xprt, 58=trgsrtso>dprintkcxprt" cdstlasscl5e=rcvbuf" cldstlassclas="sref">sock_xprt *1031        elsih20oc>>20oc id="L1025" scwork             .connect_workerref="+code=transponect_workerL106.ss="sref">contawork           ="sref">sock_xprt *20o       sk_wri="L106s="sref">xprt10#L1055" id5h"L1042" c5+code=skb" class="sref">s5b56sock_xprt *53c;
sock_xprt *20oa>54contawork           >(<_workerL106.ss=">1setupnnect_workerref="+co"efsetupnnectrtsoc">transportarock_xprt, 58=trgsrtso       struct     e4nam>+49EIOhref="+codeIS_ERR any cla_xprt" IS_ERRrtsofe="L1022">1622m20o5name="L20close" class="line" ,/ac20clo>20osock_x"sref">contawork           ="sref">sock_xprt *20o6ode=traxsoca1060" id="L1060+code=skb" class="sref">s5b56transport->16221060        struct sock_xprt *20ouct 20oera>(, 5/a62sock_xprt, 5prot">      5      prottransportIPPROTO_TCP any cla_xprt" IPPROTO_TCP    ="sref">sock_xprt *sock_xprt, 5tsh_size">      5      tsh_sizeEIOhref="+coderco_fraghsscl5e=rcvbuf" clrco_fraghssclass /fsizeofa>EIOhref="+codeufl5n53cuf" cluosock_xprt *tcp_copie520ss=>20ss10        elsany" classptraEIO cla_xprt" class="sref">sock_xprt, 5max_payloa">, 59 sock_xprt,RPC_MAX_FRAGMENT_SIZE    ="sref">sock_xprt *20s1transport_e5 cl>+5720ssock_xprt, 5ref"1time" idrelease" classref"1time" itransportXS_BIND_Ta_xprt" class="sXS"BIND_Ta    ="sref">sock_xprt *contawork           ef">sock_xprt, 5unrpc/xptime" idrelease" classunrpc/xptime" itransportXS_TCP_CONN_Ta_xprt" class="sXS"TCP_CONN_Ta    ="sref">sock_xprt *sock_xprt, 5reessablish_time" idrelease" classreessablish_time" itransportXS_TCP_INIT_REEST_Ta_xprt" class="sXS"TCP_INIT_REEST_Ta    ="sref">sock_xprt *sock_xprt, 5idleptime" idrelease" classidleptime" itransportXS_IDLE_DISC_Ta_xprt" class="sXS"IDLE_DISC_Ta    ="sref">sock_xprt *sock_xprt, 5=_DAT20f">>20s6transport_e5 cl>+5710420hre>20sL10        elsany" classptraEIO cla_xprt" class="sref">sock_xprt, 5opa>, 59 1012, 59 1012sock_xprt *sock_xprt, 5time" idrelease" classtime" i10121012sock_xprt *        el2025<>20s        elsaddress_102520        sk_wri=witch/a>EIOhref="+codeaasscl5e=rcvbuf" cllassclas>dprintkcxprt" csa_familyF_UNSPEC" classsa_familyclassf_INET6e=tcp_flags" clPF_INET6a hrc20 1name="L20ref="+code=x clar_xprt" 20ref>20        sk_wricaseiaid5h"L1042" c5AF_INETF_UNSPEC" classAF_INET id=:INET6e=tcp_flags" clPF_INET6a hrc20 2name="L20ef="u href="+code=traef=20ef=>20 xprtEIOhref="+codeaasscl5e=rcvbuf" cllassclas)>dprintkcxprt" csin_ref">sock_xprt,sin_ref"L1055!ef">transporthtona>, 59 m20 3name="L20_xp,socawake_pending_tas20_xp>20 a>54, 59 1622sock_xprt *l5n20 code="sref">sock_xprt *20 transportINIT_DELAYED_WORK any cla_xprt" INIT_DELAYED_WORKsref"sock_xprt, 5hL1055" cl5 name="L1065">106510121012sock_xprt *sock_xprt20ass>20 DGRAMa hrc/xprtsock.c">transportp>1format_ipv4_peer_et/sunresF_UNSPEC" classh>1format_ipv4_peer_et/sunres" name="L1022">1622sock_xprt *20 20 " id="L1025" class="lbreak="sref">sock_xprt *120ss=>20 8      sk_wricaseiaid5h"L1042" c5AF_INET6F_UNSPEC" classAF_INET6 id=:INET6e=tcp_flags" clPF_INET6a hrc20 9name="L20 220            .xprtEIOhref="+codeaasscl5e=rcvbuf" cllassclas)>dprintkcxprt" csin6_ref">sock_xprt,sin6_ref"L1055!ef">transporthtona>, 59 n206 name="L20rtsock*"@work: RPCt name20rts>20rt>54, 59 1622sock_xprt *20r1transport_e5 cl>+5720rsock_xprt, 5hL1055" cl5 name="L1065">106510121012sock_xprt *20ra>54transh>1format_ipv6_peer_et/sunresF_UNSPEC" classh>1format_ipv6_peer_et/sunres" name="L1022">1622sock_xprt *20r"L1042" c5orre=c/abinbreak="sref">sock_xprt *off20off>20rsock_xprt *transportkfree">      5      kfreertsofe="L1022">16221059  20 na>20r" id="L1025" class="lars="lls="sref">sock_xERR_PTR any cla_xprt" ERR_PTRsref"a href="+code=x cAFNOSUPPORTF_UNSPEC" classcAFNOSUPPORT/xpr    e4nam>+4920tra>20r8      sk_wricopy6_reclen = %u\n"<6spa2069name="L20;856sock_xprt, 6a6hen copy6name="L995set up  5hL1055">refet/sunr 1a hrsock.c#L1046" i58"L1056" c5my_desc" class="sref">m2071name="L20oc>1031        elsih20oc>>20>       sk_writeaspaceeeeeeeeeock_xprt, 5/a62sock_xprt, 5et/sunr_>, 6a6ck_xprt, 58=tt/sunr_>, 6a6c="sr[  elsany" classRPC_DISPLAY_Af="net/sunrpc/x hRPC_DISPLAY_Af=="sr]    e4nam>+4920>sock_xprt *+57EIOhref="+codetry_module_get>sock_xprt, 5y_module_getrtsofe="L1022">1622sock_xprt,THIS_MODULE/xprm2074name="L20t" class="sref">sock_xpr20t" >20>"L1042" c5orre=c/abinars="lls="sref">sock_x"sref">contawork           ="sref">sock_xprt *20>>transport_e5 cl>+5720>6ode=traxsoca1060" id="L1060kfree">      5      kfreertsofe="L1022">1622sock_xprt, 5rlot">      5       lot        e4nam>+4920>L10        elsany" classkfree">      5      kfreertsofe="L1022">162220>8      sk_wriars="lls="sref">sock_xERR_PTR any cla_xprt" ERR_PTRsref"a href="+code=x cINVA="net/sunrpc/x hcINVA=/xpr    e4nam>+4920>     copy6_reclen = %u\n"<6spa208 name="L207 2081name="L20="sref">transport_+5 cl>20="s>207     ef clas="L106s="sref">xprtt>, 59 (, 5/>1udp_ss="sref">sock_xprt,/>1udp_ss="sref"207transportLIST_HEAD_INIT_workerref="+coLIST_HEAD_INITrtsofe="L1022">16221udp_ss="sref">sock_xprt,/>1udp_ss="sref" *m2083name="L20unrpc/xprtsock.c#L,/abin20unr>2073a href="+coda> *, 6a6hen copyudpk.c#L1046" i58"L1056" c5my_desc" class="sref">m2084name="L20" c5 class="line" name="20" c>2074a href="+coda> *transportTHIS_MODULE>sock_xprt,THIS_MODULE/xpr8"L1056" c5my_desc" class="sref">m2085name="L20="+code=x clar_xprt" cla20="+>2075a href="+coda> *transportIPPROTO_UDP any cla_xprt" IPPROTO_UDP    8"L1056" c5my_desc" class="sref">m2086name="L208 *      5       etupL1042" c5orre=ef">transport">1setupnudp_workerref="+co"efsetupnudprtso8"L1056" c5my_desc" class="sref">m2087name="L20f">sock_xprt, 58 >207L10    e4nam>+49skb2075">1025        xprtt>, 59 (, 5/>1012sock_xprt,/>1012 *transportLIST_HEAD_INIT_workerref="+coLIST_HEAD_INITrtsofe="L1022">16221012sock_xprt,/>1012 *m2091name="L20b2021a href="+coda> *, 6a6hen copy012k.c#L1046" i58"L1056" c5my_desc" class="sref">m2092name="L20ref="+code=x clar_xprt" 20ref>202transportTHIS_MODULE>sock_xprt,THIS_MODULE/xpr8"L1056" c5my_desc" class="sref">m2093name="L20ef="u href="+code=traef=20ef=>2023a href="+coda> *transportIPPROTO_TCP any cla_xprt" IPPROTO_TCP    8"L1056" c5my_desc" class="sref">m2094name="L20els,socawake_pending_tas20els>2024a href="+coda> *      5       etupL1042" c5orre=ef">transport">1setupn012drelease" class">1setupn012sref8"L1056" c5my_desc" class="sref">m2095name="L20+code=r" class="sre5hre>20+co>202510    e4nam>+492026transport_e5 cl>+57sock_xprt20ass>202uct                 >le5)55 99520s=">2028ct                  * init_so1060< -5set up xprtsock's sysctls,iargister with RPC>  i   L1/a>)55>2029ct                  *L1/a>)5521"     tef class="line" name="L_xprt, 5 when copy5ng to the receive 21"1name="L21"21"     in6s="sref">xprtso1060< release" classinit_so1060m21"2name="L21"ef="+code=x clar_xprt" 21"ef>21"21"a>54<#ifdeff  elsany" classRPC_DEBUG"net/sunrpc/x hRPC_DEBUGtransport_e5 cl>+57210"L1042" c5orrt *      5       +57210transports      5       transportargister_sysctl_sable">      5      argister_sysctl_sablertsofe="L1022">1622<       5           e4nam>+4921"DGRAM#endifa>    e4nam>+49sock_xprt21"ss>21"uct  99521"=">210era>(, 5/a62_argister_ss="sref">sock_xprt,/a62_argister_ss="sref"sref"1udp_ss="sref">sock_xprt,/>1udp_ss="sref"    e4nam>+49>210910        elsany" classptra_argister_ss="sref">sock_xprt,/a62_argister_ss="sref"sref"1012sock_xprt,/>1012    e4nam>+49xdr_skb_read_21nss>21nsct       6 21012>21n       sk_wriars="ll0="sref">sock_xprt *101221n211 " cl32              sk_allocaeion2114name="L2113,
le5)55                ck cleanupnso1060< -5remove xprtsock's sysctls,iunrrgister5)551031   21ock>211s="litef class="line" name="Lunrpc/xprtsoc *",/audp_connect_worker6 -2117name="L21ine" any cla), 0r_xprt" 21ine>211uct                 ck_xprt, 5 when copy5ng to the receive 2118name="L21121n" id=voidf">transport-leanupnso1060so1060m21n9name="L21t" class="sref">sock_xpr21t" >211>sock_INET6e=tcp_flags" clPF_INET6a hrc212 name="L21net/sunrpc/x href="nef="21net>21neode=#ifdeff  elsany" classRPC_DEBUG"net/sunrpc/x hRPC_DEBUGtransport_e5 cl>+57sock_xprt21ass>2121L1042" c5orrt *      5       1021s=">212      5      unrrgister_sysctl_sablertsofe="L1022">1622<       5       sock_xprt *212a>54transs      5       transportNUf="net/sunrpc/x hNUf=    ="sref">sock_xprt *transport21" c>212"L1042" c5orrcopy6_reclen = %u\n"<6spa21n5name="L21"L1060" class="line" nam21"L1>21nc3085#endifa>    e4nam>+492126transport_e5 cl>+5721tra>212L10        elsany" classptra_unrrgister_ss="sref">sock_xprt,/a62_unrrgister_ss="sref"sref"1udp_ss="sref">sock_xprt,/>1udp_ss="sref"    e4nam>+4952sock_xprt,/a62_unrrgister_ss="sref"sref"1012sock_xprt,/>1012    e4nam>+49ef="u href="+code=traef21>ef>212     copy6_reclen = %u\n"<6spa213 name="L21oc>1031        elsih21oc>>21oc id=N/pre>
footer"> The original LXR software by theiaid5h"L10http://sourceforge.n = projects/lxr">LXR unityclas, this experi al version by aid5h"L10mailto:lxr@ ux.no">lxr@ ux.no subfooter"> lxr. ux.no kindly hosted by aid5h"L10http://www.redpill- pro.no">Redpill L pro ASclas, providerlof L uxsconsulting and oper.