]> git.openfabrics.org - ~emulex/for-vlad/compat-rdma.git/commitdiff
Added iSER backport and refreshed other backports
authorVladimir Sokolovsky <vlad@mellanox.com>
Mon, 16 Jun 2014 13:54:49 +0000 (16:54 +0300)
committerVladimir Sokolovsky <vlad@mellanox.com>
Mon, 16 Jun 2014 13:54:49 +0000 (16:54 +0300)
Signed-off-by: Vladimir Sokolovsky <vlad@mellanox.com>
patches/0010-iw_cxgb4-Backports-for-RHEL6.4-RHEL6.5-and-SLES11sp3.patch
patches/0029-NFSRDMA-fix-client-connect-crash-with-RHEL-SLES-back.patch [new file with mode: 0644]
patches/0029-nfsrdma-backport-for-xprt-rdma-connect.patch [deleted file]
patches/0030-be2net-Fixing-vlan-crash-in-RHEL-6.5-and-6.4.patch
patches/0031-BACKPORT-ib_iser.patch [new file with mode: 0644]

index 3e02d04f381842a526552ce6e1543970ab6bece0..7358d4ab0c892c5c64bffac384b8119741f675ea 100644 (file)
@@ -3,10 +3,10 @@ Subject: [PATCH] iw_cxgb4: Backports for RHEL6.4, RHEL6.5 and SLES11sp3
 
 Signed-off-by: Kumar Sanghvi <kumaras@chelsio.com>
 ---
- drivers/infiniband/hw/cxgb4/cm.c       | 79 ++++++++++++++++++++++++++++++++++
- drivers/infiniband/hw/cxgb4/iw_cxgb4.h | 17 ++++++++
+ drivers/infiniband/hw/cxgb4/cm.c       | 81 ++++++++++++++++++++++++++++++++--
+ drivers/infiniband/hw/cxgb4/iw_cxgb4.h | 17 +++++++
  drivers/infiniband/hw/cxgb4/mem.c      |  1 +
- 3 files changed, 97 insertions(+)
+ 3 files changed, 96 insertions(+), 3 deletions(-)
 
 diff --git a/drivers/infiniband/hw/cxgb4/cm.c b/drivers/infiniband/hw/cxgb4/cm.c
 index xxxxxxx..xxxxxxx xxxxxx
diff --git a/patches/0029-NFSRDMA-fix-client-connect-crash-with-RHEL-SLES-back.patch b/patches/0029-NFSRDMA-fix-client-connect-crash-with-RHEL-SLES-back.patch
new file mode 100644 (file)
index 0000000..9cc742d
--- /dev/null
@@ -0,0 +1,31 @@
+From: Steve Wise <swise@opengridcomputing.com>
+Subject: [PATCH] NFSRDMA: fix client connect crash with RHEL/SLES backports.
+
+xprt_rdma_connect() takes 1 parameter in sles11sp3 and rhel6.5 kernels.
+Yet the OFED version takes 2 parameters.  Need more backport magic...
+
+Signed-off-by: Steve Wise <swise@opengridcomputing.com>
+---
+ net/sunrpc/xprtrdma/transport.c | 7 +++++++
+ 1 file changed, 7 insertions(+)
+
+diff --git a/net/sunrpc/xprtrdma/transport.c b/net/sunrpc/xprtrdma/transport.c
+index xxxxxxx..xxxxxxx xxxxxx
+--- a/net/sunrpc/xprtrdma/transport.c
++++ b/net/sunrpc/xprtrdma/transport.c
+@@ -431,8 +431,15 @@ xprt_rdma_set_port(struct rpc_xprt *xprt, u16 port)
+ }
+ static void
++#if (LINUX_VERSION_CODE < KERNEL_VERSION(3,1,0))
++xprt_rdma_connect(struct rpc_task *task)
++#else
+ xprt_rdma_connect(struct rpc_xprt *xprt, struct rpc_task *task)
++#endif
+ {
++#if (LINUX_VERSION_CODE < KERNEL_VERSION(3,1,0))
++      struct rpc_xprt *xprt = task->tk_xprt;
++#endif
+       struct rpcrdma_xprt *r_xprt = rpcx_to_rdmax(xprt);
+       if (r_xprt->rx_ep.rep_connected != 0) {
diff --git a/patches/0029-nfsrdma-backport-for-xprt-rdma-connect.patch b/patches/0029-nfsrdma-backport-for-xprt-rdma-connect.patch
deleted file mode 100644 (file)
index 3e0430b..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
---- a/net/sunrpc/xprtrdma/transport.c  2014-04-02 14:59:56.833964877 -0500
-+++ b/net/sunrpc/xprtrdma/transport.c  2014-04-02 14:58:40.177170944 -0500
-@@ -431,8 +431,15 @@ xprt_rdma_set_port(struct rpc_xprt *xprt
- }
- static void
-+#if (LINUX_VERSION_CODE < KERNEL_VERSION(3,1,0))
-+xprt_rdma_connect(struct rpc_task *task)
-+#else
- xprt_rdma_connect(struct rpc_xprt *xprt, struct rpc_task *task)
-+#endif
- {
-+#if (LINUX_VERSION_CODE < KERNEL_VERSION(3,1,0))
-+      struct rpc_xprt *xprt = task->tk_xprt;
-+#endif
-       struct rpcrdma_xprt *r_xprt = rpcx_to_rdmax(xprt);
-       if (r_xprt->rx_ep.rep_connected != 0) {
index 5d8936965c45d5e8450f2ed6997377a47a4d8561..d41403bac474ee88403aa2705b7cac359e13784c 100644 (file)
@@ -1,16 +1,14 @@
-From de2cba89e1b6c3325259691964ea2dd3d7fd0bc7 Mon Sep 17 00:00:00 2001
 From: Selvin Xavier <selvin.xavier@emulex.com>
-Date: Mon, 10 Mar 2014 17:06:44 +0530
 Subject: [PATCH] be2net: Fixing vlan crash in RHEL 6.5 and 6.4
 
 Signed-off-by: Selvin Xavier <selvin.xavier@emulex.com>
 ---
- drivers/net/ethernet/emulex/benet/be_compat.h |    7 +++++
- drivers/net/ethernet/emulex/benet/be_main.c   |   32 ++++++++++++++++++-------
+ drivers/net/ethernet/emulex/benet/be_compat.h |  7 ++++++
+ drivers/net/ethernet/emulex/benet/be_main.c   | 32 +++++++++++++++++++--------
  2 files changed, 30 insertions(+), 9 deletions(-)
 
 diff --git a/drivers/net/ethernet/emulex/benet/be_compat.h b/drivers/net/ethernet/emulex/benet/be_compat.h
-index 3daa68a..d30267e 100644
+index xxxxxxx..xxxxxxx xxxxxx
 --- a/drivers/net/ethernet/emulex/benet/be_compat.h
 +++ b/drivers/net/ethernet/emulex/benet/be_compat.h
 @@ -11,6 +11,13 @@
@@ -28,7 +26,7 @@ index 3daa68a..d30267e 100644
                                                __be16 vlan_proto,
                                                ushort vlan_tag)
 diff --git a/drivers/net/ethernet/emulex/benet/be_main.c b/drivers/net/ethernet/emulex/benet/be_main.c
-index 2ff0d29..6f12546 100644
+index xxxxxxx..xxxxxxx xxxxxx
 --- a/drivers/net/ethernet/emulex/benet/be_main.c
 +++ b/drivers/net/ethernet/emulex/benet/be_main.c
 @@ -1135,17 +1135,18 @@ static void be_vlan_add_vid(struct net_device *netdev,  u16 vid)
@@ -113,6 +111,3 @@ index 2ff0d29..6f12546 100644
                        be_rx_compl_process_gro(rxo, napi, rxcp);
                else
                        be_rx_compl_process(rxo, rxcp);
--- 
-1.7.1
-
diff --git a/patches/0031-BACKPORT-ib_iser.patch b/patches/0031-BACKPORT-ib_iser.patch
new file mode 100644 (file)
index 0000000..7447561
--- /dev/null
@@ -0,0 +1,215 @@
+From: Vladimir Sokolovsky <vlad@mellanox.com>
+Subject: [PATCH] BACKPORT: ib_iser
+
+Signed-off-by: Vladimir Sokolovsky <vlad@mellanox.com>
+---
+ drivers/infiniband/ulp/iser/iscsi_iser.c     | 49 +++++++++++++++++++++++++++-
+ drivers/infiniband/ulp/iser/iser_initiator.c |  6 ++++
+ drivers/infiniband/ulp/iser/iser_memory.c    | 22 ++++++++++++-
+ 3 files changed, 75 insertions(+), 2 deletions(-)
+
+diff --git a/drivers/infiniband/ulp/iser/iscsi_iser.c b/drivers/infiniband/ulp/iser/iscsi_iser.c
+index xxxxxxx..xxxxxxx xxxxxx
+--- a/drivers/infiniband/ulp/iser/iscsi_iser.c
++++ b/drivers/infiniband/ulp/iser/iscsi_iser.c
+@@ -538,6 +538,7 @@ iscsi_iser_conn_get_stats(struct iscsi_cls_conn *cls_conn, struct iscsi_stats *s
+       stats->custom[3].value = conn->fmr_unalign_cnt;
+ }
++#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,39)) || defined(CONFIG_COMPAT_ISCSI_ISER_GET_EP_PARAM)
+ static int iscsi_iser_get_ep_param(struct iscsi_endpoint *ep,
+                                  enum iscsi_param param, char *buf)
+ {
+@@ -560,6 +561,7 @@ static int iscsi_iser_get_ep_param(struct iscsi_endpoint *ep,
+       return len;
+ }
++#endif
+ static struct iscsi_endpoint *
+ iscsi_iser_ep_connect(struct Scsi_Host *shost, struct sockaddr *dst_addr,
+@@ -632,8 +634,12 @@ iscsi_iser_ep_disconnect(struct iscsi_endpoint *ep)
+       iser_info("ib conn %p state %d\n", ib_conn, ib_conn->state);
+       iser_conn_terminate(ib_conn);
+ }
+-
++#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,3,0))
+ static umode_t iser_attr_is_visible(int param_type, int param)
++#elif (LINUX_VERSION_CODE >= KERNEL_VERSION(3,2,0)) || defined(CONFIG_COMPAT_ISER_ATTR_IS_VISIBLE)
++static mode_t iser_attr_is_visible(int param_type, int param)
++#endif
++#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,2,0)) || defined(CONFIG_COMPAT_ISER_ATTR_IS_VISIBLE)
+ {
+       switch (param_type) {
+       case ISCSI_HOST_PARAM:
+@@ -677,7 +683,9 @@ static umode_t iser_attr_is_visible(int param_type, int param)
+               case ISCSI_PARAM_TGT_RESET_TMO:
+               case ISCSI_PARAM_IFACE_NAME:
+               case ISCSI_PARAM_INITIATOR_NAME:
++#if defined(CONFIG_ISER_DISCOVERY)
+               case ISCSI_PARAM_DISCOVERY_SESS:
++#endif
+                       return S_IRUGO;
+               default:
+                       return 0;
+@@ -686,6 +694,7 @@ static umode_t iser_attr_is_visible(int param_type, int param)
+       return 0;
+ }
++#endif
+ static struct scsi_host_template iscsi_iser_sht = {
+       .module                 = THIS_MODULE,
+@@ -697,7 +706,11 @@ static struct scsi_host_template iscsi_iser_sht = {
+       .cmd_per_lun            = ISER_DEF_CMD_PER_LUN,
+       .eh_abort_handler       = iscsi_eh_abort,
+       .eh_device_reset_handler= iscsi_eh_device_reset,
++#if defined(CONFIG_COMPAT_ISCSI_EH_TARGET_RESET)
++      .eh_target_reset_handler = iscsi_eh_target_reset,
++#else
+       .eh_target_reset_handler = iscsi_eh_recover_target,
++#endif
+       .target_alloc           = iscsi_target_alloc,
+       .use_clustering         = DISABLE_CLUSTERING,
+       .proc_name              = "iscsi_iser",
+@@ -707,7 +720,37 @@ static struct scsi_host_template iscsi_iser_sht = {
+ static struct iscsi_transport iscsi_iser_transport = {
+       .owner                  = THIS_MODULE,
+       .name                   = "iser",
++#if defined(CONFIG_ISER_DISCOVERY)
+       .caps                   = CAP_RECOVERY_L0 | CAP_MULTI_R2T | CAP_TEXT_NEGO,
++#else
++      .caps                   = CAP_RECOVERY_L0 | CAP_MULTI_R2T,
++#endif
++#if defined(CONFIG_COMPAT_ISCSI_TRANSPORT_PARAM_MASK)
++        .param_mask             = ISCSI_MAX_RECV_DLENGTH |
++                                  ISCSI_MAX_XMIT_DLENGTH |
++                                  ISCSI_HDRDGST_EN |
++                                  ISCSI_DATADGST_EN |
++                                  ISCSI_INITIAL_R2T_EN |
++                                  ISCSI_MAX_R2T |
++                                  ISCSI_IMM_DATA_EN |
++                                  ISCSI_FIRST_BURST |
++                                  ISCSI_MAX_BURST |
++                                  ISCSI_PDU_INORDER_EN |
++                                  ISCSI_DATASEQ_INORDER_EN |
++                                  ISCSI_EXP_STATSN |
++                                  ISCSI_PERSISTENT_PORT |
++                                  ISCSI_PERSISTENT_ADDRESS |
++                                  ISCSI_TARGET_NAME | ISCSI_TPGT |
++                                  ISCSI_USERNAME | ISCSI_PASSWORD |
++                                  ISCSI_USERNAME_IN | ISCSI_PASSWORD_IN |
++                                  ISCSI_FAST_ABORT | ISCSI_ABORT_TMO |
++                                  ISCSI_LU_RESET_TMO | ISCSI_TGT_RESET_TMO |
++                                  ISCSI_PING_TMO | ISCSI_RECV_TMO |
++                                  ISCSI_IFACE_NAME | ISCSI_INITIATOR_NAME,
++        .host_param_mask        = ISCSI_HOST_HWADDRESS |
++                                  ISCSI_HOST_NETDEV_NAME |
++                                  ISCSI_HOST_INITIATOR_NAME,
++#endif
+       /* session management */
+       .create_session         = iscsi_iser_session_create,
+       .destroy_session        = iscsi_iser_session_destroy,
+@@ -715,10 +758,14 @@ static struct iscsi_transport iscsi_iser_transport = {
+       .create_conn            = iscsi_iser_conn_create,
+       .bind_conn              = iscsi_iser_conn_bind,
+       .destroy_conn           = iscsi_iser_conn_destroy,
++#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,2,0)) || defined(CONFIG_COMPAT_ISER_ATTR_IS_VISIBLE)
+       .attr_is_visible        = iser_attr_is_visible,
++#endif
+       .set_param              = iscsi_iser_set_param,
+       .get_conn_param         = iscsi_conn_get_param,
++#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,39)) || defined(CONFIG_COMPAT_ISCSI_ISER_GET_EP_PARAM)
+       .get_ep_param           = iscsi_iser_get_ep_param,
++#endif
+       .get_session_param      = iscsi_session_get_param,
+       .start_conn             = iscsi_conn_start,
+       .stop_conn              = iscsi_iser_conn_stop,
+diff --git a/drivers/infiniband/ulp/iser/iser_initiator.c b/drivers/infiniband/ulp/iser/iser_initiator.c
+index xxxxxxx..xxxxxxx xxxxxx
+--- a/drivers/infiniband/ulp/iser/iser_initiator.c
++++ b/drivers/infiniband/ulp/iser/iser_initiator.c
+@@ -343,12 +343,14 @@ static int iser_post_rx_bufs(struct iscsi_conn *conn, struct iscsi_hdr *req)
+       WARN_ON(iser_conn->ib_conn->post_recv_buf_count != 1);
+       WARN_ON(atomic_read(&iser_conn->ib_conn->post_send_buf_count) != 0);
++#if defined(CONFIG_ISER_DISCOVERY)
+       if (session->discovery_sess) {
+               iser_info("Discovery session, re-using login RX buffer\n");
+               return 0;
+       } else
+               iser_info("Normal session, posting batch of RX %d buffers\n",
+                         iser_conn->ib_conn->min_posted_rx);
++#endif
+       /* Initial post receive buffers */
+       if (iser_post_recvm(iser_conn->ib_conn,
+@@ -369,7 +371,11 @@ int iser_send_command(struct iscsi_conn *conn,
+       unsigned long edtl;
+       int err;
+       struct iser_data_buf *data_buf;
++#if  (LINUX_VERSION_CODE >= KERNEL_VERSION(3,1,0)) || defined(CONFIG_COMPAT_IF_ISCSI_SCSI_REQ)
+       struct iscsi_scsi_req *hdr = (struct iscsi_scsi_req *)task->hdr;
++#else
++      struct iscsi_cmd *hdr =  (struct iscsi_cmd *)task->hdr;
++#endif
+       struct scsi_cmnd *sc  =  task->sc;
+       struct iser_tx_desc *tx_desc = &iser_task->desc;
+diff --git a/drivers/infiniband/ulp/iser/iser_memory.c b/drivers/infiniband/ulp/iser/iser_memory.c
+index xxxxxxx..xxxxxxx xxxxxx
+--- a/drivers/infiniband/ulp/iser/iser_memory.c
++++ b/drivers/infiniband/ulp/iser/iser_memory.c
+@@ -39,7 +39,11 @@
+ #include "iscsi_iser.h"
+-#define ISER_KMALLOC_THRESHOLD 0x20000 /* 128K - kmalloc limit */
++#if  (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,32))
++      #define ISER_KMALLOC_THRESHOLD 0x80000 /* 512K - kmalloc limit */
++#else
++      #define ISER_KMALLOC_THRESHOLD 0x20000 /* 128K - kmalloc limit */
++#endif
+ /**
+  * iser_start_rdma_unaligned_sg
+@@ -74,11 +78,19 @@ static int iser_start_rdma_unaligned_sg(struct iscsi_iser_task *iser_task,
+               p = mem;
+               for_each_sg(sgl, sg, data->size, i) {
++#if  (LINUX_VERSION_CODE >= KERNEL_VERSION(3,4,0))
+                       from = kmap_atomic(sg_page(sg));
++#else
++                      from = kmap_atomic(sg_page(sg), KM_USER0);
++#endif
+                       memcpy(p,
+                              from + sg->offset,
+                              sg->length);
++#if  (LINUX_VERSION_CODE >= KERNEL_VERSION(3,4,0))
+                       kunmap_atomic(from);
++#else
++                      kunmap_atomic(from, KM_USER0);
++#endif
+                       p += sg->length;
+               }
+       }
+@@ -134,11 +146,19 @@ void iser_finalize_rdma_unaligned_sg(struct iscsi_iser_task *iser_task,
+               p = mem;
+               for_each_sg(sgl, sg, sg_size, i) {
++#if  (LINUX_VERSION_CODE >= KERNEL_VERSION(3,4,0))
+                       to = kmap_atomic(sg_page(sg));
++#else
++                      to = kmap_atomic(sg_page(sg), KM_USER0);
++#endif
+                       memcpy(to + sg->offset,
+                              p,
+                              sg->length);
++#if  (LINUX_VERSION_CODE >= KERNEL_VERSION(3,4,0))
+                       kunmap_atomic(to);
++#else
++                      kunmap_atomic(to, KM_USER0);
++#endif
+                       p += sg->length;
+               }
+       }