--- /dev/null
+From bd1ee804af8bdf2fd5131234330615f8aecbd9ed Mon Sep 17 00:00:00 2001
+From: Pawel Moll <pawel.moll@arm.com>
+Date: Mon, 29 Oct 2012 11:23:02 +0000
+Subject: kbuild: Do not remove vmlinux when cleaning external module
+
+From: Pawel Moll <pawel.moll@arm.com>
+
+commit bd1ee804af8bdf2fd5131234330615f8aecbd9ed upstream.
+
+Since commit 1f2bfbd00e466ff3489b2ca5cc75b1cccd14c123 "kbuild:
+link of vmlinux moved to a script" make clean with M=<dir>
+argument (so cleaning external module) removes vmlinux,
+System.map and couple of other files from the *main* kernel
+build directory! This not what was happening before and almost
+certainly not what one would expect.
+
+This patch moves makes the clean target of the script called
+only when !KBUILD_EXTMOD.
+
+Signed-off-by: Pawel Moll <pawel.moll@arm.com>
+Signed-off-by: Michal Marek <mmarek@suse.cz>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ Makefile | 8 +++++---
+ 1 file changed, 5 insertions(+), 3 deletions(-)
+
+--- a/Makefile
++++ b/Makefile
+@@ -1021,11 +1021,14 @@ clean: rm-dirs := $(CLEAN_DIRS)
+ clean: rm-files := $(CLEAN_FILES)
+ clean-dirs := $(addprefix _clean_, . $(vmlinux-alldirs) Documentation samples)
+
+-PHONY += $(clean-dirs) clean archclean
++PHONY += $(clean-dirs) clean archclean vmlinuxclean
+ $(clean-dirs):
+ $(Q)$(MAKE) $(clean)=$(patsubst _clean_%,%,$@)
+
+-clean: archclean
++vmlinuxclean:
++ $(Q)$(CONFIG_SHELL) $(srctree)/scripts/link-vmlinux.sh clean
++
++clean: archclean vmlinuxclean
+
+ # mrproper - Delete all generated files, including .config
+ #
+@@ -1252,7 +1255,6 @@ scripts: ;
+ endif # KBUILD_EXTMOD
+
+ clean: $(clean-dirs)
+- $(Q)$(CONFIG_SHELL) $(srctree)/scripts/link-vmlinux.sh clean
+ $(call cmd,rmdirs)
+ $(call cmd,rmfiles)
+ @find $(if $(KBUILD_EXTMOD), $(KBUILD_EXTMOD), .) $(RCS_FIND_IGNORE) \
--- /dev/null
+From d1f3b65d2d6fdb4bf0edd4b67e86e191af48daee Mon Sep 17 00:00:00 2001
+From: Nathan Williams <nathan@traverse.com.au>
+Date: Thu, 22 Nov 2012 10:42:52 +1100
+Subject: mtd cs553x_nand: Initialise ecc.strength before nand_scan()
+
+From: Nathan Williams <nathan@traverse.com.au>
+
+commit d1f3b65d2d6fdb4bf0edd4b67e86e191af48daee upstream.
+
+Loading cs553x_nand with Hynix H27U1G8F2BTR NAND flash causes this bug:
+
+kernel BUG at drivers/mtd/nand/nand_base.c:3345!
+invalid opcode: 0000 [#1]
+Modules linked in: cs553x_nand(+) vfat fat usb_storage ehci_hcd usbcore usb_comr
+Pid: 436, comm: modprobe Not tainted 3.6.7 #1
+EIP: 0060:[<c118d205>] EFLAGS: 00010296 CPU: 0
+EIP is at nand_scan_tail+0x64c/0x69c
+EAX: 00000034 EBX: cea6ed98 ECX: 00000000 EDX: 00000000
+ESI: cea6ec00 EDI: cea6ec00 EBP: 20000000 ESP: cdd17e48
+ DS: 007b ES: 007b FS: 0000 GS: 0000 SS: 0068
+CR0: 8005003b CR2: 0804e119 CR3: 0d850000 CR4: 00000090
+DR0: 00000000 DR1: 00000000 DR2: 00000000 DR3: 00000000
+DR6: ffff0ff0 DR7: 00000400
+Process modprobe (pid: 436, ti=cdd16000 task=cdd1c320 task.ti=cdd16000)
+Stack:
+ c12e962c c118f7ef 00000003 cea6ed98 d014b25c 20000000 fffff007 00000001
+ 00000000 cdd53b00 d014b000 c1001021 cdd53b00 d01493c0 cdd53b00 cdd53b00
+ d01493c0 c1047f83 d014b4a0 00000000 cdd17f9c ce4be454 cdd17f48 cdd1c320
+Call Trace:
+ [<c118f7ef>] ? nand_scan+0x1b/0x4d
+ [<d014b25c>] ? init_module+0x25c/0x2de [cs553x_nand]
+ [<d014b000>] ? 0xd014afff
+ [<c1001021>] ? do_one_initcall+0x21/0x111
+ [<c1047f83>] ? sys_init_module+0xe4/0x1261
+ [<c1031207>] ? task_work_run+0x36/0x43
+ [<c1265ced>] ? syscall_call+0x7/0xb
+Code: fa ff ff c7 86 d8 00 00 00 01 00 00 00 e9 5f fc ff ff 68 f8 26 2e c1 e8 a7
+EIP: [<c118d205>] nand_scan_tail+0x64c/0x69c SS:ESP 0068:cdd17e48
+
+Initialising ecc.strength before the call to nand_scan() fixes this.
+
+Signed-off-by: Nathan Williams <nathan@traverse.com.au>
+Acked-by: Brian Norris <computersforpeace@gmail.com>
+Acked-by: Mike Dunn <mikedunn@newsguy.com>
+Signed-off-by: Artem Bityutskiy <artem.bityutskiy@linux.intel.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/mtd/nand/cs553x_nand.c | 3 +--
+ 1 file changed, 1 insertion(+), 2 deletions(-)
+
+--- a/drivers/mtd/nand/cs553x_nand.c
++++ b/drivers/mtd/nand/cs553x_nand.c
+@@ -237,6 +237,7 @@ static int __init cs553x_init_one(int cs
+ this->ecc.hwctl = cs_enable_hwecc;
+ this->ecc.calculate = cs_calculate_ecc;
+ this->ecc.correct = nand_correct_data;
++ this->ecc.strength = 1;
+
+ /* Enable the following for a flash based bad block table */
+ this->bbt_options = NAND_BBT_USE_FLASH;
+@@ -247,8 +248,6 @@ static int __init cs553x_init_one(int cs
+ goto out_ior;
+ }
+
+- this->ecc.strength = 1;
+-
+ new_mtd->name = kasprintf(GFP_KERNEL, "cs553x_nand_cs%d", cs);
+
+ cs553x_mtd[cs] = new_mtd;
--- /dev/null
+From 6f2a6a52560ad8d85710aabd92b7a3239b3a6b07 Mon Sep 17 00:00:00 2001
+From: Wolfram Sang <w.sang@pengutronix.de>
+Date: Wed, 5 Dec 2012 21:46:02 +0100
+Subject: mtd: nand: gpmi: reset BCH earlier, too, to avoid NAND startup problems
+
+From: Wolfram Sang <w.sang@pengutronix.de>
+
+commit 6f2a6a52560ad8d85710aabd92b7a3239b3a6b07 upstream.
+
+It could happen (1 out of 100 times) that NAND did not start up
+correctly after warm rebooting, so the kernel could not find the UBI or
+DMA timed out due to a stalled BCH. When resetting BCH together with
+GPMI, the issue could not be observed anymore (after 10000+ reboots). We
+probably need the consistent state already before sending any command to
+NAND, even when no ECC is needed. I chose to keep the extra reset for
+BCH when changing the flash layout to be on the safe side.
+
+Signed-off-by: Wolfram Sang <w.sang@pengutronix.de>
+Acked-by: Huang Shijie <b32955@freescale.com>
+Signed-off-by: Artem Bityutskiy <artem.bityutskiy@linux.intel.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/mtd/nand/gpmi-nand/gpmi-lib.c | 9 +++++++++
+ 1 file changed, 9 insertions(+)
+
+--- a/drivers/mtd/nand/gpmi-nand/gpmi-lib.c
++++ b/drivers/mtd/nand/gpmi-nand/gpmi-lib.c
+@@ -166,6 +166,15 @@ int gpmi_init(struct gpmi_nand_data *thi
+ if (ret)
+ goto err_out;
+
++ /*
++ * Reset BCH here, too. We got failures otherwise :(
++ * See later BCH reset for explanation of MX23 handling
++ */
++ ret = gpmi_reset_block(r->bch_regs, GPMI_IS_MX23(this));
++ if (ret)
++ goto err_out;
++
++
+ /* Choose NAND mode. */
+ writel(BM_GPMI_CTRL1_GPMI_MODE, r->gpmi_regs + HW_GPMI_CTRL1_CLR);
+
--- /dev/null
+From ca2e16faa7378878c1522a7c1b6c38211de3331d Mon Sep 17 00:00:00 2001
+From: Tomi Valkeinen <tomi.valkeinen@ti.com>
+Date: Thu, 22 Nov 2012 10:39:56 +0200
+Subject: OMAP: board-files: fix i2c_bus for tfp410
+
+From: Tomi Valkeinen <tomi.valkeinen@ti.com>
+
+commit ca2e16faa7378878c1522a7c1b6c38211de3331d upstream.
+
+The i2c handling in tfp410 driver, which handles converting parallel RGB
+to DVI, was changed in 958f2717b84e88bf833d996997fda8f73276f2af
+(OMAPDSS: TFP410: pdata rewrite). The patch changed what value the
+driver considers as invalid/undefined. Before the patch, 0 was the
+invalid value, but as 0 is a valid bus number, the patch changed this to
+-1.
+
+However, the fact was missed that many board files do not define the bus
+number at all, thus it's left to 0. This causes the driver to fail to
+get the i2c bus, exiting from the driver's probe with an error, meaning
+that the DVI output does not work for those boards.
+
+This patch fixes the issue by changing the i2c_bus number field in the
+driver's platform data from u16 to int, and setting the bus number to -1
+in the board files for the boards that did not define the bus. The
+exception is devkit8000, for which the bus is set to 1, which is the
+correct bus for that board.
+
+The bug exists in v3.5+ kernels.
+
+Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
+Reported-by: Thomas Weber <thomas@tomweber.eu>
+Cc: Thomas Weber <thomas@tomweber.eu>
+Signed-off-by: Tony Lindgren <tony@atomide.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ arch/arm/mach-omap2/board-3430sdp.c | 1 +
+ arch/arm/mach-omap2/board-am3517evm.c | 1 +
+ arch/arm/mach-omap2/board-cm-t35.c | 1 +
+ arch/arm/mach-omap2/board-devkit8000.c | 1 +
+ arch/arm/mach-omap2/board-omap3evm.c | 1 +
+ arch/arm/mach-omap2/board-omap3stalker.c | 1 +
+ include/video/omap-panel-tfp410.h | 2 +-
+ 7 files changed, 7 insertions(+), 1 deletion(-)
+
+--- a/arch/arm/mach-omap2/board-3430sdp.c
++++ b/arch/arm/mach-omap2/board-3430sdp.c
+@@ -157,6 +157,7 @@ static struct omap_dss_device sdp3430_lc
+
+ static struct tfp410_platform_data dvi_panel = {
+ .power_down_gpio = -1,
++ .i2c_bus_num = -1,
+ };
+
+ static struct omap_dss_device sdp3430_dvi_device = {
+--- a/arch/arm/mach-omap2/board-am3517evm.c
++++ b/arch/arm/mach-omap2/board-am3517evm.c
+@@ -208,6 +208,7 @@ static struct omap_dss_device am3517_evm
+
+ static struct tfp410_platform_data dvi_panel = {
+ .power_down_gpio = -1,
++ .i2c_bus_num = -1,
+ };
+
+ static struct omap_dss_device am3517_evm_dvi_device = {
+--- a/arch/arm/mach-omap2/board-cm-t35.c
++++ b/arch/arm/mach-omap2/board-cm-t35.c
+@@ -243,6 +243,7 @@ static struct omap_dss_device cm_t35_lcd
+
+ static struct tfp410_platform_data dvi_panel = {
+ .power_down_gpio = CM_T35_DVI_EN_GPIO,
++ .i2c_bus_num = -1,
+ };
+
+ static struct omap_dss_device cm_t35_dvi_device = {
+--- a/arch/arm/mach-omap2/board-devkit8000.c
++++ b/arch/arm/mach-omap2/board-devkit8000.c
+@@ -139,6 +139,7 @@ static struct omap_dss_device devkit8000
+
+ static struct tfp410_platform_data dvi_panel = {
+ .power_down_gpio = -1,
++ .i2c_bus_num = 1,
+ };
+
+ static struct omap_dss_device devkit8000_dvi_device = {
+--- a/arch/arm/mach-omap2/board-omap3evm.c
++++ b/arch/arm/mach-omap2/board-omap3evm.c
+@@ -236,6 +236,7 @@ static struct omap_dss_device omap3_evm_
+
+ static struct tfp410_platform_data dvi_panel = {
+ .power_down_gpio = OMAP3EVM_DVI_PANEL_EN_GPIO,
++ .i2c_bus_num = -1,
+ };
+
+ static struct omap_dss_device omap3_evm_dvi_device = {
+--- a/arch/arm/mach-omap2/board-omap3stalker.c
++++ b/arch/arm/mach-omap2/board-omap3stalker.c
+@@ -119,6 +119,7 @@ static struct omap_dss_device omap3_stal
+
+ static struct tfp410_platform_data dvi_panel = {
+ .power_down_gpio = DSS_ENABLE_GPIO,
++ .i2c_bus_num = -1,
+ };
+
+ static struct omap_dss_device omap3_stalker_dvi_device = {
+--- a/include/video/omap-panel-tfp410.h
++++ b/include/video/omap-panel-tfp410.h
+@@ -28,7 +28,7 @@ struct omap_dss_device;
+ * @power_down_gpio: gpio number for PD pin (or -1 if not available)
+ */
+ struct tfp410_platform_data {
+- u16 i2c_bus_num;
++ int i2c_bus_num;
+ int power_down_gpio;
+ };
+
mfd-remove-unicode-byte-order-marks-from-da9055.patch
ext4-fix-memory-leak-in-ext4_xattr_set_acl-s-error-path.patch
ext4-fix-possible-use-after-free-with-metadata-csum.patch
+mtd-cs553x_nand-initialise-ecc.strength-before-nand_scan.patch
+mtd-nand-gpmi-reset-bch-earlier-too-to-avoid-nand-startup-problems.patch
+kbuild-do-not-remove-vmlinux-when-cleaning-external-module.patch
+omap-board-files-fix-i2c_bus-for-tfp410.patch
+sunrpc-fix-validity-issues-with-rpc_pipefs-sb-s_fs_info.patch
+sunrpc-continue-run-over-clients-list-on-pipefs-event-instead-of-break.patch
+svcrpc-revert-sunrpc-cache.h-replace-simple_strtoul.patch
+sunrpc-ensure-that-we-free-the-rpc_task-after-cleanups-are-done.patch
+sunrpc-ensure-we-release-the-socket-write-lock-if-the-rpc_task-exits-early.patch
--- /dev/null
+From cd6c5968582a273561464fe6b1e8cc8214be02df Mon Sep 17 00:00:00 2001
+From: Stanislav Kinsbursky <skinsbursky@parallels.com>
+Date: Mon, 17 Dec 2012 20:18:52 +0300
+Subject: SUNRPC: continue run over clients list on PipeFS event instead of break
+
+From: Stanislav Kinsbursky <skinsbursky@parallels.com>
+
+commit cd6c5968582a273561464fe6b1e8cc8214be02df upstream.
+
+There are SUNRPC clients, which program doesn't have pipe_dir_name. These
+clients can be skipped on PipeFS events, because nothing have to be created or
+destroyed. But instead of breaking in case of such a client was found, search
+for suitable client over clients list have to be continued. Otherwise some
+clients could not be covered by PipeFS event handler.
+
+Signed-off-by: Stanislav Kinsbursky <skinsbursky@parallels.com>
+Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ net/sunrpc/clnt.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/net/sunrpc/clnt.c
++++ b/net/sunrpc/clnt.c
+@@ -234,7 +234,7 @@ static struct rpc_clnt *rpc_get_client_f
+ spin_lock(&sn->rpc_client_lock);
+ list_for_each_entry(clnt, &sn->all_clients, cl_clients) {
+ if (clnt->cl_program->pipe_dir_name == NULL)
+- break;
++ continue;
+ if (rpc_clnt_skip_event(clnt, event))
+ continue;
+ if (atomic_inc_not_zero(&clnt->cl_count) == 0)
--- /dev/null
+From c6567ed1402c55e19b012e66a8398baec2a726f3 Mon Sep 17 00:00:00 2001
+From: Trond Myklebust <Trond.Myklebust@netapp.com>
+Date: Fri, 4 Jan 2013 12:23:21 -0500
+Subject: SUNRPC: Ensure that we free the rpc_task after cleanups are done
+
+From: Trond Myklebust <Trond.Myklebust@netapp.com>
+
+commit c6567ed1402c55e19b012e66a8398baec2a726f3 upstream.
+
+This patch ensures that we free the rpc_task after the cleanup callbacks
+are done in order to avoid a deadlock problem that can be triggered if
+the callback needs to wait for another workqueue item to complete.
+
+Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
+Cc: Weston Andros Adamson <dros@netapp.com>
+Cc: Tejun Heo <tj@kernel.org>
+Cc: Bruce Fields <bfields@fieldses.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ net/sunrpc/sched.c | 27 +++++++++++++++++++++++----
+ 1 file changed, 23 insertions(+), 4 deletions(-)
+
+--- a/net/sunrpc/sched.c
++++ b/net/sunrpc/sched.c
+@@ -919,16 +919,35 @@ struct rpc_task *rpc_new_task(const stru
+ return task;
+ }
+
++/*
++ * rpc_free_task - release rpc task and perform cleanups
++ *
++ * Note that we free up the rpc_task _after_ rpc_release_calldata()
++ * in order to work around a workqueue dependency issue.
++ *
++ * Tejun Heo states:
++ * "Workqueue currently considers two work items to be the same if they're
++ * on the same address and won't execute them concurrently - ie. it
++ * makes a work item which is queued again while being executed wait
++ * for the previous execution to complete.
++ *
++ * If a work function frees the work item, and then waits for an event
++ * which should be performed by another work item and *that* work item
++ * recycles the freed work item, it can create a false dependency loop.
++ * There really is no reliable way to detect this short of verifying
++ * every memory free."
++ *
++ */
+ static void rpc_free_task(struct rpc_task *task)
+ {
+- const struct rpc_call_ops *tk_ops = task->tk_ops;
+- void *calldata = task->tk_calldata;
++ unsigned short tk_flags = task->tk_flags;
+
+- if (task->tk_flags & RPC_TASK_DYNAMIC) {
++ rpc_release_calldata(task->tk_ops, task->tk_calldata);
++
++ if (tk_flags & RPC_TASK_DYNAMIC) {
+ dprintk("RPC: %5u freeing task\n", task->tk_pid);
+ mempool_free(task, rpc_task_mempool);
+ }
+- rpc_release_calldata(tk_ops, calldata);
+ }
+
+ static void rpc_async_release(struct work_struct *work)
--- /dev/null
+From 87ed50036b866db2ec2ba16b2a7aec4a2b0b7c39 Mon Sep 17 00:00:00 2001
+From: Trond Myklebust <Trond.Myklebust@netapp.com>
+Date: Mon, 7 Jan 2013 14:30:46 -0500
+Subject: SUNRPC: Ensure we release the socket write lock if the rpc_task exits early
+
+From: Trond Myklebust <Trond.Myklebust@netapp.com>
+
+commit 87ed50036b866db2ec2ba16b2a7aec4a2b0b7c39 upstream.
+
+If the rpc_task exits while holding the socket write lock before it has
+allocated an rpc slot, then the usual mechanism for releasing the write
+lock in xprt_release() is defeated.
+
+The problem occurs if the call to xprt_lock_write() initially fails, so
+that the rpc_task is put on the xprt->sending wait queue. If the task
+exits after being assigned the lock by __xprt_lock_write_func, but
+before it has retried the call to xprt_lock_and_alloc_slot(), then
+it calls xprt_release() while holding the write lock, but will
+immediately exit due to the test for task->tk_rqstp != NULL.
+
+Reported-by: Chris Perl <chris.perl@gmail.com>
+Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ net/sunrpc/sched.c | 3 +--
+ net/sunrpc/xprt.c | 12 ++++++++++--
+ 2 files changed, 11 insertions(+), 4 deletions(-)
+
+--- a/net/sunrpc/sched.c
++++ b/net/sunrpc/sched.c
+@@ -957,8 +957,7 @@ static void rpc_async_release(struct wor
+
+ static void rpc_release_resources_task(struct rpc_task *task)
+ {
+- if (task->tk_rqstp)
+- xprt_release(task);
++ xprt_release(task);
+ if (task->tk_msg.rpc_cred) {
+ put_rpccred(task->tk_msg.rpc_cred);
+ task->tk_msg.rpc_cred = NULL;
+--- a/net/sunrpc/xprt.c
++++ b/net/sunrpc/xprt.c
+@@ -1136,10 +1136,18 @@ static void xprt_request_init(struct rpc
+ void xprt_release(struct rpc_task *task)
+ {
+ struct rpc_xprt *xprt;
+- struct rpc_rqst *req;
++ struct rpc_rqst *req = task->tk_rqstp;
+
+- if (!(req = task->tk_rqstp))
++ if (req == NULL) {
++ if (task->tk_client) {
++ rcu_read_lock();
++ xprt = rcu_dereference(task->tk_client->cl_xprt);
++ if (xprt->snd_task == task)
++ xprt_release_write(xprt, task);
++ rcu_read_unlock();
++ }
+ return;
++ }
+
+ xprt = req->rq_xprt;
+ if (task->tk_ops->rpc_count_stats != NULL)
--- /dev/null
+From 642fe4d00db56d65060ce2fd4c105884414acb16 Mon Sep 17 00:00:00 2001
+From: Trond Myklebust <Trond.Myklebust@netapp.com>
+Date: Thu, 8 Nov 2012 10:01:26 -0500
+Subject: SUNRPC: Fix validity issues with rpc_pipefs sb->s_fs_info
+
+From: Trond Myklebust <Trond.Myklebust@netapp.com>
+
+commit 642fe4d00db56d65060ce2fd4c105884414acb16 upstream.
+
+rpc_kill_sb() must defer calling put_net() until after the notifier
+has been called, since most (all?) of the notifier callbacks assume
+that sb->s_fs_info points to a valid net namespace. It also must not
+call put_net() if the call to rpc_fill_super was unsuccessful.
+
+Bugzilla: https://bugzilla.kernel.org/show_bug.cgi?id=48421
+
+Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
+Cc: Stanislav Kinsbursky <skinsbursky@parallels.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ net/sunrpc/rpc_pipe.c | 7 ++++++-
+ 1 file changed, 6 insertions(+), 1 deletion(-)
+
+--- a/net/sunrpc/rpc_pipe.c
++++ b/net/sunrpc/rpc_pipe.c
+@@ -1152,14 +1152,19 @@ static void rpc_kill_sb(struct super_blo
+ struct sunrpc_net *sn = net_generic(net, sunrpc_net_id);
+
+ mutex_lock(&sn->pipefs_sb_lock);
++ if (sn->pipefs_sb != sb) {
++ mutex_unlock(&sn->pipefs_sb_lock);
++ goto out;
++ }
+ sn->pipefs_sb = NULL;
+ mutex_unlock(&sn->pipefs_sb_lock);
+- put_net(net);
+ dprintk("RPC: sending pipefs UMOUNT notification for net %p%s\n",
+ net, NET_NAME(net));
+ blocking_notifier_call_chain(&rpc_pipefs_notifier_list,
+ RPC_PIPEFS_UMOUNT,
+ sb);
++ put_net(net);
++out:
+ kill_litter_super(sb);
+ }
+
--- /dev/null
+From 621eb19ce1ec216e03ad354cb0c4061736b2a436 Mon Sep 17 00:00:00 2001
+From: "J. Bruce Fields" <bfields@redhat.com>
+Date: Wed, 14 Nov 2012 10:48:05 -0500
+Subject: svcrpc: Revert "sunrpc/cache.h: replace simple_strtoul"
+
+From: "J. Bruce Fields" <bfields@redhat.com>
+
+commit 621eb19ce1ec216e03ad354cb0c4061736b2a436 upstream.
+
+Commit bbf43dc888833ac0539e437dbaeb28bfd4fbab9f "sunrpc/cache.h: replace
+simple_strtoul" introduced new range-checking which could cause get_int
+to fail on unsigned integers too large to be represented as an int.
+
+We could parse them as unsigned instead--but it turns out svcgssd is
+actually passing down "-1" in some cases. Which is perhaps stupid, but
+there's nothing we can do about it now.
+
+So just revert back to the previous "sloppy" behavior that accepts
+either representation.
+
+Reported-by: Sven Geggus <lists@fuchsschwanzdomain.de>
+Signed-off-by: J. Bruce Fields <bfields@redhat.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ include/linux/sunrpc/cache.h | 6 +++++-
+ 1 file changed, 5 insertions(+), 1 deletion(-)
+
+--- a/include/linux/sunrpc/cache.h
++++ b/include/linux/sunrpc/cache.h
+@@ -217,6 +217,8 @@ extern int qword_get(char **bpp, char *d
+ static inline int get_int(char **bpp, int *anint)
+ {
+ char buf[50];
++ char *ep;
++ int rv;
+ int len = qword_get(bpp, buf, sizeof(buf));
+
+ if (len < 0)
+@@ -224,9 +226,11 @@ static inline int get_int(char **bpp, in
+ if (len == 0)
+ return -ENOENT;
+
+- if (kstrtoint(buf, 0, anint))
++ rv = simple_strtol(buf, &ep, 0);
++ if (*ep)
+ return -EINVAL;
+
++ *anint = rv;
+ return 0;
+ }
+