diff options
author | Chris Mason <mason@suse.com> | 2006-02-01 06:06:49 -0500 |
---|---|---|
committer | Linus Torvalds <torvalds@g5.osdl.org> | 2006-02-01 11:53:26 -0500 |
commit | e0e851cf30f1a9bd2e2a7624e9810378d6a2b072 (patch) | |
tree | a8cf33d9b22594fb5c1094bd8b15f2f315b53f2d /fs/reiserfs/inode.c | |
parent | fc5cd582e9c934ddaf6f310179488932cd154794 (diff) |
[PATCH] reiserfs: reiserfs hang and performance fix for data=journal mode
In data=journal mode, reiserfs writepage needs to make sure not to trigger
transactions while being run under PF_MEMALLOC. This patch makes sure to
redirty the page instead of forcing a transaction start in this case.
Also, calling filemap_fdata* in order to trigger io on the block device can
cause lock inversions on the page lock. Instead, do simple batching from
flush_commit_list.
Signed-off-by: Chris Mason <mason@suse.com>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Diffstat (limited to 'fs/reiserfs/inode.c')
-rw-r--r-- | fs/reiserfs/inode.c | 7 |
1 files changed, 7 insertions, 0 deletions
diff --git a/fs/reiserfs/inode.c b/fs/reiserfs/inode.c index 60e2f2344703..b33d67bba2fd 100644 --- a/fs/reiserfs/inode.c +++ b/fs/reiserfs/inode.c | |||
@@ -2363,6 +2363,13 @@ static int reiserfs_write_full_page(struct page *page, | |||
2363 | int bh_per_page = PAGE_CACHE_SIZE / s->s_blocksize; | 2363 | int bh_per_page = PAGE_CACHE_SIZE / s->s_blocksize; |
2364 | th.t_trans_id = 0; | 2364 | th.t_trans_id = 0; |
2365 | 2365 | ||
2366 | /* no logging allowed when nonblocking or from PF_MEMALLOC */ | ||
2367 | if (checked && (current->flags & PF_MEMALLOC)) { | ||
2368 | redirty_page_for_writepage(wbc, page); | ||
2369 | unlock_page(page); | ||
2370 | return 0; | ||
2371 | } | ||
2372 | |||
2366 | /* The page dirty bit is cleared before writepage is called, which | 2373 | /* The page dirty bit is cleared before writepage is called, which |
2367 | * means we have to tell create_empty_buffers to make dirty buffers | 2374 | * means we have to tell create_empty_buffers to make dirty buffers |
2368 | * The page really should be up to date at this point, so tossing | 2375 | * The page really should be up to date at this point, so tossing |