]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
3.10-stable patches
authorGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Sat, 28 Jun 2014 15:57:26 +0000 (11:57 -0400)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Sat, 28 Jun 2014 15:57:26 +0000 (11:57 -0400)
added patches:
target-iser-improve-cm-events-handling.patch
target-iser-wait-for-proper-cleanup-before-unloading.patch

queue-3.10/series
queue-3.10/target-iser-improve-cm-events-handling.patch [new file with mode: 0644]
queue-3.10/target-iser-wait-for-proper-cleanup-before-unloading.patch [new file with mode: 0644]

index ced7519e356c19e23dc0ad317b88ba0687eb67b3..5769c245c9b655e3293421dab57336d276bd940b 100644 (file)
@@ -72,3 +72,5 @@ btrfs-use-right-type-to-get-real-comparison.patch
 btrfs-fix-scrub_print_warning-to-handle-skinny-metadata-extents.patch
 btrfs-fix-use-of-uninit-ret-in-end_extent_writepage.patch
 usb-usbtest-add-timetout-to-simple_io.patch
+target-iser-improve-cm-events-handling.patch
+target-iser-wait-for-proper-cleanup-before-unloading.patch
diff --git a/queue-3.10/target-iser-improve-cm-events-handling.patch b/queue-3.10/target-iser-improve-cm-events-handling.patch
new file mode 100644 (file)
index 0000000..4211a14
--- /dev/null
@@ -0,0 +1,113 @@
+From 88c4015fda6d014392f76d3b1688347950d7a12d Mon Sep 17 00:00:00 2001
+From: Sagi Grimberg <sagig@mellanox.com>
+Date: Mon, 19 May 2014 17:44:24 +0300
+Subject: Target/iser: Improve cm events handling
+
+From: Sagi Grimberg <sagig@mellanox.com>
+
+commit 88c4015fda6d014392f76d3b1688347950d7a12d upstream.
+
+There are 4 RDMA_CM events that all basically mean that
+the user should teardown the IB connection:
+- DISCONNECTED
+- ADDR_CHANGE
+- DEVICE_REMOVAL
+- TIMEWAIT_EXIT
+
+Only in DISCONNECTED/ADDR_CHANGE it makes sense to
+call rdma_disconnect (send DREQ/DREP to our initiator).
+So we keep the same teardown handler for all of them
+but only indicate calling rdma_disconnect for the relevant
+events.
+
+This patch also removes redundant debug prints for each single
+event.
+
+v2 changes:
+ - Call isert_disconnected_handler() for DEVICE_REMOVAL (Or + Sag)
+
+Signed-off-by: Sagi Grimberg <sagig@mellanox.com>
+Signed-off-by: Nicholas Bellinger <nab@linux-iscsi.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/infiniband/ulp/isert/ib_isert.c |   26 ++++++++++++++------------
+ drivers/infiniband/ulp/isert/ib_isert.h |    1 +
+ 2 files changed, 15 insertions(+), 12 deletions(-)
+
+--- a/drivers/infiniband/ulp/isert/ib_isert.c
++++ b/drivers/infiniband/ulp/isert/ib_isert.c
+@@ -573,8 +573,10 @@ isert_disconnect_work(struct work_struct
+               return;
+       }
+-      /* Send DREQ/DREP towards our initiator */
+-      rdma_disconnect(isert_conn->conn_cm_id);
++      if (isert_conn->disconnect) {
++              /* Send DREQ/DREP towards our initiator */
++              rdma_disconnect(isert_conn->conn_cm_id);
++      }
+       mutex_unlock(&isert_conn->conn_mutex);
+@@ -584,10 +586,11 @@ wake_up:
+ }
+ static void
+-isert_disconnected_handler(struct rdma_cm_id *cma_id)
++isert_disconnected_handler(struct rdma_cm_id *cma_id, bool disconnect)
+ {
+       struct isert_conn *isert_conn = (struct isert_conn *)cma_id->context;
++      isert_conn->disconnect = disconnect;
+       INIT_WORK(&isert_conn->conn_logout_work, isert_disconnect_work);
+       schedule_work(&isert_conn->conn_logout_work);
+ }
+@@ -596,29 +599,28 @@ static int
+ isert_cma_handler(struct rdma_cm_id *cma_id, struct rdma_cm_event *event)
+ {
+       int ret = 0;
++      bool disconnect = false;
+       pr_debug("isert_cma_handler: event %d status %d conn %p id %p\n",
+                event->event, event->status, cma_id->context, cma_id);
+       switch (event->event) {
+       case RDMA_CM_EVENT_CONNECT_REQUEST:
+-              pr_debug("RDMA_CM_EVENT_CONNECT_REQUEST: >>>>>>>>>>>>>>>\n");
+               ret = isert_connect_request(cma_id, event);
+               break;
+       case RDMA_CM_EVENT_ESTABLISHED:
+-              pr_debug("RDMA_CM_EVENT_ESTABLISHED >>>>>>>>>>>>>>\n");
+               isert_connected_handler(cma_id);
+               break;
+-      case RDMA_CM_EVENT_DISCONNECTED:
+-              pr_debug("RDMA_CM_EVENT_DISCONNECTED: >>>>>>>>>>>>>>\n");
+-              isert_disconnected_handler(cma_id);
+-              break;
+-      case RDMA_CM_EVENT_DEVICE_REMOVAL:
+-      case RDMA_CM_EVENT_ADDR_CHANGE:
++      case RDMA_CM_EVENT_ADDR_CHANGE:    /* FALLTHRU */
++      case RDMA_CM_EVENT_DISCONNECTED:   /* FALLTHRU */
++      case RDMA_CM_EVENT_DEVICE_REMOVAL: /* FALLTHRU */
++              disconnect = true;
++      case RDMA_CM_EVENT_TIMEWAIT_EXIT:  /* FALLTHRU */
++              isert_disconnected_handler(cma_id, disconnect);
+               break;
+       case RDMA_CM_EVENT_CONNECT_ERROR:
+       default:
+-              pr_err("Unknown RDMA CMA event: %d\n", event->event);
++              pr_err("Unhandled RDMA CMA event: %d\n", event->event);
+               break;
+       }
+--- a/drivers/infiniband/ulp/isert/ib_isert.h
++++ b/drivers/infiniband/ulp/isert/ib_isert.h
+@@ -105,6 +105,7 @@ struct isert_conn {
+       struct completion       conn_wait;
+       struct completion       conn_wait_comp_err;
+       struct kref             conn_kref;
++      bool                    disconnect;
+ };
+ #define ISERT_MAX_CQ 64
diff --git a/queue-3.10/target-iser-wait-for-proper-cleanup-before-unloading.patch b/queue-3.10/target-iser-wait-for-proper-cleanup-before-unloading.patch
new file mode 100644 (file)
index 0000000..f19ac74
--- /dev/null
@@ -0,0 +1,31 @@
+From f5ebec9629cf78eeeea4b8258882a9f439ab2404 Mon Sep 17 00:00:00 2001
+From: Sagi Grimberg <sagig@mellanox.com>
+Date: Mon, 19 May 2014 17:44:25 +0300
+Subject: Target/iser: Wait for proper cleanup before unloading
+
+From: Sagi Grimberg <sagig@mellanox.com>
+
+commit f5ebec9629cf78eeeea4b8258882a9f439ab2404 upstream.
+
+disconnected_handler works are scheduled on system_wq.
+When attempting to unload, first make sure all works
+have cleaned up.
+
+Signed-off-by: Sagi Grimberg <sagig@mellanox.com>
+Signed-off-by: Nicholas Bellinger <nab@linux-iscsi.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/infiniband/ulp/isert/ib_isert.c |    1 +
+ 1 file changed, 1 insertion(+)
+
+--- a/drivers/infiniband/ulp/isert/ib_isert.c
++++ b/drivers/infiniband/ulp/isert/ib_isert.c
+@@ -2332,6 +2332,7 @@ destroy_rx_wq:
+ static void __exit isert_exit(void)
+ {
++      flush_scheduled_work();
+       kmem_cache_destroy(isert_cmd_cache);
+       destroy_workqueue(isert_comp_wq);
+       destroy_workqueue(isert_rx_wq);