reiserfs: Fix remaining in-reclaim-fs <-> reclaim-fs-on locking inversion

Commit 500f5a0bf5f0624dae34307010e240ec090e4cde
(reiserfs: Fix possible recursive lock) fixed a vmalloc under reiserfs
lock that triggered a lockdep warning because of a
IN-FS-RECLAIM <-> RECLAIM-FS-ON locking dependency inversion.

But this patch has ommitted another vmalloc call in the same path
that allocates the journal. Relax the lock for this one too.

Reported-by: Alexander Beregalov <a.beregalov@gmail.com>
Signed-off-by: Frederic Weisbecker <fweisbec@gmail.com>
Cc: Chris Mason <chris.mason@oracle.com>
Cc: Ingo Molnar <mingo@elte.hu>

+12 -3
+12 -3
fs/reiserfs/journal.c
··· 2758 struct reiserfs_journal *journal; 2759 struct reiserfs_journal_list *jl; 2760 char b[BDEVNAME_SIZE]; 2761 2762 journal = SB_JOURNAL(sb) = vmalloc(sizeof(struct reiserfs_journal)); 2763 if (!journal) { 2764 reiserfs_warning(sb, "journal-1256", 2765 "unable to get memory for journal structure"); 2766 return 1; 2767 } 2768 memset(journal, 0, sizeof(struct reiserfs_journal)); ··· 2778 INIT_LIST_HEAD(&journal->j_working_list); 2779 INIT_LIST_HEAD(&journal->j_journal_list); 2780 journal->j_persistent_trans = 0; 2781 - if (reiserfs_allocate_list_bitmaps(sb, 2782 - journal->j_list_bitmap, 2783 - reiserfs_bmap_count(sb))) 2784 goto free_and_return; 2785 allocate_bitmap_nodes(sb); 2786 2787 /* reserved for journal area support */
··· 2758 struct reiserfs_journal *journal; 2759 struct reiserfs_journal_list *jl; 2760 char b[BDEVNAME_SIZE]; 2761 + int ret; 2762 2763 + /* 2764 + * Unlock here to avoid various RECLAIM-FS-ON <-> IN-RECLAIM-FS 2765 + * dependency inversion warnings. 2766 + */ 2767 + reiserfs_write_unlock(sb); 2768 journal = SB_JOURNAL(sb) = vmalloc(sizeof(struct reiserfs_journal)); 2769 if (!journal) { 2770 reiserfs_warning(sb, "journal-1256", 2771 "unable to get memory for journal structure"); 2772 + reiserfs_write_lock(sb); 2773 return 1; 2774 } 2775 memset(journal, 0, sizeof(struct reiserfs_journal)); ··· 2771 INIT_LIST_HEAD(&journal->j_working_list); 2772 INIT_LIST_HEAD(&journal->j_journal_list); 2773 journal->j_persistent_trans = 0; 2774 + ret = reiserfs_allocate_list_bitmaps(sb, journal->j_list_bitmap, 2775 + reiserfs_bmap_count(sb)); 2776 + reiserfs_write_lock(sb); 2777 + if (ret) 2778 goto free_and_return; 2779 + 2780 allocate_bitmap_nodes(sb); 2781 2782 /* reserved for journal area support */