From: Greg Kroah-Hartman Date: Fri, 28 Sep 2012 21:05:55 +0000 (-0700) Subject: remove sunrpc patch X-Git-Tag: v3.0.44~7 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=84a7d5dab270f1e75c3b232adc570d826138abdd;p=thirdparty%2Fkernel%2Fstable-queue.git remove sunrpc patch queue-3.4/sunrpc-fix-a-udp-transport-regression.patch queue-3.5/sunrpc-fix-a-udp-transport-regression.patch are removed. --- diff --git a/queue-3.4/series b/queue-3.4/series index 523cf77b5d2..c85ffe4c242 100644 --- a/queue-3.4/series +++ b/queue-3.4/series @@ -67,7 +67,6 @@ ahci-add-alternate-identifier-for-the-88se9172.patch kobject-fix-oops-with-input0-bad-kobj_uevent_env-content-in-show_uevent.patch redefine-atomic_init-and-atomic64_init-to-drop-the-casts.patch digsig-add-hash-size-comparision-on-signature-verification.patch -sunrpc-fix-a-udp-transport-regression.patch md-don-t-truncate-size-at-4tb-for-raid0-and-linear.patch md-make-sure-metadata-is-updated-when-spares-are-activated-or-removed.patch md-raid5-fix-calculate-of-degraded-when-a-replacement-becomes-active.patch diff --git a/queue-3.4/sunrpc-fix-a-udp-transport-regression.patch b/queue-3.4/sunrpc-fix-a-udp-transport-regression.patch deleted file mode 100644 index e6ba96bf484..00000000000 --- a/queue-3.4/sunrpc-fix-a-udp-transport-regression.patch +++ /dev/null @@ -1,155 +0,0 @@ -From f39c1bfb5a03e2d255451bff05be0d7255298fa4 Mon Sep 17 00:00:00 2001 -From: Trond Myklebust -Date: Fri, 7 Sep 2012 11:08:50 -0400 -Subject: SUNRPC: Fix a UDP transport regression - -From: Trond Myklebust - -commit f39c1bfb5a03e2d255451bff05be0d7255298fa4 upstream. - -Commit 43cedbf0e8dfb9c5610eb7985d5f21263e313802 (SUNRPC: Ensure that -we grab the XPRT_LOCK before calling xprt_alloc_slot) is causing -hangs in the case of NFS over UDP mounts. - -Since neither the UDP or the RDMA transport mechanism use dynamic slot -allocation, we can skip grabbing the socket lock for those transports. -Add a new rpc_xprt_op to allow switching between the TCP and UDP/RDMA -case. - -Note that the NFSv4.1 back channel assigns the slot directly -through rpc_run_bc_task, so we can ignore that case. - -Reported-by: Dick Streefland -Signed-off-by: Trond Myklebust -Signed-off-by: Greg Kroah-Hartman - ---- - include/linux/sunrpc/xprt.h | 3 +++ - net/sunrpc/xprt.c | 34 ++++++++++++++++++++-------------- - net/sunrpc/xprtrdma/transport.c | 1 + - net/sunrpc/xprtsock.c | 3 +++ - 4 files changed, 27 insertions(+), 14 deletions(-) - ---- a/include/linux/sunrpc/xprt.h -+++ b/include/linux/sunrpc/xprt.h -@@ -114,6 +114,7 @@ struct rpc_xprt_ops { - void (*set_buffer_size)(struct rpc_xprt *xprt, size_t sndsize, size_t rcvsize); - int (*reserve_xprt)(struct rpc_xprt *xprt, struct rpc_task *task); - void (*release_xprt)(struct rpc_xprt *xprt, struct rpc_task *task); -+ void (*alloc_slot)(struct rpc_xprt *xprt, struct rpc_task *task); - void (*rpcbind)(struct rpc_task *task); - void (*set_port)(struct rpc_xprt *xprt, unsigned short port); - void (*connect)(struct rpc_task *task); -@@ -279,6 +280,8 @@ void xprt_connect(struct rpc_task *tas - void xprt_reserve(struct rpc_task *task); - int xprt_reserve_xprt(struct rpc_xprt *xprt, struct rpc_task *task); - int xprt_reserve_xprt_cong(struct rpc_xprt *xprt, struct rpc_task *task); -+void xprt_alloc_slot(struct rpc_xprt *xprt, struct rpc_task *task); -+void xprt_lock_and_alloc_slot(struct rpc_xprt *xprt, struct rpc_task *task); - int xprt_prepare_transmit(struct rpc_task *task); - void xprt_transmit(struct rpc_task *task); - void xprt_end_transmit(struct rpc_task *task); ---- a/net/sunrpc/xprt.c -+++ b/net/sunrpc/xprt.c -@@ -969,11 +969,11 @@ static bool xprt_dynamic_free_slot(struc - return false; - } - --static void xprt_alloc_slot(struct rpc_task *task) -+void xprt_alloc_slot(struct rpc_xprt *xprt, struct rpc_task *task) - { -- struct rpc_xprt *xprt = task->tk_xprt; - struct rpc_rqst *req; - -+ spin_lock(&xprt->reserve_lock); - if (!list_empty(&xprt->free)) { - req = list_entry(xprt->free.next, struct rpc_rqst, rq_list); - list_del(&req->rq_list); -@@ -994,12 +994,29 @@ static void xprt_alloc_slot(struct rpc_t - default: - task->tk_status = -EAGAIN; - } -+ spin_unlock(&xprt->reserve_lock); - return; - out_init_req: - task->tk_status = 0; - task->tk_rqstp = req; - xprt_request_init(task, xprt); -+ spin_unlock(&xprt->reserve_lock); -+} -+EXPORT_SYMBOL_GPL(xprt_alloc_slot); -+ -+void xprt_lock_and_alloc_slot(struct rpc_xprt *xprt, struct rpc_task *task) -+{ -+ /* Note: grabbing the xprt_lock_write() ensures that we throttle -+ * new slot allocation if the transport is congested (i.e. when -+ * reconnecting a stream transport or when out of socket write -+ * buffer space). -+ */ -+ if (xprt_lock_write(xprt, task)) { -+ xprt_alloc_slot(xprt, task); -+ xprt_release_write(xprt, task); -+ } - } -+EXPORT_SYMBOL_GPL(xprt_lock_and_alloc_slot); - - static void xprt_free_slot(struct rpc_xprt *xprt, struct rpc_rqst *req) - { -@@ -1083,20 +1100,9 @@ void xprt_reserve(struct rpc_task *task) - if (task->tk_rqstp != NULL) - return; - -- /* Note: grabbing the xprt_lock_write() here is not strictly needed, -- * but ensures that we throttle new slot allocation if the transport -- * is congested (e.g. if reconnecting or if we're out of socket -- * write buffer space). -- */ - task->tk_timeout = 0; - task->tk_status = -EAGAIN; -- if (!xprt_lock_write(xprt, task)) -- return; -- -- spin_lock(&xprt->reserve_lock); -- xprt_alloc_slot(task); -- spin_unlock(&xprt->reserve_lock); -- xprt_release_write(xprt, task); -+ xprt->ops->alloc_slot(xprt, task); - } - - static inline __be32 xprt_alloc_xid(struct rpc_xprt *xprt) ---- a/net/sunrpc/xprtrdma/transport.c -+++ b/net/sunrpc/xprtrdma/transport.c -@@ -713,6 +713,7 @@ static void xprt_rdma_print_stats(struct - static struct rpc_xprt_ops xprt_rdma_procs = { - .reserve_xprt = xprt_rdma_reserve_xprt, - .release_xprt = xprt_release_xprt_cong, /* sunrpc/xprt.c */ -+ .alloc_slot = xprt_alloc_slot, - .release_request = xprt_release_rqst_cong, /* ditto */ - .set_retrans_timeout = xprt_set_retrans_timeout_def, /* ditto */ - .rpcbind = rpcb_getport_async, /* sunrpc/rpcb_clnt.c */ ---- a/net/sunrpc/xprtsock.c -+++ b/net/sunrpc/xprtsock.c -@@ -2433,6 +2433,7 @@ static void bc_destroy(struct rpc_xprt * - static struct rpc_xprt_ops xs_local_ops = { - .reserve_xprt = xprt_reserve_xprt, - .release_xprt = xs_tcp_release_xprt, -+ .alloc_slot = xprt_alloc_slot, - .rpcbind = xs_local_rpcbind, - .set_port = xs_local_set_port, - .connect = xs_connect, -@@ -2449,6 +2450,7 @@ static struct rpc_xprt_ops xs_udp_ops = - .set_buffer_size = xs_udp_set_buffer_size, - .reserve_xprt = xprt_reserve_xprt_cong, - .release_xprt = xprt_release_xprt_cong, -+ .alloc_slot = xprt_alloc_slot, - .rpcbind = rpcb_getport_async, - .set_port = xs_set_port, - .connect = xs_connect, -@@ -2466,6 +2468,7 @@ static struct rpc_xprt_ops xs_udp_ops = - static struct rpc_xprt_ops xs_tcp_ops = { - .reserve_xprt = xprt_reserve_xprt, - .release_xprt = xs_tcp_release_xprt, -+ .alloc_slot = xprt_lock_and_alloc_slot, - .rpcbind = rpcb_getport_async, - .set_port = xs_set_port, - .connect = xs_connect, diff --git a/queue-3.5/series b/queue-3.5/series index 0500021f027..5196bb72a6c 100644 --- a/queue-3.5/series +++ b/queue-3.5/series @@ -86,7 +86,6 @@ kobject-fix-oops-with-input0-bad-kobj_uevent_env-content-in-show_uevent.patch dyndbg-fix-for-soh-in-logging-messages.patch redefine-atomic_init-and-atomic64_init-to-drop-the-casts.patch digsig-add-hash-size-comparision-on-signature-verification.patch -sunrpc-fix-a-udp-transport-regression.patch md-don-t-truncate-size-at-4tb-for-raid0-and-linear.patch md-raid10-fix-problem-with-on-stack-allocation-of-r10bio-structure.patch md-make-sure-metadata-is-updated-when-spares-are-activated-or-removed.patch diff --git a/queue-3.5/sunrpc-fix-a-udp-transport-regression.patch b/queue-3.5/sunrpc-fix-a-udp-transport-regression.patch deleted file mode 100644 index e6ba96bf484..00000000000 --- a/queue-3.5/sunrpc-fix-a-udp-transport-regression.patch +++ /dev/null @@ -1,155 +0,0 @@ -From f39c1bfb5a03e2d255451bff05be0d7255298fa4 Mon Sep 17 00:00:00 2001 -From: Trond Myklebust -Date: Fri, 7 Sep 2012 11:08:50 -0400 -Subject: SUNRPC: Fix a UDP transport regression - -From: Trond Myklebust - -commit f39c1bfb5a03e2d255451bff05be0d7255298fa4 upstream. - -Commit 43cedbf0e8dfb9c5610eb7985d5f21263e313802 (SUNRPC: Ensure that -we grab the XPRT_LOCK before calling xprt_alloc_slot) is causing -hangs in the case of NFS over UDP mounts. - -Since neither the UDP or the RDMA transport mechanism use dynamic slot -allocation, we can skip grabbing the socket lock for those transports. -Add a new rpc_xprt_op to allow switching between the TCP and UDP/RDMA -case. - -Note that the NFSv4.1 back channel assigns the slot directly -through rpc_run_bc_task, so we can ignore that case. - -Reported-by: Dick Streefland -Signed-off-by: Trond Myklebust -Signed-off-by: Greg Kroah-Hartman - ---- - include/linux/sunrpc/xprt.h | 3 +++ - net/sunrpc/xprt.c | 34 ++++++++++++++++++++-------------- - net/sunrpc/xprtrdma/transport.c | 1 + - net/sunrpc/xprtsock.c | 3 +++ - 4 files changed, 27 insertions(+), 14 deletions(-) - ---- a/include/linux/sunrpc/xprt.h -+++ b/include/linux/sunrpc/xprt.h -@@ -114,6 +114,7 @@ struct rpc_xprt_ops { - void (*set_buffer_size)(struct rpc_xprt *xprt, size_t sndsize, size_t rcvsize); - int (*reserve_xprt)(struct rpc_xprt *xprt, struct rpc_task *task); - void (*release_xprt)(struct rpc_xprt *xprt, struct rpc_task *task); -+ void (*alloc_slot)(struct rpc_xprt *xprt, struct rpc_task *task); - void (*rpcbind)(struct rpc_task *task); - void (*set_port)(struct rpc_xprt *xprt, unsigned short port); - void (*connect)(struct rpc_task *task); -@@ -279,6 +280,8 @@ void xprt_connect(struct rpc_task *tas - void xprt_reserve(struct rpc_task *task); - int xprt_reserve_xprt(struct rpc_xprt *xprt, struct rpc_task *task); - int xprt_reserve_xprt_cong(struct rpc_xprt *xprt, struct rpc_task *task); -+void xprt_alloc_slot(struct rpc_xprt *xprt, struct rpc_task *task); -+void xprt_lock_and_alloc_slot(struct rpc_xprt *xprt, struct rpc_task *task); - int xprt_prepare_transmit(struct rpc_task *task); - void xprt_transmit(struct rpc_task *task); - void xprt_end_transmit(struct rpc_task *task); ---- a/net/sunrpc/xprt.c -+++ b/net/sunrpc/xprt.c -@@ -969,11 +969,11 @@ static bool xprt_dynamic_free_slot(struc - return false; - } - --static void xprt_alloc_slot(struct rpc_task *task) -+void xprt_alloc_slot(struct rpc_xprt *xprt, struct rpc_task *task) - { -- struct rpc_xprt *xprt = task->tk_xprt; - struct rpc_rqst *req; - -+ spin_lock(&xprt->reserve_lock); - if (!list_empty(&xprt->free)) { - req = list_entry(xprt->free.next, struct rpc_rqst, rq_list); - list_del(&req->rq_list); -@@ -994,12 +994,29 @@ static void xprt_alloc_slot(struct rpc_t - default: - task->tk_status = -EAGAIN; - } -+ spin_unlock(&xprt->reserve_lock); - return; - out_init_req: - task->tk_status = 0; - task->tk_rqstp = req; - xprt_request_init(task, xprt); -+ spin_unlock(&xprt->reserve_lock); -+} -+EXPORT_SYMBOL_GPL(xprt_alloc_slot); -+ -+void xprt_lock_and_alloc_slot(struct rpc_xprt *xprt, struct rpc_task *task) -+{ -+ /* Note: grabbing the xprt_lock_write() ensures that we throttle -+ * new slot allocation if the transport is congested (i.e. when -+ * reconnecting a stream transport or when out of socket write -+ * buffer space). -+ */ -+ if (xprt_lock_write(xprt, task)) { -+ xprt_alloc_slot(xprt, task); -+ xprt_release_write(xprt, task); -+ } - } -+EXPORT_SYMBOL_GPL(xprt_lock_and_alloc_slot); - - static void xprt_free_slot(struct rpc_xprt *xprt, struct rpc_rqst *req) - { -@@ -1083,20 +1100,9 @@ void xprt_reserve(struct rpc_task *task) - if (task->tk_rqstp != NULL) - return; - -- /* Note: grabbing the xprt_lock_write() here is not strictly needed, -- * but ensures that we throttle new slot allocation if the transport -- * is congested (e.g. if reconnecting or if we're out of socket -- * write buffer space). -- */ - task->tk_timeout = 0; - task->tk_status = -EAGAIN; -- if (!xprt_lock_write(xprt, task)) -- return; -- -- spin_lock(&xprt->reserve_lock); -- xprt_alloc_slot(task); -- spin_unlock(&xprt->reserve_lock); -- xprt_release_write(xprt, task); -+ xprt->ops->alloc_slot(xprt, task); - } - - static inline __be32 xprt_alloc_xid(struct rpc_xprt *xprt) ---- a/net/sunrpc/xprtrdma/transport.c -+++ b/net/sunrpc/xprtrdma/transport.c -@@ -713,6 +713,7 @@ static void xprt_rdma_print_stats(struct - static struct rpc_xprt_ops xprt_rdma_procs = { - .reserve_xprt = xprt_rdma_reserve_xprt, - .release_xprt = xprt_release_xprt_cong, /* sunrpc/xprt.c */ -+ .alloc_slot = xprt_alloc_slot, - .release_request = xprt_release_rqst_cong, /* ditto */ - .set_retrans_timeout = xprt_set_retrans_timeout_def, /* ditto */ - .rpcbind = rpcb_getport_async, /* sunrpc/rpcb_clnt.c */ ---- a/net/sunrpc/xprtsock.c -+++ b/net/sunrpc/xprtsock.c -@@ -2433,6 +2433,7 @@ static void bc_destroy(struct rpc_xprt * - static struct rpc_xprt_ops xs_local_ops = { - .reserve_xprt = xprt_reserve_xprt, - .release_xprt = xs_tcp_release_xprt, -+ .alloc_slot = xprt_alloc_slot, - .rpcbind = xs_local_rpcbind, - .set_port = xs_local_set_port, - .connect = xs_connect, -@@ -2449,6 +2450,7 @@ static struct rpc_xprt_ops xs_udp_ops = - .set_buffer_size = xs_udp_set_buffer_size, - .reserve_xprt = xprt_reserve_xprt_cong, - .release_xprt = xprt_release_xprt_cong, -+ .alloc_slot = xprt_alloc_slot, - .rpcbind = rpcb_getport_async, - .set_port = xs_set_port, - .connect = xs_connect, -@@ -2466,6 +2468,7 @@ static struct rpc_xprt_ops xs_udp_ops = - static struct rpc_xprt_ops xs_tcp_ops = { - .reserve_xprt = xprt_reserve_xprt, - .release_xprt = xs_tcp_release_xprt, -+ .alloc_slot = xprt_lock_and_alloc_slot, - .rpcbind = rpcb_getport_async, - .set_port = xs_set_port, - .connect = xs_connect,