All of lore.kernel.org
 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,
	Filipe David Borba Manana <fdmanana@gmail.com>,
	Josef Bacik <jbacik@fb.com>, Chris Mason <clm@fb.com>
Subject: [PATCH 3.13 138/149] Btrfs: fix tree mod logging
Date: Thu, 20 Mar 2014 17:05:01 -0700	[thread overview]
Message-ID: <20140321000441.736534822@linuxfoundation.org> (raw)
In-Reply-To: <20140321000436.377902063@linuxfoundation.org>

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

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

From: Filipe David Borba Manana <fdmanana@gmail.com>

commit 5de865eebb8330eee19c37b31fb6f315a09d4273 upstream.

While running the test btrfs/004 from xfstests in a loop, it failed
about 1 time out of 20 runs in my desktop. The failure happened in
the backref walking part of the test, and the test's error message was
like this:

#  btrfs/004 93s ... [failed, exit status 1] - output mismatch (see /home/fdmanana/git/hub/xfstests_2/results//btrfs/004.out.bad)
#      --- tests/btrfs/004.out	2013-11-26 18:25:29.263333714 +0000
#      +++ /home/fdmanana/git/hub/xfstests_2/results//btrfs/004.out.bad	2013-12-10 15:25:10.327518516 +0000
#      @@ -1,3 +1,8 @@
#       QA output created by 004
#       *** test backref walking
#      -*** done
#      +unexpected output from
#      +	/home/fdmanana/git/hub/btrfs-progs/btrfs inspect-internal logical-resolve -P 141512704 /home/fdmanana/btrfs-tests/scratch_1
#      +expected inum: 405, expected address: 454656, file: /home/fdmanana/btrfs-tests/scratch_1/snap1/p0/d6/d3d/d156/fce, got:
#      +
       ...
       (Run 'diff -u tests/btrfs/004.out /home/fdmanana/git/hub/xfstests_2/results//btrfs/004.out.bad' to see the entire diff)
  Ran: btrfs/004
  Failures: btrfs/004
  Failed 1 of 1 tests

But immediately after the test finished, the btrfs inspect-internal command
returned the expected output:

  $ btrfs inspect-internal logical-resolve -P 141512704 /home/fdmanana/btrfs-tests/scratch_1
  inode 405 offset 454656 root 258
  inode 405 offset 454656 root 5

It turned out this was because the btrfs_search_old_slot() calls performed
during backref walking (backref.c:__resolve_indirect_ref) were not finding
anything. The reason for this turned out to be that the tree mod logging
code was not logging some node multi-step operations atomically, therefore
btrfs_search_old_slot() callers iterated often over an incomplete tree that
wasn't fully consistent with any tree state from the past. Besides missing
items, this often (but not always) resulted in -EIO errors during old slot
searches, reported in dmesg like this:

[ 4299.933936] ------------[ cut here ]------------
[ 4299.933949] WARNING: CPU: 0 PID: 23190 at fs/btrfs/ctree.c:1343 btrfs_search_old_slot+0x57b/0xab0 [btrfs]()
[ 4299.933950] Modules linked in: btrfs raid6_pq xor pci_stub vboxpci(O) vboxnetadp(O) vboxnetflt(O) vboxdrv(O) bnep rfcomm bluetooth parport_pc ppdev binfmt_misc joydev snd_hda_codec_h
[ 4299.933977] CPU: 0 PID: 23190 Comm: btrfs Tainted: G        W  O 3.12.0-fdm-btrfs-next-16+ #70
[ 4299.933978] Hardware name: To Be Filled By O.E.M. To Be Filled By O.E.M./Z77 Pro4, BIOS P1.50 09/04/2012
[ 4299.933979]  000000000000053f ffff8806f3fd98f8 ffffffff8176d284 0000000000000007
[ 4299.933982]  0000000000000000 ffff8806f3fd9938 ffffffff8104a81c ffff880659c64b70
[ 4299.933984]  ffff880659c643d0 ffff8806599233d8 ffff880701e2e938 0000160000000000
[ 4299.933987] Call Trace:
[ 4299.933991]  [<ffffffff8176d284>] dump_stack+0x55/0x76
[ 4299.933994]  [<ffffffff8104a81c>] warn_slowpath_common+0x8c/0xc0
[ 4299.933997]  [<ffffffff8104a86a>] warn_slowpath_null+0x1a/0x20
[ 4299.934003]  [<ffffffffa065d3bb>] btrfs_search_old_slot+0x57b/0xab0 [btrfs]
[ 4299.934005]  [<ffffffff81775f3b>] ? _raw_read_unlock+0x2b/0x50
[ 4299.934010]  [<ffffffffa0655001>] ? __tree_mod_log_search+0x81/0xc0 [btrfs]
[ 4299.934019]  [<ffffffffa06dd9b0>] __resolve_indirect_refs+0x130/0x5f0 [btrfs]
[ 4299.934027]  [<ffffffffa06a21f1>] ? free_extent_buffer+0x61/0xc0 [btrfs]
[ 4299.934034]  [<ffffffffa06de39c>] find_parent_nodes+0x1fc/0xe40 [btrfs]
[ 4299.934042]  [<ffffffffa06b13e0>] ? defrag_lookup_extent+0xe0/0xe0 [btrfs]
[ 4299.934048]  [<ffffffffa06b13e0>] ? defrag_lookup_extent+0xe0/0xe0 [btrfs]
[ 4299.934056]  [<ffffffffa06df980>] iterate_extent_inodes+0xe0/0x250 [btrfs]
[ 4299.934058]  [<ffffffff817762db>] ? _raw_spin_unlock+0x2b/0x50
[ 4299.934065]  [<ffffffffa06dfb82>] iterate_inodes_from_logical+0x92/0xb0 [btrfs]
[ 4299.934071]  [<ffffffffa06b13e0>] ? defrag_lookup_extent+0xe0/0xe0 [btrfs]
[ 4299.934078]  [<ffffffffa06b7015>] btrfs_ioctl+0xf65/0x1f60 [btrfs]
[ 4299.934080]  [<ffffffff811658b8>] ? handle_mm_fault+0x278/0xb00
[ 4299.934083]  [<ffffffff81075563>] ? up_read+0x23/0x40
[ 4299.934085]  [<ffffffff8177a41c>] ? __do_page_fault+0x20c/0x5a0
[ 4299.934088]  [<ffffffff811b2946>] do_vfs_ioctl+0x96/0x570
[ 4299.934090]  [<ffffffff81776e23>] ? error_sti+0x5/0x6
[ 4299.934093]  [<ffffffff810b71e8>] ? trace_hardirqs_off_caller+0x28/0xd0
[ 4299.934096]  [<ffffffff81776a09>] ? retint_swapgs+0xe/0x13
[ 4299.934098]  [<ffffffff811b2eb1>] SyS_ioctl+0x91/0xb0
[ 4299.934100]  [<ffffffff813eecde>] ? trace_hardirqs_on_thunk+0x3a/0x3f
[ 4299.934102]  [<ffffffff8177ef12>] system_call_fastpath+0x16/0x1b
[ 4299.934102]  [<ffffffff8177ef12>] system_call_fastpath+0x16/0x1b
[ 4299.934104] ---[ end trace 48f0cfc902491414 ]---
[ 4299.934378] btrfs bad fsid on block 0

These tree mod log operations that must be performed atomically, tree_mod_log_free_eb,
tree_mod_log_eb_copy, tree_mod_log_insert_root and tree_mod_log_insert_move, used to
be performed atomically before the following commit:

  c8cc6341653721b54760480b0d0d9b5f09b46741
  (Btrfs: stop using GFP_ATOMIC for the tree mod log allocations)

That change removed the atomicity of such operations. This patch restores the
atomicity while still not doing the GFP_ATOMIC allocations of tree_mod_elem
structures, so it has to do the allocations using GFP_NOFS before acquiring
the mod log lock.

This issue has been experienced by several users recently, such as for example:

  http://www.spinics.net/lists/linux-btrfs/msg28574.html

After running the btrfs/004 test for 679 consecutive iterations with this
patch applied, I didn't ran into the issue anymore.

Signed-off-by: Filipe David Borba Manana <fdmanana@gmail.com>
Signed-off-by: Josef Bacik <jbacik@fb.com>
Signed-off-by: Chris Mason <clm@fb.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

---
 fs/btrfs/ctree.c |  385 ++++++++++++++++++++++++++++++++++++++++++-------------
 1 file changed, 296 insertions(+), 89 deletions(-)

--- a/fs/btrfs/ctree.c
+++ b/fs/btrfs/ctree.c
@@ -39,7 +39,7 @@ static int balance_node_right(struct btr
 			      struct extent_buffer *src_buf);
 static void del_ptr(struct btrfs_root *root, struct btrfs_path *path,
 		    int level, int slot);
-static void tree_mod_log_free_eb(struct btrfs_fs_info *fs_info,
+static int tree_mod_log_free_eb(struct btrfs_fs_info *fs_info,
 				 struct extent_buffer *eb);
 static int btrfs_prev_leaf(struct btrfs_root *root, struct btrfs_path *path);
 
@@ -475,6 +475,8 @@ void btrfs_put_tree_mod_seq(struct btrfs
  * the index is the shifted logical of the *new* root node for root replace
  * operations, or the shifted logical of the affected block for all other
  * operations.
+ *
+ * Note: must be called with write lock (tree_mod_log_write_lock).
  */
 static noinline int
 __tree_mod_log_insert(struct btrfs_fs_info *fs_info, struct tree_mod_elem *tm)
@@ -483,24 +485,9 @@ __tree_mod_log_insert(struct btrfs_fs_in
 	struct rb_node **new;
 	struct rb_node *parent = NULL;
 	struct tree_mod_elem *cur;
-	int ret = 0;
 
 	BUG_ON(!tm);
 
-	tree_mod_log_write_lock(fs_info);
-	if (list_empty(&fs_info->tree_mod_seq_list)) {
-		tree_mod_log_write_unlock(fs_info);
-		/*
-		 * Ok we no longer care about logging modifications, free up tm
-		 * and return 0.  Any callers shouldn't be using tm after
-		 * calling tree_mod_log_insert, but if they do we can just
-		 * change this to return a special error code to let the callers
-		 * do their own thing.
-		 */
-		kfree(tm);
-		return 0;
-	}
-
 	spin_lock(&fs_info->tree_mod_seq_lock);
 	tm->seq = btrfs_inc_tree_mod_seq_minor(fs_info);
 	spin_unlock(&fs_info->tree_mod_seq_lock);
@@ -518,18 +505,13 @@ __tree_mod_log_insert(struct btrfs_fs_in
 			new = &((*new)->rb_left);
 		else if (cur->seq > tm->seq)
 			new = &((*new)->rb_right);
-		else {
-			ret = -EEXIST;
-			kfree(tm);
-			goto out;
-		}
+		else
+			return -EEXIST;
 	}
 
 	rb_link_node(&tm->node, parent, new);
 	rb_insert_color(&tm->node, tm_root);
-out:
-	tree_mod_log_write_unlock(fs_info);
-	return ret;
+	return 0;
 }
 
 /*
@@ -545,19 +527,38 @@ static inline int tree_mod_dont_log(stru
 		return 1;
 	if (eb && btrfs_header_level(eb) == 0)
 		return 1;
+
+	tree_mod_log_write_lock(fs_info);
+	if (list_empty(&(fs_info)->tree_mod_seq_list)) {
+		tree_mod_log_write_unlock(fs_info);
+		return 1;
+	}
+
 	return 0;
 }
 
-static inline int
-__tree_mod_log_insert_key(struct btrfs_fs_info *fs_info,
-			  struct extent_buffer *eb, int slot,
-			  enum mod_log_op op, gfp_t flags)
+/* Similar to tree_mod_dont_log, but doesn't acquire any locks. */
+static inline int tree_mod_need_log(const struct btrfs_fs_info *fs_info,
+				    struct extent_buffer *eb)
+{
+	smp_mb();
+	if (list_empty(&(fs_info)->tree_mod_seq_list))
+		return 0;
+	if (eb && btrfs_header_level(eb) == 0)
+		return 0;
+
+	return 1;
+}
+
+static struct tree_mod_elem *
+alloc_tree_mod_elem(struct extent_buffer *eb, int slot,
+		    enum mod_log_op op, gfp_t flags)
 {
 	struct tree_mod_elem *tm;
 
 	tm = kzalloc(sizeof(*tm), flags);
 	if (!tm)
-		return -ENOMEM;
+		return NULL;
 
 	tm->index = eb->start >> PAGE_CACHE_SHIFT;
 	if (op != MOD_LOG_KEY_ADD) {
@@ -567,8 +568,9 @@ __tree_mod_log_insert_key(struct btrfs_f
 	tm->op = op;
 	tm->slot = slot;
 	tm->generation = btrfs_node_ptr_generation(eb, slot);
+	RB_CLEAR_NODE(&tm->node);
 
-	return __tree_mod_log_insert(fs_info, tm);
+	return tm;
 }
 
 static noinline int
@@ -576,10 +578,27 @@ tree_mod_log_insert_key(struct btrfs_fs_
 			struct extent_buffer *eb, int slot,
 			enum mod_log_op op, gfp_t flags)
 {
-	if (tree_mod_dont_log(fs_info, eb))
+	struct tree_mod_elem *tm;
+	int ret;
+
+	if (!tree_mod_need_log(fs_info, eb))
+		return 0;
+
+	tm = alloc_tree_mod_elem(eb, slot, op, flags);
+	if (!tm)
+		return -ENOMEM;
+
+	if (tree_mod_dont_log(fs_info, eb)) {
+		kfree(tm);
 		return 0;
+	}
 
-	return __tree_mod_log_insert_key(fs_info, eb, slot, op, flags);
+	ret = __tree_mod_log_insert(fs_info, tm);
+	tree_mod_log_write_unlock(fs_info);
+	if (ret)
+		kfree(tm);
+
+	return ret;
 }
 
 static noinline int
@@ -587,53 +606,95 @@ tree_mod_log_insert_move(struct btrfs_fs
 			 struct extent_buffer *eb, int dst_slot, int src_slot,
 			 int nr_items, gfp_t flags)
 {
-	struct tree_mod_elem *tm;
-	int ret;
+	struct tree_mod_elem *tm = NULL;
+	struct tree_mod_elem **tm_list = NULL;
+	int ret = 0;
 	int i;
+	int locked = 0;
 
-	if (tree_mod_dont_log(fs_info, eb))
+	if (!tree_mod_need_log(fs_info, eb))
 		return 0;
 
+	tm_list = kzalloc(nr_items * sizeof(struct tree_mod_elem *), flags);
+	if (!tm_list)
+		return -ENOMEM;
+
+	tm = kzalloc(sizeof(*tm), flags);
+	if (!tm) {
+		ret = -ENOMEM;
+		goto free_tms;
+	}
+
+	tm->index = eb->start >> PAGE_CACHE_SHIFT;
+	tm->slot = src_slot;
+	tm->move.dst_slot = dst_slot;
+	tm->move.nr_items = nr_items;
+	tm->op = MOD_LOG_MOVE_KEYS;
+
+	for (i = 0; i + dst_slot < src_slot && i < nr_items; i++) {
+		tm_list[i] = alloc_tree_mod_elem(eb, i + dst_slot,
+		    MOD_LOG_KEY_REMOVE_WHILE_MOVING, flags);
+		if (!tm_list[i]) {
+			ret = -ENOMEM;
+			goto free_tms;
+		}
+	}
+
+	if (tree_mod_dont_log(fs_info, eb))
+		goto free_tms;
+	locked = 1;
+
 	/*
 	 * When we override something during the move, we log these removals.
 	 * This can only happen when we move towards the beginning of the
 	 * buffer, i.e. dst_slot < src_slot.
 	 */
 	for (i = 0; i + dst_slot < src_slot && i < nr_items; i++) {
-		ret = __tree_mod_log_insert_key(fs_info, eb, i + dst_slot,
-				MOD_LOG_KEY_REMOVE_WHILE_MOVING, GFP_NOFS);
-		BUG_ON(ret < 0);
+		ret = __tree_mod_log_insert(fs_info, tm_list[i]);
+		if (ret)
+			goto free_tms;
 	}
 
-	tm = kzalloc(sizeof(*tm), flags);
-	if (!tm)
-		return -ENOMEM;
+	ret = __tree_mod_log_insert(fs_info, tm);
+	if (ret)
+		goto free_tms;
+	tree_mod_log_write_unlock(fs_info);
+	kfree(tm_list);
 
-	tm->index = eb->start >> PAGE_CACHE_SHIFT;
-	tm->slot = src_slot;
-	tm->move.dst_slot = dst_slot;
-	tm->move.nr_items = nr_items;
-	tm->op = MOD_LOG_MOVE_KEYS;
+	return 0;
+free_tms:
+	for (i = 0; i < nr_items; i++) {
+		if (tm_list[i] && !RB_EMPTY_NODE(&tm_list[i]->node))
+			rb_erase(&tm_list[i]->node, &fs_info->tree_mod_log);
+		kfree(tm_list[i]);
+	}
+	if (locked)
+		tree_mod_log_write_unlock(fs_info);
+	kfree(tm_list);
+	kfree(tm);
 
-	return __tree_mod_log_insert(fs_info, tm);
+	return ret;
 }
 
-static inline void
-__tree_mod_log_free_eb(struct btrfs_fs_info *fs_info, struct extent_buffer *eb)
+static inline int
+__tree_mod_log_free_eb(struct btrfs_fs_info *fs_info,
+		       struct tree_mod_elem **tm_list,
+		       int nritems)
 {
-	int i;
-	u32 nritems;
+	int i, j;
 	int ret;
 
-	if (btrfs_header_level(eb) == 0)
-		return;
-
-	nritems = btrfs_header_nritems(eb);
 	for (i = nritems - 1; i >= 0; i--) {
-		ret = __tree_mod_log_insert_key(fs_info, eb, i,
-				MOD_LOG_KEY_REMOVE_WHILE_FREEING, GFP_NOFS);
-		BUG_ON(ret < 0);
+		ret = __tree_mod_log_insert(fs_info, tm_list[i]);
+		if (ret) {
+			for (j = nritems - 1; j > i; j--)
+				rb_erase(&tm_list[j]->node,
+					 &fs_info->tree_mod_log);
+			return ret;
+		}
 	}
+
+	return 0;
 }
 
 static noinline int
@@ -642,17 +703,38 @@ tree_mod_log_insert_root(struct btrfs_fs
 			 struct extent_buffer *new_root, gfp_t flags,
 			 int log_removal)
 {
-	struct tree_mod_elem *tm;
+	struct tree_mod_elem *tm = NULL;
+	struct tree_mod_elem **tm_list = NULL;
+	int nritems = 0;
+	int ret = 0;
+	int i;
 
-	if (tree_mod_dont_log(fs_info, NULL))
+	if (!tree_mod_need_log(fs_info, NULL))
 		return 0;
 
-	if (log_removal)
-		__tree_mod_log_free_eb(fs_info, old_root);
+	if (log_removal && btrfs_header_level(old_root) > 0) {
+		nritems = btrfs_header_nritems(old_root);
+		tm_list = kzalloc(nritems * sizeof(struct tree_mod_elem *),
+				  flags);
+		if (!tm_list) {
+			ret = -ENOMEM;
+			goto free_tms;
+		}
+		for (i = 0; i < nritems; i++) {
+			tm_list[i] = alloc_tree_mod_elem(old_root, i,
+			    MOD_LOG_KEY_REMOVE_WHILE_FREEING, flags);
+			if (!tm_list[i]) {
+				ret = -ENOMEM;
+				goto free_tms;
+			}
+		}
+	}
 
 	tm = kzalloc(sizeof(*tm), flags);
-	if (!tm)
-		return -ENOMEM;
+	if (!tm) {
+		ret = -ENOMEM;
+		goto free_tms;
+	}
 
 	tm->index = new_root->start >> PAGE_CACHE_SHIFT;
 	tm->old_root.logical = old_root->start;
@@ -660,7 +742,30 @@ tree_mod_log_insert_root(struct btrfs_fs
 	tm->generation = btrfs_header_generation(old_root);
 	tm->op = MOD_LOG_ROOT_REPLACE;
 
-	return __tree_mod_log_insert(fs_info, tm);
+	if (tree_mod_dont_log(fs_info, NULL))
+		goto free_tms;
+
+	if (tm_list)
+		ret = __tree_mod_log_free_eb(fs_info, tm_list, nritems);
+	if (!ret)
+		ret = __tree_mod_log_insert(fs_info, tm);
+
+	tree_mod_log_write_unlock(fs_info);
+	if (ret)
+		goto free_tms;
+	kfree(tm_list);
+
+	return ret;
+
+free_tms:
+	if (tm_list) {
+		for (i = 0; i < nritems; i++)
+			kfree(tm_list[i]);
+		kfree(tm_list);
+	}
+	kfree(tm);
+
+	return ret;
 }
 
 static struct tree_mod_elem *
@@ -729,31 +834,75 @@ tree_mod_log_search(struct btrfs_fs_info
 	return __tree_mod_log_search(fs_info, start, min_seq, 0);
 }
 
-static noinline void
+static noinline int
 tree_mod_log_eb_copy(struct btrfs_fs_info *fs_info, struct extent_buffer *dst,
 		     struct extent_buffer *src, unsigned long dst_offset,
 		     unsigned long src_offset, int nr_items)
 {
-	int ret;
+	int ret = 0;
+	struct tree_mod_elem **tm_list = NULL;
+	struct tree_mod_elem **tm_list_add, **tm_list_rem;
 	int i;
+	int locked = 0;
 
-	if (tree_mod_dont_log(fs_info, NULL))
-		return;
+	if (!tree_mod_need_log(fs_info, NULL))
+		return 0;
 
 	if (btrfs_header_level(dst) == 0 && btrfs_header_level(src) == 0)
-		return;
+		return 0;
+
+	tm_list = kzalloc(nr_items * 2 * sizeof(struct tree_mod_elem *),
+			  GFP_NOFS);
+	if (!tm_list)
+		return -ENOMEM;
 
+	tm_list_add = tm_list;
+	tm_list_rem = tm_list + nr_items;
 	for (i = 0; i < nr_items; i++) {
-		ret = __tree_mod_log_insert_key(fs_info, src,
-						i + src_offset,
-						MOD_LOG_KEY_REMOVE, GFP_NOFS);
-		BUG_ON(ret < 0);
-		ret = __tree_mod_log_insert_key(fs_info, dst,
-						     i + dst_offset,
-						     MOD_LOG_KEY_ADD,
-						     GFP_NOFS);
-		BUG_ON(ret < 0);
+		tm_list_rem[i] = alloc_tree_mod_elem(src, i + src_offset,
+		    MOD_LOG_KEY_REMOVE, GFP_NOFS);
+		if (!tm_list_rem[i]) {
+			ret = -ENOMEM;
+			goto free_tms;
+		}
+
+		tm_list_add[i] = alloc_tree_mod_elem(dst, i + dst_offset,
+		    MOD_LOG_KEY_ADD, GFP_NOFS);
+		if (!tm_list_add[i]) {
+			ret = -ENOMEM;
+			goto free_tms;
+		}
+	}
+
+	if (tree_mod_dont_log(fs_info, NULL))
+		goto free_tms;
+	locked = 1;
+
+	for (i = 0; i < nr_items; i++) {
+		ret = __tree_mod_log_insert(fs_info, tm_list_rem[i]);
+		if (ret)
+			goto free_tms;
+		ret = __tree_mod_log_insert(fs_info, tm_list_add[i]);
+		if (ret)
+			goto free_tms;
 	}
+
+	tree_mod_log_write_unlock(fs_info);
+	kfree(tm_list);
+
+	return 0;
+
+free_tms:
+	for (i = 0; i < nr_items * 2; i++) {
+		if (tm_list[i] && !RB_EMPTY_NODE(&tm_list[i]->node))
+			rb_erase(&tm_list[i]->node, &fs_info->tree_mod_log);
+		kfree(tm_list[i]);
+	}
+	if (locked)
+		tree_mod_log_write_unlock(fs_info);
+	kfree(tm_list);
+
+	return ret;
 }
 
 static inline void
@@ -778,12 +927,52 @@ tree_mod_log_set_node_key(struct btrfs_f
 	BUG_ON(ret < 0);
 }
 
-static noinline void
+static noinline int
 tree_mod_log_free_eb(struct btrfs_fs_info *fs_info, struct extent_buffer *eb)
 {
+	struct tree_mod_elem **tm_list = NULL;
+	int nritems = 0;
+	int i;
+	int ret = 0;
+
+	if (btrfs_header_level(eb) == 0)
+		return 0;
+
+	if (!tree_mod_need_log(fs_info, NULL))
+		return 0;
+
+	nritems = btrfs_header_nritems(eb);
+	tm_list = kzalloc(nritems * sizeof(struct tree_mod_elem *),
+			  GFP_NOFS);
+	if (!tm_list)
+		return -ENOMEM;
+
+	for (i = 0; i < nritems; i++) {
+		tm_list[i] = alloc_tree_mod_elem(eb, i,
+		    MOD_LOG_KEY_REMOVE_WHILE_FREEING, GFP_NOFS);
+		if (!tm_list[i]) {
+			ret = -ENOMEM;
+			goto free_tms;
+		}
+	}
+
 	if (tree_mod_dont_log(fs_info, eb))
-		return;
-	__tree_mod_log_free_eb(fs_info, eb);
+		goto free_tms;
+
+	ret = __tree_mod_log_free_eb(fs_info, tm_list, nritems);
+	tree_mod_log_write_unlock(fs_info);
+	if (ret)
+		goto free_tms;
+	kfree(tm_list);
+
+	return 0;
+
+free_tms:
+	for (i = 0; i < nritems; i++)
+		kfree(tm_list[i]);
+	kfree(tm_list);
+
+	return ret;
 }
 
 static noinline void
@@ -1041,8 +1230,13 @@ static noinline int __btrfs_cow_block(st
 		btrfs_set_node_ptr_generation(parent, parent_slot,
 					      trans->transid);
 		btrfs_mark_buffer_dirty(parent);
-		if (last_ref)
-			tree_mod_log_free_eb(root->fs_info, buf);
+		if (last_ref) {
+			ret = tree_mod_log_free_eb(root->fs_info, buf);
+			if (ret) {
+				btrfs_abort_transaction(trans, root, ret);
+				return ret;
+			}
+		}
 		btrfs_free_tree_block(trans, root, buf, parent_start,
 				      last_ref);
 	}
@@ -3022,8 +3216,12 @@ static int push_node_left(struct btrfs_t
 	} else
 		push_items = min(src_nritems - 8, push_items);
 
-	tree_mod_log_eb_copy(root->fs_info, dst, src, dst_nritems, 0,
-			     push_items);
+	ret = tree_mod_log_eb_copy(root->fs_info, dst, src, dst_nritems, 0,
+				   push_items);
+	if (ret) {
+		btrfs_abort_transaction(trans, root, ret);
+		return ret;
+	}
 	copy_extent_buffer(dst, src,
 			   btrfs_node_key_ptr_offset(dst_nritems),
 			   btrfs_node_key_ptr_offset(0),
@@ -3093,8 +3291,12 @@ static int balance_node_right(struct btr
 				      (dst_nritems) *
 				      sizeof(struct btrfs_key_ptr));
 
-	tree_mod_log_eb_copy(root->fs_info, dst, src, 0,
-			     src_nritems - push_items, push_items);
+	ret = tree_mod_log_eb_copy(root->fs_info, dst, src, 0,
+				   src_nritems - push_items, push_items);
+	if (ret) {
+		btrfs_abort_transaction(trans, root, ret);
+		return ret;
+	}
 	copy_extent_buffer(dst, src,
 			   btrfs_node_key_ptr_offset(0),
 			   btrfs_node_key_ptr_offset(src_nritems - push_items),
@@ -3295,7 +3497,12 @@ static noinline int split_node(struct bt
 			    btrfs_header_chunk_tree_uuid(split),
 			    BTRFS_UUID_SIZE);
 
-	tree_mod_log_eb_copy(root->fs_info, split, c, 0, mid, c_nritems - mid);
+	ret = tree_mod_log_eb_copy(root->fs_info, split, c, 0,
+				   mid, c_nritems - mid);
+	if (ret) {
+		btrfs_abort_transaction(trans, root, ret);
+		return ret;
+	}
 	copy_extent_buffer(split, c,
 			   btrfs_node_key_ptr_offset(0),
 			   btrfs_node_key_ptr_offset(mid),



  parent reply	other threads:[~2014-03-21  0:07 UTC|newest]

Thread overview: 162+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-03-21  0:02 [PATCH 3.13 000/149] 3.13.7-stable review Greg Kroah-Hartman
2014-03-21  0:02 ` [PATCH 3.13 001/149] zram: avoid null access when fail to alloc meta Greg Kroah-Hartman
2014-03-21  0:02 ` [PATCH 3.13 002/149] mm: page_alloc: exempt GFP_THISNODE allocations from zone fairness Greg Kroah-Hartman
2014-03-21  0:02 ` [PATCH 3.13 003/149] mm: include VM_MIXEDMAP flag in the VM_SPECIAL list to avoid m(un)locking Greg Kroah-Hartman
2014-03-21  0:02 ` [PATCH 3.13 004/149] ocfs2: fix quota file corruption Greg Kroah-Hartman
2014-03-21  0:02 ` [PATCH 3.13 005/149] ocfs2 syncs the wrong range Greg Kroah-Hartman
2014-03-21  0:02 ` [PATCH 3.13 006/149] memcg: fix endless loop in __mem_cgroup_iter_next() Greg Kroah-Hartman
2014-03-21  0:02 ` [PATCH 3.13 007/149] sched: Fix double normalization of vruntime Greg Kroah-Hartman
2014-03-21  0:02 ` [PATCH 3.13 008/149] rapidio/tsi721: fix tasklet termination in dma channel release Greg Kroah-Hartman
2014-03-21  0:02 ` [PATCH 3.13 009/149] veth: Fix vlan_features so as to be able to use stacked vlan interfaces Greg Kroah-Hartman
2014-03-21  0:02 ` [PATCH 3.13 010/149] tun: remove bogus hardware vlan acceleration flags from vlan_features Greg Kroah-Hartman
2014-03-21  0:02 ` [PATCH 3.13 011/149] net-tcp: fastopen: fix high order allocations Greg Kroah-Hartman
2014-03-21  0:02 ` [PATCH 3.13 012/149] neigh: recompute reachabletime before returning from neigh_periodic_work() Greg Kroah-Hartman
2014-03-21  0:02 ` [PATCH 3.13 013/149] virtio-net: alloc big buffers also when guest can receive UFO Greg Kroah-Hartman
2014-03-21  0:02 ` [PATCH 3.13 014/149] ipv6: reuse ip6_frag_id from ip6_ufo_append_data Greg Kroah-Hartman
2014-03-21  0:02 ` [PATCH 3.13 015/149] ipv4: ipv6: better estimate tunnel header cut for correct ufo handling Greg Kroah-Hartman
2014-03-21  0:02 ` [PATCH 3.13 016/149] sfc: check for NULL efx->ptp_data in efx_ptp_event Greg Kroah-Hartman
2014-03-21  0:03 ` [PATCH 3.13 017/149] sch_tbf: Fix potential memory leak in tbf_change() Greg Kroah-Hartman
2014-03-21  0:03 ` [PATCH 3.13 018/149] ipv6: ipv6_find_hdr restore prev functionality Greg Kroah-Hartman
2014-03-21  0:03 ` [PATCH 3.13 019/149] tg3: Dont check undefined error bits in RXBD Greg Kroah-Hartman
2014-03-21  0:03 ` [PATCH 3.13 020/149] ip_tunnel:multicast process cause panic due to skb->_skb_refdst NULL pointer Greg Kroah-Hartman
2014-03-21  0:03 ` [PATCH 3.13 021/149] net: sctp: fix sctp_sf_do_5_1D_ce to verify if we/peer is AUTH capable Greg Kroah-Hartman
2014-03-21  0:03 ` [PATCH 3.13 022/149] macvlan: Add support for always_on offload features Greg Kroah-Hartman
2014-03-21  0:03 ` [PATCH 3.13 023/149] mac80211: send control port protocol frames to the VO queue Greg Kroah-Hartman
2014-03-21  0:03 ` [PATCH 3.13 024/149] mac80211: fix AP powersave TX vs. wakeup race Greg Kroah-Hartman
2014-03-21  0:03 ` [PATCH 3.13 025/149] mac80211: dont validate unchanged AP bandwidth while tracking Greg Kroah-Hartman
2014-03-21  0:03 ` [PATCH 3.13 026/149] mac80211: fix association to 20/40 MHz VHT networks Greg Kroah-Hartman
2014-03-21  0:03 ` [PATCH 3.13 027/149] mac80211: clear sequence/fragment number in QoS-null frames Greg Kroah-Hartman
2014-03-21  0:03 ` [PATCH 3.13 028/149] ath9k: Fix ETSI compliance for AR9462 2.0 Greg Kroah-Hartman
2014-03-21  0:03 ` [PATCH 3.13 029/149] ath9k: protect tid->sched check Greg Kroah-Hartman
2014-03-21  0:03 ` [PATCH 3.13 030/149] ath9k: fix ps-poll responses under a-mpdu sessions Greg Kroah-Hartman
2014-03-21  0:03 ` [PATCH 3.13 032/149] iwlwifi: mvm: change of listen interval from 70 to 10 Greg Kroah-Hartman
2014-03-21  0:03 ` [PATCH 3.13 033/149] iwlwifi: dvm: clear IWL_STA_UCODE_INPROGRESS when assoc fails Greg Kroah-Hartman
2014-03-21  0:03 ` [PATCH 3.13 034/149] iwlwifi: fix TX status for aggregated packets Greg Kroah-Hartman
2014-03-21  0:03 ` [PATCH 3.13 035/149] iwlwifi: mvm: dont WARN when statistics are handled late Greg Kroah-Hartman
2014-03-21  0:03 ` [PATCH 3.13 036/149] iwlwifi: disable TX AMPDU by default for iwldvm Greg Kroah-Hartman
2014-03-21  0:03 ` [PATCH 3.13 037/149] mwifiex: clean pcie ring only when device is present Greg Kroah-Hartman
2014-03-21  0:03 ` [PATCH 3.13 038/149] mwifiex: add NULL check for PCIe Rx skb Greg Kroah-Hartman
2014-03-21  0:03 ` [PATCH 3.13 039/149] mwifiex: fix cmd and Tx data timeout issue for PCIe cards Greg Kroah-Hartman
2014-03-21  0:03 ` [PATCH 3.13 040/149] mwifiex: do not advertise usb autosuspend support Greg Kroah-Hartman
2014-03-21  0:03 ` [PATCH 3.13 041/149] mwifiex: copy APs HT capability info correctly Greg Kroah-Hartman
2014-03-21  0:03 ` [PATCH 3.13 042/149] mwifiex: save and copy APs VHT " Greg Kroah-Hartman
2014-03-21  0:03 ` [PATCH 3.13 043/149] ARC: Use correct PTAG register for icache flush Greg Kroah-Hartman
2014-03-21  0:03 ` [PATCH 3.13 044/149] perf trace: Decode architecture-specific signal numbers Greg Kroah-Hartman
2014-03-21  0:03 ` [PATCH 3.13 047/149] ALSA: oxygen: Xonar DG(X): capture from I2S channel 1, not 2 Greg Kroah-Hartman
2014-03-21  0:03 ` [PATCH 3.13 048/149] ALSA: usb-audio: Add quirk for Logitech Webcam C500 Greg Kroah-Hartman
2014-03-21  0:03 ` [PATCH 3.13 049/149] ALSA: hda - Added inverted digital-mic handling for Acer TravelMate 8371 Greg Kroah-Hartman
2014-03-21  0:03 ` [PATCH 3.13 050/149] ALSA: hda - add automute fix for another dell AIO model Greg Kroah-Hartman
2014-03-21  0:03 ` [PATCH 3.13 051/149] ALSA: hda - Add missing loopback merge path for AD1884/1984 codecs Greg Kroah-Hartman
2014-03-21  0:03 ` [PATCH 3.13 052/149] ALSA: hda - Use analog beep for Thinkpads with AD1984 codecs Greg Kroah-Hartman
2014-03-21  0:03 ` [PATCH 3.13 053/149] ALSA: hda - Fix loud click noise with IdeaPad 410Y Greg Kroah-Hartman
2014-03-21  0:03 ` [PATCH 3.13 054/149] pinctrl: sunxi: use chained_irq_{enter, exit} for GIC compatibility Greg Kroah-Hartman
2014-03-21  0:03 ` [PATCH 3.13 055/149] powerpc/tm: Fix crash when forking inside a transaction Greg Kroah-Hartman
2014-03-21  0:03 ` [PATCH 3.13 056/149] powerpc: Align p_dyn, p_rela and p_st symbols Greg Kroah-Hartman
2014-03-21  0:03 ` [PATCH 3.13 057/149] DRM: armada: fix use of kfifo_put() Greg Kroah-Hartman
2014-03-21  0:03 ` [PATCH 3.13 058/149] ARM: fix noMMU kallsyms symbol filtering Greg Kroah-Hartman
2014-03-21  0:03 ` [PATCH 3.13 059/149] ARM: 7991/1: sa1100: fix compile problem on Collie Greg Kroah-Hartman
2014-03-21  0:03 ` [PATCH 3.13 060/149] regulator: core: Replace direct ops->enable usage Greg Kroah-Hartman
2014-03-21  0:03 ` [PATCH 3.13 061/149] x86: Ignore NMIs that come in during early boot Greg Kroah-Hartman
2014-03-21  0:03 ` [PATCH 3.13 062/149] x86: fix compile error due to X86_TRAP_NMI use in asm files Greg Kroah-Hartman
2014-03-21  0:03 ` [PATCH 3.13 063/149] x86/amd/numa: Fix northbridge quirk to assign correct NUMA node Greg Kroah-Hartman
2014-03-21  0:03 ` [PATCH 3.13 064/149] x86_pkg_temp_thermal: Do not expose as a hwmon device Greg Kroah-Hartman
2014-03-21  0:03 ` [PATCH 3.13 065/149] Revert "USBNET: ax88179_178a: enable tso if usb host supports sg dma" Greg Kroah-Hartman
2014-03-21  0:03   ` Greg Kroah-Hartman
2014-03-21  0:03 ` [PATCH 3.13 066/149] usb: Add device quirk for Logitech HD Pro Webcams C920 and C930e Greg Kroah-Hartman
2014-03-21  0:03 ` [PATCH 3.13 067/149] usb: Make DELAY_INIT quirk wait 100ms between Get Configuration requests Greg Kroah-Hartman
2014-03-21  0:03 ` [PATCH 3.13 068/149] Revert "xhci 1.0: Limit arbitrarily-aligned scatter gather." Greg Kroah-Hartman
2014-03-21  0:03   ` Greg Kroah-Hartman
2014-03-21  0:03 ` [PATCH 3.13 069/149] genirq: Remove racy waitqueue_active check Greg Kroah-Hartman
2014-03-21  0:03 ` [PATCH 3.13 070/149] cpuset: fix a locking issue in cpuset_migrate_mm() Greg Kroah-Hartman
2014-03-21  0:03 ` [PATCH 3.13 071/149] cpuset: fix a race condition in __cpuset_node_allowed_softwall() Greg Kroah-Hartman
2014-03-21  0:03 ` [PATCH 3.13 072/149] ACPI / resources: ignore invalid ACPI device resources Greg Kroah-Hartman
2014-03-22  2:30   ` Stefan Lippers-Hollmann
2014-03-22 16:26     ` Greg Kroah-Hartman
2014-03-22 16:35       ` Paul Bolle
2014-03-22 16:54         ` Greg Kroah-Hartman
2014-03-21  0:03 ` [PATCH 3.13 073/149] ACPI / EC: Clear stale EC events on Samsung systems Greg Kroah-Hartman
2014-03-21  0:03 ` [PATCH 3.13 074/149] tracing: Do not add event files for modules that fail tracepoints Greg Kroah-Hartman
2014-03-21  0:03 ` [PATCH 3.13 075/149] firewire: net: fix use after free Greg Kroah-Hartman
2014-03-21  0:04 ` [PATCH 3.13 077/149] firewire: dont use PREPARE_DELAYED_WORK Greg Kroah-Hartman
2014-03-21  0:04 ` [PATCH 3.13 078/149] libata: disable queued TRIM for Crucial M500 mSATA SSDs Greg Kroah-Hartman
2014-03-21  0:04 ` [PATCH 3.13 079/149] libata: add ATA_HORKAGE_BROKEN_FPDMA_AA quirk for Seagate Momentus SpinPoint M8 (2BA30001) Greg Kroah-Hartman
2014-03-21  0:04 ` [PATCH 3.13 080/149] libata: use wider match for blacklisting Crucial M500 Greg Kroah-Hartman
2014-03-21  0:04 ` [PATCH 3.13 081/149] spi: coldfire-qspi: Fix getting correct address for *mcfqspi Greg Kroah-Hartman
2014-03-21  0:04 ` [PATCH 3.13 082/149] spi: fsl-dspi: Fix getting correct address for master Greg Kroah-Hartman
2014-03-21  0:04 ` [PATCH 3.13 083/149] spi: spi-imx: spi_imx_remove: do not disable disabled clocks Greg Kroah-Hartman
2014-03-21  0:04 ` [PATCH 3.13 084/149] spi: spi-ath79: fix initial GPIO CS line setup Greg Kroah-Hartman
2014-03-21  0:04 ` [PATCH 3.13 085/149] NFSv4: Fix another nfs4_sequence corruptor Greg Kroah-Hartman
2014-03-21  0:04 ` [PATCH 3.13 086/149] NFS: Fix a delegation callback race Greg Kroah-Hartman
2014-03-21  0:04 ` [PATCH 3.13 087/149] NFSv4: nfs4_stateid_is_current should return true for an invalid stateid Greg Kroah-Hartman
2014-03-21  0:04 ` [PATCH 3.13 088/149] cpufreq: use cpufreq_cpu_get() to avoid cpufreq_get() race conditions Greg Kroah-Hartman
2014-03-21  0:04 ` [PATCH 3.13 089/149] cpufreq: Skip current frequency initialization for ->setpolicy drivers Greg Kroah-Hartman
2014-03-21  0:04 ` [PATCH 3.13 090/149] ACPI / sleep: Add extra checks for HW Reduced ACPI mode sleep states Greg Kroah-Hartman
2014-03-21  0:04 ` [PATCH 3.13 091/149] iscsi/iser-target: Use list_del_init for ->i_conn_node Greg Kroah-Hartman
2014-03-21  0:04 ` [PATCH 3.13 092/149] iscsi/iser-target: Fix isert_conn->state hung shutdown issues Greg Kroah-Hartman
2014-03-21  0:04 ` [PATCH 3.13 093/149] iser-target: Ignore completions for FRWRs in isert_cq_tx_work Greg Kroah-Hartman
2014-03-21  0:04 ` [PATCH 3.13 094/149] iser-target: Fix post_send_buf_count for RDMA READ/WRITE Greg Kroah-Hartman
2014-03-21  0:04 ` [PATCH 3.13 095/149] iser-target: Fix command leak for tx_desc->comp_llnode_batch Greg Kroah-Hartman
2014-03-21  0:04 ` [PATCH 3.13 096/149] mm/readahead.c: fix do_readahead() for no readpage(s) Greg Kroah-Hartman
2014-03-21  0:04 ` [PATCH 3.13 097/149] iscsi-target: Fix iscsit_get_tpg_from_np tpg_state bug Greg Kroah-Hartman
2014-03-21  0:04 ` [PATCH 3.13 098/149] fs/proc/base.c: fix GPF in /proc/$PID/map_files Greg Kroah-Hartman
2014-03-21  0:04 ` [PATCH 3.13 099/149] drm/radeon/atom: select the proper number of lanes in transmitter setup Greg Kroah-Hartman
2014-03-21  0:04 ` [PATCH 3.13 100/149] drm/radeon/dpm: fix typo in EVERGREEN_SMC_FIRMWARE_HEADER_softRegisters Greg Kroah-Hartman
2014-03-21  0:04 ` [PATCH 3.13 101/149] drm/i915: fix pch pci device enumeration Greg Kroah-Hartman
2014-03-21  0:04 ` [PATCH 3.13 103/149] drm/radeon: re-order firmware loading in preparation for dpm rework Greg Kroah-Hartman
2014-03-21  0:04 ` [PATCH 3.13 104/149] drm/radeon: fix runpm disabling on non-PX harder Greg Kroah-Hartman
2014-03-21  0:04 ` [PATCH 3.13 105/149] drm/radeon/cik: properly set sdma ring status on disable Greg Kroah-Hartman
2014-03-21  0:04 ` [PATCH 3.13 106/149] drm/radeon/cik: stop the sdma engines in the enable() function Greg Kroah-Hartman
2014-03-21  0:04 ` [PATCH 3.13 107/149] drm/radeon/cik: properly set compute ring status on disable Greg Kroah-Hartman
2014-03-21  0:04 ` [PATCH 3.13 108/149] drm/radeon: fix minor typos in si_dpm.c Greg Kroah-Hartman
2014-03-21  0:04 ` [PATCH 3.13 109/149] drm/radeon/si: fix typo in dpm sq ramping setup Greg Kroah-Hartman
2014-03-21  0:04 ` [PATCH 3.13 110/149] ASoC: pcm: free path list before exiting from error conditions Greg Kroah-Hartman
2014-03-22 15:53   ` Ben Hutchings
2014-03-22 18:54     ` Mark Brown
2014-03-24  4:35     ` Greg Kroah-Hartman
2014-03-21  0:04 ` [PATCH 3.13 111/149] ASoC: 88pm860: Fix IO setup Greg Kroah-Hartman
2014-03-21  0:04 ` [PATCH 3.13 112/149] ASoC: si476x: " Greg Kroah-Hartman
2014-03-21  0:04 ` [PATCH 3.13 113/149] i2c: Remove usage of orphaned symbol OF_I2C Greg Kroah-Hartman
2014-03-21  0:04 ` [PATCH 3.13 114/149] ipc: Fix 2 bugs in msgrcv() MSG_COPY implementation Greg Kroah-Hartman
2014-03-21  0:04 ` [PATCH 3.13 116/149] ibmveth: Fix endian issues with MAC addresses Greg Kroah-Hartman
2014-03-21  0:04 ` [PATCH 3.13 117/149] PCI: Enable INTx in pci_reenable_device() only when MSI/MSI-X not enabled Greg Kroah-Hartman
2014-03-21  0:04 ` [PATCH 3.13 118/149] vmxnet3: fix netpoll race condition Greg Kroah-Hartman
2014-03-21  0:04 ` [PATCH 3.13 119/149] vmxnet3: fix building without CONFIG_PCI_MSI Greg Kroah-Hartman
2014-03-21  0:04 ` [PATCH 3.13 120/149] mm/compaction: break out of loop on !PageBuddy in isolate_freepages_block Greg Kroah-Hartman
2014-03-21  0:04 ` [PATCH 3.13 121/149] dm cache mq: fix memory allocation failure for large cache devices Greg Kroah-Hartman
2014-03-21  0:04 ` [PATCH 3.13 122/149] dm space map metadata: fix refcount decrement below 0 which caused corruption Greg Kroah-Hartman
2014-03-21  0:04   ` Greg Kroah-Hartman
2014-03-21  0:04 ` [PATCH 3.13 123/149] dm cache: fix truncation bug when copying a block to/from >2TB fast device Greg Kroah-Hartman
2014-03-21  0:04 ` [PATCH 3.13 124/149] dm cache: fix access beyond end of origin device Greg Kroah-Hartman
2014-03-21  0:04 ` [PATCH 3.13 125/149] net: unix socket code abuses csum_partial Greg Kroah-Hartman
2014-03-21  0:04 ` [PATCH 3.13 126/149] can: flexcan: fix shutdown: first disable chip, then all interrupts Greg Kroah-Hartman
2014-03-21  0:04 ` [PATCH 3.13 127/149] can: flexcan: flexcan_open(): fix error path if flexcan_chip_start() fails Greg Kroah-Hartman
2014-03-21  0:04 ` [PATCH 3.13 128/149] can: flexcan: fix transition from and to low power mode in chip_{en,dis}able Greg Kroah-Hartman
2014-03-21  0:04 ` [PATCH 3.13 129/149] can: flexcan: factor out transceiver {en,dis}able into seperate functions Greg Kroah-Hartman
2014-03-21  0:04 ` [PATCH 3.13 130/149] can: flexcan: flexcan_remove(): add missing netif_napi_del() Greg Kroah-Hartman
2014-03-21  0:04 ` [PATCH 3.13 131/149] SCSI: isci: fix reset timeout handling Greg Kroah-Hartman
2014-03-21  0:04 ` [PATCH 3.13 132/149] SCSI: isci: correct erroneous for_each_isci_host macro Greg Kroah-Hartman
2014-03-21  0:04 ` [PATCH 3.13 133/149] SCSI: qla2xxx: Poll during initialization for ISP25xx and ISP83xx Greg Kroah-Hartman
2014-03-21  0:04 ` [PATCH 3.13 134/149] SCSI: qla2xxx: Fix multiqueue MSI-X registration Greg Kroah-Hartman
2014-03-21  0:04 ` [PATCH 3.13 135/149] SCSI: storvsc: NULL pointer dereference fix Greg Kroah-Hartman
2014-03-21  0:04 ` [PATCH 3.13 136/149] x86, fpu: Check tsk_used_math() in kernel_fpu_end() for eager FPU Greg Kroah-Hartman
2014-03-21  0:05 ` [PATCH 3.13 137/149] Btrfs: return immediately if tree log mod is not necessary Greg Kroah-Hartman
2014-03-21  0:05 ` Greg Kroah-Hartman [this message]
2014-03-21  0:05 ` [PATCH 3.13 139/149] Btrfs: fix data corruption when reading/updating compressed extents Greg Kroah-Hartman
2014-03-21  0:05 ` [PATCH 3.13 140/149] audit: dont generate loginuid log when audit disabled Greg Kroah-Hartman
2014-03-21  0:05 ` [PATCH 3.13 141/149] intel_pstate: Add setting voltage value for baytrail P states Greg Kroah-Hartman
2014-03-21  0:05 ` [PATCH 3.13 142/149] intel_pstate: Add support for Baytrail turbo " Greg Kroah-Hartman
2014-03-21  0:05 ` [PATCH 3.13 143/149] ALSA: oxygen: modify adjust_dg_dac_routing function Greg Kroah-Hartman
2014-03-21  0:05 ` [PATCH 3.13 144/149] regulator: core: Change dummy supplies error message to a warning Greg Kroah-Hartman
2014-03-21  0:05 ` [PATCH 3.13 145/149] Fix mountpoint reference leakage in linkat Greg Kroah-Hartman
2014-03-21  0:05 ` [PATCH 3.13 147/149] bio-integrity: Fix bio_integrity_verify segment start bug Greg Kroah-Hartman
2014-03-21  0:05 ` [PATCH 3.13 148/149] arm64: mm: Add double logical invert to pte accessors Greg Kroah-Hartman
2014-03-21  0:05 ` [PATCH 3.13 149/149] memcg: reparent charges of children before processing parent Greg Kroah-Hartman
2014-03-21  5:37 ` [PATCH 3.13 000/149] 3.13.7-stable review Guenter Roeck
2014-03-21  8:42   ` Thomas Backlund
2014-03-21  9:00     ` Thomas Backlund
2014-03-22 16:25       ` Greg Kroah-Hartman
2014-03-22 16:25   ` Greg Kroah-Hartman
2014-03-22 21:57   ` Shuah Khan
2014-03-24  4:32     ` Greg Kroah-Hartman
2014-03-21 13:54 ` Satoru Takeuchi
2014-03-22 16:26   ` Greg Kroah-Hartman

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=20140321000441.736534822@linuxfoundation.org \
    --to=gregkh@linuxfoundation.org \
    --cc=clm@fb.com \
    --cc=fdmanana@gmail.com \
    --cc=jbacik@fb.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=stable@vger.kernel.org \
    /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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.