Whamcloud - gitweb
LU-13004 lnet: discard kvec option from lnet_libmd. 43/37843/7
authorMr NeilBrown <neilb@suse.de>
Wed, 4 Dec 2019 04:12:08 +0000 (15:12 +1100)
committerOleg Drokin <green@whamcloud.com>
Fri, 1 May 2020 04:26:56 +0000 (04:26 +0000)
The 'struct kvec' field in 'struct lnet_libmd' is no longer set - the
memory is always presented as pages.  So remove that option and the
union that contained iov and kiov.

Rename md_iov.kiov to md_kiov.
Discard all code that made use of md_iov.iov.

Test-Parameters: trivial
Signed-off-by: Mr NeilBrown <neilb@suse.de>
Change-Id: Ic74a496c4c3df786d7fc194a1ad758c4daccd819
Reviewed-on: https://review.whamcloud.com/37843
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-lnet.h
lnet/include/lnet/lib-types.h
lnet/klnds/gnilnd/gnilnd_cb.c
lnet/klnds/o2iblnd/o2iblnd_cb.c
lnet/lnet/lib-md.c
lnet/lnet/lib-move.c

index f028224..c414393 100644 (file)
@@ -206,7 +206,7 @@ lnet_net_lock_current(void)
 
 #define MAX_PORTALS    64
 
-#define LNET_SMALL_MD_SIZE   offsetof(struct lnet_libmd, md_iov.iov[1])
+#define LNET_SMALL_MD_SIZE   offsetof(struct lnet_libmd, md_kiov[1])
 extern struct kmem_cache *lnet_mes_cachep;      /* MEs kmem_cache */
 extern struct kmem_cache *lnet_small_mds_cachep; /* <= LNET_SMALL_MD_SIZE bytes
                                                  * MDs kmem_cache */
@@ -220,10 +220,7 @@ lnet_md_free(struct lnet_libmd *md)
 
        LASSERTF(md->md_rspt_ptr == NULL, "md %p rsp %p\n", md, md->md_rspt_ptr);
 
-       if ((md->md_options & LNET_MD_KIOV) != 0)
-               size = offsetof(struct lnet_libmd, md_iov.kiov[md->md_niov]);
-       else
-               size = offsetof(struct lnet_libmd, md_iov.iov[md->md_niov]);
+       size = offsetof(struct lnet_libmd, md_kiov[md->md_niov]);
 
        if (size <= LNET_SMALL_MD_SIZE) {
                CDEBUG(D_MALLOC, "slab-freed 'md' at %p.\n", md);
index 8cc0609..872c0d4 100644 (file)
@@ -211,10 +211,7 @@ struct lnet_libmd {
        struct lnet_rsp_tracker *md_rspt_ptr;
        lnet_handler_t           md_handler;
        struct lnet_handle_md    md_bulk_handle;
-       union {
-               struct kvec      iov[LNET_MAX_IOV];
-               struct bio_vec   kiov[LNET_MAX_IOV];
-       } md_iov;
+       struct bio_vec           md_kiov[LNET_MAX_IOV];
 };
 
 #define LNET_MD_FLAG_ZOMBIE     (1 << 0)
index ea712dc..97b8618 100644 (file)
@@ -813,7 +813,7 @@ kgnilnd_parse_lnet_rdma(struct lnet_msg *lntmsg, unsigned int *niov,
                if ((lntmsg->msg_md->md_options & LNET_MD_KIOV) == 0) {
                        *kiov = NULL;
                } else {
-                       *kiov = lntmsg->msg_md->md_iov.kiov;
+                       *kiov = lntmsg->msg_md->md_kiov;
                }
                *niov = lntmsg->msg_md->md_niov;
                *nob = lntmsg->msg_md->md_length;
@@ -2183,16 +2183,9 @@ kgnilnd_send(struct lnet_ni *ni, void *private, struct lnet_msg *lntmsg)
                        rc = -ENOMEM;
                        goto out;
                }
-               /* slightly different options as we might actually have a GET with a
-                * MD_KIOV set but a non-NULL md_iov.iov */
-               if ((lntmsg->msg_md->md_options & LNET_MD_KIOV) == 0)
-                       rc = kgnilnd_setup_rdma_buffer(tx, lntmsg->msg_md->md_niov,
-                                                     lntmsg->msg_md->md_iov.iov, NULL,
-                                                     0, lntmsg->msg_md->md_length);
-               else
-                       rc = kgnilnd_setup_rdma_buffer(tx, lntmsg->msg_md->md_niov,
-                                                     NULL, lntmsg->msg_md->md_iov.kiov,
-                                                     0, lntmsg->msg_md->md_length);
+               rc = kgnilnd_setup_rdma_buffer(tx, lntmsg->msg_md->md_niov,
+                                              NULL, lntmsg->msg_md->md_kiov,
+                                              0, lntmsg->msg_md->md_length);
                if (rc != 0) {
                        CERROR("unable to setup buffer: %d\n", rc);
                        kgnilnd_tx_done(tx, rc);
index e79f6ce..c107985 100644 (file)
@@ -1695,16 +1695,10 @@ kiblnd_send(struct lnet_ni *ni, void *private, struct lnet_msg *lntmsg)
 
                ibmsg = tx->tx_msg;
                rd = &ibmsg->ibm_u.get.ibgm_rd;
-               if ((lntmsg->msg_md->md_options & LNET_MD_KIOV) == 0)
-                       rc = kiblnd_setup_rd_iov(ni, tx, rd,
-                                                lntmsg->msg_md->md_niov,
-                                                lntmsg->msg_md->md_iov.iov,
-                                                0, lntmsg->msg_md->md_length);
-               else
-                       rc = kiblnd_setup_rd_kiov(ni, tx, rd,
-                                                 lntmsg->msg_md->md_niov,
-                                                 lntmsg->msg_md->md_iov.kiov,
-                                                 0, lntmsg->msg_md->md_length);
+               rc = kiblnd_setup_rd_kiov(ni, tx, rd,
+                                         lntmsg->msg_md->md_niov,
+                                         lntmsg->msg_md->md_kiov,
+                                         0, lntmsg->msg_md->md_length);
                if (rc != 0) {
                        CERROR("Can't setup GET sink for %s: %d\n",
                               libcfs_nid2str(target.nid), rc);
index 8830820..0ab9060 100644 (file)
@@ -109,6 +109,7 @@ lnet_cpt_of_md(struct lnet_libmd *md, unsigned int offset)
 {
        int cpt = CFS_CPT_ANY;
        unsigned int niov;
+       struct bio_vec *kiov;
 
        /*
         * if the md_options has a bulk handle then we want to look at the
@@ -121,63 +122,21 @@ lnet_cpt_of_md(struct lnet_libmd *md, unsigned int offset)
        if (!md || md->md_niov == 0)
                return CFS_CPT_ANY;
 
+       kiov = md->md_kiov;
        niov = md->md_niov;
 
-       /*
-        * There are three cases to handle:
-        *  1. The MD is using struct bio_vec
-        *  2. The MD is using struct kvec
-        *  3. Contiguous buffer allocated via vmalloc
-        *
-        *  in case 2 we can use virt_to_page() macro to get the page
-        *  address of the memory kvec describes.
-        *
-        *  in case 3 use is_vmalloc_addr() and vmalloc_to_page()
-        *
-        * The offset provided can be within the first iov/kiov entry or
-        * it could go beyond it. In that case we need to make sure to
-        * look at the page which actually contains the data that will be
-        * DMAed.
-        */
-       if ((md->md_options & LNET_MD_KIOV) != 0) {
-               struct bio_vec *kiov = md->md_iov.kiov;
-
-               while (offset >= kiov->bv_len) {
-                       offset -= kiov->bv_len;
-                       niov--;
-                       kiov++;
-                       if (niov == 0) {
-                               CERROR("offset %d goes beyond kiov\n", offset);
-                               goto out;
-                       }
-               }
-
-               cpt = cfs_cpt_of_node(lnet_cpt_table(),
-                               page_to_nid(kiov->bv_page));
-       } else {
-               struct kvec *iov = md->md_iov.iov;
-               unsigned long vaddr;
-               struct page *page;
-
-               while (offset >= iov->iov_len) {
-                       offset -= iov->iov_len;
-                       niov--;
-                       iov++;
-                       if (niov == 0) {
-                               CERROR("offset %d goes beyond iov\n", offset);
-                               goto out;
-                       }
-               }
-
-               vaddr = ((unsigned long)iov->iov_base) + offset;
-               page = lnet_kvaddr_to_page(vaddr);
-               if (!page) {
-                       CERROR("Couldn't resolve vaddr 0x%lx to page\n", vaddr);
+       while (offset >= kiov->bv_len) {
+               offset -= kiov->bv_len;
+               niov--;
+               kiov++;
+               if (niov == 0) {
+                       CERROR("offset %d goes beyond kiov\n", offset);
                        goto out;
                }
-               cpt = cfs_cpt_of_node(lnet_cpt_table(), page_to_nid(page));
        }
 
+       cpt = cfs_cpt_of_node(lnet_cpt_table(),
+                             page_to_nid(kiov->bv_page));
 out:
        return cpt;
 }
@@ -196,7 +155,7 @@ lnet_md_build(struct lnet_md *umd, int unlink)
        else
                niov = DIV_ROUND_UP(offset_in_page(umd->start) + umd->length,
                                    PAGE_SIZE);
-       size = offsetof(struct lnet_libmd, md_iov.kiov[niov]);
+       size = offsetof(struct lnet_libmd, md_kiov[niov]);
 
        if (size <= LNET_SMALL_MD_SIZE) {
                lmd = kmem_cache_zalloc(lnet_small_mds_cachep, GFP_NOFS);
@@ -230,18 +189,18 @@ lnet_md_build(struct lnet_md *umd, int unlink)
        lmd->md_bulk_handle = umd->bulk_handle;
 
        if (umd->options & LNET_MD_KIOV) {
-               memcpy(lmd->md_iov.kiov, umd->start,
-                      niov * sizeof(lmd->md_iov.kiov[0]));
+               memcpy(lmd->md_kiov, umd->start,
+                      niov * sizeof(lmd->md_kiov[0]));
 
                for (i = 0; i < (int)niov; i++) {
                        /* We take the page pointer on trust */
-                       if (lmd->md_iov.kiov[i].bv_offset +
-                           lmd->md_iov.kiov[i].bv_len > PAGE_SIZE) {
+                       if (lmd->md_kiov[i].bv_offset +
+                           lmd->md_kiov[i].bv_len > PAGE_SIZE) {
                                lnet_md_free(lmd);
                                return ERR_PTR(-EINVAL); /* invalid length */
                        }
 
-                       total_length += lmd->md_iov.kiov[i].bv_len;
+                       total_length += lmd->md_kiov[i].bv_len;
                }
 
                lmd->md_length = total_length;
@@ -263,10 +222,10 @@ lnet_md_build(struct lnet_md *umd, int unlink)
 
                        plen = min_t(int, len, PAGE_SIZE - offset_in_page(pa));
 
-                       lmd->md_iov.kiov[i].bv_page =
+                       lmd->md_kiov[i].bv_page =
                                lnet_kvaddr_to_page((unsigned long) pa);
-                       lmd->md_iov.kiov[i].bv_offset = offset_in_page(pa);
-                       lmd->md_iov.kiov[i].bv_len = plen;
+                       lmd->md_kiov[i].bv_offset = offset_in_page(pa);
+                       lmd->md_kiov[i].bv_len = plen;
 
                        len -= plen;
                        pa += plen;
index 5330e1a..7b86f24 100644 (file)
@@ -727,10 +727,7 @@ lnet_setpayloadbuffer(struct lnet_msg *msg)
        LASSERT(msg->msg_kiov == NULL);
 
        msg->msg_niov = md->md_niov;
-       if ((md->md_options & LNET_MD_KIOV) != 0)
-               msg->msg_kiov = md->md_iov.kiov;
-       else
-               msg->msg_iov = md->md_iov.iov;
+       msg->msg_kiov = md->md_kiov;
 }
 
 void