From: Greg Kroah-Hartman Date: Sat, 28 Jun 2014 15:57:26 +0000 (-0400) Subject: 3.10-stable patches X-Git-Tag: v3.4.96~6 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=8dc5dbea1a907aacc5888ef0074bad3c8624ba6f;p=thirdparty%2Fkernel%2Fstable-queue.git 3.10-stable patches added patches: target-iser-improve-cm-events-handling.patch target-iser-wait-for-proper-cleanup-before-unloading.patch --- diff --git a/queue-3.10/series b/queue-3.10/series index ced7519e356..5769c245c9b 100644 --- a/queue-3.10/series +++ b/queue-3.10/series @@ -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 index 00000000000..4211a1414f0 --- /dev/null +++ b/queue-3.10/target-iser-improve-cm-events-handling.patch @@ -0,0 +1,113 @@ +From 88c4015fda6d014392f76d3b1688347950d7a12d Mon Sep 17 00:00:00 2001 +From: Sagi Grimberg +Date: Mon, 19 May 2014 17:44:24 +0300 +Subject: Target/iser: Improve cm events handling + +From: Sagi Grimberg + +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 +Signed-off-by: Nicholas Bellinger +Signed-off-by: Greg Kroah-Hartman + +--- + 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 index 00000000000..f19ac74abe2 --- /dev/null +++ b/queue-3.10/target-iser-wait-for-proper-cleanup-before-unloading.patch @@ -0,0 +1,31 @@ +From f5ebec9629cf78eeeea4b8258882a9f439ab2404 Mon Sep 17 00:00:00 2001 +From: Sagi Grimberg +Date: Mon, 19 May 2014 17:44:25 +0300 +Subject: Target/iser: Wait for proper cleanup before unloading + +From: Sagi Grimberg + +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 +Signed-off-by: Nicholas Bellinger +Signed-off-by: Greg Kroah-Hartman + +--- + 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);