[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>
This commit is contained in:

committed by
Linus Torvalds

parent
fc5cd582e9
commit
e0e851cf30
@@ -2363,6 +2363,13 @@ static int reiserfs_write_full_page(struct page *page,
|
||||
int bh_per_page = PAGE_CACHE_SIZE / s->s_blocksize;
|
||||
th.t_trans_id = 0;
|
||||
|
||||
/* no logging allowed when nonblocking or from PF_MEMALLOC */
|
||||
if (checked && (current->flags & PF_MEMALLOC)) {
|
||||
redirty_page_for_writepage(wbc, page);
|
||||
unlock_page(page);
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* The page dirty bit is cleared before writepage is called, which
|
||||
* means we have to tell create_empty_buffers to make dirty buffers
|
||||
* The page really should be up to date at this point, so tossing
|
||||
|
Reference in New Issue
Block a user