public inbox for linux-kernel@vger.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, Jan Kara <jack@suse.com>,
	Theodore Tso <tytso@mit.edu>
Subject: [PATCH 4.4 146/163] ext4: fix races between page faults and hole punching
Date: Mon,  2 May 2016 17:12:54 -0700	[thread overview]
Message-ID: <20160503000513.272749552@linuxfoundation.org> (raw)
In-Reply-To: <20160503000508.556845508@linuxfoundation.org>

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

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

From: Jan Kara <jack@suse.com>

commit ea3d7209ca01da209cda6f0dea8be9cc4b7a933b upstream.

Currently, page faults and hole punching are completely unsynchronized.
This can result in page fault faulting in a page into a range that we
are punching after truncate_pagecache_range() has been called and thus
we can end up with a page mapped to disk blocks that will be shortly
freed. Filesystem corruption will shortly follow. Note that the same
race is avoided for truncate by checking page fault offset against
i_size but there isn't similar mechanism available for punching holes.

Fix the problem by creating new rw semaphore i_mmap_sem in inode and
grab it for writing over truncate, hole punching, and other functions
removing blocks from extent tree and for read over page faults. We
cannot easily use i_data_sem for this since that ranks below transaction
start and we need something ranking above it so that it can be held over
the whole truncate / hole punching operation. Also remove various
workarounds we had in the code to reduce race window when page fault
could have created pages with stale mapping information.

Signed-off-by: Jan Kara <jack@suse.com>
Signed-off-by: Theodore Ts'o <tytso@mit.edu>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

---
 fs/ext4/ext4.h     |   10 ++++++++
 fs/ext4/extents.c  |   54 ++++++++++++++++++++++++-------------------
 fs/ext4/file.c     |   66 +++++++++++++++++++++++++++++++++++++++++++++--------
 fs/ext4/inode.c    |   36 +++++++++++++++++++++-------
 fs/ext4/super.c    |    1 
 fs/ext4/truncate.h |    2 +
 6 files changed, 127 insertions(+), 42 deletions(-)

--- a/fs/ext4/ext4.h
+++ b/fs/ext4/ext4.h
@@ -933,6 +933,15 @@ struct ext4_inode_info {
 	 * by other means, so we have i_data_sem.
 	 */
 	struct rw_semaphore i_data_sem;
+	/*
+	 * i_mmap_sem is for serializing page faults with truncate / punch hole
+	 * operations. We have to make sure that new page cannot be faulted in
+	 * a section of the inode that is being punched. We cannot easily use
+	 * i_data_sem for this since we need protection for the whole punch
+	 * operation and i_data_sem ranks below transaction start so we have
+	 * to occasionally drop it.
+	 */
+	struct rw_semaphore i_mmap_sem;
 	struct inode vfs_inode;
 	struct jbd2_inode *jinode;
 
@@ -2507,6 +2516,7 @@ extern int ext4_chunk_trans_blocks(struc
 extern int ext4_zero_partial_blocks(handle_t *handle, struct inode *inode,
 			     loff_t lstart, loff_t lend);
 extern int ext4_page_mkwrite(struct vm_area_struct *vma, struct vm_fault *vmf);
+extern int ext4_filemap_fault(struct vm_area_struct *vma, struct vm_fault *vmf);
 extern qsize_t *ext4_get_reserved_space(struct inode *inode);
 extern void ext4_da_update_reserve_space(struct inode *inode,
 					int used, int quota_claim);
--- a/fs/ext4/extents.c
+++ b/fs/ext4/extents.c
@@ -4770,7 +4770,6 @@ static long ext4_zero_range(struct file
 	int partial_begin, partial_end;
 	loff_t start, end;
 	ext4_lblk_t lblk;
-	struct address_space *mapping = inode->i_mapping;
 	unsigned int blkbits = inode->i_blkbits;
 
 	trace_ext4_zero_range(inode, offset, len, mode);
@@ -4786,17 +4785,6 @@ static long ext4_zero_range(struct file
 	}
 
 	/*
-	 * Write out all dirty pages to avoid race conditions
-	 * Then release them.
-	 */
-	if (mapping->nrpages && mapping_tagged(mapping, PAGECACHE_TAG_DIRTY)) {
-		ret = filemap_write_and_wait_range(mapping, offset,
-						   offset + len - 1);
-		if (ret)
-			return ret;
-	}
-
-	/*
 	 * Round up offset. This is not fallocate, we neet to zero out
 	 * blocks, so convert interior block aligned part of the range to
 	 * unwritten and possibly manually zero out unaligned parts of the
@@ -4856,16 +4844,22 @@ static long ext4_zero_range(struct file
 		flags |= (EXT4_GET_BLOCKS_CONVERT_UNWRITTEN |
 			  EXT4_EX_NOCACHE);
 
-		/* Now release the pages and zero block aligned part of pages*/
-		truncate_pagecache_range(inode, start, end - 1);
-		inode->i_mtime = inode->i_ctime = ext4_current_time(inode);
-
 		/* Wait all existing dio workers, newcomers will block on i_mutex */
 		ext4_inode_block_unlocked_dio(inode);
 		inode_dio_wait(inode);
 
+		/*
+		 * Prevent page faults from reinstantiating pages we have
+		 * released from page cache.
+		 */
+		down_write(&EXT4_I(inode)->i_mmap_sem);
+		/* Now release the pages and zero block aligned part of pages */
+		truncate_pagecache_range(inode, start, end - 1);
+		inode->i_mtime = inode->i_ctime = ext4_current_time(inode);
+
 		ret = ext4_alloc_file_blocks(file, lblk, max_blocks, new_size,
 					     flags, mode);
+		up_write(&EXT4_I(inode)->i_mmap_sem);
 		if (ret)
 			goto out_dio;
 	}
@@ -5524,17 +5518,22 @@ int ext4_collapse_range(struct inode *in
 		goto out_mutex;
 	}
 
-	truncate_pagecache(inode, ioffset);
-
 	/* Wait for existing dio to complete */
 	ext4_inode_block_unlocked_dio(inode);
 	inode_dio_wait(inode);
 
+	/*
+	 * Prevent page faults from reinstantiating pages we have released from
+	 * page cache.
+	 */
+	down_write(&EXT4_I(inode)->i_mmap_sem);
+	truncate_pagecache(inode, ioffset);
+
 	credits = ext4_writepage_trans_blocks(inode);
 	handle = ext4_journal_start(inode, EXT4_HT_TRUNCATE, credits);
 	if (IS_ERR(handle)) {
 		ret = PTR_ERR(handle);
-		goto out_dio;
+		goto out_mmap;
 	}
 
 	down_write(&EXT4_I(inode)->i_data_sem);
@@ -5573,7 +5572,8 @@ int ext4_collapse_range(struct inode *in
 
 out_stop:
 	ext4_journal_stop(handle);
-out_dio:
+out_mmap:
+	up_write(&EXT4_I(inode)->i_mmap_sem);
 	ext4_inode_resume_unlocked_dio(inode);
 out_mutex:
 	mutex_unlock(&inode->i_mutex);
@@ -5660,17 +5660,22 @@ int ext4_insert_range(struct inode *inod
 		goto out_mutex;
 	}
 
-	truncate_pagecache(inode, ioffset);
-
 	/* Wait for existing dio to complete */
 	ext4_inode_block_unlocked_dio(inode);
 	inode_dio_wait(inode);
 
+	/*
+	 * Prevent page faults from reinstantiating pages we have released from
+	 * page cache.
+	 */
+	down_write(&EXT4_I(inode)->i_mmap_sem);
+	truncate_pagecache(inode, ioffset);
+
 	credits = ext4_writepage_trans_blocks(inode);
 	handle = ext4_journal_start(inode, EXT4_HT_TRUNCATE, credits);
 	if (IS_ERR(handle)) {
 		ret = PTR_ERR(handle);
-		goto out_dio;
+		goto out_mmap;
 	}
 
 	/* Expand file to avoid data loss if there is error while shifting */
@@ -5741,7 +5746,8 @@ int ext4_insert_range(struct inode *inod
 
 out_stop:
 	ext4_journal_stop(handle);
-out_dio:
+out_mmap:
+	up_write(&EXT4_I(inode)->i_mmap_sem);
 	ext4_inode_resume_unlocked_dio(inode);
 out_mutex:
 	mutex_unlock(&inode->i_mutex);
--- a/fs/ext4/file.c
+++ b/fs/ext4/file.c
@@ -209,15 +209,18 @@ static int ext4_dax_fault(struct vm_area
 {
 	int result;
 	handle_t *handle = NULL;
-	struct super_block *sb = file_inode(vma->vm_file)->i_sb;
+	struct inode *inode = file_inode(vma->vm_file);
+	struct super_block *sb = inode->i_sb;
 	bool write = vmf->flags & FAULT_FLAG_WRITE;
 
 	if (write) {
 		sb_start_pagefault(sb);
 		file_update_time(vma->vm_file);
+		down_read(&EXT4_I(inode)->i_mmap_sem);
 		handle = ext4_journal_start_sb(sb, EXT4_HT_WRITE_PAGE,
 						EXT4_DATA_TRANS_BLOCKS(sb));
-	}
+	} else
+		down_read(&EXT4_I(inode)->i_mmap_sem);
 
 	if (IS_ERR(handle))
 		result = VM_FAULT_SIGBUS;
@@ -228,8 +231,10 @@ static int ext4_dax_fault(struct vm_area
 	if (write) {
 		if (!IS_ERR(handle))
 			ext4_journal_stop(handle);
+		up_read(&EXT4_I(inode)->i_mmap_sem);
 		sb_end_pagefault(sb);
-	}
+	} else
+		up_read(&EXT4_I(inode)->i_mmap_sem);
 
 	return result;
 }
@@ -246,10 +251,12 @@ static int ext4_dax_pmd_fault(struct vm_
 	if (write) {
 		sb_start_pagefault(sb);
 		file_update_time(vma->vm_file);
+		down_read(&EXT4_I(inode)->i_mmap_sem);
 		handle = ext4_journal_start_sb(sb, EXT4_HT_WRITE_PAGE,
 				ext4_chunk_trans_blocks(inode,
 							PMD_SIZE / PAGE_SIZE));
-	}
+	} else
+		down_read(&EXT4_I(inode)->i_mmap_sem);
 
 	if (IS_ERR(handle))
 		result = VM_FAULT_SIGBUS;
@@ -260,30 +267,71 @@ static int ext4_dax_pmd_fault(struct vm_
 	if (write) {
 		if (!IS_ERR(handle))
 			ext4_journal_stop(handle);
+		up_read(&EXT4_I(inode)->i_mmap_sem);
 		sb_end_pagefault(sb);
-	}
+	} else
+		up_read(&EXT4_I(inode)->i_mmap_sem);
 
 	return result;
 }
 
 static int ext4_dax_mkwrite(struct vm_area_struct *vma, struct vm_fault *vmf)
 {
-	return dax_mkwrite(vma, vmf, ext4_get_block_dax,
-				ext4_end_io_unwritten);
+	int err;
+	struct inode *inode = file_inode(vma->vm_file);
+
+	sb_start_pagefault(inode->i_sb);
+	file_update_time(vma->vm_file);
+	down_read(&EXT4_I(inode)->i_mmap_sem);
+	err = __dax_mkwrite(vma, vmf, ext4_get_block_dax,
+			    ext4_end_io_unwritten);
+	up_read(&EXT4_I(inode)->i_mmap_sem);
+	sb_end_pagefault(inode->i_sb);
+
+	return err;
+}
+
+/*
+ * Handle write fault for VM_MIXEDMAP mappings. Similarly to ext4_dax_mkwrite()
+ * handler we check for races agaist truncate. Note that since we cycle through
+ * i_mmap_sem, we are sure that also any hole punching that began before we
+ * were called is finished by now and so if it included part of the file we
+ * are working on, our pte will get unmapped and the check for pte_same() in
+ * wp_pfn_shared() fails. Thus fault gets retried and things work out as
+ * desired.
+ */
+static int ext4_dax_pfn_mkwrite(struct vm_area_struct *vma,
+				struct vm_fault *vmf)
+{
+	struct inode *inode = file_inode(vma->vm_file);
+	struct super_block *sb = inode->i_sb;
+	int ret = VM_FAULT_NOPAGE;
+	loff_t size;
+
+	sb_start_pagefault(sb);
+	file_update_time(vma->vm_file);
+	down_read(&EXT4_I(inode)->i_mmap_sem);
+	size = (i_size_read(inode) + PAGE_SIZE - 1) >> PAGE_SHIFT;
+	if (vmf->pgoff >= size)
+		ret = VM_FAULT_SIGBUS;
+	up_read(&EXT4_I(inode)->i_mmap_sem);
+	sb_end_pagefault(sb);
+
+	return ret;
 }
 
 static const struct vm_operations_struct ext4_dax_vm_ops = {
 	.fault		= ext4_dax_fault,
 	.pmd_fault	= ext4_dax_pmd_fault,
 	.page_mkwrite	= ext4_dax_mkwrite,
-	.pfn_mkwrite	= dax_pfn_mkwrite,
+	.pfn_mkwrite	= ext4_dax_pfn_mkwrite,
 };
 #else
 #define ext4_dax_vm_ops	ext4_file_vm_ops
 #endif
 
 static const struct vm_operations_struct ext4_file_vm_ops = {
-	.fault		= filemap_fault,
+	.fault		= ext4_filemap_fault,
 	.map_pages	= filemap_map_pages,
 	.page_mkwrite   = ext4_page_mkwrite,
 };
--- a/fs/ext4/inode.c
+++ b/fs/ext4/inode.c
@@ -3651,6 +3651,15 @@ int ext4_punch_hole(struct inode *inode,
 
 	}
 
+	/* Wait all existing dio workers, newcomers will block on i_mutex */
+	ext4_inode_block_unlocked_dio(inode);
+	inode_dio_wait(inode);
+
+	/*
+	 * Prevent page faults from reinstantiating pages we have released from
+	 * page cache.
+	 */
+	down_write(&EXT4_I(inode)->i_mmap_sem);
 	first_block_offset = round_up(offset, sb->s_blocksize);
 	last_block_offset = round_down((offset + length), sb->s_blocksize) - 1;
 
@@ -3659,10 +3668,6 @@ int ext4_punch_hole(struct inode *inode,
 		truncate_pagecache_range(inode, first_block_offset,
 					 last_block_offset);
 
-	/* Wait all existing dio workers, newcomers will block on i_mutex */
-	ext4_inode_block_unlocked_dio(inode);
-	inode_dio_wait(inode);
-
 	if (ext4_test_inode_flag(inode, EXT4_INODE_EXTENTS))
 		credits = ext4_writepage_trans_blocks(inode);
 	else
@@ -3708,16 +3713,12 @@ int ext4_punch_hole(struct inode *inode,
 	if (IS_SYNC(inode))
 		ext4_handle_sync(handle);
 
-	/* Now release the pages again to reduce race window */
-	if (last_block_offset > first_block_offset)
-		truncate_pagecache_range(inode, first_block_offset,
-					 last_block_offset);
-
 	inode->i_mtime = inode->i_ctime = ext4_current_time(inode);
 	ext4_mark_inode_dirty(handle, inode);
 out_stop:
 	ext4_journal_stop(handle);
 out_dio:
+	up_write(&EXT4_I(inode)->i_mmap_sem);
 	ext4_inode_resume_unlocked_dio(inode);
 out_mutex:
 	mutex_unlock(&inode->i_mutex);
@@ -4851,6 +4852,7 @@ int ext4_setattr(struct dentry *dentry,
 			} else
 				ext4_wait_for_tail_page_commit(inode);
 		}
+		down_write(&EXT4_I(inode)->i_mmap_sem);
 		/*
 		 * Truncate pagecache after we've waited for commit
 		 * in data=journal mode to make pages freeable.
@@ -4858,6 +4860,7 @@ int ext4_setattr(struct dentry *dentry,
 		truncate_pagecache(inode, inode->i_size);
 		if (shrink)
 			ext4_truncate(inode);
+		up_write(&EXT4_I(inode)->i_mmap_sem);
 	}
 
 	if (!rc) {
@@ -5306,6 +5309,8 @@ int ext4_page_mkwrite(struct vm_area_str
 
 	sb_start_pagefault(inode->i_sb);
 	file_update_time(vma->vm_file);
+
+	down_read(&EXT4_I(inode)->i_mmap_sem);
 	/* Delalloc case is easy... */
 	if (test_opt(inode->i_sb, DELALLOC) &&
 	    !ext4_should_journal_data(inode) &&
@@ -5375,6 +5380,19 @@ retry_alloc:
 out_ret:
 	ret = block_page_mkwrite_return(ret);
 out:
+	up_read(&EXT4_I(inode)->i_mmap_sem);
 	sb_end_pagefault(inode->i_sb);
 	return ret;
 }
+
+int ext4_filemap_fault(struct vm_area_struct *vma, struct vm_fault *vmf)
+{
+	struct inode *inode = file_inode(vma->vm_file);
+	int err;
+
+	down_read(&EXT4_I(inode)->i_mmap_sem);
+	err = filemap_fault(vma, vmf);
+	up_read(&EXT4_I(inode)->i_mmap_sem);
+
+	return err;
+}
--- a/fs/ext4/super.c
+++ b/fs/ext4/super.c
@@ -958,6 +958,7 @@ static void init_once(void *foo)
 	INIT_LIST_HEAD(&ei->i_orphan);
 	init_rwsem(&ei->xattr_sem);
 	init_rwsem(&ei->i_data_sem);
+	init_rwsem(&ei->i_mmap_sem);
 	inode_init_once(&ei->vfs_inode);
 }
 
--- a/fs/ext4/truncate.h
+++ b/fs/ext4/truncate.h
@@ -10,8 +10,10 @@
  */
 static inline void ext4_truncate_failed_write(struct inode *inode)
 {
+	down_write(&EXT4_I(inode)->i_mmap_sem);
 	truncate_inode_pages(inode->i_mapping, inode->i_size);
 	ext4_truncate(inode);
+	up_write(&EXT4_I(inode)->i_mmap_sem);
 }
 
 /*

  parent reply	other threads:[~2016-05-03  0:33 UTC|newest]

Thread overview: 156+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-05-03  0:10 [PATCH 4.4 000/163] 4.4.9-stable review Greg Kroah-Hartman
2016-05-03  0:10 ` [PATCH 4.4 001/163] block: partition: initialize percpuref before sending out KOBJ_ADD Greg Kroah-Hartman
2016-05-03  0:10 ` [PATCH 4.4 002/163] block: loop: fix filesystem corruption in case of aio/dio Greg Kroah-Hartman
2016-05-03  0:10 ` [PATCH 4.4 003/163] x86/mce: Avoid using object after free in genpool Greg Kroah-Hartman
2016-05-03  0:10 ` [PATCH 4.4 004/163] kvm: x86: do not leak guest xcr0 into host interrupt handlers Greg Kroah-Hartman
2016-05-03  0:10 ` [PATCH 4.4 005/163] KVM: arm/arm64: Handle forward time correction gracefully Greg Kroah-Hartman
2016-05-03  0:10 ` [PATCH 4.4 006/163] ARM: dts: AM43x-epos: Fix clk parent for synctimer Greg Kroah-Hartman
2016-05-03  0:10 ` [PATCH 4.4 007/163] ARM: mvebu: Correct unit address for linksys Greg Kroah-Hartman
2016-05-03  0:10 ` [PATCH 4.4 008/163] ARM: OMAP2: Fix up interconnect barrier initialization for DRA7 Greg Kroah-Hartman
2016-05-03  0:10 ` [PATCH 4.4 009/163] ARM: OMAP2+: hwmod: Fix updating of sysconfig register Greg Kroah-Hartman
2016-05-03  0:10 ` [PATCH 4.4 010/163] assoc_array: dont call compare_object() on a node Greg Kroah-Hartman
2016-05-03  0:10 ` [PATCH 4.4 011/163] usb: xhci: applying XHCI_PME_STUCK_QUIRK to Intel BXT B0 host Greg Kroah-Hartman
2016-05-03  0:10 ` [PATCH 4.4 012/163] xhci: resume USB 3 roothub first Greg Kroah-Hartman
2016-05-03  0:10 ` [PATCH 4.4 013/163] usb: xhci: fix wild pointers in xhci_mem_cleanup Greg Kroah-Hartman
2016-05-03  0:10 ` [PATCH 4.4 014/163] xhci: fix 10 second timeout on removal of PCI hotpluggable xhci controllers Greg Kroah-Hartman
2016-05-03  0:10 ` [PATCH 4.4 015/163] usb: hcd: out of bounds access in for_each_companion Greg Kroah-Hartman
2016-05-03  0:10 ` [PATCH 4.4 016/163] usb: gadget: f_fs: Fix use-after-free Greg Kroah-Hartman
2016-05-03  0:10 ` [PATCH 4.4 017/163] dm cache metadata: fix READ_LOCK macros and cleanup WRITE_LOCK macros Greg Kroah-Hartman
2016-05-03  0:10 ` [PATCH 4.4 018/163] dm cache metadata: fix cmd_read_lock() acquiring write lock Greg Kroah-Hartman
2016-05-03  0:10 ` [PATCH 4.4 019/163] lib: lz4: fixed zram with lz4 on big endian machines Greg Kroah-Hartman
2016-05-03  0:10 ` [PATCH 4.4 020/163] debugfs: Make automount point inodes permanently empty Greg Kroah-Hartman
2016-05-03  0:10 ` [PATCH 4.4 021/163] dmaengine: dw: fix master selection Greg Kroah-Hartman
2016-05-03  0:10 ` [PATCH 4.4 022/163] dmaengine: hsu: correct use of channel status register Greg Kroah-Hartman
2016-05-03  0:10 ` [PATCH 4.4 023/163] dmaengine: pxa_dma: fix the maximum requestor line Greg Kroah-Hartman
2016-05-03  0:10 ` [PATCH 4.4 024/163] sched/cgroup: Fix/cleanup cgroup teardown/init Greg Kroah-Hartman
2016-05-03  0:10 ` [PATCH 4.4 025/163] arm64: Honour !PTE_WRITE in set_pte_at() for kernel mappings Greg Kroah-Hartman
2016-05-03  0:10 ` [PATCH 4.4 026/163] arm64: Update PTE_RDONLY in set_pte_at() for PROT_NONE permission Greg Kroah-Hartman
2016-05-03  0:10 ` [PATCH 4.4 027/163] x86/mm/xen: Suppress hugetlbfs in PV guests Greg Kroah-Hartman
2016-05-03  0:10 ` [PATCH 4.4 028/163] x86 EDAC, sb_edac.c: Repair damage introduced when "fixing" channel address Greg Kroah-Hartman
2016-05-03  0:10 ` [PATCH 4.4 029/163] ALSA: hda - Dont trust the reported actual power state Greg Kroah-Hartman
2016-05-03  0:10 ` [PATCH 4.4 030/163] ALSA: hda/realtek - Add ALC3234 headset mode for Optiplex 9020m Greg Kroah-Hartman
2016-05-03  0:10 ` [PATCH 4.4 031/163] ALSA: hda - Keep powering up ADCs on Cirrus codecs Greg Kroah-Hartman
2016-05-03  0:11 ` [PATCH 4.4 032/163] ALSA: hda - add PCI ID for Intel Broxton-T Greg Kroah-Hartman
2016-05-03  0:11 ` [PATCH 4.4 033/163] ALSA: pcxhr: Fix missing mutex unlock Greg Kroah-Hartman
2016-05-03  0:11 ` [PATCH 4.4 034/163] ALSA: hda - Add dock support for ThinkPad X260 Greg Kroah-Hartman
2016-05-03  0:11 ` [PATCH 4.4 035/163] asm-generic/futex: Re-enable preemption in futex_atomic_cmpxchg_inatomic() Greg Kroah-Hartman
2016-05-03  0:11 ` [PATCH 4.4 036/163] futex: Handle unlock_pi race gracefully Greg Kroah-Hartman
2016-05-03  0:11 ` [PATCH 4.4 037/163] futex: Acknowledge a new waiter in counter before plist Greg Kroah-Hartman
2016-05-03  0:11 ` [PATCH 4.4 038/163] drm/nouveau/core: use vzalloc for allocating ramht Greg Kroah-Hartman
2016-05-03  0:11 ` [PATCH 4.4 039/163] drm/qxl: fix cursor position with non-zero hotspot Greg Kroah-Hartman
2016-05-03  0:11 ` [PATCH 4.4 041/163] Revert "drm/radeon: disable runtime pm on PX laptops without dGPU power control" Greg Kroah-Hartman
2016-05-03  0:11 ` [PATCH 4.4 042/163] Revert "drm/amdgpu: " Greg Kroah-Hartman
2016-05-03  0:11 ` [PATCH 4.4 043/163] cpufreq: intel_pstate: Fix processing for turbo activation ratio Greg Kroah-Hartman
2016-05-03  0:11 ` [PATCH 4.4 044/163] s390/pci: add extra padding to function measurement block Greg Kroah-Hartman
2016-05-03  0:11 ` [PATCH 4.4 045/163] iwlwifi: pcie: lower the debug level for RSA semaphore access Greg Kroah-Hartman
2016-05-03  0:11 ` [PATCH 4.4 046/163] iwlwifi: mvm: fix memory leak in paging Greg Kroah-Hartman
2016-05-03  0:11 ` [PATCH 4.4 047/163] crypto: ccp - Prevent information leakage on export Greg Kroah-Hartman
2016-05-03  0:11 ` [PATCH 4.4 048/163] crypto: sha1-mb - use corrcet pointer while completing jobs Greg Kroah-Hartman
2016-05-03  0:11 ` [PATCH 4.4 049/163] crypto: talitos - fix crash in talitos_cra_init() Greg Kroah-Hartman
2016-05-03  0:11 ` [PATCH 4.4 050/163] crypto: talitos - fix AEAD tcrypt tests Greg Kroah-Hartman
2016-05-03  0:11 ` [PATCH 4.4 051/163] powerpc: scan_features() updates incorrect bits for REAL_LE Greg Kroah-Hartman
2016-05-03  0:11 ` [PATCH 4.4 052/163] powerpc: Update cpu_user_features2 in scan_features() Greg Kroah-Hartman
2016-05-03  0:11 ` [PATCH 4.4 053/163] powerpc: Update TM user feature bits " Greg Kroah-Hartman
2016-05-03  0:11 ` [PATCH 4.4 054/163] nl80211: check netlink protocol in socket release notification Greg Kroah-Hartman
2016-05-03  0:11 ` [PATCH 4.4 055/163] netlink: dont send NETLINK_URELEASE for unbound sockets Greg Kroah-Hartman
2016-05-03  0:11 ` [PATCH 4.4 056/163] Input: gtco - fix crash on detecting device without endpoints Greg Kroah-Hartman
2016-05-03  0:11 ` [PATCH 4.4 057/163] Input: pmic8xxx-pwrkey - fix algorithm for converting trigger delay Greg Kroah-Hartman
2016-05-03  0:11 ` [PATCH 4.4 058/163] xen kconfig: dont "select INPUT_XEN_KBDDEV_FRONTEND" Greg Kroah-Hartman
2016-05-03  0:11 ` [PATCH 4.4 059/163] pinctrl: mediatek: correct debounce time unit in mtk_gpio_set_debounce Greg Kroah-Hartman
2016-05-03  0:11 ` [PATCH 4.4 060/163] pinctrl: single: Fix pcs_parse_bits_in_pinctrl_entry to use __ffs than ffs Greg Kroah-Hartman
2016-05-03  0:11 ` [PATCH 4.4 061/163] iommu/amd: Fix checking of pci dma aliases Greg Kroah-Hartman
2016-05-03  0:11 ` [PATCH 4.4 062/163] iommu/dma: Restore scatterlist offsets correctly Greg Kroah-Hartman
2016-05-03  0:11 ` [PATCH 4.4 064/163] drm/amdgpu: use defines for CRTCs and AMFT blocks Greg Kroah-Hartman
2016-05-03  0:11 ` [PATCH 4.4 065/163] drm/amdgpu: bump the afmt limit for CZ, ST, Polaris Greg Kroah-Hartman
2016-05-03  0:11 ` [PATCH 4.4 066/163] amdgpu/uvd: add uvd fw version for amdgpu Greg Kroah-Hartman
2016-05-03  0:11 ` [PATCH 4.4 067/163] drm/amdgpu: fix regression on CIK (v2) Greg Kroah-Hartman
2016-05-03  0:11 ` [PATCH 4.4 068/163] drm/radeon: add a quirk for a XFX R9 270X Greg Kroah-Hartman
2016-05-03  0:11 ` [PATCH 4.4 069/163] drm/radeon: fix initial connector audio value Greg Kroah-Hartman
2016-05-03  0:11 ` [PATCH 4.4 071/163] drm/radeon: fix vertical bars appear on monitor (v2) Greg Kroah-Hartman
2016-05-03  0:11 ` [PATCH 4.4 072/163] drm: Loongson-3 doesnt fully support wc memory Greg Kroah-Hartman
2016-05-03  0:11 ` [PATCH 4.4 073/163] drm/nouveau/gr/gf100: select a stream master to fixup tfb offset queries Greg Kroah-Hartman
2016-05-03  0:11 ` [PATCH 4.4 075/163] drm/dp/mst: Restore primary hub guid on resume Greg Kroah-Hartman
2016-05-03  0:11 ` [PATCH 4.4 076/163] drm/dp/mst: Get validated port ref in drm_dp_update_payload_part1() Greg Kroah-Hartman
2016-05-03  0:11 ` [PATCH 4.4 077/163] pwm: brcmstb: Fix check of devm_ioremap_resource() return code Greg Kroah-Hartman
2016-05-03  0:11 ` [PATCH 4.4 080/163] drm/amdkfd: uninitialized variable in dbgdev_wave_control_set_registers() Greg Kroah-Hartman
2016-05-03  0:11 ` [PATCH 4.4 081/163] drm/i915: Fixup the free space logic in ring_prepare Greg Kroah-Hartman
2016-05-03  0:11 ` [PATCH 4.4 083/163] perf intel-pt: Fix segfault tracing transactions Greg Kroah-Hartman
2016-05-03  0:11 ` [PATCH 4.4 084/163] i2c: cpm: Fix build break due to incompatible pointer types Greg Kroah-Hartman
2016-05-03  0:11 ` [PATCH 4.4 085/163] i2c: exynos5: Fix possible ABBA deadlock by keeping I2C clock prepared Greg Kroah-Hartman
2016-05-03  0:11 ` [PATCH 4.4 086/163] toshiba_acpi: Fix regression caused by hotkey enabling value Greg Kroah-Hartman
2016-05-03  0:11 ` [PATCH 4.4 087/163] EDAC: i7core, sb_edac: Dont return NOTIFY_BAD from mce_decoder callback Greg Kroah-Hartman
2016-05-03  0:11 ` [PATCH 4.4 088/163] ASoC: s3c24xx: use const snd_soc_component_driver pointer Greg Kroah-Hartman
2016-05-03  0:11 ` [PATCH 4.4 089/163] ASoC: ssm4567: Reset device before regcache_sync() Greg Kroah-Hartman
2016-05-03  0:11 ` [PATCH 4.4 090/163] ASoC: dapm: Make sure we have a card when displaying component widgets Greg Kroah-Hartman
2016-05-03  0:11 ` [PATCH 4.4 091/163] ASoC: rt5640: Correct the digital interface data select Greg Kroah-Hartman
2016-05-03  0:12 ` [PATCH 4.4 092/163] [media] vb2-memops: Fix over allocation of frame vectors Greg Kroah-Hartman
2016-05-03  0:12 ` [PATCH 4.4 093/163] [media] v4l2-dv-timings.h: fix polarity for 4k formats Greg Kroah-Hartman
2016-05-03  0:12 ` [PATCH 4.4 094/163] cxl: Keep IRQ mappings on context teardown Greg Kroah-Hartman
2016-05-03  0:12 ` [PATCH 4.4 095/163] IB/mlx5: Expose correct max_sge_rd limit Greg Kroah-Hartman
2016-05-03  0:12 ` [PATCH 4.4 096/163] IB/security: Restrict use of the write() interface Greg Kroah-Hartman
2016-05-03  0:12 ` [PATCH 4.4 097/163] efi: Fix out-of-bounds read in variable_matches() Greg Kroah-Hartman
2016-05-03  0:12 ` [PATCH 4.4 098/163] efi: Expose non-blocking set_variable() wrapper to efivars Greg Kroah-Hartman
2016-05-03  0:12 ` [PATCH 4.4 099/163] x86/apic: Handle zero vector gracefully in clear_vector_irq() Greg Kroah-Hartman
2016-05-03  0:12 ` [PATCH 4.4 100/163] workqueue: fix ghost PENDING flag while doing MQ IO Greg Kroah-Hartman
2016-05-03  0:12 ` [PATCH 4.4 101/163] slub: clean up code for kmem cgroup support to kmem_cache_free_bulk Greg Kroah-Hartman
2016-05-03  0:12 ` [PATCH 4.4 102/163] cgroup, cpuset: replace cpuset_post_attach_flush() with cgroup_subsys->post_attach callback Greg Kroah-Hartman
2016-05-03  0:12 ` [PATCH 4.4 103/163] memcg: relocate charge moving from ->attach to ->post_attach Greg Kroah-Hartman
2016-05-03  0:12 ` [PATCH 4.4 104/163] mm/huge_memory: replace VM_NO_THP VM_BUG_ON with actual VMA check Greg Kroah-Hartman
2016-05-03  0:12 ` [PATCH 4.4 105/163] numa: fix /proc/<pid>/numa_maps for THP Greg Kroah-Hartman
2016-05-03  0:12 ` [PATCH 4.4 106/163] mm: vmscan: reclaim highmem zone if buffer_heads is over limit Greg Kroah-Hartman
2016-05-03  0:12 ` [PATCH 4.4 107/163] mm/hwpoison: fix wrong num_poisoned_pages accounting Greg Kroah-Hartman
2016-05-03  0:12 ` [PATCH 4.4 108/163] cgroup: make sure a parent css isnt freed before its children Greg Kroah-Hartman
2016-05-03  0:12 ` [PATCH 4.4 109/163] USB: usbip: fix potential out-of-bounds write Greg Kroah-Hartman
2016-05-03  0:12 ` [PATCH 4.4 110/163] [media] videobuf2-core: Check user space planes array in dqbuf Greg Kroah-Hartman
2016-05-03  0:12 ` [PATCH 4.4 111/163] [media] videobuf2-v4l2: Verify planes array in buffer dequeueing Greg Kroah-Hartman
2016-05-03  0:12 ` [PATCH 4.4 112/163] Revert "regulator: core: Fix nested locking of supplies" Greg Kroah-Hartman
2016-05-03  0:12 ` [PATCH 4.4 113/163] regulator: core: fix regulator_lock_supply regression Greg Kroah-Hartman
2016-05-03  0:12 ` [PATCH 4.4 114/163] regulator: core: Ensure we lock all regulators Greg Kroah-Hartman
2016-05-03  0:12 ` [PATCH 4.4 115/163] regulator: core: Fix nested locking of supplies Greg Kroah-Hartman
2016-05-03  0:12 ` [PATCH 4.4 116/163] locking/mcs: Fix mcs_spin_lock() ordering Greg Kroah-Hartman
2016-05-03  0:12 ` [PATCH 4.4 117/163] spi/rockchip: Make sure spi clk is on in rockchip_spi_set_cs Greg Kroah-Hartman
2016-05-03  0:12 ` [PATCH 4.4 118/163] irqchip/sunxi-nmi: Fix error check of of_io_request_and_map() Greg Kroah-Hartman
2016-05-03  0:12 ` [PATCH 4.4 119/163] irqchip/mxs: " Greg Kroah-Hartman
2016-05-03  0:12 ` [PATCH 4.4 120/163] regulator: s5m8767: fix get_register() error handling Greg Kroah-Hartman
2016-05-03  0:12 ` [PATCH 4.4 121/163] paride: make verbose parameter an int again Greg Kroah-Hartman
2016-05-03  0:12 ` [PATCH 4.4 122/163] scsi_dh: force modular build if SCSI is a module Greg Kroah-Hartman
2016-05-03  0:12 ` [PATCH 4.4 123/163] fbdev: da8xx-fb: fix videomodes of lcd panels Greg Kroah-Hartman
2016-05-03  0:12 ` [PATCH 4.4 124/163] lib/mpi: Endianness fix Greg Kroah-Hartman
2016-05-03  0:12 ` [PATCH 4.4 125/163] misc/bmp085: Enable building as a module Greg Kroah-Hartman
2016-05-03  0:12 ` [PATCH 4.4 126/163] misc: mic/scif: fix wrap around tests Greg Kroah-Hartman
2016-05-03  0:12 ` [PATCH 4.4 127/163] PM / OPP: Initialize u_volt_min/max to a valid value Greg Kroah-Hartman
2016-05-03  0:12 ` [PATCH 4.4 128/163] PM / Domains: Fix removal of a subdomain Greg Kroah-Hartman
2016-05-03  0:12 ` [PATCH 4.4 129/163] rtc: hym8563: fix invalid year calculation Greg Kroah-Hartman
2016-05-03  0:12 ` [PATCH 4.4 131/163] rtc: ds1685: passing bogus values to irq_restore Greg Kroah-Hartman
2016-05-03  0:12 ` [PATCH 4.4 132/163] rtc: rx8025: remove rv8803 id Greg Kroah-Hartman
2016-05-03  0:12 ` [PATCH 4.4 133/163] rtc: max77686: Properly handle regmap_irq_get_virq() error code Greg Kroah-Hartman
2016-05-03  0:12 ` [PATCH 4.4 134/163] drivers/misc/ad525x_dpot: AD5274 fix RDAC read back errors Greg Kroah-Hartman
2016-05-03  0:12 ` [PATCH 4.4 135/163] perf evlist: Reference count the cpu and thread maps at set_maps() Greg Kroah-Hartman
2016-05-03  0:12 ` [PATCH 4.4 136/163] spi: rockchip: modify DMA max burst to 1 Greg Kroah-Hartman
2016-05-03  0:12 ` [PATCH 4.4 137/163] x86/mm/kmmio: Fix mmiotrace for hugepages Greg Kroah-Hartman
2016-05-03  0:12 ` [PATCH 4.4 138/163] ext4: fix NULL pointer dereference in ext4_mark_inode_dirty() Greg Kroah-Hartman
2016-05-03  0:12 ` [PATCH 4.4 139/163] serial: sh-sci: Remove cpufreq notifier to fix crash/deadlock Greg Kroah-Hartman
2016-05-03  0:12 ` [PATCH 4.4 140/163] mtd: spi-nor: remove micron_quad_enable() Greg Kroah-Hartman
2016-05-03  0:12 ` [PATCH 4.4 141/163] mtd: brcmnand: Fix v7.1 register offsets Greg Kroah-Hartman
2016-05-03  0:12 ` [PATCH 4.4 143/163] perf hists browser: Only offer symbol scripting when a symbol is under the cursor Greg Kroah-Hartman
2016-05-03  0:12 ` [PATCH 4.4 145/163] perf stat: Document --detailed option Greg Kroah-Hartman
2016-05-03  0:12 ` Greg Kroah-Hartman [this message]
2016-05-03  0:12 ` [PATCH 4.4 147/163] ext4: move unlocked dio protection from ext4_alloc_file_blocks() Greg Kroah-Hartman
2016-05-03  0:12 ` [PATCH 4.4 148/163] ext4: fix races between buffered IO and collapse / insert range Greg Kroah-Hartman
2016-05-03  0:12 ` [PATCH 4.4 149/163] ext4: fix races of writeback with punch hole and zero range Greg Kroah-Hartman
2016-05-03  0:12 ` [PATCH 4.4 151/163] ARM: prima2: always enable reset controller Greg Kroah-Hartman
2016-05-03  0:13 ` [PATCH 4.4 152/163] ARM: EXYNOS: select THERMAL_OF Greg Kroah-Hartman
2016-05-03  0:13 ` [PATCH 4.4 153/163] ARM: dts: armada-375: use armada-370-sata for SATA Greg Kroah-Hartman
2016-05-03  0:13 ` [PATCH 4.4 154/163] ARM: dts: pxa: fix dma engine node to pxa3xx-nand Greg Kroah-Hartman
2016-05-03  0:13 ` [PATCH 4.4 155/163] bus: imx-weim: Take the status property value into account Greg Kroah-Hartman
2016-05-03  0:13 ` [PATCH 4.4 156/163] jme: Do not enable NIC WoL functions on S0 Greg Kroah-Hartman
2016-05-03  0:13 ` [PATCH 4.4 157/163] jme: Fix device PM wakeup API usage Greg Kroah-Hartman
2016-05-03  0:13 ` [PATCH 4.4 158/163] unbreak allmodconfig KCONFIG_ALLCONFIG= Greg Kroah-Hartman
2016-05-03  0:13 ` [PATCH 4.4 159/163] thermal: rockchip: fix a impossible condition caused by the warning Greg Kroah-Hartman
2016-05-03  0:13 ` [PATCH 4.4 160/163] sunrpc/cache: drop reference when sunrpc_cache_pipe_upcall() detects a race Greg Kroah-Hartman
2016-05-03  0:13 ` [PATCH 4.4 161/163] megaraid_sas: add missing curly braces in ioctl handler Greg Kroah-Hartman
2016-05-03  0:13 ` [PATCH 4.4 162/163] stm class: Select CONFIG_SRCU Greg Kroah-Hartman
2016-05-03  0:13 ` [PATCH 4.4 163/163] extcon: max77843: Use correct size for reading the interrupt register Greg Kroah-Hartman
2016-05-03  7:27 ` [PATCH 4.4 000/163] 4.4.9-stable review Guenter Roeck
2016-05-03 18:21   ` Greg Kroah-Hartman
2016-05-03 14:59 ` Shuah Khan

Reply instructions:

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

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

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

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

  git send-email \
    --in-reply-to=20160503000513.272749552@linuxfoundation.org \
    --to=gregkh@linuxfoundation.org \
    --cc=jack@suse.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=stable@vger.kernel.org \
    --cc=tytso@mit.edu \
    /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