From 57fc1d02b5fee1a0ab66ee8ef4d52ca227859b4f Mon Sep 17 00:00:00 2001 From: Vladimir Sokolovsky Date: Mon, 16 Jun 2014 16:54:49 +0300 Subject: [PATCH] Added iSER backport and refreshed other backports Signed-off-by: Vladimir Sokolovsky --- ...ts-for-RHEL6.4-RHEL6.5-and-SLES11sp3.patch | 6 +- ...nt-connect-crash-with-RHEL-SLES-back.patch | 31 +++ ...srdma-backport-for-xprt-rdma-connect.patch | 18 -- ...ixing-vlan-crash-in-RHEL-6.5-and-6.4.patch | 13 +- patches/0031-BACKPORT-ib_iser.patch | 215 ++++++++++++++++++ 5 files changed, 253 insertions(+), 30 deletions(-) create mode 100644 patches/0029-NFSRDMA-fix-client-connect-crash-with-RHEL-SLES-back.patch delete mode 100644 patches/0029-nfsrdma-backport-for-xprt-rdma-connect.patch create mode 100644 patches/0031-BACKPORT-ib_iser.patch diff --git a/patches/0010-iw_cxgb4-Backports-for-RHEL6.4-RHEL6.5-and-SLES11sp3.patch b/patches/0010-iw_cxgb4-Backports-for-RHEL6.4-RHEL6.5-and-SLES11sp3.patch index 3e02d04..7358d4a 100644 --- a/patches/0010-iw_cxgb4-Backports-for-RHEL6.4-RHEL6.5-and-SLES11sp3.patch +++ b/patches/0010-iw_cxgb4-Backports-for-RHEL6.4-RHEL6.5-and-SLES11sp3.patch @@ -3,10 +3,10 @@ Subject: [PATCH] iw_cxgb4: Backports for RHEL6.4, RHEL6.5 and SLES11sp3 Signed-off-by: Kumar Sanghvi --- - 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 index 0000000..9cc742d --- /dev/null +++ b/patches/0029-NFSRDMA-fix-client-connect-crash-with-RHEL-SLES-back.patch @@ -0,0 +1,31 @@ +From: Steve Wise +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 +--- + 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 index 3e0430b..0000000 --- a/patches/0029-nfsrdma-backport-for-xprt-rdma-connect.patch +++ /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) { diff --git a/patches/0030-be2net-Fixing-vlan-crash-in-RHEL-6.5-and-6.4.patch b/patches/0030-be2net-Fixing-vlan-crash-in-RHEL-6.5-and-6.4.patch index 5d89369..d41403b 100644 --- a/patches/0030-be2net-Fixing-vlan-crash-in-RHEL-6.5-and-6.4.patch +++ b/patches/0030-be2net-Fixing-vlan-crash-in-RHEL-6.5-and-6.4.patch @@ -1,16 +1,14 @@ -From de2cba89e1b6c3325259691964ea2dd3d7fd0bc7 Mon Sep 17 00:00:00 2001 From: Selvin Xavier -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 --- - 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 index 0000000..7447561 --- /dev/null +++ b/patches/0031-BACKPORT-ib_iser.patch @@ -0,0 +1,215 @@ +From: Vladimir Sokolovsky +Subject: [PATCH] BACKPORT: ib_iser + +Signed-off-by: Vladimir Sokolovsky +--- + 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; + } + } -- 2.41.0