stable.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
To: linux-kernel@vger.kernel.org
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
	stable@vger.kernel.org, Al Viro <viro@zeniv.linux.org.uk>
Subject: [PATCH 3.14 146/158] smarter propagate_mnt()
Date: Sun,  4 May 2014 11:40:55 -0400	[thread overview]
Message-ID: <20140504154049.876230384@linuxfoundation.org> (raw)
In-Reply-To: <20140504154029.975081050@linuxfoundation.org>

3.14-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Al Viro <viro@zeniv.linux.org.uk>

commit f2ebb3a921c1ca1e2ddd9242e95a1989a50c4c68 upstream.

The current mainline has copies propagated to *all* nodes, then
tears down the copies we made for nodes that do not contain
counterparts of the desired mountpoint.  That sets the right
propagation graph for the copies (at teardown time we move
the slaves of removed node to a surviving peer or directly
to master), but we end up paying a fairly steep price in
useless allocations.  It's fairly easy to create a situation
where N calls of mount(2) create exactly N bindings, with
O(N^2) vfsmounts allocated and freed in process.

Fortunately, it is possible to avoid those allocations/freeings.
The trick is to create copies in the right order and find which
one would've eventually become a master with the current algorithm.
It turns out to be possible in O(nodes getting propagation) time
and with no extra allocations at all.

One part is that we need to make sure that eventual master will be
created before its slaves, so we need to walk the propagation
tree in a different order - by peer groups.  And iterate through
the peers before dealing with the next group.

Another thing is finding the (earlier) copy that will be a master
of one we are about to create; to do that we are (temporary) marking
the masters of mountpoints we are attaching the copies to.

Either we are in a peer of the last mountpoint we'd dealt with,
or we have the following situation: we are attaching to mountpoint M,
the last copy S_0 had been attached to M_0 and there are sequences
S_0...S_n, M_0...M_n such that S_{i+1} is a master of S_{i},
S_{i} mounted on M{i} and we need to create a slave of the first S_{k}
such that M is getting propagation from M_{k}.  It means that the master
of M_{k} will be among the sequence of masters of M.  On the
other hand, the nearest marked node in that sequence will either
be the master of M_{k} or the master of M_{k-1} (the latter -
in the case if M_{k-1} is a slave of something M gets propagation
from, but in a wrong peer group).

So we go through the sequence of masters of M until we find
a marked one (P).  Let N be the one before it.  Then we go through
the sequence of masters of S_0 until we find one (say, S) mounted
on a node D that has P as master and check if D is a peer of N.
If it is, S will be the master of new copy, if not - the master of S
will be.

That's it for the hard part; the rest is fairly simple.  Iterator
is in next_group(), handling of one prospective mountpoint is
propagate_one().

It seems to survive all tests and gives a noticably better performance
than the current mainline for setups that are seriously using shared
subtrees.

Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

---
 fs/namespace.c        |   11 ++
 fs/pnode.c            |  198 ++++++++++++++++++++++++++++++--------------------
 fs/pnode.h            |    3 
 include/linux/mount.h |    3 
 4 files changed, 133 insertions(+), 82 deletions(-)

--- a/fs/namespace.c
+++ b/fs/namespace.c
@@ -885,7 +885,7 @@ static struct mount *clone_mnt(struct mo
 			goto out_free;
 	}
 
-	mnt->mnt.mnt_flags = old->mnt.mnt_flags & ~MNT_WRITE_HOLD;
+	mnt->mnt.mnt_flags = old->mnt.mnt_flags & ~(MNT_WRITE_HOLD|MNT_MARKED);
 	/* Don't allow unprivileged users to change mount flags */
 	if ((flag & CL_UNPRIVILEGED) && (mnt->mnt.mnt_flags & MNT_READONLY))
 		mnt->mnt.mnt_flags |= MNT_LOCK_READONLY;
@@ -1661,9 +1661,9 @@ static int attach_recursive_mnt(struct m
 		if (err)
 			goto out;
 		err = propagate_mnt(dest_mnt, dest_mp, source_mnt, &tree_list);
+		lock_mount_hash();
 		if (err)
 			goto out_cleanup_ids;
-		lock_mount_hash();
 		for (p = source_mnt; p; p = next_mnt(p, source_mnt))
 			set_mnt_shared(p);
 	} else {
@@ -1690,6 +1690,11 @@ static int attach_recursive_mnt(struct m
 	return 0;
 
  out_cleanup_ids:
+	while (!hlist_empty(&tree_list)) {
+		child = hlist_entry(tree_list.first, struct mount, mnt_hash);
+		umount_tree(child, 0);
+	}
+	unlock_mount_hash();
 	cleanup_group_ids(source_mnt, NULL);
  out:
 	return err;
@@ -2044,7 +2049,7 @@ static int do_add_mount(struct mount *ne
 	struct mount *parent;
 	int err;
 
-	mnt_flags &= ~(MNT_SHARED | MNT_WRITE_HOLD | MNT_INTERNAL | MNT_DOOMED | MNT_SYNC_UMOUNT);
+	mnt_flags &= ~MNT_INTERNAL_FLAGS;
 
 	mp = lock_mount(path);
 	if (IS_ERR(mp))
--- a/fs/pnode.c
+++ b/fs/pnode.c
@@ -164,46 +164,94 @@ static struct mount *propagation_next(st
 	}
 }
 
-/*
- * return the source mount to be used for cloning
- *
- * @dest 	the current destination mount
- * @last_dest  	the last seen destination mount
- * @last_src  	the last seen source mount
- * @type	return CL_SLAVE if the new mount has to be
- * 		cloned as a slave.
- */
-static struct mount *get_source(struct mount *dest,
-				struct mount *last_dest,
-				struct mount *last_src,
-				int *type)
+static struct mount *next_group(struct mount *m, struct mount *origin)
 {
-	struct mount *p_last_src = NULL;
-	struct mount *p_last_dest = NULL;
-
-	while (last_dest != dest->mnt_master) {
-		p_last_dest = last_dest;
-		p_last_src = last_src;
-		last_dest = last_dest->mnt_master;
-		last_src = last_src->mnt_master;
+	while (1) {
+		while (1) {
+			struct mount *next;
+			if (!IS_MNT_NEW(m) && !list_empty(&m->mnt_slave_list))
+				return first_slave(m);
+			next = next_peer(m);
+			if (m->mnt_group_id == origin->mnt_group_id) {
+				if (next == origin)
+					return NULL;
+			} else if (m->mnt_slave.next != &next->mnt_slave)
+				break;
+			m = next;
+		}
+		/* m is the last peer */
+		while (1) {
+			struct mount *master = m->mnt_master;
+			if (m->mnt_slave.next != &master->mnt_slave_list)
+				return next_slave(m);
+			m = next_peer(master);
+			if (master->mnt_group_id == origin->mnt_group_id)
+				break;
+			if (master->mnt_slave.next == &m->mnt_slave)
+				break;
+			m = master;
+		}
+		if (m == origin)
+			return NULL;
 	}
+}
 
-	if (p_last_dest) {
-		do {
-			p_last_dest = next_peer(p_last_dest);
-		} while (IS_MNT_NEW(p_last_dest));
-		/* is that a peer of the earlier? */
-		if (dest == p_last_dest) {
-			*type = CL_MAKE_SHARED;
-			return p_last_src;
+/* all accesses are serialized by namespace_sem */
+static struct user_namespace *user_ns;
+static struct mount *last_dest, *last_source, *dest_master;
+static struct mountpoint *mp;
+static struct hlist_head *list;
+
+static int propagate_one(struct mount *m)
+{
+	struct mount *child;
+	int type;
+	/* skip ones added by this propagate_mnt() */
+	if (IS_MNT_NEW(m))
+		return 0;
+	/* skip if mountpoint isn't covered by it */
+	if (!is_subdir(mp->m_dentry, m->mnt.mnt_root))
+		return 0;
+	if (m->mnt_group_id == last_dest->mnt_group_id) {
+		type = CL_MAKE_SHARED;
+	} else {
+		struct mount *n, *p;
+		for (n = m; ; n = p) {
+			p = n->mnt_master;
+			if (p == dest_master || IS_MNT_MARKED(p)) {
+				while (last_dest->mnt_master != p) {
+					last_source = last_source->mnt_master;
+					last_dest = last_source->mnt_parent;
+				}
+				if (n->mnt_group_id != last_dest->mnt_group_id) {
+					last_source = last_source->mnt_master;
+					last_dest = last_source->mnt_parent;
+				}
+				break;
+			}
 		}
+		type = CL_SLAVE;
+		/* beginning of peer group among the slaves? */
+		if (IS_MNT_SHARED(m))
+			type |= CL_MAKE_SHARED;
 	}
-	/* slave of the earlier, then */
-	*type = CL_SLAVE;
-	/* beginning of peer group among the slaves? */
-	if (IS_MNT_SHARED(dest))
-		*type |= CL_MAKE_SHARED;
-	return last_src;
+
+	/* Notice when we are propagating across user namespaces */
+	if (m->mnt_ns->user_ns != user_ns)
+		type |= CL_UNPRIVILEGED;
+	child = copy_tree(last_source, last_source->mnt.mnt_root, type);
+	if (IS_ERR(child))
+		return PTR_ERR(child);
+	mnt_set_mountpoint(m, mp, child);
+	last_dest = m;
+	last_source = child;
+	if (m->mnt_master != dest_master) {
+		read_seqlock_excl(&mount_lock);
+		SET_MNT_MARK(m->mnt_master);
+		read_sequnlock_excl(&mount_lock);
+	}
+	hlist_add_head(&child->mnt_hash, list);
+	return 0;
 }
 
 /*
@@ -222,56 +270,48 @@ static struct mount *get_source(struct m
 int propagate_mnt(struct mount *dest_mnt, struct mountpoint *dest_mp,
 		    struct mount *source_mnt, struct hlist_head *tree_list)
 {
-	struct user_namespace *user_ns = current->nsproxy->mnt_ns->user_ns;
-	struct mount *m, *child;
+	struct mount *m, *n;
 	int ret = 0;
-	struct mount *prev_dest_mnt = dest_mnt;
-	struct mount *prev_src_mnt  = source_mnt;
-	HLIST_HEAD(tmp_list);
-
-	for (m = propagation_next(dest_mnt, dest_mnt); m;
-			m = propagation_next(m, dest_mnt)) {
-		int type;
-		struct mount *source;
-
-		if (IS_MNT_NEW(m))
-			continue;
-
-		source =  get_source(m, prev_dest_mnt, prev_src_mnt, &type);
-
-		/* Notice when we are propagating across user namespaces */
-		if (m->mnt_ns->user_ns != user_ns)
-			type |= CL_UNPRIVILEGED;
-
-		child = copy_tree(source, source->mnt.mnt_root, type);
-		if (IS_ERR(child)) {
-			ret = PTR_ERR(child);
-			tmp_list = *tree_list;
-			tmp_list.first->pprev = &tmp_list.first;
-			INIT_HLIST_HEAD(tree_list);
+
+	/*
+	 * we don't want to bother passing tons of arguments to
+	 * propagate_one(); everything is serialized by namespace_sem,
+	 * so globals will do just fine.
+	 */
+	user_ns = current->nsproxy->mnt_ns->user_ns;
+	last_dest = dest_mnt;
+	last_source = source_mnt;
+	mp = dest_mp;
+	list = tree_list;
+	dest_master = dest_mnt->mnt_master;
+
+	/* all peers of dest_mnt, except dest_mnt itself */
+	for (n = next_peer(dest_mnt); n != dest_mnt; n = next_peer(n)) {
+		ret = propagate_one(n);
+		if (ret)
 			goto out;
-		}
+	}
 
-		if (is_subdir(dest_mp->m_dentry, m->mnt.mnt_root)) {
-			mnt_set_mountpoint(m, dest_mp, child);
-			hlist_add_head(&child->mnt_hash, tree_list);
-		} else {
-			/*
-			 * This can happen if the parent mount was bind mounted
-			 * on some subdirectory of a shared/slave mount.
-			 */
-			hlist_add_head(&child->mnt_hash, &tmp_list);
-		}
-		prev_dest_mnt = m;
-		prev_src_mnt  = child;
+	/* all slave groups */
+	for (m = next_group(dest_mnt, dest_mnt); m;
+			m = next_group(m, dest_mnt)) {
+		/* everything in that slave group */
+		n = m;
+		do {
+			ret = propagate_one(n);
+			if (ret)
+				goto out;
+			n = next_peer(n);
+		} while (n != m);
 	}
 out:
-	lock_mount_hash();
-	while (!hlist_empty(&tmp_list)) {
-		child = hlist_entry(tmp_list.first, struct mount, mnt_hash);
-		umount_tree(child, 0);
+	read_seqlock_excl(&mount_lock);
+	hlist_for_each_entry(n, tree_list, mnt_hash) {
+		m = n->mnt_parent;
+		if (m->mnt_master != dest_mnt->mnt_master)
+			CLEAR_MNT_MARK(m->mnt_master);
 	}
-	unlock_mount_hash();
+	read_sequnlock_excl(&mount_lock);
 	return ret;
 }
 
--- a/fs/pnode.h
+++ b/fs/pnode.h
@@ -16,6 +16,9 @@
 #define IS_MNT_NEW(m)  (!(m)->mnt_ns)
 #define CLEAR_MNT_SHARED(m) ((m)->mnt.mnt_flags &= ~MNT_SHARED)
 #define IS_MNT_UNBINDABLE(m) ((m)->mnt.mnt_flags & MNT_UNBINDABLE)
+#define IS_MNT_MARKED(m) ((m)->mnt.mnt_flags & MNT_MARKED)
+#define SET_MNT_MARK(m) ((m)->mnt.mnt_flags |= MNT_MARKED)
+#define CLEAR_MNT_MARK(m) ((m)->mnt.mnt_flags &= ~MNT_MARKED)
 
 #define CL_EXPIRE    		0x01
 #define CL_SLAVE     		0x02
--- a/include/linux/mount.h
+++ b/include/linux/mount.h
@@ -44,6 +44,8 @@ struct mnt_namespace;
 #define MNT_SHARED_MASK	(MNT_UNBINDABLE)
 #define MNT_PROPAGATION_MASK	(MNT_SHARED | MNT_UNBINDABLE)
 
+#define MNT_INTERNAL_FLAGS (MNT_SHARED | MNT_WRITE_HOLD | MNT_INTERNAL | \
+			    MNT_DOOMED | MNT_SYNC_UMOUNT | MNT_MARKED)
 
 #define MNT_INTERNAL	0x4000
 
@@ -51,6 +53,7 @@ struct mnt_namespace;
 #define MNT_LOCKED		0x800000
 #define MNT_DOOMED		0x1000000
 #define MNT_SYNC_UMOUNT		0x2000000
+#define MNT_MARKED		0x4000000
 
 struct vfsmount {
 	struct dentry *mnt_root;	/* root of the mounted tree */



  parent reply	other threads:[~2014-05-04 15:40 UTC|newest]

Thread overview: 165+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-05-04 15:38 [PATCH 3.14 000/158] 3.14.3-stable review Greg Kroah-Hartman
2014-05-04 15:38 ` [PATCH 3.14 001/158] arm64: Do not synchronise I and D caches for special ptes Greg Kroah-Hartman
2014-05-04 15:38 ` [PATCH 3.14 002/158] arm64: Make DMA coherent and strongly ordered mappings not executable Greg Kroah-Hartman
2014-05-04 15:38 ` [PATCH 3.14 003/158] ASoC: pcm: Drop incorrect double/extra frees Greg Kroah-Hartman
2014-05-04 15:38 ` [PATCH 3.14 004/158] ASoC: cs42l51: Fix SOC_DOUBLE_R_SX_TLV shift values for ADC, PCM, and Analog kcontrols Greg Kroah-Hartman
2014-05-04 15:38 ` [PATCH 3.14 005/158] ASoC: cs42l52: Fix mask bits for SOC_VALUE_ENUM_SINGLE Greg Kroah-Hartman
2014-05-04 15:38 ` [PATCH 3.14 006/158] ASoC: cs42l73: " Greg Kroah-Hartman
2014-05-04 15:38 ` [PATCH 3.14 007/158] ARM: OMAP2+: INTC: Acknowledge stuck active interrupts Greg Kroah-Hartman
2014-05-04 15:38 ` [PATCH 3.14 008/158] ARM: OMAP2+: hwmod: fix missing braces in _init() Greg Kroah-Hartman
2014-05-04 15:38 ` [PATCH 3.14 009/158] CLK: TI: OMAP4/5/DRA7: Remove gpmc_fck from dummy clocks Greg Kroah-Hartman
2014-05-04 15:38 ` [PATCH 3.14 010/158] ARM: OMAP4: Fix definition of IS_PM44XX_ERRATUM Greg Kroah-Hartman
2014-05-04 15:38 ` [PATCH 3.14 011/158] ARM: OMAP3: hwmod data: Correct clock domains for USB modules Greg Kroah-Hartman
2014-05-04 15:38 ` [PATCH 3.14 012/158] ARM: dts: am33xx: correcting dt node unit address for usb Greg Kroah-Hartman
2014-05-05  8:37   ` Johan Hovold
2014-05-05 20:47     ` Greg Kroah-Hartman
2014-05-04 15:38 ` [PATCH 3.14 013/158] ARM: dts: omap4/5: Use l3_ick for the gpmc node Greg Kroah-Hartman
2014-05-04 15:38 ` [PATCH 3.14 014/158] ARM: dts: Keep G3D regulator always on for exynos5250-arndale Greg Kroah-Hartman
2014-05-04 15:38 ` [PATCH 3.14 015/158] ARM: 7954/1: mm: remove remaining domain support from ARMv6 Greg Kroah-Hartman
2014-05-04 15:38 ` [PATCH 3.14 016/158] ARM: Fix default CPU selection for ARCH_MULTI_V5 Greg Kroah-Hartman
2014-05-04 15:38 ` [PATCH 3.14 017/158] ARM: 8007/1: Remove extraneous kcmp syscall ignore Greg Kroah-Hartman
2014-05-04 15:38 ` [PATCH 3.14 018/158] ARM: 8027/1: fix do_div() bug in big-endian systems Greg Kroah-Hartman
2014-05-04 15:38 ` [PATCH 3.14 019/158] ARM: 8030/1: ARM : kdump : add arch_crash_save_vmcoreinfo Greg Kroah-Hartman
2014-05-04 15:38 ` [PATCH 3.14 020/158] ARM: mvebu: ensure the mdio node has a clock reference on Armada 370/XP Greg Kroah-Hartman
2014-05-04 15:38 ` [PATCH 3.14 021/158] ARM: pxa: hx4700.h: include "irqs.h" for PXA_NR_BUILTIN_GPIO Greg Kroah-Hartman
2014-05-04 15:38 ` [PATCH 3.14 022/158] ALSA: hda/realtek - Restore default value for ALC283 Greg Kroah-Hartman
2014-05-04 15:38 ` [PATCH 3.14 023/158] ALSA: hda - add headset mic detect quirks for three Dell laptops Greg Kroah-Hartman
2014-05-04 15:38 ` [PATCH 3.14 024/158] ALSA: hda - Enable beep for ASUS 1015E Greg Kroah-Hartman
2014-05-04 15:38 ` [PATCH 3.14 025/158] ALSA: ice1712: Fix boundary checks in PCM pointer ops Greg Kroah-Hartman
2014-05-04 15:38 ` [PATCH 3.14 026/158] ALSA: hda - Fix silent speaker output due to mute LED fixup Greg Kroah-Hartman
2014-05-04 15:38 ` [PATCH 3.14 027/158] ALSA: hda/realtek - Add support of ALC288 codec Greg Kroah-Hartman
2014-05-04 15:38 ` [PATCH 3.14 028/158] ALSA: hda/realtek - Add headset Mic support for Dell machine Greg Kroah-Hartman
2014-05-04 15:38 ` [PATCH 3.14 029/158] ACPICA: Restore code that repairs NULL package elements in return values Greg Kroah-Hartman
2014-05-04 15:38 ` [PATCH 3.14 030/158] spi: efm32: use $vendor,$device scheme for compatible string Greg Kroah-Hartman
2014-05-04 15:39 ` [PATCH 3.14 031/158] spi: dw: Dont call kfree for memory allocated by devm_kzalloc Greg Kroah-Hartman
2014-05-04 15:39 ` [PATCH 3.14 032/158] s390/cio: fix driver callback initialization for ccw consoles Greg Kroah-Hartman
2014-05-04 15:39 ` [PATCH 3.14 033/158] KVM: s390: Optimize ucontrol path Greg Kroah-Hartman
2014-05-04 15:39 ` [PATCH 3.14 034/158] s390/bitops,atomic: add missing memory barriers Greg Kroah-Hartman
2014-05-04 15:39 ` [PATCH 3.14 035/158] s390: fix control register update Greg Kroah-Hartman
2014-05-04 15:39 ` [PATCH 3.14 036/158] mei: fix memory leak of pending write cb objects Greg Kroah-Hartman
2014-05-04 15:39 ` [PATCH 3.14 037/158] mei: me: do not load the driver if the FW doesnt support MEI interface Greg Kroah-Hartman
2014-05-04 15:39 ` [PATCH 3.14 038/158] mei: ignore client writing state during cb completion Greg Kroah-Hartman
2014-05-04 15:39 ` [PATCH 3.14 039/158] mfd: sec-core: Fix possible NULL pointer dereference when i2c_new_dummy error Greg Kroah-Hartman
2014-05-04 15:39 ` [PATCH 3.14 040/158] mfd: 88pm860x: Fix possible NULL pointer dereference on " Greg Kroah-Hartman
2014-05-04 15:39 ` [PATCH 3.14 041/158] mfd: 88pm860x: Fix I2C device resource leak on regmap init fail Greg Kroah-Hartman
2014-05-04 15:39 ` [PATCH 3.14 042/158] mfd: 88pm800: Fix I2C device resource leak if probe fails Greg Kroah-Hartman
2014-05-04 15:39 ` [PATCH 3.14 043/158] mfd: max77686: Fix possible NULL pointer dereference on i2c_new_dummy error Greg Kroah-Hartman
2014-05-04 15:39 ` [PATCH 3.14 044/158] mfd: max77693: " Greg Kroah-Hartman
2014-05-04 15:39 ` [PATCH 3.14 045/158] mfd: max8925: " Greg Kroah-Hartman
2014-05-04 15:39 ` [PATCH 3.14 046/158] mfd: max8998: " Greg Kroah-Hartman
2014-05-04 15:39 ` [PATCH 3.14 047/158] mfd: max8997: " Greg Kroah-Hartman
2014-05-04 15:39 ` [PATCH 3.14 048/158] mfd: tps65910: Fix possible invalid pointer dereference on regmap_add_irq_chip fail Greg Kroah-Hartman
2014-05-04 15:39 ` [PATCH 3.14 049/158] mfd: kempld-core: Fix potential hang-up during boot Greg Kroah-Hartman
2014-05-04 15:39 ` [PATCH 3.14 050/158] mfd: twl-core: Fix accessibility of some twl4030 audio registers Greg Kroah-Hartman
2014-05-04 15:39 ` [PATCH 3.14 051/158] w1: fix w1_send_slave dropping a slave id Greg Kroah-Hartman
2014-05-04 15:39 ` [PATCH 3.14 052/158] staging:serqt_usb2: Fix sparse warning restricted __le16 degrades to integer Greg Kroah-Hartman
2014-05-04 15:39 ` [PATCH 3.14 053/158] staging: r8712u: Fix case where ethtype was never obtained and always be checked against 0 Greg Kroah-Hartman
2014-05-04 15:39 ` [PATCH 3.14 054/158] staging: comedi: usbdux: bug fix for accessing ao_chanlist in private data Greg Kroah-Hartman
2014-05-04 15:39 ` [PATCH 3.14 055/158] staging: r8188eu: Calling rtw_get_stainfo() with a NULL sta_addr will return NULL Greg Kroah-Hartman
2014-05-04 15:39 ` [PATCH 3.14 056/158] x86, hash: Fix build failure with older binutils Greg Kroah-Hartman
2014-05-04 15:39 ` [PATCH 3.14 057/158] x86, AVX-512: AVX-512 Feature Detection Greg Kroah-Hartman
2014-05-04 15:39 ` [PATCH 3.14 058/158] x86, AVX-512: Enable AVX-512 States Context Switch Greg Kroah-Hartman
2014-05-04 15:39 ` [PATCH 3.14 059/158] ftrace/x86: One more missing sync after fixup of function modification failure Greg Kroah-Hartman
2014-05-04 15:39 ` [PATCH 3.14 060/158] x86-64, modify_ldt: Ban 16-bit segments on 64-bit kernels Greg Kroah-Hartman
2014-05-04 15:39 ` [PATCH 3.14 061/158] regulator: arizona-ldo1: Correct default regulator init_data Greg Kroah-Hartman
2014-05-04 15:39 ` [PATCH 3.14 062/158] PCI: imx6: Wait for retraining Greg Kroah-Hartman
2014-05-04 15:39 ` [PATCH 3.14 063/158] PCI: mvebu: Fix potential issue in range parsing Greg Kroah-Hartman
2014-05-04 15:39 ` [PATCH 3.14 064/158] USB: fix crash during hotplug of PCI USB controller card Greg Kroah-Hartman
2014-05-04 15:39 ` [PATCH 3.14 065/158] iio: querying buffer scan_mask should return 0/1 Greg Kroah-Hartman
2014-05-04 15:39 ` [PATCH 3.14 066/158] iio: adc: at91_adc: Repair broken platform_data support Greg Kroah-Hartman
2014-05-04 15:39 ` [PATCH 3.14 067/158] iio: cm32181: Fix read integration time function Greg Kroah-Hartman
2014-05-04 15:39 ` [PATCH 3.14 068/158] iio: cm36651: Fix i2c client leak and possible NULL pointer dereference Greg Kroah-Hartman
2014-05-04 15:39 ` [PATCH 3.14 069/158] NFSv4: Fix a use-after-free problem in open() Greg Kroah-Hartman
2014-05-04 15:39 ` [PATCH 3.14 070/158] nfsd: revert v2 half of "nfsd: dont return high mode bits" Greg Kroah-Hartman
2014-05-04 15:39 ` [PATCH 3.14 071/158] nfsd4: session needs room for following op to error out Greg Kroah-Hartman
2014-05-04 15:39 ` [PATCH 3.14 072/158] nfsd4: buffer-length check for SUPPATTR_EXCLCREAT Greg Kroah-Hartman
2014-05-04 15:39 ` [PATCH 3.14 073/158] nfsd4: fix test_stateid error reply encoding Greg Kroah-Hartman
2014-05-04 15:39 ` [PATCH 3.14 074/158] nfsd4: leave reply buffer space for failed setattr Greg Kroah-Hartman
2014-05-04 15:39 ` [PATCH 3.14 075/158] nfsd: notify_change needs elevated write count Greg Kroah-Hartman
2014-05-04 15:39 ` [PATCH 3.14 076/158] nfsd: check passed sockets net matches NFSd superblocks one Greg Kroah-Hartman
2014-05-04 15:39 ` [PATCH 3.14 077/158] nfsd4: fix memory leak in nfsd4_encode_fattr() Greg Kroah-Hartman
2014-05-04 15:39 ` [PATCH 3.14 078/158] nfsd4: fix setclientid encode size Greg Kroah-Hartman
2014-05-04 15:39 ` [PATCH 3.14 079/158] NFSD: Traverse unconfirmed client through hash-table Greg Kroah-Hartman
2014-05-04 15:39 ` [PATCH 3.14 080/158] nfsd: set timeparms.to_maxval in setup_callback_client Greg Kroah-Hartman
2014-05-04 15:39 ` [PATCH 3.14 081/158] IB/ipath: Fix potential buffer overrun in sending diag packet routine Greg Kroah-Hartman
2014-05-04 15:39 ` [PATCH 3.14 082/158] IB/nes: Return an error on ib_copy_from_udata() failure instead of NULL Greg Kroah-Hartman
2014-05-04 15:39 ` [PATCH 3.14 083/158] IB/mthca: Return an error on ib_copy_to_udata() failure Greg Kroah-Hartman
2014-05-04 15:39 ` [PATCH 3.14 084/158] IB/ehca: Returns " Greg Kroah-Hartman
2014-05-04 15:39 ` [PATCH 3.14 085/158] IB/qib: Fix debugfs ordering issue with multiple HCAs Greg Kroah-Hartman
2014-05-04 15:39 ` [PATCH 3.14 086/158] IB/qib: add missing braces in do_qib_user_sdma_queue_create() Greg Kroah-Hartman
2014-05-04 15:39 ` [PATCH 3.14 087/158] IB/core: Dont resolve passive side RoCE L2 address in CMA REQ handler Greg Kroah-Hartman
2014-05-04 15:39 ` [PATCH 3.14 088/158] ib_srpt: Use correct ib_sg_dma primitives Greg Kroah-Hartman
2014-05-04 15:39 ` [PATCH 3.14 089/158] SCSI: qla2xxx: fix error handling of qla2x00_mem_alloc() Greg Kroah-Hartman
2014-05-04 15:39 ` [PATCH 3.14 090/158] SCSI: arcmsr: upper 32 of dma address lost Greg Kroah-Hartman
2014-05-04 15:40 ` [PATCH 3.14 091/158] iscsi-target: Fix ERL=2 ASYNC_EVENT connection pointer bug Greg Kroah-Hartman
2014-05-04 15:40 ` [PATCH 3.14 092/158] target/rd: T10-Dif: RAM disk is allocating more space than required Greg Kroah-Hartman
2014-05-04 15:40 ` [PATCH 3.14 093/158] Target/sbc: Initialize COMPARE_AND_WRITE write_sg scatterlist Greg Kroah-Hartman
2014-05-04 15:40 ` [PATCH 3.14 094/158] target/iblock: Fix double bioset_integrity_free bug Greg Kroah-Hartman
2014-05-04 15:40 ` [PATCH 3.14 095/158] target/tcm_fc: Fix use-after-free of ft_tpg Greg Kroah-Hartman
2014-05-04 15:40 ` [PATCH 3.14 096/158] Drivers: hv: vmbus: Negotiate version 3.0 when running on ws2012r2 hosts Greg Kroah-Hartman
2014-05-04 15:40 ` [PATCH 3.14 097/158] x86/efi: Correct EFI boot stub use of code32_start Greg Kroah-Hartman
2014-05-04 15:40 ` [PATCH 3.14 098/158] efi: Pass correct file handle to efi_file_{read,close} Greg Kroah-Hartman
2014-05-04 15:40 ` [PATCH 3.14 099/158] word-at-a-time: avoid undefined behaviour in zero_bytemask macro Greg Kroah-Hartman
2014-05-04 15:40 ` [PATCH 3.14 100/158] arm64: __NR_compat_syscalls fix Greg Kroah-Hartman
2014-05-04 15:40 ` [PATCH 3.14 101/158] DRM: armada: fix corruption while loading cursors Greg Kroah-Hartman
2014-05-04 15:40 ` [PATCH 3.14 102/158] reiserfs: fix race in readdir Greg Kroah-Hartman
2014-05-04 15:40 ` [PATCH 3.14 103/158] usb: gadget: tcm_usb_gadget: stop format strings Greg Kroah-Hartman
2014-05-04 15:40 ` [PATCH 3.14 104/158] usb: gadget: atmel_usba: fix crashed during stopping when DEBUG is enabled Greg Kroah-Hartman
2014-05-04 15:40 ` [PATCH 3.14 105/158] usb: gadget: zero: Fix SuperSpeed enumeration for alternate setting 1 Greg Kroah-Hartman
2014-05-04 15:40 ` [PATCH 3.14 106/158] xhci: Prevent runtime pm from autosuspending during initialization Greg Kroah-Hartman
2014-05-04 15:40 ` [PATCH 3.14 107/158] xhci: Switch Intel Lynx Point ports to EHCI on shutdown Greg Kroah-Hartman
2014-05-04 15:40 ` [PATCH 3.14 108/158] xhci: extend quirk for Renesas cards Greg Kroah-Hartman
2014-05-04 15:40 ` [PATCH 3.14 109/158] usb/xhci: fix compilation warning when !CONFIG_PCI && !CONFIG_PM Greg Kroah-Hartman
2014-05-04 15:40 ` [PATCH 3.14 110/158] media: uvcvideo: Do not use usb_set_interface on bulk EP Greg Kroah-Hartman
2014-05-04 15:40 ` [PATCH 3.14 111/158] media: videodev2.h: add parenthesis around macro arguments Greg Kroah-Hartman
2014-05-04 15:40 ` [PATCH 3.14 112/158] video: atmel_lcdfb: ensure the hardware is initialized with the correct mode Greg Kroah-Hartman
2014-05-04 15:40 ` [PATCH 3.14 113/158] media: v4l2-dv-timings: add module name, description, license Greg Kroah-Hartman
2014-05-04 15:40 ` [PATCH 3.14 114/158] media: v4l2-compat-ioctl32: fix wrong VIDIOC_SUBDEV_G/S_EDID32 support Greg Kroah-Hartman
2014-05-04 15:40 ` [PATCH 3.14 115/158] media: m88rs2000: prevent frontend crash on continuous transponder scans Greg Kroah-Hartman
2014-05-04 15:40 ` [PATCH 3.14 116/158] media: em28xx-audio: fix user counting in snd_em28xx_capture_open() Greg Kroah-Hartman
2014-05-04 15:40 ` [PATCH 3.14 117/158] media: m88rs2000: add caps FE_CAN_INVERSION_AUTO Greg Kroah-Hartman
2014-05-04 15:40 ` [PATCH 3.14 118/158] media: em28xx: fix PCTV 290e LNA oops Greg Kroah-Hartman
2014-05-04 15:40 ` [PATCH 3.14 119/158] media: saa7134: fix WARN_ON during resume Greg Kroah-Hartman
2014-05-04 15:40 ` [PATCH 3.14 120/158] media: omap3isp: preview: Fix the crop margins Greg Kroah-Hartman
2014-05-04 15:40 ` [PATCH 3.14 121/158] media: media: gspca: sn9c20x: add ID for Genius Look 1320 V2 Greg Kroah-Hartman
2014-05-04 15:40 ` [PATCH 3.14 122/158] usb: dwc3: fix wrong bit mask in dwc3_event_devt Greg Kroah-Hartman
2014-05-04 15:40 ` [PATCH 3.14 123/158] usb: dwc3: fix randconfig build errors Greg Kroah-Hartman
2014-05-04 15:40 ` [PATCH 3.14 124/158] usb: musb: avoid NULL pointer dereference Greg Kroah-Hartman
2014-05-04 15:40 ` [PATCH 3.14 125/158] usb: musb: fix PHY power on/off Greg Kroah-Hartman
2014-05-04 15:40 ` [PATCH 3.14 126/158] hvc: ensure hvc_init is only ever called once in hvc_console.c Greg Kroah-Hartman
2014-05-04 15:40 ` [PATCH 3.14 127/158] usb: phy: Add ulpi IDs for SMSC USB3320 and TI TUSB1210 Greg Kroah-Hartman
2014-05-04 15:40 ` [PATCH 3.14 128/158] usb: phy: am335x-control: wait 1ms after power-up transitions Greg Kroah-Hartman
2014-05-04 15:40 ` [PATCH 3.14 129/158] USB: unbind all interfaces before rebinding any Greg Kroah-Hartman
2014-05-04 15:40 ` [PATCH 3.14 130/158] mtip32xx: Set queue bounce limit Greg Kroah-Hartman
2014-05-04 15:40 ` [PATCH 3.14 131/158] mtip32xx: Unmap the DMA segments before completing the IO request Greg Kroah-Hartman
2014-05-04 15:40 ` [PATCH 3.14 132/158] mtip32xx: mtip_async_complete() bug fixes Greg Kroah-Hartman
2014-05-04 15:40 ` [PATCH 3.14 133/158] iser-target: Match FRMR descriptors to available session tags Greg Kroah-Hartman
2014-05-04 15:40 ` [PATCH 3.14 134/158] [PATCH-v3.14.y 2/2] iser-target: Add missing se_cmd put for WRITE_PENDING in tx_comp_err Greg Kroah-Hartman
2014-05-04 15:40 ` [PATCH 3.14 135/158] sh: fix format string bug in stack tracer Greg Kroah-Hartman
2014-05-04 15:40 ` [PATCH 3.14 136/158] mm: page_alloc: spill to remote nodes before waking kswapd Greg Kroah-Hartman
2014-05-04 15:40 ` [PATCH 3.14 137/158] mm: try_to_unmap_cluster() should lock_page() before mlocking Greg Kroah-Hartman
2014-05-04 15:40 ` [PATCH 3.14 138/158] mm: hugetlb: fix softlockup when a large number of hugepages are freed Greg Kroah-Hartman
2014-05-04 15:40 ` [PATCH 3.14 139/158] hung_task: check the value of "sysctl_hung_task_timeout_sec" Greg Kroah-Hartman
2014-05-04 15:40 ` [PATCH 3.14 140/158] xattr: guard against simultaneous glibc header inclusion Greg Kroah-Hartman
2014-05-04 15:40 ` [PATCH 3.14 141/158] ocfs2: dlm: fix lock migration crash Greg Kroah-Hartman
2014-05-04 15:40 ` [PATCH 3.14 142/158] ocfs2: dlm: fix recovery hung Greg Kroah-Hartman
2014-05-04 15:40 ` [PATCH 3.14 143/158] ocfs2: do not put bh when buffer_uptodate failed Greg Kroah-Hartman
2014-05-04 15:40 ` [PATCH 3.14 144/158] ocfs2: fix panic on kfree(xattr->name) Greg Kroah-Hartman
2014-05-04 15:40 ` [PATCH 3.14 145/158] clk: s2mps11: Fix possible NULL pointer dereference Greg Kroah-Hartman
2014-05-04 15:40 ` Greg Kroah-Hartman [this message]
2014-05-04 15:40 ` [PATCH 3.14 147/158] block: Fix for_each_bvec() Greg Kroah-Hartman
2014-05-04 15:40 ` [PATCH 3.14 148/158] ext4: FIBMAP ioctl causes BUG_ON due to handle EXT_MAX_BLOCKS Greg Kroah-Hartman
2014-05-04 15:40 ` [PATCH 3.14 149/158] ext4: note the error in ext4_end_bio() Greg Kroah-Hartman
2014-05-04 15:40 ` [PATCH 3.14 150/158] ext4: fix jbd2 warning under heavy xattr load Greg Kroah-Hartman
2014-05-04 15:41 ` [PATCH 3.14 151/158] ext4: move ext4_update_i_disksize() into mpage_map_and_submit_extent() Greg Kroah-Hartman
2014-05-04 15:41 ` [PATCH 3.14 152/158] ext4: use i_size_read in ext4_unaligned_aio() Greg Kroah-Hartman
2014-05-04 15:41 ` [PATCH 3.14 153/158] usb: xhci: Prefer endpoint context dequeue pointer over stopped_trb Greg Kroah-Hartman
2014-05-04 15:41 ` [PATCH 3.14 154/158] ARM: tegra: remove UART5/UARTE from tegra124.dtsi Greg Kroah-Hartman
2014-05-04 15:41 ` [PATCH 3.14 155/158] clk: tegra: remove non-existent clocks Greg Kroah-Hartman
2014-05-04 15:41 ` [PATCH 3.14 156/158] dt: tegra: remove non-existent clock IDs Greg Kroah-Hartman
2014-05-04 15:41 ` [PATCH 3.14 157/158] USB: EHCI: tegra: set txfill_tuning Greg Kroah-Hartman
2014-05-04 15:41 ` [PATCH 3.14 158/158] USB: pl2303: add ids for Hewlett-Packard HP POS pole displays Greg Kroah-Hartman
2014-05-04 17:19 ` [PATCH 3.14 000/158] 3.14.3-stable review Guenter Roeck
2014-05-04 20:27   ` Greg Kroah-Hartman
2014-05-04 21:33     ` Guenter Roeck
2014-05-06 14:56 ` Shuah Khan

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20140504154049.876230384@linuxfoundation.org \
    --to=gregkh@linuxfoundation.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=stable@vger.kernel.org \
    --cc=viro@zeniv.linux.org.uk \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).