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, Chris Mason <clm@fb.com>
Subject: [PATCH 3.16 088/125] btrfs: disable strict file flushes for renames and truncates
Date: Wed,  3 Sep 2014 15:07:25 -0700	[thread overview]
Message-ID: <20140903220626.316562512@linuxfoundation.org> (raw)
In-Reply-To: <20140903220623.649748296@linuxfoundation.org>

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

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

From: Chris Mason <clm@fb.com>

commit 8d875f95da43c6a8f18f77869f2ef26e9594fecc upstream.

Truncates and renames are often used to replace old versions of a file
with new versions.  Applications often expect this to be an atomic
replacement, even if they haven't done anything to make sure the new
version is fully on disk.

Btrfs has strict flushing in place to make sure that renaming over an
old file with a new file will fully flush out the new file before
allowing the transaction commit with the rename to complete.

This ordering means the commit code needs to be able to lock file pages,
and there are a few paths in the filesystem where we will try to end a
transaction with the page lock held.  It's rare, but these things can
deadlock.

This patch removes the ordered flushes and switches to a best effort
filemap_flush like ext4 uses. It's not perfect, but it should fix the
deadlocks.

Signed-off-by: Chris Mason <clm@fb.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

---
 fs/btrfs/btrfs_inode.h  |    6 --
 fs/btrfs/disk-io.c      |   32 ------------
 fs/btrfs/file.c         |   26 ----------
 fs/btrfs/inode.c        |   47 +-----------------
 fs/btrfs/ordered-data.c |  123 ------------------------------------------------
 fs/btrfs/ordered-data.h |    5 -
 fs/btrfs/transaction.c  |   33 ------------
 fs/btrfs/transaction.h  |    1 
 8 files changed, 6 insertions(+), 267 deletions(-)

--- a/fs/btrfs/btrfs_inode.h
+++ b/fs/btrfs/btrfs_inode.h
@@ -84,12 +84,6 @@ struct btrfs_inode {
 	 */
 	struct list_head delalloc_inodes;
 
-	/*
-	 * list for tracking inodes that must be sent to disk before a
-	 * rename or truncate commit
-	 */
-	struct list_head ordered_operations;
-
 	/* node for the red-black tree that links inodes in subvolume root */
 	struct rb_node rb_node;
 
--- a/fs/btrfs/disk-io.c
+++ b/fs/btrfs/disk-io.c
@@ -60,8 +60,6 @@ static void end_workqueue_fn(struct btrf
 static void free_fs_root(struct btrfs_root *root);
 static int btrfs_check_super_valid(struct btrfs_fs_info *fs_info,
 				    int read_only);
-static void btrfs_destroy_ordered_operations(struct btrfs_transaction *t,
-					     struct btrfs_root *root);
 static void btrfs_destroy_ordered_extents(struct btrfs_root *root);
 static int btrfs_destroy_delayed_refs(struct btrfs_transaction *trans,
 				      struct btrfs_root *root);
@@ -3829,34 +3827,6 @@ static void btrfs_error_commit_super(str
 	btrfs_cleanup_transaction(root);
 }
 
-static void btrfs_destroy_ordered_operations(struct btrfs_transaction *t,
-					     struct btrfs_root *root)
-{
-	struct btrfs_inode *btrfs_inode;
-	struct list_head splice;
-
-	INIT_LIST_HEAD(&splice);
-
-	mutex_lock(&root->fs_info->ordered_operations_mutex);
-	spin_lock(&root->fs_info->ordered_root_lock);
-
-	list_splice_init(&t->ordered_operations, &splice);
-	while (!list_empty(&splice)) {
-		btrfs_inode = list_entry(splice.next, struct btrfs_inode,
-					 ordered_operations);
-
-		list_del_init(&btrfs_inode->ordered_operations);
-		spin_unlock(&root->fs_info->ordered_root_lock);
-
-		btrfs_invalidate_inodes(btrfs_inode->root);
-
-		spin_lock(&root->fs_info->ordered_root_lock);
-	}
-
-	spin_unlock(&root->fs_info->ordered_root_lock);
-	mutex_unlock(&root->fs_info->ordered_operations_mutex);
-}
-
 static void btrfs_destroy_ordered_extents(struct btrfs_root *root)
 {
 	struct btrfs_ordered_extent *ordered;
@@ -4093,8 +4063,6 @@ again:
 void btrfs_cleanup_one_transaction(struct btrfs_transaction *cur_trans,
 				   struct btrfs_root *root)
 {
-	btrfs_destroy_ordered_operations(cur_trans, root);
-
 	btrfs_destroy_delayed_refs(cur_trans, root);
 
 	cur_trans->state = TRANS_STATE_COMMIT_START;
--- a/fs/btrfs/file.c
+++ b/fs/btrfs/file.c
@@ -1838,33 +1838,9 @@ out:
 
 int btrfs_release_file(struct inode *inode, struct file *filp)
 {
-	/*
-	 * ordered_data_close is set by settattr when we are about to truncate
-	 * a file from a non-zero size to a zero size.  This tries to
-	 * flush down new bytes that may have been written if the
-	 * application were using truncate to replace a file in place.
-	 */
-	if (test_and_clear_bit(BTRFS_INODE_ORDERED_DATA_CLOSE,
-			       &BTRFS_I(inode)->runtime_flags)) {
-		struct btrfs_trans_handle *trans;
-		struct btrfs_root *root = BTRFS_I(inode)->root;
-
-		/*
-		 * We need to block on a committing transaction to keep us from
-		 * throwing a ordered operation on to the list and causing
-		 * something like sync to deadlock trying to flush out this
-		 * inode.
-		 */
-		trans = btrfs_start_transaction(root, 0);
-		if (IS_ERR(trans))
-			return PTR_ERR(trans);
-		btrfs_add_ordered_operation(trans, BTRFS_I(inode)->root, inode);
-		btrfs_end_transaction(trans, root);
-		if (inode->i_size > BTRFS_ORDERED_OPERATIONS_FLUSH_LIMIT)
-			filemap_flush(inode->i_mapping);
-	}
 	if (filp->private_data)
 		btrfs_ioctl_trans_end(filp);
+	filemap_flush(inode->i_mapping);
 	return 0;
 }
 
--- a/fs/btrfs/inode.c
+++ b/fs/btrfs/inode.c
@@ -7951,27 +7951,6 @@ static int btrfs_truncate(struct inode *
 	BUG_ON(ret);
 
 	/*
-	 * setattr is responsible for setting the ordered_data_close flag,
-	 * but that is only tested during the last file release.  That
-	 * could happen well after the next commit, leaving a great big
-	 * window where new writes may get lost if someone chooses to write
-	 * to this file after truncating to zero
-	 *
-	 * The inode doesn't have any dirty data here, and so if we commit
-	 * this is a noop.  If someone immediately starts writing to the inode
-	 * it is very likely we'll catch some of their writes in this
-	 * transaction, and the commit will find this file on the ordered
-	 * data list with good things to send down.
-	 *
-	 * This is a best effort solution, there is still a window where
-	 * using truncate to replace the contents of the file will
-	 * end up with a zero length file after a crash.
-	 */
-	if (inode->i_size == 0 && test_bit(BTRFS_INODE_ORDERED_DATA_CLOSE,
-					   &BTRFS_I(inode)->runtime_flags))
-		btrfs_add_ordered_operation(trans, root, inode);
-
-	/*
 	 * So if we truncate and then write and fsync we normally would just
 	 * write the extents that changed, which is a problem if we need to
 	 * first truncate that entire inode.  So set this flag so we write out
@@ -8118,7 +8097,6 @@ struct inode *btrfs_alloc_inode(struct s
 	mutex_init(&ei->delalloc_mutex);
 	btrfs_ordered_inode_tree_init(&ei->ordered_tree);
 	INIT_LIST_HEAD(&ei->delalloc_inodes);
-	INIT_LIST_HEAD(&ei->ordered_operations);
 	RB_CLEAR_NODE(&ei->rb_node);
 
 	return inode;
@@ -8158,17 +8136,6 @@ void btrfs_destroy_inode(struct inode *i
 	if (!root)
 		goto free;
 
-	/*
-	 * Make sure we're properly removed from the ordered operation
-	 * lists.
-	 */
-	smp_mb();
-	if (!list_empty(&BTRFS_I(inode)->ordered_operations)) {
-		spin_lock(&root->fs_info->ordered_root_lock);
-		list_del_init(&BTRFS_I(inode)->ordered_operations);
-		spin_unlock(&root->fs_info->ordered_root_lock);
-	}
-
 	if (test_bit(BTRFS_INODE_HAS_ORPHAN_ITEM,
 		     &BTRFS_I(inode)->runtime_flags)) {
 		btrfs_info(root->fs_info, "inode %llu still on the orphan list",
@@ -8350,12 +8317,10 @@ static int btrfs_rename(struct inode *ol
 	ret = 0;
 
 	/*
-	 * we're using rename to replace one file with another.
-	 * and the replacement file is large.  Start IO on it now so
-	 * we don't add too much work to the end of the transaction
+	 * we're using rename to replace one file with another.  Start IO on it
+	 * now so  we don't add too much work to the end of the transaction
 	 */
-	if (new_inode && S_ISREG(old_inode->i_mode) && new_inode->i_size &&
-	    old_inode->i_size > BTRFS_ORDERED_OPERATIONS_FLUSH_LIMIT)
+	if (new_inode && S_ISREG(old_inode->i_mode) && new_inode->i_size)
 		filemap_flush(old_inode->i_mapping);
 
 	/* close the racy window with snapshot create/destroy ioctl */
@@ -8403,12 +8368,6 @@ static int btrfs_rename(struct inode *ol
 		 */
 		btrfs_pin_log_trans(root);
 	}
-	/*
-	 * make sure the inode gets flushed if it is replacing
-	 * something.
-	 */
-	if (new_inode && new_inode->i_size && S_ISREG(old_inode->i_mode))
-		btrfs_add_ordered_operation(trans, root, old_inode);
 
 	inode_inc_iversion(old_dir);
 	inode_inc_iversion(new_dir);
--- a/fs/btrfs/ordered-data.c
+++ b/fs/btrfs/ordered-data.c
@@ -571,18 +571,6 @@ void btrfs_remove_ordered_extent(struct
 
 	trace_btrfs_ordered_extent_remove(inode, entry);
 
-	/*
-	 * we have no more ordered extents for this inode and
-	 * no dirty pages.  We can safely remove it from the
-	 * list of ordered extents
-	 */
-	if (RB_EMPTY_ROOT(&tree->tree) &&
-	    !mapping_tagged(inode->i_mapping, PAGECACHE_TAG_DIRTY)) {
-		spin_lock(&root->fs_info->ordered_root_lock);
-		list_del_init(&BTRFS_I(inode)->ordered_operations);
-		spin_unlock(&root->fs_info->ordered_root_lock);
-	}
-
 	if (!root->nr_ordered_extents) {
 		spin_lock(&root->fs_info->ordered_root_lock);
 		BUG_ON(list_empty(&root->ordered_root));
@@ -687,81 +675,6 @@ void btrfs_wait_ordered_roots(struct btr
 }
 
 /*
- * this is used during transaction commit to write all the inodes
- * added to the ordered operation list.  These files must be fully on
- * disk before the transaction commits.
- *
- * we have two modes here, one is to just start the IO via filemap_flush
- * and the other is to wait for all the io.  When we wait, we have an
- * extra check to make sure the ordered operation list really is empty
- * before we return
- */
-int btrfs_run_ordered_operations(struct btrfs_trans_handle *trans,
-				 struct btrfs_root *root, int wait)
-{
-	struct btrfs_inode *btrfs_inode;
-	struct inode *inode;
-	struct btrfs_transaction *cur_trans = trans->transaction;
-	struct list_head splice;
-	struct list_head works;
-	struct btrfs_delalloc_work *work, *next;
-	int ret = 0;
-
-	INIT_LIST_HEAD(&splice);
-	INIT_LIST_HEAD(&works);
-
-	mutex_lock(&root->fs_info->ordered_extent_flush_mutex);
-	spin_lock(&root->fs_info->ordered_root_lock);
-	list_splice_init(&cur_trans->ordered_operations, &splice);
-	while (!list_empty(&splice)) {
-		btrfs_inode = list_entry(splice.next, struct btrfs_inode,
-				   ordered_operations);
-		inode = &btrfs_inode->vfs_inode;
-
-		list_del_init(&btrfs_inode->ordered_operations);
-
-		/*
-		 * the inode may be getting freed (in sys_unlink path).
-		 */
-		inode = igrab(inode);
-		if (!inode)
-			continue;
-
-		if (!wait)
-			list_add_tail(&BTRFS_I(inode)->ordered_operations,
-				      &cur_trans->ordered_operations);
-		spin_unlock(&root->fs_info->ordered_root_lock);
-
-		work = btrfs_alloc_delalloc_work(inode, wait, 1);
-		if (!work) {
-			spin_lock(&root->fs_info->ordered_root_lock);
-			if (list_empty(&BTRFS_I(inode)->ordered_operations))
-				list_add_tail(&btrfs_inode->ordered_operations,
-					      &splice);
-			list_splice_tail(&splice,
-					 &cur_trans->ordered_operations);
-			spin_unlock(&root->fs_info->ordered_root_lock);
-			ret = -ENOMEM;
-			goto out;
-		}
-		list_add_tail(&work->list, &works);
-		btrfs_queue_work(root->fs_info->flush_workers,
-				 &work->work);
-
-		cond_resched();
-		spin_lock(&root->fs_info->ordered_root_lock);
-	}
-	spin_unlock(&root->fs_info->ordered_root_lock);
-out:
-	list_for_each_entry_safe(work, next, &works, list) {
-		list_del_init(&work->list);
-		btrfs_wait_and_free_delalloc_work(work);
-	}
-	mutex_unlock(&root->fs_info->ordered_extent_flush_mutex);
-	return ret;
-}
-
-/*
  * Used to start IO or wait for a given ordered extent to finish.
  *
  * If wait is one, this effectively waits on page writeback for all the pages
@@ -1120,42 +1033,6 @@ out:
 	return index;
 }
 
-
-/*
- * add a given inode to the list of inodes that must be fully on
- * disk before a transaction commit finishes.
- *
- * This basically gives us the ext3 style data=ordered mode, and it is mostly
- * used to make sure renamed files are fully on disk.
- *
- * It is a noop if the inode is already fully on disk.
- *
- * If trans is not null, we'll do a friendly check for a transaction that
- * is already flushing things and force the IO down ourselves.
- */
-void btrfs_add_ordered_operation(struct btrfs_trans_handle *trans,
-				 struct btrfs_root *root, struct inode *inode)
-{
-	struct btrfs_transaction *cur_trans = trans->transaction;
-	u64 last_mod;
-
-	last_mod = max(BTRFS_I(inode)->generation, BTRFS_I(inode)->last_trans);
-
-	/*
-	 * if this file hasn't been changed since the last transaction
-	 * commit, we can safely return without doing anything
-	 */
-	if (last_mod <= root->fs_info->last_trans_committed)
-		return;
-
-	spin_lock(&root->fs_info->ordered_root_lock);
-	if (list_empty(&BTRFS_I(inode)->ordered_operations)) {
-		list_add_tail(&BTRFS_I(inode)->ordered_operations,
-			      &cur_trans->ordered_operations);
-	}
-	spin_unlock(&root->fs_info->ordered_root_lock);
-}
-
 int __init ordered_data_init(void)
 {
 	btrfs_ordered_extent_cache = kmem_cache_create("btrfs_ordered_extent",
--- a/fs/btrfs/ordered-data.h
+++ b/fs/btrfs/ordered-data.h
@@ -190,11 +190,6 @@ int btrfs_ordered_update_i_size(struct i
 				struct btrfs_ordered_extent *ordered);
 int btrfs_find_ordered_sum(struct inode *inode, u64 offset, u64 disk_bytenr,
 			   u32 *sum, int len);
-int btrfs_run_ordered_operations(struct btrfs_trans_handle *trans,
-				 struct btrfs_root *root, int wait);
-void btrfs_add_ordered_operation(struct btrfs_trans_handle *trans,
-				 struct btrfs_root *root,
-				 struct inode *inode);
 int btrfs_wait_ordered_extents(struct btrfs_root *root, int nr);
 void btrfs_wait_ordered_roots(struct btrfs_fs_info *fs_info, int nr);
 void btrfs_get_logged_extents(struct inode *inode,
--- a/fs/btrfs/transaction.c
+++ b/fs/btrfs/transaction.c
@@ -218,7 +218,6 @@ loop:
 	spin_lock_init(&cur_trans->delayed_refs.lock);
 
 	INIT_LIST_HEAD(&cur_trans->pending_snapshots);
-	INIT_LIST_HEAD(&cur_trans->ordered_operations);
 	INIT_LIST_HEAD(&cur_trans->pending_chunks);
 	INIT_LIST_HEAD(&cur_trans->switch_commits);
 	list_add_tail(&cur_trans->list, &fs_info->trans_list);
@@ -1612,27 +1611,6 @@ static void cleanup_transaction(struct b
 	kmem_cache_free(btrfs_trans_handle_cachep, trans);
 }
 
-static int btrfs_flush_all_pending_stuffs(struct btrfs_trans_handle *trans,
-					  struct btrfs_root *root)
-{
-	int ret;
-
-	ret = btrfs_run_delayed_items(trans, root);
-	if (ret)
-		return ret;
-
-	/*
-	 * rename don't use btrfs_join_transaction, so, once we
-	 * set the transaction to blocked above, we aren't going
-	 * to get any new ordered operations.  We can safely run
-	 * it here and no for sure that nothing new will be added
-	 * to the list
-	 */
-	ret = btrfs_run_ordered_operations(trans, root, 1);
-
-	return ret;
-}
-
 static inline int btrfs_start_delalloc_flush(struct btrfs_fs_info *fs_info)
 {
 	if (btrfs_test_opt(fs_info->tree_root, FLUSHONCOMMIT))
@@ -1653,13 +1631,6 @@ int btrfs_commit_transaction(struct btrf
 	struct btrfs_transaction *prev_trans = NULL;
 	int ret;
 
-	ret = btrfs_run_ordered_operations(trans, root, 0);
-	if (ret) {
-		btrfs_abort_transaction(trans, root, ret);
-		btrfs_end_transaction(trans, root);
-		return ret;
-	}
-
 	/* Stop the commit early if ->aborted is set */
 	if (unlikely(ACCESS_ONCE(cur_trans->aborted))) {
 		ret = cur_trans->aborted;
@@ -1740,7 +1711,7 @@ int btrfs_commit_transaction(struct btrf
 	if (ret)
 		goto cleanup_transaction;
 
-	ret = btrfs_flush_all_pending_stuffs(trans, root);
+	ret = btrfs_run_delayed_items(trans, root);
 	if (ret)
 		goto cleanup_transaction;
 
@@ -1748,7 +1719,7 @@ int btrfs_commit_transaction(struct btrf
 		   extwriter_counter_read(cur_trans) == 0);
 
 	/* some pending stuffs might be added after the previous flush. */
-	ret = btrfs_flush_all_pending_stuffs(trans, root);
+	ret = btrfs_run_delayed_items(trans, root);
 	if (ret)
 		goto cleanup_transaction;
 
--- a/fs/btrfs/transaction.h
+++ b/fs/btrfs/transaction.h
@@ -55,7 +55,6 @@ struct btrfs_transaction {
 	wait_queue_head_t writer_wait;
 	wait_queue_head_t commit_wait;
 	struct list_head pending_snapshots;
-	struct list_head ordered_operations;
 	struct list_head pending_chunks;
 	struct list_head switch_commits;
 	struct btrfs_delayed_ref_root delayed_refs;



  parent reply	other threads:[~2014-09-03 22:07 UTC|newest]

Thread overview: 127+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-09-03 22:05 [PATCH 3.16 000/125] 3.16.2-stable review Greg Kroah-Hartman
2014-09-03 22:05 ` [PATCH 3.16 001/125] stable_kernel_rules: Add pointer to netdev-FAQ for network patches Greg Kroah-Hartman
2014-09-03 22:05 ` [PATCH 3.16 002/125] MIPS: math-emu: Fix instruction decoding Greg Kroah-Hartman
2014-09-03 22:06 ` [PATCH 3.16 003/125] HID: logitech: fix bounds checking on LED report size Greg Kroah-Hartman
2014-09-03 22:06 ` [PATCH 3.16 004/125] HID: logitech: perform bounds checking on device_id early enough Greg Kroah-Hartman
2014-09-03 22:06 ` [PATCH 3.16 005/125] HID: fix a couple of off-by-ones Greg Kroah-Hartman
2014-09-03 22:06 ` [PATCH 3.16 006/125] isofs: Fix unbounded recursion when processing relocated directories Greg Kroah-Hartman
2014-09-03 22:06 ` [PATCH 3.16 007/125] uas: Limit qdepth to 32 when connected over usb-2 Greg Kroah-Hartman
2014-09-03 22:06 ` [PATCH 3.16 008/125] USB: OHCI: fix bugs in debug routines Greg Kroah-Hartman
2014-09-03 22:06 ` [PATCH 3.16 009/125] USB: OHCI: dont lose track of EDs when a controller dies Greg Kroah-Hartman
2014-09-03 22:06 ` [PATCH 3.16 010/125] usbcore: dont log on consecutive debounce failures of the same port Greg Kroah-Hartman
2014-09-03 22:06 ` [PATCH 3.16 011/125] USB: devio: fix issue with log flooding Greg Kroah-Hartman
2014-09-03 22:06 ` [PATCH 3.16 012/125] USB: serial: ftdi_sio: Annotate the current Xsens PID assignments Greg Kroah-Hartman
2014-09-03 22:06 ` [PATCH 3.16 013/125] USB: serial: ftdi_sio: Add support for new Xsens devices Greg Kroah-Hartman
2014-09-03 22:06 ` [PATCH 3.16 014/125] USB: ehci-pci: USB host controller support for Intel Quark X1000 Greg Kroah-Hartman
2014-09-03 22:06 ` [PATCH 3.16 015/125] USB: Fix persist resume of some SS USB devices Greg Kroah-Hartman
2014-09-03 22:06 ` [PATCH 3.16 016/125] ALSA: hda - fix an external mic jack problem on a HP machine Greg Kroah-Hartman
2014-09-03 22:06 ` [PATCH 3.16 017/125] ALSA: usb-audio: Adjust Gamecom 780 volume level Greg Kroah-Hartman
2014-09-03 22:06 ` [PATCH 3.16 018/125] ALSA: virtuoso: add Xonar Essence STX II support Greg Kroah-Hartman
2014-09-03 22:06 ` [PATCH 3.16 019/125] ALSA: hda/ca0132 - Dont try loading firmware at resume when already failed Greg Kroah-Hartman
2014-09-03 22:06 ` [PATCH 3.16 020/125] ALSA: usb-audio: fix BOSS ME-25 MIDI regression Greg Kroah-Hartman
2014-09-03 22:06 ` [PATCH 3.16 021/125] ALSA: hda - Add mute LED pin quirk for HP 15 touchsmart Greg Kroah-Hartman
2014-09-03 22:06 ` [PATCH 3.16 022/125] ALSA: hda - restore the gpio led after resume Greg Kroah-Hartman
2014-09-03 22:06 ` [PATCH 3.16 023/125] ALSA: hda/realtek - Avoid setting wrong COEF on ALC269 & co Greg Kroah-Hartman
2014-09-03 22:06 ` [PATCH 3.16 024/125] mei: reset client connection state on timeout Greg Kroah-Hartman
2014-09-03 22:06 ` [PATCH 3.16 025/125] mei: start disconnect request timer consistently Greg Kroah-Hartman
2014-09-03 22:06 ` [PATCH 3.16 026/125] mei: dont schedule suspend in pm idle Greg Kroah-Hartman
2014-09-03 22:06 ` [PATCH 3.16 027/125] mei: fix return value on disconnect timeout Greg Kroah-Hartman
2014-09-03 22:06 ` [PATCH 3.16 028/125] xhci: Blacklist using streams on the Etron EJ168 controller Greg Kroah-Hartman
2014-09-03 22:06 ` [PATCH 3.16 029/125] sched: Fix sched_setparam() policy == -1 logic Greg Kroah-Hartman
2014-09-03 22:06 ` [PATCH 3.16 030/125] arm64: Fix barriers used for page table modifications Greg Kroah-Hartman
2014-09-03 22:06 ` [PATCH 3.16 031/125] arm64: dont call break hooks for BRK exceptions from EL0 Greg Kroah-Hartman
2014-09-03 22:06 ` [PATCH 3.16 032/125] efi/arm64: Store Runtime Services revision Greg Kroah-Hartman
2014-09-03 22:06 ` [PATCH 3.16 033/125] ARM: dts: AM4372: Correct mailbox node data Greg Kroah-Hartman
2014-09-03 22:06 ` [PATCH 3.16 034/125] ARM: 8097/1: unistd.h: relocate comments back to place Greg Kroah-Hartman
2014-09-03 22:06 ` [PATCH 3.16 036/125] drm: omapdrm: fix compiler errors Greg Kroah-Hartman
2014-09-03 22:06 ` [PATCH 3.16 037/125] mmc: mmci: Remove redundant check of status for DATA irq Greg Kroah-Hartman
2014-09-03 22:06 ` [PATCH 3.16 038/125] mmc: mmci: Move all CMD irq handling to mmci_cmd_irq() Greg Kroah-Hartman
2014-09-03 22:06 ` [PATCH 3.16 039/125] hwmon: (sis5595) Prevent overflow problem when writing large limits Greg Kroah-Hartman
2014-09-03 22:06 ` [PATCH 3.16 040/125] hwmon: (amc6821) Fix possible race condition bug Greg Kroah-Hartman
2014-09-03 22:06 ` [PATCH 3.16 041/125] hwmon: (lm78) Fix overflow problems seen when writing large temperature limits Greg Kroah-Hartman
2014-09-03 22:06 ` [PATCH 3.16 042/125] hwmon: (gpio-fan) Prevent overflow problem when writing large limits Greg Kroah-Hartman
2014-09-03 22:06 ` [PATCH 3.16 043/125] hwmon: (ads1015) Fix off-by-one for valid channel index checking Greg Kroah-Hartman
2014-09-03 22:06 ` [PATCH 3.16 044/125] hwmon: (lm85) Fix various errors on attribute writes Greg Kroah-Hartman
2014-09-03 22:06 ` [PATCH 3.16 045/125] hwmon: (ads1015) Fix out-of-bounds array access Greg Kroah-Hartman
2014-09-03 22:06 ` [PATCH 3.16 046/125] hwmon: (dme1737) Prevent overflow problem when writing large limits Greg Kroah-Hartman
2014-09-03 22:06 ` [PATCH 3.16 047/125] hwmon: (lm92) " Greg Kroah-Hartman
2014-09-03 22:06 ` [PATCH 3.16 048/125] tpm: Add missing tpm_do_selftest to ST33 I2C driver Greg Kroah-Hartman
2014-09-03 22:06 ` [PATCH 3.16 049/125] drivers/i2c/busses: use correct type for dma_map/unmap Greg Kroah-Hartman
2014-09-03 22:06 ` [PATCH 3.16 050/125] i2c: rk3x: fix interrupt handling issue Greg Kroah-Hartman
2014-09-03 22:06 ` [PATCH 3.16 051/125] ext4: fix punch hole on files with indirect mapping Greg Kroah-Hartman
2014-09-03 22:06 ` [PATCH 3.16 052/125] ext4: fix ext4_discard_allocated_blocks() if we cant allocate the pa struct Greg Kroah-Hartman
2014-09-03 22:06 ` [PATCH 3.16 053/125] serial: core: Preserve termios c_cflag for console resume Greg Kroah-Hartman
2014-09-03 22:06 ` [PATCH 3.16 054/125] crypto: ux500 - make interrupt mode plausible Greg Kroah-Hartman
2014-09-03 22:06 ` [PATCH 3.16 055/125] debugfs: Fix corrupted loop in debugfs_remove_recursive Greg Kroah-Hartman
2014-09-03 22:06 ` [PATCH 3.16 056/125] KVM: x86: Inter-privilege level ret emulation is not implemeneted Greg Kroah-Hartman
2014-09-03 22:06 ` [PATCH 3.16 057/125] KVM: x86: always exit on EOIs for interrupts listed in the IOAPIC redir table Greg Kroah-Hartman
2014-09-03 22:06 ` [PATCH 3.16 058/125] KVM: s390/mm: Fix page table locking vs. split pmd lock Greg Kroah-Hartman
2014-09-03 22:06 ` [PATCH 3.16 059/125] KVM: PPC: Book3S: Fix LPCR one_reg interface Greg Kroah-Hartman
2014-09-03 22:06 ` [PATCH 3.16 060/125] KVM: nVMX: fix "acknowledge interrupt on exit" when APICv is in use Greg Kroah-Hartman
2014-09-03 22:06 ` [PATCH 3.16 061/125] Revert "KVM: x86: Increase the number of fixed MTRR regs to 10" Greg Kroah-Hartman
2014-09-03 22:06 ` [PATCH 3.16 062/125] kvm: iommu: fix the third parameter of kvm_iommu_put_pages (CVE-2014-3601) Greg Kroah-Hartman
2014-09-03 22:07 ` [PATCH 3.16 063/125] ext4: fix BUG_ON in mb_free_blocks() Greg Kroah-Hartman
2014-09-03 22:07 ` [PATCH 3.16 064/125] drm/radeon: add new KV pci id Greg Kroah-Hartman
2014-09-03 22:07 ` [PATCH 3.16 065/125] drm/radeon: add new bonaire pci ids Greg Kroah-Hartman
2014-09-03 22:07 ` [PATCH 3.16 066/125] drm/radeon: add additional SI " Greg Kroah-Hartman
2014-09-03 22:07 ` [PATCH 3.16 067/125] PCI: Configure ASPM when enabling device Greg Kroah-Hartman
2014-09-03 22:07 ` [PATCH 3.16 068/125] PCI: Keep original resource if we fail to expand it Greg Kroah-Hartman
2014-09-03 22:07 ` [PATCH 3.16 069/125] PCI: pciehp: Clear Data Link Layer State Changed during init Greg Kroah-Hartman
2014-09-03 22:07 ` [PATCH 3.16 070/125] ACPI / PCI: Fix sysfs acpi_index and label errors Greg Kroah-Hartman
2014-09-03 22:07 ` [PATCH 3.16 071/125] x86: dont exclude low BIOS area when allocating address space for non-PCI cards Greg Kroah-Hartman
2014-09-03 22:07 ` [PATCH 3.16 072/125] powerpc/eeh: Wrong place to call pci_get_slot() Greg Kroah-Hartman
2014-09-03 22:07 ` [PATCH 3.16 073/125] powerpc/pci: Reorder pci bus/bridge unregistration during PHB removal Greg Kroah-Hartman
2014-09-03 22:07 ` [PATCH 3.16 074/125] powerpc/powernv: Update dev->dma_mask in pci_set_dma_mask() path Greg Kroah-Hartman
2014-09-03 22:07 ` [PATCH 3.16 075/125] x86_64/vsyscall: Fix warn_bad_vsyscall log output Greg Kroah-Hartman
2014-09-03 22:07 ` [PATCH 3.16 076/125] hpsa: fix non-x86 builds Greg Kroah-Hartman
2014-09-03 22:07 ` [PATCH 3.16 077/125] x86: MCE: Add raw_lock conversion again Greg Kroah-Hartman
2014-09-03 22:07 ` [PATCH 3.16 078/125] xen/events/fifo: ensure all bitops are properly aligned even on x86 Greg Kroah-Hartman
2014-09-03 22:07 ` [PATCH 3.16 080/125] x86/xen: use vmap() to map grant table pages in PVH guests Greg Kroah-Hartman
2014-09-03 22:07 ` [PATCH 3.16 081/125] x86/xen: resume timer irqs early Greg Kroah-Hartman
2014-09-03 22:07 ` [PATCH 3.16 082/125] x86,mm: fix pte_special versus pte_numa Greg Kroah-Hartman
2014-09-03 22:07 ` [PATCH 3.16 083/125] hpsa: fix bad -ENOMEM return value in hpsa_big_passthru_ioctl Greg Kroah-Hartman
2014-09-03 22:07 ` [PATCH 3.16 084/125] Btrfs: Fix memory corruption by ulist_add_merge() on 32bit arch Greg Kroah-Hartman
2014-09-03 22:07 ` [PATCH 3.16 085/125] Btrfs: fix csum tree corruption, duplicate and outdated checksums Greg Kroah-Hartman
2014-09-03 22:07 ` [PATCH 3.16 086/125] Btrfs: read lock extent buffer while walking backrefs Greg Kroah-Hartman
2014-09-03 22:07 ` [PATCH 3.16 087/125] Btrfs: fix compressed write corruption on enospc Greg Kroah-Hartman
2014-09-03 22:07 ` Greg Kroah-Hartman [this message]
2014-09-03 22:07 ` [PATCH 3.16 089/125] Btrfs: fix crash on endio of reading corrupted block Greg Kroah-Hartman
2014-09-03 22:07 ` [PATCH 3.16 090/125] Btrfs: fix filemap_flush call in btrfs_file_release Greg Kroah-Hartman
2014-09-03 22:07 ` [PATCH 3.16 091/125] Btrfs: fix task hang under heavy compressed write Greg Kroah-Hartman
2014-09-03 22:07 ` [PATCH 3.16 092/125] mei: reset client state on queued connect request Greg Kroah-Hartman
2014-09-03 22:07 ` [PATCH 3.16 093/125] mei: nfc: fix memory leak in error path Greg Kroah-Hartman
2014-09-03 22:07 ` [PATCH 3.16 094/125] ext4: propagate errors up to ext4_find_entry()s callers Greg Kroah-Hartman
2014-09-03 22:07 ` [PATCH 3.16 095/125] ext4: move i_size,i_disksize update routines to helper function Greg Kroah-Hartman
2014-09-03 22:07 ` [PATCH 3.16 096/125] ext4: fix incorect journal credits reservation in ext4_zero_range Greg Kroah-Hartman
2014-09-03 22:07 ` [PATCH 3.16 097/125] ext4: fix transaction issues for ext4_fallocate and ext_zero_range Greg Kroah-Hartman
2014-09-03 22:07 ` [PATCH 3.16 098/125] ext4: update i_disksize coherently with block allocation on error path Greg Kroah-Hartman
2014-09-03 22:07 ` [PATCH 3.16 099/125] ext4: fix same-dir rename when inline data directory overflows Greg Kroah-Hartman
2014-09-03 22:07 ` [PATCH 3.16 100/125] jbd2: fix infinite loop when recovering corrupt journal blocks Greg Kroah-Hartman
2014-09-03 22:07 ` [PATCH 3.16 101/125] jbd2: fix descriptor block size handling errors with journal_csum Greg Kroah-Hartman
2014-09-03 22:07 ` [PATCH 3.16 102/125] staging: lustre: Remove circular dependency on header Greg Kroah-Hartman
2014-09-03 22:07 ` [PATCH 3.16 103/125] staging: et131x: Fix errors caused by phydev->addr accesses before initialisation Greg Kroah-Hartman
2014-09-03 22:07 ` [PATCH 3.16 104/125] staging/rtl8188eu: add 0df6:0076 Sitecom Europe B.V Greg Kroah-Hartman
2014-09-03 22:07 ` [PATCH 3.16 105/125] staging: r8188eu: Add new USB ID Greg Kroah-Hartman
2014-09-03 22:07 ` [PATCH 3.16 106/125] xhci: Treat not finding the event_seg on COMP_STOP the same as COMP_STOP_INVAL Greg Kroah-Hartman
2014-09-03 22:07 ` [PATCH 3.16 107/125] usb: xhci: amd chipset also needs short TX quirk Greg Kroah-Hartman
2014-09-03 22:07 ` [PATCH 3.16 108/125] xhci: rework cycle bit checking for new dequeue pointers Greg Kroah-Hartman
2014-09-03 22:07 ` [PATCH 3.16 109/125] xhci: Disable streams on Via XHCI with device-id 0x3432 Greg Kroah-Hartman
2014-09-03 22:07 ` [PATCH 3.16 110/125] ARM: OMAP2+: hwmod: Rearm wake-up interrupts for DT when MUSB is idled Greg Kroah-Hartman
2014-09-03 22:07 ` [PATCH 3.16 111/125] USB: ftdi_sio: add Basic Micro ATOM Nano USB2Serial PID Greg Kroah-Hartman
2014-09-03 22:07 ` [PATCH 3.16 113/125] USB: whiteheat: Added bounds checking for bulk command response Greg Kroah-Hartman
2014-09-03 22:07 ` [PATCH 3.16 114/125] usb: ehci: using wIndex + 1 for hub port Greg Kroah-Hartman
2014-09-03 22:07 ` [PATCH 3.16 115/125] usb: hub: Prevent hub autosuspend if usbcore.autosuspend is -1 Greg Kroah-Hartman
2014-09-03 22:07 ` [PATCH 3.16 116/125] usbcore: Fix wrong device in an error message in hub_port_connect() Greg Kroah-Hartman
2014-09-03 22:07 ` [PATCH 3.16 117/125] NFSD: Decrease nfsd_users in nfsd_startup_generic fail Greg Kroah-Hartman
2014-09-03 22:07 ` [PATCH 3.16 118/125] NFS: Fix /proc/fs/nfsfs/servers and /proc/fs/nfsfs/volumes Greg Kroah-Hartman
2014-09-03 22:07 ` [PATCH 3.16 119/125] nfs3_list_one_acl(): check get_acl() result with IS_ERR_OR_NULL Greg Kroah-Hartman
2014-09-03 22:07 ` [PATCH 3.16 120/125] nfs: reject changes to resvport and sharecache during remount Greg Kroah-Hartman
2014-09-03 22:07 ` [PATCH 3.16 121/125] svcrdma: Select NFSv4.1 backchannel transport based on forward channel Greg Kroah-Hartman
2014-09-03 22:07 ` [PATCH 3.16 122/125] NFSv3: Fix another acl regression Greg Kroah-Hartman
2014-09-03 22:08 ` [PATCH 3.16 123/125] NFSv4: Dont clear the open state when we just did an OPEN_DOWNGRADE Greg Kroah-Hartman
2014-09-03 22:08 ` [PATCH 3.16 124/125] NFSv4: Fix problems with close in the presence of a delegation Greg Kroah-Hartman
2014-09-03 22:08 ` [PATCH 3.16 125/125] vm_is_stack: use for_each_thread() rather then buggy while_each_thread() Greg Kroah-Hartman
2014-09-03 23:44 ` [PATCH 3.16 000/125] 3.16.2-stable review Greg Kroah-Hartman
2014-09-04  4:52   ` Guenter Roeck
2014-09-04 13:40 ` Shuah Khan
2014-09-04 14:00   ` 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=20140903220626.316562512@linuxfoundation.org \
    --to=gregkh@linuxfoundation.org \
    --cc=clm@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).