linux/fs/ext4
Theodore Ts'o 47564bfb95 ext4: grab page before starting transaction handle in write_begin()
The grab_cache_page_write_begin() function can potentially sleep for a
long time, since it may need to do memory allocation which can block
if the system is under significant memory pressure, and because it may
be blocked on page writeback.  If it does take a long time to grab the
page, it's better that we not hold an active jbd2 handle.

So grab a handle on the page first, and _then_ start the transaction
handle.

This commit fixes the following long transaction handle hold time:

postmark-2917  [000] ....   196.435786: jbd2_handle_stats: dev 254,32
   tid 570 type 2 line_no 2541 interval 311 sync 0 requested_blocks 1
   dirtied_blocks 0

Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>
Reviewed-by: Jan Kara <jack@suse.cz>
2013-02-09 09:24:14 -05:00
..
acl.c ext4: pass context information to jbd2__journal_start() 2013-02-08 21:59:22 -05:00
acl.h fs: take the ACL checks to common code 2011-07-25 14:30:23 -04:00
balloc.c ext4: check bh in ext4_read_block_bitmap() 2013-01-12 16:33:25 -05:00
bitmap.c ext4: Checksum the block bitmap properly with bigalloc enabled 2012-10-22 00:34:32 -04:00
block_validity.c ext2/3/4: delete unneeded includes of module.h 2012-01-09 13:52:10 +01:00
dir.c ext4: release buffer when checksum failed 2013-01-28 21:23:24 -05:00
ext4_extents.h ext4: rationalize ext4_extents.h inclusion 2012-11-28 13:03:30 -05:00
ext4_jbd2.c ext4: pass context information to jbd2__journal_start() 2013-02-08 21:59:22 -05:00
ext4_jbd2.h ext4: pass context information to jbd2__journal_start() 2013-02-08 21:59:22 -05:00
ext4.h ext4: move the jbd2 wrapper functions out of super.c 2013-02-08 13:00:31 -05:00
extents_status.c ext4: add some tracepoints in extent status tree 2012-11-08 21:57:33 -05:00
extents_status.h ext4: add operations on extent status tree 2012-11-08 21:57:20 -05:00
extents.c ext4: pass context information to jbd2__journal_start() 2013-02-08 21:59:22 -05:00
file.c ext4: pass context information to jbd2__journal_start() 2013-02-08 21:59:22 -05:00
fsync.c ext4: fix an incorrect comment about i_mutex 2012-12-25 13:31:52 -05:00
hash.c ext4: reduce one "if" comparison in ext4_dirhash() 2013-02-01 22:33:21 -05:00
ialloc.c ext4: pass context information to jbd2__journal_start() 2013-02-08 21:59:22 -05:00
indirect.c ext4: pass context information to jbd2__journal_start() 2013-02-08 21:59:22 -05:00
inline.c ext4: pass context information to jbd2__journal_start() 2013-02-08 21:59:22 -05:00
inode.c ext4: grab page before starting transaction handle in write_begin() 2013-02-09 09:24:14 -05:00
ioctl.c ext4: pass context information to jbd2__journal_start() 2013-02-08 21:59:22 -05:00
Kconfig ext4: fix configuration dependencies for ext4 ACLs and security labels 2013-01-06 23:38:44 -05:00
Makefile ext4: Remove CONFIG_EXT4_FS_XATTR 2012-12-10 16:30:43 -05:00
mballoc.c ext4: optimize mballoc for large allocations 2013-02-04 15:08:40 -05:00
mballoc.h ext4: remove unused macro MB_DEFAULT_MAX_GROUPS_TO_SCAN 2012-08-17 10:00:17 -04:00
migrate.c ext4: pass context information to jbd2__journal_start() 2013-02-08 21:59:22 -05:00
mmp.c ext4: use unlikely to improve the efficiency of the kernel 2013-01-12 16:28:47 -05:00
move_extent.c ext4: pass context information to jbd2__journal_start() 2013-02-08 21:59:22 -05:00
namei.c ext4: pass context information to jbd2__journal_start() 2013-02-08 21:59:22 -05:00
page-io.c ext4: fix possible use-after-free with AIO 2013-01-29 22:48:17 -05:00
resize.c ext4: pass context information to jbd2__journal_start() 2013-02-08 21:59:22 -05:00
super.c ext4: pass context information to jbd2__journal_start() 2013-02-08 21:59:22 -05:00
symlink.c ext4: Remove CONFIG_EXT4_FS_XATTR 2012-12-10 16:30:43 -05:00
truncate.h ext4: move common truncate functions to header file 2011-06-27 19:16:04 -04:00
xattr_security.c Merge branch 'for_linus' into for_linus_merged 2012-01-10 11:54:07 -05:00
xattr_trusted.c ext2/3/4: delete unneeded includes of module.h 2012-01-09 13:52:10 +01:00
xattr_user.c ext2/3/4: delete unneeded includes of module.h 2012-01-09 13:52:10 +01:00
xattr.c ext4: pass context information to jbd2__journal_start() 2013-02-08 21:59:22 -05:00
xattr.h ext4: zero out inline data using memset() instead of empty_zero_page 2012-12-11 03:31:49 -05:00