https://github.com/torvalds/linux
Revision 914ee295af418e936ec20a08c1663eaabe4cd07a authored by Xin Zhong on 09 December 2010, 09:30:14 UTC, committed by Chris Mason on 10 December 2010, 21:29:10 UTC
This problem is found in meego testing:
http://bugs.meego.com/show_bug.cgi?id=6672
A file in btrfs is mmaped and the mmaped buffer is passed to pwrite to write to the same page
of the same file. In btrfs_file_aio_write(), the pages is locked by prepare_pages(). So when
btrfs_copy_from_user() is called, page fault happens and the same page needs to be locked again
in filemap_fault(). The fix is to move iov_iter_fault_in_readable() before prepage_pages() to make page
fault happen before pages are locked. And also disable page fault in critical region in
btrfs_copy_from_user().

Reviewed-by: Yan, Zheng<zheng.z.yan@intel.com>
Signed-off-by: Zhong, Xin <xin.zhong@intel.com>
Signed-off-by: Chris Mason <chris.mason@oracle.com>
1 parent f106e82
Raw File
Tip revision: 914ee295af418e936ec20a08c1663eaabe4cd07a authored by Xin Zhong on 09 December 2010, 09:30:14 UTC
Btrfs: pwrite blocked when writing from the mmaped buffer of the same page
Tip revision: 914ee29
Kconfig
config BTRFS_FS
	tristate "Btrfs filesystem (EXPERIMENTAL) Unstable disk format"
	depends on EXPERIMENTAL
	select LIBCRC32C
	select ZLIB_INFLATE
	select ZLIB_DEFLATE
	help
	  Btrfs is a new filesystem with extents, writable snapshotting,
	  support for multiple devices and many more features.

	  Btrfs is highly experimental, and THE DISK FORMAT IS NOT YET
	  FINALIZED.  You should say N here unless you are interested in
	  testing Btrfs with non-critical data.

	  To compile this file system support as a module, choose M here. The
	  module will be called btrfs.

	  If unsure, say N.

config BTRFS_FS_POSIX_ACL
	bool "Btrfs POSIX Access Control Lists"
	depends on BTRFS_FS
	select FS_POSIX_ACL
	help
	  POSIX Access Control Lists (ACLs) support permissions for users and
	  groups beyond the owner/group/world scheme.

	  To learn more about Access Control Lists, visit the POSIX ACLs for
	  Linux website <http://acl.bestbits.at/>.

	  If you don't know what Access Control Lists are, say N
back to top