Whamcloud - gitweb
LU-13004 lnet: remove the 'struct kvec' arg from lnd_send 45/37845/7
authorMr NeilBrown <neilb@suse.de>
Wed, 4 Dec 2019 04:33:45 +0000 (15:33 +1100)
committerOleg Drokin <green@whamcloud.com>
Fri, 1 May 2020 04:27:07 +0000 (04:27 +0000)
lnd_send() is now always sent a lnet_kiov_t pointer, never a
'struct kvec' pointer.
So remove the option of 'struct kvec *'.

This means that kiblnd_setup_rd_iov() is no longer used, so it can go
too.

Test-Parameters: trivial
Signed-off-by: Mr NeilBrown <neilb@suse.de>
Change-Id: I121f5c8c43bd7247748d6e4913c76371e9202219
Reviewed-on: https://review.whamcloud.com/37845
Tested-by: jenkins <devops@whamcloud.com>
Tested-by: Maloo <maloo@whamcloud.com>
Reviewed-by: James Simmons <jsimmons@infradead.org>
Reviewed-by: Shaun Tancheff <shaun.tancheff@hpe.com>
Reviewed-by: Oleg Drokin <green@whamcloud.com>
lnet/include/lnet/lib-types.h
lnet/klnds/gnilnd/gnilnd_cb.c
lnet/klnds/o2iblnd/o2iblnd.h
lnet/klnds/o2iblnd/o2iblnd_cb.c
lnet/klnds/socklnd/socklnd.h
lnet/klnds/socklnd/socklnd_cb.c
lnet/lnet/lib-move.c
lnet/lnet/lo.c

index b79e01a..89ac104 100644 (file)
@@ -242,11 +242,7 @@ struct lnet_lnd {
        int  (*lnd_ctl)(struct lnet_ni *ni, unsigned int cmd, void *arg);
 
        /* In data movement APIs below, payload buffers are described as a set
        int  (*lnd_ctl)(struct lnet_ni *ni, unsigned int cmd, void *arg);
 
        /* In data movement APIs below, payload buffers are described as a set
-        * of 'niov' fragments which are...
-        * EITHER
-        *    in virtual memory (struct kvec *iov != NULL)
-        * OR
-        *    in pages (kernel only: plt_kiov_t *kiov != NULL).
+        * of 'niov' fragments which are in pages.
         * The LND may NOT overwrite these fragment descriptors.
         * An 'offset' and may specify a byte offset within the set of
         * fragments to start from
         * The LND may NOT overwrite these fragment descriptors.
         * An 'offset' and may specify a byte offset within the set of
         * fragments to start from
@@ -267,7 +263,7 @@ struct lnet_lnd {
         * credit if the LND does flow control. */
        int (*lnd_recv)(struct lnet_ni *ni, void *private, struct lnet_msg *msg,
                        int delayed, unsigned int niov,
         * credit if the LND does flow control. */
        int (*lnd_recv)(struct lnet_ni *ni, void *private, struct lnet_msg *msg,
                        int delayed, unsigned int niov,
-                       struct kvec *iov, struct bio_vec *kiov,
+                       struct bio_vec *kiov,
                        unsigned int offset, unsigned int mlen, unsigned int rlen);
 
        /* lnet_parse() has had to delay processing of this message
                        unsigned int offset, unsigned int mlen, unsigned int rlen);
 
        /* lnet_parse() has had to delay processing of this message
index 598eecd..3ec2e55 100644 (file)
@@ -2424,7 +2424,7 @@ kgnilnd_eager_recv(struct lnet_ni *ni, void *private, struct lnet_msg *lntmsg,
 int
 kgnilnd_recv(struct lnet_ni *ni, void *private, struct lnet_msg *lntmsg,
             int delayed, unsigned int niov,
 int
 kgnilnd_recv(struct lnet_ni *ni, void *private, struct lnet_msg *lntmsg,
             int delayed, unsigned int niov,
-            struct kvec *iov, struct bio_vec *kiov,
+            struct bio_vec *kiov,
             unsigned int offset, unsigned int mlen, unsigned int rlen)
 {
        kgn_rx_t    *rx = private;
             unsigned int offset, unsigned int mlen, unsigned int rlen)
 {
        kgn_rx_t    *rx = private;
@@ -2437,14 +2437,11 @@ kgnilnd_recv(struct lnet_ni *ni, void *private, struct lnet_msg *lntmsg,
 
        LASSERT(!in_interrupt());
        LASSERTF(mlen <= rlen, "%d <= %d\n", mlen, rlen);
 
        LASSERT(!in_interrupt());
        LASSERTF(mlen <= rlen, "%d <= %d\n", mlen, rlen);
-       /* Either all pages or all vaddrs */
-       LASSERTF(!(kiov != NULL && iov != NULL), "kiov %p iov %p\n",
-               kiov, iov);
 
        GNIDBG_MSG(D_NET, rxmsg, "conn %p, rxmsg %p, lntmsg %p"
 
        GNIDBG_MSG(D_NET, rxmsg, "conn %p, rxmsg %p, lntmsg %p"
-               " niov=%d kiov=%p iov=%p offset=%d mlen=%d rlen=%d",
+               " niov=%d kiov=%p offset=%d mlen=%d rlen=%d",
                conn, rxmsg, lntmsg,
                conn, rxmsg, lntmsg,
-               niov, kiov, iov, offset, mlen, rlen);
+               niov, kiov, offset, mlen, rlen);
 
        /* we need to lock here as recv can be called from any context */
        read_lock(&kgnilnd_data.kgn_peer_conn_lock);
 
        /* we need to lock here as recv can be called from any context */
        read_lock(&kgnilnd_data.kgn_peer_conn_lock);
@@ -2461,8 +2458,8 @@ kgnilnd_recv(struct lnet_ni *ni, void *private, struct lnet_msg *lntmsg,
        switch (rxmsg->gnm_type) {
        default:
                GNIDBG_MSG(D_NETERROR, rxmsg, "conn %p, rx %p, rxmsg %p, lntmsg %p"
        switch (rxmsg->gnm_type) {
        default:
                GNIDBG_MSG(D_NETERROR, rxmsg, "conn %p, rx %p, rxmsg %p, lntmsg %p"
-               " niov=%d kiov=%p iov=%p offset=%d mlen=%d rlen=%d",
-               conn, rx, rxmsg, lntmsg, niov, kiov, iov, offset, mlen, rlen);
+               " niov=%d kiov=%p offset=%d mlen=%d rlen=%d",
+               conn, rx, rxmsg, lntmsg, niov, kiov, offset, mlen, rlen);
                LBUG();
 
        case GNILND_MSG_IMMEDIATE:
                LBUG();
 
        case GNILND_MSG_IMMEDIATE:
@@ -2522,7 +2519,7 @@ kgnilnd_recv(struct lnet_ni *ni, void *private, struct lnet_msg *lntmsg,
                                &rxmsg[1], 0, mlen);
                else
                        lnet_copy_flat2iov(
                                &rxmsg[1], 0, mlen);
                else
                        lnet_copy_flat2iov(
-                               niov, iov, offset,
+                               niov, NULL, offset,
                                *kgnilnd_tunables.kgn_max_immediate,
                                &rxmsg[1], 0, mlen);
 
                                *kgnilnd_tunables.kgn_max_immediate,
                                &rxmsg[1], 0, mlen);
 
@@ -2556,7 +2553,8 @@ kgnilnd_recv(struct lnet_ni *ni, void *private, struct lnet_msg *lntmsg,
                        GOTO(nak_put_req, rc);
                }
 
                        GOTO(nak_put_req, rc);
                }
 
-               rc = kgnilnd_setup_rdma_buffer(tx, niov, iov, kiov, offset, mlen);
+               rc = kgnilnd_setup_rdma_buffer(tx, niov, NULL,
+                                              kiov, offset, mlen);
                if (rc != 0) {
                        GOTO(nak_put_req, rc);
                }
                if (rc != 0) {
                        GOTO(nak_put_req, rc);
                }
@@ -2617,7 +2615,8 @@ nak_put_req:
                                GOTO(nak_get_req_rev, rc);
 
 
                                GOTO(nak_get_req_rev, rc);
 
 
-                       rc = kgnilnd_setup_rdma_buffer(tx, niov, iov, kiov, offset, mlen);
+                       rc = kgnilnd_setup_rdma_buffer(tx, niov, NULL,
+                                                      kiov, offset, mlen);
                        if (rc != 0)
                                GOTO(nak_get_req_rev, rc);
 
                        if (rc != 0)
                                GOTO(nak_get_req_rev, rc);
 
index 117a436..93de3df 100644 (file)
@@ -1217,7 +1217,7 @@ int kiblnd_post_rx(struct kib_rx *rx, int credit);
 
 int kiblnd_send(struct lnet_ni *ni, void *private, struct lnet_msg *lntmsg);
 int kiblnd_recv(struct lnet_ni *ni, void *private, struct lnet_msg *lntmsg,
 
 int kiblnd_send(struct lnet_ni *ni, void *private, struct lnet_msg *lntmsg);
 int kiblnd_recv(struct lnet_ni *ni, void *private, struct lnet_msg *lntmsg,
-               int delayed, unsigned int niov, struct kvec *iov,
+               int delayed, unsigned int niov,
                struct bio_vec *kiov, unsigned int offset, unsigned int mlen,
                unsigned int rlen);
 
                struct bio_vec *kiov, unsigned int offset, unsigned int mlen,
                unsigned int rlen);
 
index 311708a..1bd8844 100644 (file)
@@ -730,80 +730,6 @@ static int kiblnd_map_tx(struct lnet_ni *ni, struct kib_tx *tx,
        return -EINVAL;
 }
 
        return -EINVAL;
 }
 
-static int kiblnd_setup_rd_iov(struct lnet_ni *ni, struct kib_tx *tx,
-                              struct kib_rdma_desc *rd, unsigned int niov,
-                              struct kvec *iov, int offset, int nob)
-{
-       struct kib_net *net = ni->ni_data;
-       struct page *page;
-        struct scatterlist *sg;
-        unsigned long       vaddr;
-        int                 fragnob;
-        int                 page_offset;
-       unsigned int        max_niov;
-
-        LASSERT (nob > 0);
-        LASSERT (niov > 0);
-        LASSERT (net != NULL);
-
-        while (offset >= iov->iov_len) {
-                offset -= iov->iov_len;
-                niov--;
-                iov++;
-                LASSERT (niov > 0);
-        }
-
-       max_niov = niov;
-
-       sg = tx->tx_frags;
-       do {
-               LASSERT(niov > 0);
-
-               vaddr = ((unsigned long)iov->iov_base) + offset;
-               page_offset = vaddr & (PAGE_SIZE - 1);
-               page = lnet_kvaddr_to_page(vaddr);
-               if (page == NULL) {
-                       CERROR("Can't find page\n");
-                       return -EFAULT;
-               }
-
-               fragnob = min((int)(iov->iov_len - offset), nob);
-               fragnob = min(fragnob, (int)PAGE_SIZE - page_offset);
-
-               /*
-                * We're allowed to start at a non-aligned page offset in
-                * the first fragment and end at a non-aligned page offset
-                * in the last fragment.
-                */
-               if ((fragnob < (int)PAGE_SIZE - page_offset) &&
-                   (niov < max_niov) && nob > fragnob) {
-                       CDEBUG(D_NET, "fragnob %d < available page %d: with"
-                                     " remaining %d iovs with %d nob left\n",
-                              fragnob, (int)PAGE_SIZE - page_offset, niov,
-                              nob);
-                       tx->tx_gaps = true;
-               }
-
-               sg_set_page(sg, page, fragnob, page_offset);
-               sg = sg_next(sg);
-               if (!sg) {
-                       CERROR("lacking enough sg entries to map tx\n");
-                       return -EFAULT;
-               }
-
-                if (offset + fragnob < iov->iov_len) {
-                        offset += fragnob;
-                } else {
-                        offset = 0;
-                        iov++;
-                        niov--;
-                }
-                nob -= fragnob;
-        } while (nob > 0);
-
-        return kiblnd_map_tx(ni, tx, rd, sg - tx->tx_frags);
-}
-
 static int kiblnd_setup_rd_kiov(struct lnet_ni *ni, struct kib_tx *tx,
                                struct kib_rdma_desc *rd, int nkiov,
                                struct bio_vec *kiov, int offset, int nob)
 static int kiblnd_setup_rd_kiov(struct lnet_ni *ni, struct kib_tx *tx,
                                struct kib_rdma_desc *rd, int nkiov,
                                struct bio_vec *kiov, int offset, int nob)
@@ -1850,7 +1776,7 @@ failed_0:
 
 int
 kiblnd_recv(struct lnet_ni *ni, void *private, struct lnet_msg *lntmsg,
 
 int
 kiblnd_recv(struct lnet_ni *ni, void *private, struct lnet_msg *lntmsg,
-           int delayed, unsigned int niov, struct kvec *iov, struct bio_vec *kiov,
+           int delayed, unsigned int niov, struct bio_vec *kiov,
            unsigned int offset, unsigned int mlen, unsigned int rlen)
 {
        struct kib_rx *rx = private;
            unsigned int offset, unsigned int mlen, unsigned int rlen)
 {
        struct kib_rx *rx = private;
@@ -1864,8 +1790,6 @@ kiblnd_recv(struct lnet_ni *ni, void *private, struct lnet_msg *lntmsg,
 
        LASSERT (mlen <= rlen);
        LASSERT (!in_interrupt());
 
        LASSERT (mlen <= rlen);
        LASSERT (!in_interrupt());
-       /* Either all pages or all vaddrs */
-       LASSERT (!(kiov != NULL && iov != NULL));
 
        switch (rxmsg->ibm_type) {
        default:
 
        switch (rxmsg->ibm_type) {
        default:
@@ -1881,16 +1805,11 @@ kiblnd_recv(struct lnet_ni *ni, void *private, struct lnet_msg *lntmsg,
                         break;
                 }
 
                         break;
                 }
 
-                if (kiov != NULL)
-                        lnet_copy_flat2kiov(niov, kiov, offset,
-                                            IBLND_MSG_SIZE, rxmsg,
-                                           offsetof(struct kib_msg, ibm_u.immediate.ibim_payload),
-                                            mlen);
-                else
-                        lnet_copy_flat2iov(niov, iov, offset,
-                                           IBLND_MSG_SIZE, rxmsg,
-                                          offsetof(struct kib_msg, ibm_u.immediate.ibim_payload),
-                                           mlen);
+               lnet_copy_flat2kiov(niov, kiov, offset,
+                                   IBLND_MSG_SIZE, rxmsg,
+                                   offsetof(struct kib_msg,
+                                            ibm_u.immediate.ibim_payload),
+                                   mlen);
                lnet_finalize(lntmsg, 0);
                break;
 
                lnet_finalize(lntmsg, 0);
                break;
 
@@ -1917,12 +1836,8 @@ kiblnd_recv(struct lnet_ni *ni, void *private, struct lnet_msg *lntmsg,
 
                txmsg = tx->tx_msg;
                rd = &txmsg->ibm_u.putack.ibpam_rd;
 
                txmsg = tx->tx_msg;
                rd = &txmsg->ibm_u.putack.ibpam_rd;
-               if (kiov == NULL)
-                       rc = kiblnd_setup_rd_iov(ni, tx, rd,
-                                                niov, iov, offset, mlen);
-               else
-                       rc = kiblnd_setup_rd_kiov(ni, tx, rd,
-                                                 niov, kiov, offset, mlen);
+               rc = kiblnd_setup_rd_kiov(ni, tx, rd,
+                                         niov, kiov, offset, mlen);
                if (rc != 0) {
                        CERROR("Can't setup PUT sink for %s: %d\n",
                               libcfs_nid2str(conn->ibc_peer->ibp_nid), rc);
                if (rc != 0) {
                        CERROR("Can't setup PUT sink for %s: %d\n",
                               libcfs_nid2str(conn->ibc_peer->ibp_nid), rc);
index a6b760c..c12d86c 100644 (file)
@@ -581,7 +581,7 @@ int ksocknal_ctl(struct lnet_ni *ni, unsigned int cmd, void *arg);
 int ksocknal_send(struct lnet_ni *ni, void *private, struct lnet_msg *lntmsg);
 int ksocknal_recv(struct lnet_ni *ni, void *private, struct lnet_msg *lntmsg,
                  int delayed, unsigned int niov,
 int ksocknal_send(struct lnet_ni *ni, void *private, struct lnet_msg *lntmsg);
 int ksocknal_recv(struct lnet_ni *ni, void *private, struct lnet_msg *lntmsg,
                  int delayed, unsigned int niov,
-                 struct kvec *iov, struct bio_vec *kiov,
+                 struct bio_vec *kiov,
                   unsigned int offset, unsigned int mlen, unsigned int rlen);
 int ksocknal_accept(struct lnet_ni *ni, struct socket *sock);
 
                   unsigned int offset, unsigned int mlen, unsigned int rlen);
 int ksocknal_accept(struct lnet_ni *ni, struct socket *sock);
 
index de5773c..ed25584 100644 (file)
@@ -1367,7 +1367,7 @@ ksocknal_process_receive(struct ksock_conn *conn,
 
 int
 ksocknal_recv(struct lnet_ni *ni, void *private, struct lnet_msg *msg,
 
 int
 ksocknal_recv(struct lnet_ni *ni, void *private, struct lnet_msg *msg,
-             int delayed, unsigned int niov, struct kvec *iov,
+             int delayed, unsigned int niov,
              struct bio_vec *kiov, unsigned int offset, unsigned int mlen,
              unsigned int rlen)
 {
              struct bio_vec *kiov, unsigned int offset, unsigned int mlen,
              unsigned int rlen)
 {
@@ -1381,21 +1381,21 @@ ksocknal_recv(struct lnet_ni *ni, void *private, struct lnet_msg *msg,
        conn->ksnc_rx_nob_wanted = mlen;
        conn->ksnc_rx_nob_left   = rlen;
 
        conn->ksnc_rx_nob_wanted = mlen;
        conn->ksnc_rx_nob_left   = rlen;
 
-        if (mlen == 0 || iov != NULL) {
-                conn->ksnc_rx_nkiov = 0;
-                conn->ksnc_rx_kiov = NULL;
-                conn->ksnc_rx_iov = conn->ksnc_rx_iov_space.iov;
-                conn->ksnc_rx_niov =
-                        lnet_extract_iov(LNET_MAX_IOV, conn->ksnc_rx_iov,
-                                         niov, iov, offset, mlen);
-        } else {
-                conn->ksnc_rx_niov = 0;
-                conn->ksnc_rx_iov  = NULL;
-                conn->ksnc_rx_kiov = conn->ksnc_rx_iov_space.kiov;
-                conn->ksnc_rx_nkiov =
-                        lnet_extract_kiov(LNET_MAX_IOV, conn->ksnc_rx_kiov,
-                                          niov, kiov, offset, mlen);
-        }
+       if (mlen == 0) {
+               conn->ksnc_rx_nkiov = 0;
+               conn->ksnc_rx_kiov = NULL;
+               conn->ksnc_rx_iov = conn->ksnc_rx_iov_space.iov;
+               conn->ksnc_rx_niov =
+                       lnet_extract_iov(LNET_MAX_IOV, conn->ksnc_rx_iov,
+                                        niov, NULL, offset, mlen);
+       } else {
+               conn->ksnc_rx_niov = 0;
+               conn->ksnc_rx_iov  = NULL;
+               conn->ksnc_rx_kiov = conn->ksnc_rx_iov_space.kiov;
+               conn->ksnc_rx_nkiov =
+                       lnet_extract_kiov(LNET_MAX_IOV, conn->ksnc_rx_kiov,
+                                         niov, kiov, offset, mlen);
+       }
 
         LASSERT (mlen ==
                  lnet_iov_nob (conn->ksnc_rx_niov, conn->ksnc_rx_iov) +
 
         LASSERT (mlen ==
                  lnet_iov_nob (conn->ksnc_rx_niov, conn->ksnc_rx_iov) +
index 50fc646..ca4f62d 100644 (file)
@@ -707,7 +707,7 @@ lnet_ni_recv(struct lnet_ni *ni, void *private, struct lnet_msg *msg,
        }
 
        rc = (ni->ni_net->net_lnd->lnd_recv)(ni, private, msg, delayed,
        }
 
        rc = (ni->ni_net->net_lnd->lnd_recv)(ni, private, msg, delayed,
-                                            niov, NULL, kiov, offset, mlen,
+                                            niov, kiov, offset, mlen,
                                             rlen);
        if (rc < 0)
                lnet_finalize(msg, rc);
                                             rlen);
        if (rc < 0)
                lnet_finalize(msg, rc);
index e3506fc..31e2b66 100644 (file)
@@ -45,22 +45,16 @@ lolnd_send(struct lnet_ni *ni, void *private, struct lnet_msg *lntmsg)
 static int
 lolnd_recv(struct lnet_ni *ni, void *private, struct lnet_msg *lntmsg,
           int delayed, unsigned int niov,
 static int
 lolnd_recv(struct lnet_ni *ni, void *private, struct lnet_msg *lntmsg,
           int delayed, unsigned int niov,
-          struct kvec *iov, struct bio_vec *kiov,
+          struct bio_vec *kiov,
           unsigned int offset, unsigned int mlen, unsigned int rlen)
 {
        struct lnet_msg *sendmsg = private;
 
           unsigned int offset, unsigned int mlen, unsigned int rlen)
 {
        struct lnet_msg *sendmsg = private;
 
-       if (lntmsg != NULL) {                   /* not discarding */
-               if (iov != NULL)
-                       lnet_copy_kiov2iov(niov, iov, offset,
-                                          sendmsg->msg_niov,
-                                          sendmsg->msg_kiov,
-                                          sendmsg->msg_offset, mlen);
-               else
-                       lnet_copy_kiov2kiov(niov, kiov, offset,
-                                           sendmsg->msg_niov,
-                                           sendmsg->msg_kiov,
-                                           sendmsg->msg_offset, mlen);
+       if (lntmsg) {                   /* not discarding */
+               lnet_copy_kiov2kiov(niov, kiov, offset,
+                                   sendmsg->msg_niov,
+                                   sendmsg->msg_kiov,
+                                   sendmsg->msg_offset, mlen);
 
                lnet_finalize(lntmsg, 0);
        }
 
                lnet_finalize(lntmsg, 0);
        }