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 BEFS_FS
	tristate "BeOS file system (BeFS) support (read only) (EXPERIMENTAL)"
	depends on BLOCK && EXPERIMENTAL
	select NLS
	help
	  The BeOS File System (BeFS) is the native file system of Be, Inc's
	  BeOS. Notable features include support for arbitrary attributes
	  on files and directories, and database-like indices on selected
	  attributes. (Also note that this driver doesn't make those features
	  available at this time). It is a 64 bit filesystem, so it supports
	  extremely large volumes and files.

	  If you use this filesystem, you should also say Y to at least one
	  of the NLS (native language support) options below.

	  If you don't know what this is about, say N.

	  To compile this as a module, choose M here: the module will be
	  called befs.

config BEFS_DEBUG
	bool "Debug BeFS"
	depends on BEFS_FS
	help
	  If you say Y here, you can use the 'debug' mount option to enable
	  debugging output from the driver.
back to top