logfs: fix deadlock in logfs_get_wblocks, hold and wait on super->s_write_mutex
do_logfs_journal_wl_pass() should use GFP_NOFS for memory allocation GC code calls btree_insert32 with GFP_KERNEL while holding a mutex super->s_write_mutex. The same mutex is used in address_space_operations->writepage(), and a call to writepage() could be triggered as a result of memory allocation in btree_insert32, causing a deadlock. Addresses https://bugzilla.kernel.org/show_bug.cgi?id=20342 Signed-off-by: Prasad Joshi <prasadjoshi124@gmail.com> Cc: Joern Engel <joern@logfs.org> Cc: Florian Mickler <florian@mickler.org> Cc: "Rafael J. Wysocki" <rjw@sisk.pl> Cc: Maciej Rutecki <maciej.rutecki@gmail.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
parent
7a2d19bced
commit
eabb26cacd
1 changed files with 1 additions and 1 deletions
|
@ -828,7 +828,7 @@ void do_logfs_journal_wl_pass(struct super_block *sb)
|
|||
super->s_journal_seg[i] = segno;
|
||||
super->s_journal_ec[i] = ec;
|
||||
logfs_set_segment_reserved(sb, segno);
|
||||
err = btree_insert32(head, segno, (void *)1, GFP_KERNEL);
|
||||
err = btree_insert32(head, segno, (void *)1, GFP_NOFS);
|
||||
BUG_ON(err); /* mempool should prevent this */
|
||||
err = logfs_erase_segment(sb, segno, 1);
|
||||
BUG_ON(err); /* FIXME: remount-ro would be nicer */
|
||||
|
|
Loading…
Reference in a new issue