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,
	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:05 UTC|newest]

Thread overview: 159+ 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 ` [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 ` [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 ` [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 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).