Jeff Mahoney wrote:

> If an external device is used for a journal, by default it will use the
> entire device. The reiserfs journal code allocates structures per journal
> block when it mounts the file system. If the journal device is too large, and
> memory cannot be allocated for the structures, it will continue and ultimately
> panic when it can't pull one off the free list.
>
> This patch handles the allocation failure gracefully and prints an error
> message at mount time.
>
> Changes: Updated error message to be more descriptive to the user.
>
>Signed-off-by: Jeff Mahoney <[EMAIL PROTECTED]>
>
>diff -ruNpX dontdiff linux-2.6.13.orig/fs/reiserfs/journal.c 
>linux-2.6.13.fixed/fs/reiserfs/journal.c
>--- linux-2.6.13.orig/fs/reiserfs/journal.c    2005-09-16 11:42:58.000000000 
>-0400
>+++ linux-2.6.13.fixed/fs/reiserfs/journal.c   2005-11-23 19:14:17.000000000 
>-0500
>@@ -2757,6 +2757,13 @@ int journal_init(struct super_block *p_s
>       journal->j_cnode_used = 0;
>       journal->j_must_wait = 0;
> 
>+      if (journal->j_cnode_free == 0) {
>+              reiserfs_warning(p_s_sb, "journal-2004: Journal cnode memory "
>+                               "allocation failed. Journal is too large "
>+                               "for available memory.");
>+              goto free_and_return;
>+      }
>+
>       init_journal_hash(p_s_sb);
>       jl = journal->j_current_jl;
>       jl->j_list_bitmap = get_list_bitmap(p_s_sb, jl);
>
>  
>
This is better than handling it ungracefully but..... can there be a
memory shortage for some other reason and then this prints the wrong
diagnostic? Forgive me, it is hard to know the answer looking at the
patch by itself.....

Hans

Reply via email to