From: Edward Shishkin This fixes segmentation fault when specifying bad journal device via a mount option. Don't pass a zero pointer to bdevname() if filp_open() returns error. Signed-off-by: Andrew Morton --- fs/reiserfs/journal.c | 12 +++++------- 1 files changed, 5 insertions(+), 7 deletions(-) diff -puN fs/reiserfs/journal.c~reiserfs-journal_init-fix fs/reiserfs/journal.c --- 25/fs/reiserfs/journal.c~reiserfs-journal_init-fix 2005-04-26 19:27:08.111493608 -0700 +++ 25-akpm/fs/reiserfs/journal.c 2005-04-26 19:27:08.117492696 -0700 @@ -2316,13 +2316,16 @@ static int journal_init_dev( struct supe if( !IS_ERR( journal -> j_dev_file ) ) { struct inode *jdev_inode = journal->j_dev_file->f_mapping->host; if( !S_ISBLK( jdev_inode -> i_mode ) ) { - reiserfs_warning (super, "journal_init_dev: '%s' is " - "not a block device", jdev_name ); + reiserfs_warning(super, "journal_init_dev: '%s' is " + "not a block device", jdev_name ); result = -ENOTBLK; + release_journal_dev( super, journal ); } else { /* ok */ journal->j_dev_bd = I_BDEV(jdev_inode); set_blocksize(journal->j_dev_bd, super->s_blocksize); + reiserfs_info(super, "journal_init_dev: journal device: %s\n", + bdevname(journal->j_dev_bd, b)); } } else { result = PTR_ERR( journal -> j_dev_file ); @@ -2331,11 +2334,6 @@ static int journal_init_dev( struct supe "journal_init_dev: Cannot open '%s': %i", jdev_name, result ); } - if( result != 0 ) { - release_journal_dev( super, journal ); - } - reiserfs_info(super, "journal_init_dev: journal device: %s\n", - bdevname(journal->j_dev_bd, b)); return result; } _