--- /dev/null
+From e8c9dc93e27d891636defbc269f182a83e6abba8 Mon Sep 17 00:00:00 2001
+From: Nicolas Ferre <nicolas.ferre@atmel.com>
+Date: Fri, 27 Jan 2012 11:14:44 +0100
+Subject: ARM: at91: USB AT91 gadget registration for module
+
+From: Nicolas Ferre <nicolas.ferre@atmel.com>
+
+commit e8c9dc93e27d891636defbc269f182a83e6abba8 upstream.
+
+Registration of at91_udc as a module will enable SoC
+related code.
+
+Fix following an idea from Karel Znamenacek.
+
+Signed-off-by: Nicolas Ferre <nicolas.ferre@atmel.com>
+Acked-by: Karel Znamenacek <karel@ryston.cz>
+Acked-by: Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ arch/arm/mach-at91/at91rm9200_devices.c | 2 +-
+ arch/arm/mach-at91/at91sam9260_devices.c | 2 +-
+ arch/arm/mach-at91/at91sam9261_devices.c | 2 +-
+ arch/arm/mach-at91/at91sam9263_devices.c | 2 +-
+ 4 files changed, 4 insertions(+), 4 deletions(-)
+
+--- a/arch/arm/mach-at91/at91rm9200_devices.c
++++ b/arch/arm/mach-at91/at91rm9200_devices.c
+@@ -83,7 +83,7 @@ void __init at91_add_device_usbh(struct
+ * USB Device (Gadget)
+ * -------------------------------------------------------------------- */
+
+-#ifdef CONFIG_USB_AT91
++#if defined(CONFIG_USB_AT91) || defined(CONFIG_USB_AT91_MODULE)
+ static struct at91_udc_data udc_data;
+
+ static struct resource udc_resources[] = {
+--- a/arch/arm/mach-at91/at91sam9260_devices.c
++++ b/arch/arm/mach-at91/at91sam9260_devices.c
+@@ -84,7 +84,7 @@ void __init at91_add_device_usbh(struct
+ * USB Device (Gadget)
+ * -------------------------------------------------------------------- */
+
+-#ifdef CONFIG_USB_AT91
++#if defined(CONFIG_USB_AT91) || defined(CONFIG_USB_AT91_MODULE)
+ static struct at91_udc_data udc_data;
+
+ static struct resource udc_resources[] = {
+--- a/arch/arm/mach-at91/at91sam9261_devices.c
++++ b/arch/arm/mach-at91/at91sam9261_devices.c
+@@ -87,7 +87,7 @@ void __init at91_add_device_usbh(struct
+ * USB Device (Gadget)
+ * -------------------------------------------------------------------- */
+
+-#ifdef CONFIG_USB_AT91
++#if defined(CONFIG_USB_AT91) || defined(CONFIG_USB_AT91_MODULE)
+ static struct at91_udc_data udc_data;
+
+ static struct resource udc_resources[] = {
+--- a/arch/arm/mach-at91/at91sam9263_devices.c
++++ b/arch/arm/mach-at91/at91sam9263_devices.c
+@@ -92,7 +92,7 @@ void __init at91_add_device_usbh(struct
+ * USB Device (Gadget)
+ * -------------------------------------------------------------------- */
+
+-#ifdef CONFIG_USB_AT91
++#if defined(CONFIG_USB_AT91) || defined(CONFIG_USB_AT91_MODULE)
+ static struct at91_udc_data udc_data;
+
+ static struct resource udc_resources[] = {
--- /dev/null
+From cf1eb40f8f5ea12c9e569e7282161fc7f194fd62 Mon Sep 17 00:00:00 2001
+From: Martin Schwidefsky <schwidefsky@de.ibm.com>
+Date: Fri, 17 Feb 2012 10:29:23 +0100
+Subject: S390: correct ktime to tod clock comparator conversion
+
+From: Martin Schwidefsky <schwidefsky@de.ibm.com>
+
+commit cf1eb40f8f5ea12c9e569e7282161fc7f194fd62 upstream.
+
+The conversion of the ktime to a value suitable for the clock comparator
+does not take changes to wall_to_monotonic into account. In fact the
+conversion just needs the boot clock (sched_clock_base_cc) and the
+total_sleep_time.
+
+This is applicable to 3.2+ kernels.
+
+Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ arch/s390/kernel/time.c | 7 +++++--
+ 1 file changed, 5 insertions(+), 2 deletions(-)
+
+--- a/arch/s390/kernel/time.c
++++ b/arch/s390/kernel/time.c
+@@ -113,11 +113,14 @@ static void fixup_clock_comparator(unsig
+ static int s390_next_ktime(ktime_t expires,
+ struct clock_event_device *evt)
+ {
++ struct timespec ts;
+ u64 nsecs;
+
+- nsecs = ktime_to_ns(ktime_sub(expires, ktime_get_monotonic_offset()));
++ ts.tv_sec = ts.tv_nsec = 0;
++ monotonic_to_bootbased(&ts);
++ nsecs = ktime_to_ns(ktime_add(timespec_to_ktime(ts), expires));
+ do_div(nsecs, 125);
+- S390_lowcore.clock_comparator = TOD_UNIX_EPOCH + (nsecs << 9);
++ S390_lowcore.clock_comparator = sched_clock_base_cc + (nsecs << 9);
+ set_clock_comparator(S390_lowcore.clock_comparator);
+ return 0;
+ }
--- /dev/null
+From b7f5b7dec3d539a84734f2bcb7e53fbb1532a40b Mon Sep 17 00:00:00 2001
+From: Alex Deucher <alexander.deucher@amd.com>
+Date: Mon, 13 Feb 2012 16:36:34 -0500
+Subject: drm/radeon/kms: fix MSI re-arm on rv370+
+
+From: Alex Deucher <alexander.deucher@amd.com>
+
+commit b7f5b7dec3d539a84734f2bcb7e53fbb1532a40b upstream.
+
+MSI_REARM_EN register is a write only trigger register.
+There is no need RMW when re-arming.
+
+May fix:
+https://bugs.freedesktop.org/show_bug.cgi?id=41668
+
+Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
+Signed-off-by: Dave Airlie <airlied@redhat.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/gpu/drm/radeon/r100.c | 4 +---
+ drivers/gpu/drm/radeon/rs600.c | 4 +---
+ 2 files changed, 2 insertions(+), 6 deletions(-)
+
+--- a/drivers/gpu/drm/radeon/r100.c
++++ b/drivers/gpu/drm/radeon/r100.c
+@@ -789,9 +789,7 @@ int r100_irq_process(struct radeon_devic
+ WREG32(RADEON_AIC_CNTL, msi_rearm | RS400_MSI_REARM);
+ break;
+ default:
+- msi_rearm = RREG32(RADEON_MSI_REARM_EN) & ~RV370_MSI_REARM_EN;
+- WREG32(RADEON_MSI_REARM_EN, msi_rearm);
+- WREG32(RADEON_MSI_REARM_EN, msi_rearm | RV370_MSI_REARM_EN);
++ WREG32(RADEON_MSI_REARM_EN, RV370_MSI_REARM_EN);
+ break;
+ }
+ }
+--- a/drivers/gpu/drm/radeon/rs600.c
++++ b/drivers/gpu/drm/radeon/rs600.c
+@@ -693,9 +693,7 @@ int rs600_irq_process(struct radeon_devi
+ WREG32(RADEON_BUS_CNTL, msi_rearm | RS600_MSI_REARM);
+ break;
+ default:
+- msi_rearm = RREG32(RADEON_MSI_REARM_EN) & ~RV370_MSI_REARM_EN;
+- WREG32(RADEON_MSI_REARM_EN, msi_rearm);
+- WREG32(RADEON_MSI_REARM_EN, msi_rearm | RV370_MSI_REARM_EN);
++ WREG32(RADEON_MSI_REARM_EN, RV370_MSI_REARM_EN);
+ break;
+ }
+ }
--- /dev/null
+From 545d680938be1e86a6c5250701ce9abaf360c495 Mon Sep 17 00:00:00 2001
+From: Tyler Hicks <tyhicks@canonical.com>
+Date: Tue, 7 Feb 2012 17:55:40 -0600
+Subject: eCryptfs: Copy up lower inode attrs after setting lower xattr
+
+From: Tyler Hicks <tyhicks@canonical.com>
+
+commit 545d680938be1e86a6c5250701ce9abaf360c495 upstream.
+
+After passing through a ->setxattr() call, eCryptfs needs to copy the
+inode attributes from the lower inode to the eCryptfs inode, as they
+may have changed in the lower filesystem's ->setxattr() path.
+
+One example is if an extended attribute containing a POSIX Access
+Control List is being set. The new ACL may cause the lower filesystem to
+modify the mode of the lower inode and the eCryptfs inode would need to
+be updated to reflect the new mode.
+
+https://launchpad.net/bugs/926292
+
+Signed-off-by: Tyler Hicks <tyhicks@canonical.com>
+Reported-by: Sebastien Bacher <seb128@ubuntu.com>
+Cc: John Johansen <john.johansen@canonical.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ fs/ecryptfs/inode.c | 2 ++
+ 1 file changed, 2 insertions(+)
+
+--- a/fs/ecryptfs/inode.c
++++ b/fs/ecryptfs/inode.c
+@@ -1104,6 +1104,8 @@ ecryptfs_setxattr(struct dentry *dentry,
+ }
+
+ rc = vfs_setxattr(lower_dentry, name, value, size, flags);
++ if (!rc)
++ fsstack_copy_attr_all(dentry->d_inode, lower_dentry->d_inode);
+ out:
+ return rc;
+ }
--- /dev/null
+From 72ba009b8a159e995e40d3b4e5d7d265acead983 Mon Sep 17 00:00:00 2001
+From: Tim Gardner <tim.gardner@canonical.com>
+Date: Wed, 15 Feb 2012 07:50:15 +0000
+Subject: ipheth: Add iPhone 4S
+
+From: Tim Gardner <tim.gardner@canonical.com>
+
+commit 72ba009b8a159e995e40d3b4e5d7d265acead983 upstream.
+
+BugLink: http://bugs.launchpad.net/bugs/900802
+
+Signed-off-by: Till Kamppeter <till.kamppeter@gmail.com>
+Signed-off-by: Tim Gardner <tim.gardner@canonical.com>
+Signed-off-by: David S. Miller <davem@davemloft.net>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/net/usb/ipheth.c | 5 +++++
+ 1 file changed, 5 insertions(+)
+
+--- a/drivers/net/usb/ipheth.c
++++ b/drivers/net/usb/ipheth.c
+@@ -60,6 +60,7 @@
+ #define USB_PRODUCT_IPHONE_3GS 0x1294
+ #define USB_PRODUCT_IPHONE_4 0x1297
+ #define USB_PRODUCT_IPHONE_4_VZW 0x129c
++#define USB_PRODUCT_IPHONE_4S 0x12a0
+
+ #define IPHETH_USBINTF_CLASS 255
+ #define IPHETH_USBINTF_SUBCLASS 253
+@@ -103,6 +104,10 @@ static struct usb_device_id ipheth_table
+ USB_VENDOR_APPLE, USB_PRODUCT_IPHONE_4_VZW,
+ IPHETH_USBINTF_CLASS, IPHETH_USBINTF_SUBCLASS,
+ IPHETH_USBINTF_PROTO) },
++ { USB_DEVICE_AND_INTERFACE_INFO(
++ USB_VENDOR_APPLE, USB_PRODUCT_IPHONE_4S,
++ IPHETH_USBINTF_CLASS, IPHETH_USBINTF_SUBCLASS,
++ IPHETH_USBINTF_PROTO) },
+ { }
+ };
+ MODULE_DEVICE_TABLE(usb, ipheth_table);
--- /dev/null
+From b57e6b560fc2a2742910ac5ca0eb2c46e45aeac2 Mon Sep 17 00:00:00 2001
+From: Mohammed Shafi Shajakhan <mohammed@qca.qualcomm.com>
+Date: Thu, 9 Feb 2012 19:59:43 +0530
+Subject: mac80211: Fix a rwlock bad magic bug
+
+From: Mohammed Shafi Shajakhan <mohammed@qca.qualcomm.com>
+
+commit b57e6b560fc2a2742910ac5ca0eb2c46e45aeac2 upstream.
+
+read_lock(&tpt_trig->trig.leddev_list_lock) is accessed via the path
+ieee80211_open (->) ieee80211_do_open (->) ieee80211_mod_tpt_led_trig
+(->) ieee80211_start_tpt_led_trig (->) tpt_trig_timer before initializing
+it.
+the intilization of this read/write lock happens via the path
+ieee80211_led_init (->) led_trigger_register, but we are doing
+'ieee80211_led_init' after 'ieeee80211_if_add' where we
+register netdev_ops.
+so we access leddev_list_lock before initializing it and causes the
+following bug in chrome laptops with AR928X cards with the following
+script
+
+while true
+do
+sudo modprobe -v ath9k
+sleep 3
+sudo modprobe -r ath9k
+sleep 3
+done
+
+ BUG: rwlock bad magic on CPU#1, wpa_supplicant/358, f5b9eccc
+ Pid: 358, comm: wpa_supplicant Not tainted 3.0.13 #1
+ Call Trace:
+
+ [<8137b9df>] rwlock_bug+0x3d/0x47
+ [<81179830>] do_raw_read_lock+0x19/0x29
+ [<8137f063>] _raw_read_lock+0xd/0xf
+ [<f9081957>] tpt_trig_timer+0xc3/0x145 [mac80211]
+ [<f9081f3a>] ieee80211_mod_tpt_led_trig+0x152/0x174 [mac80211]
+ [<f9076a3f>] ieee80211_do_open+0x11e/0x42e [mac80211]
+ [<f9075390>] ? ieee80211_check_concurrent_iface+0x26/0x13c [mac80211]
+ [<f9076d97>] ieee80211_open+0x48/0x4c [mac80211]
+ [<812dbed8>] __dev_open+0x82/0xab
+ [<812dc0c9>] __dev_change_flags+0x9c/0x113
+ [<812dc1ae>] dev_change_flags+0x18/0x44
+ [<8132144f>] devinet_ioctl+0x243/0x51a
+ [<81321ba9>] inet_ioctl+0x93/0xac
+ [<812cc951>] sock_ioctl+0x1c6/0x1ea
+ [<812cc78b>] ? might_fault+0x20/0x20
+ [<810b1ebb>] do_vfs_ioctl+0x46e/0x4a2
+ [<810a6ebb>] ? fget_light+0x2f/0x70
+ [<812ce549>] ? sys_recvmsg+0x3e/0x48
+ [<810b1f35>] sys_ioctl+0x46/0x69
+ [<8137fa77>] sysenter_do_call+0x12/0x2
+
+Cc: Gary Morain <gmorain@google.com>
+Cc: Paul Stewart <pstew@google.com>
+Cc: Abhijit Pradhan <abhijit@qca.qualcomm.com>
+Cc: Vasanthakumar Thiagarajan <vthiagar@qca.qualcomm.com>
+Cc: Rajkumar Manoharan <rmanohar@qca.qualcomm.com>
+Acked-by: Johannes Berg <johannes.berg@intel.com>
+Tested-by: Mohammed Shafi Shajakhan <mohammed@qca.qualcomm.com>
+Signed-off-by: Mohammed Shafi Shajakhan <mohammed@qca.qualcomm.com>
+Signed-off-by: John W. Linville <linville@tuxdriver.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ net/mac80211/main.c | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+--- a/net/mac80211/main.c
++++ b/net/mac80211/main.c
+@@ -885,6 +885,8 @@ int ieee80211_register_hw(struct ieee802
+ wiphy_debug(local->hw.wiphy, "Failed to initialize wep: %d\n",
+ result);
+
++ ieee80211_led_init(local);
++
+ rtnl_lock();
+
+ result = ieee80211_init_rate_ctrl_alg(local,
+@@ -906,8 +908,6 @@ int ieee80211_register_hw(struct ieee802
+
+ rtnl_unlock();
+
+- ieee80211_led_init(local);
+-
+ local->network_latency_notifier.notifier_call =
+ ieee80211_max_network_latency;
+ result = pm_qos_add_notifier(PM_QOS_NETWORK_LATENCY,
--- /dev/null
+From 71f6bd4a23130cd2f4b036010c5790b1295290b9 Mon Sep 17 00:00:00 2001
+From: Yinghai Lu <yinghai.lu@oracle.com>
+Date: Mon, 30 Jan 2012 12:25:24 +0100
+Subject: PCI: workaround hard-wired bus number V2
+
+From: Yinghai Lu <yinghai.lu@oracle.com>
+
+commit 71f6bd4a23130cd2f4b036010c5790b1295290b9 upstream.
+
+Fixes PCI device detection on IBM xSeries IBM 3850 M2 / x3950 M2
+when using ACPI resources (_CRS).
+This is default, a manual workaround (without this patch)
+would be pci=nocrs boot param.
+
+V2: Add dev_warn if the workaround is hit. This should reveal
+how common such setups are (via google) and point to possible
+problems if things are still not working as expected.
+-> Suggested by Jan Beulich.
+
+Tested-by: garyhade@us.ibm.com
+Signed-off-by: Yinghai Lu <yinghai.lu@oracle.com>
+Signed-off-by: Jesse Barnes <jbarnes@virtuousgeek.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/pci/probe.c | 5 +++++
+ 1 file changed, 5 insertions(+)
+
+--- a/drivers/pci/probe.c
++++ b/drivers/pci/probe.c
+@@ -651,6 +651,11 @@ int __devinit pci_scan_bridge(struct pci
+ dev_dbg(&dev->dev, "scanning [bus %02x-%02x] behind bridge, pass %d\n",
+ secondary, subordinate, pass);
+
++ if (!primary && (primary != bus->number) && secondary && subordinate) {
++ dev_warn(&dev->dev, "Primary bus is hard wired to 0\n");
++ primary = bus->number;
++ }
++
+ /* Check if setup is sensible at all */
+ if (!pass &&
+ (primary != bus->number || secondary <= bus->number)) {
--- /dev/null
+From 9a45a9407c69d068500923480884661e2b9cc421 Mon Sep 17 00:00:00 2001
+From: Anton Blanchard <anton@samba.org>
+Date: Wed, 15 Feb 2012 18:48:22 +0000
+Subject: powerpc/perf: power_pmu_start restores incorrect values, breaking frequency events
+
+From: Anton Blanchard <anton@samba.org>
+
+commit 9a45a9407c69d068500923480884661e2b9cc421 upstream.
+
+perf on POWER stopped working after commit e050e3f0a71b (perf: Fix
+broken interrupt rate throttling). That patch exposed a bug in
+the POWER perf_events code.
+
+Since the PMCs count upwards and take an exception when the top bit
+is set, we want to write 0x80000000 - left in power_pmu_start. We were
+instead programming in left which effectively disables the counter
+until we eventually hit 0x80000000. This could take seconds or longer.
+
+With the patch applied I get the expected number of samples:
+
+ SAMPLE events: 9948
+
+Signed-off-by: Anton Blanchard <anton@samba.org>
+Acked-by: Paul Mackerras <paulus@samba.org>
+Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ arch/powerpc/kernel/perf_event.c | 8 +++++++-
+ 1 file changed, 7 insertions(+), 1 deletion(-)
+
+--- a/arch/powerpc/kernel/perf_event.c
++++ b/arch/powerpc/kernel/perf_event.c
+@@ -865,6 +865,7 @@ static void power_pmu_start(struct perf_
+ {
+ unsigned long flags;
+ s64 left;
++ unsigned long val;
+
+ if (!event->hw.idx || !event->hw.sample_period)
+ return;
+@@ -880,7 +881,12 @@ static void power_pmu_start(struct perf_
+
+ event->hw.state = 0;
+ left = local64_read(&event->hw.period_left);
+- write_pmc(event->hw.idx, left);
++
++ val = 0;
++ if (left < 0x80000000L)
++ val = 0x80000000L - left;
++
++ write_pmc(event->hw.idx, val);
+
+ perf_event_update_userpage(event);
+ perf_pmu_enable(event->pmu);
--- /dev/null
+From 61cddc57dc14a5dffa0921d9a24fd68edbb374ac Mon Sep 17 00:00:00 2001
+From: Lars-Peter Clausen <lars@metafoo.de>
+Date: Wed, 15 Feb 2012 10:23:25 +0100
+Subject: regmap: Fix cache defaults initialization from raw cache defaults
+
+From: Lars-Peter Clausen <lars@metafoo.de>
+
+commit 61cddc57dc14a5dffa0921d9a24fd68edbb374ac upstream.
+
+Currently registers with a value of 0 are ignored when initializing the register
+defaults from raw defaults. This worked in the past, because registers without a
+explicit default were assumed to have a default value of 0. This was changed in
+commit b03622a8 ("regmap: Ensure rbtree syncs registers set to zero properly").
+As a result registers, which have a raw default value of 0 are now assumed to
+have no default. This again can result in unnecessary writes when syncing the
+cache. It will also result in unnecessary reads for e.g. the first update
+operation. In the case where readback is not possible this will even let the
+update operation fail, if the register has not been written to before.
+
+So this patch removes the check. Instead it adds a check to ignore raw defaults
+for registers which are volatile, since those registers are not cached.
+
+Signed-off-by: Lars-Peter Clausen <lars@metafoo.de>
+Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/base/regmap/regcache.c | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+--- a/drivers/base/regmap/regcache.c
++++ b/drivers/base/regmap/regcache.c
+@@ -54,7 +54,7 @@ static int regcache_hw_init(struct regma
+ for (count = 0, i = 0; i < map->num_reg_defaults_raw; i++) {
+ val = regcache_get_val(map->reg_defaults_raw,
+ i, map->cache_word_size);
+- if (!val)
++ if (regmap_volatile(map, i))
+ continue;
+ count++;
+ }
+@@ -69,7 +69,7 @@ static int regcache_hw_init(struct regma
+ for (i = 0, j = 0; i < map->num_reg_defaults_raw; i++) {
+ val = regcache_get_val(map->reg_defaults_raw,
+ i, map->cache_word_size);
+- if (!val)
++ if (regmap_volatile(map, i))
+ continue;
+ map->reg_defaults[j].reg = i;
+ map->reg_defaults[j].def = val;
--- /dev/null
+powerpc-perf-power_pmu_start-restores-incorrect-values-breaking-frequency-events.patch
+arm-at91-usb-at91-gadget-registration-for-module.patch
+drm-radeon-kms-fix-msi-re-arm-on-rv370.patch
+pci-workaround-hard-wired-bus-number-v2.patch
+mac80211-fix-a-rwlock-bad-magic-bug.patch
+ipheth-add-iphone-4s.patch
+regmap-fix-cache-defaults-initialization-from-raw-cache-defaults.patch
+ecryptfs-copy-up-lower-inode-attrs-after-setting-lower-xattr.patch
+correct-ktime-to-tod-clock-comparator-conversion.patch
+vfs-fix-d_inode_lookup-dentry-ref-leak.patch
--- /dev/null
+From e188dc02d3a9c911be56eca5aa114fe7e9822d53 Mon Sep 17 00:00:00 2001
+From: Miklos Szeredi <mszeredi@suse.cz>
+Date: Fri, 3 Feb 2012 14:25:18 +0100
+Subject: vfs: fix d_inode_lookup() dentry ref leak
+
+From: Miklos Szeredi <mszeredi@suse.cz>
+
+commit e188dc02d3a9c911be56eca5aa114fe7e9822d53 upstream.
+
+d_inode_lookup() leaks a dentry reference on IS_DEADDIR().
+
+Signed-off-by: Miklos Szeredi <mszeredi@suse.cz>
+Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ fs/namei.c | 4 +++-
+ 1 file changed, 3 insertions(+), 1 deletion(-)
+
+--- a/fs/namei.c
++++ b/fs/namei.c
+@@ -1094,8 +1094,10 @@ static struct dentry *d_inode_lookup(str
+ struct dentry *old;
+
+ /* Don't create child dentry for a dead directory. */
+- if (unlikely(IS_DEADDIR(inode)))
++ if (unlikely(IS_DEADDIR(inode))) {
++ dput(dentry);
+ return ERR_PTR(-ENOENT);
++ }
+
+ old = inode->i_op->lookup(inode, dentry, nd);
+ if (unlikely(old)) {