@ -92,11 +92,6 @@ struct the_nilfs *alloc_nilfs(struct block_device *bdev)
void destroy_nilfs ( struct the_nilfs * nilfs )
{
might_sleep ( ) ;
if ( nilfs_loaded ( nilfs ) ) {
nilfs_mdt_destroy ( nilfs - > ns_sufile ) ;
nilfs_mdt_destroy ( nilfs - > ns_cpfile ) ;
nilfs_mdt_destroy ( nilfs - > ns_dat ) ;
}
if ( nilfs_init ( nilfs ) ) {
brelse ( nilfs - > ns_sbh [ 0 ] ) ;
brelse ( nilfs - > ns_sbh [ 1 ] ) ;
@ -104,11 +99,13 @@ void destroy_nilfs(struct the_nilfs *nilfs)
kfree ( nilfs ) ;
}
static int nilfs_load_super_root ( struct the_nilfs * nilfs , sector_t sr_block )
static int nilfs_load_super_root ( struct the_nilfs * nilfs ,
struct super_block * sb , sector_t sr_block )
{
struct buffer_head * bh_sr ;
struct nilfs_super_root * raw_sr ;
struct nilfs_super_block * * sbp = nilfs - > ns_sbp ;
struct nilfs_inode * rawi ;
unsigned dat_entry_size , segment_usage_size , checkpoint_size ;
unsigned inode_size ;
int err ;
@ -125,34 +122,22 @@ static int nilfs_load_super_root(struct the_nilfs *nilfs, sector_t sr_block)
inode_size = nilfs - > ns_inode_size ;
err = - ENOMEM ;
nilfs - > ns_dat = nilfs_dat_new ( nilfs , dat_entry_size ) ;
if ( unlikely ( ! nilfs - > ns_dat ) )
rawi = ( void * ) bh_sr - > b_data + NILFS_SR_DAT_OFFSET ( inode_size ) ;
err = nilfs_dat_read ( sb , dat_entry_size , rawi , & nilfs - > ns_dat ) ;
if ( err )
goto failed ;
nilfs - > ns_cpfile = nilfs_cpfile_new ( nilfs , checkpoint_size ) ;
if ( unlikely ( ! nilfs - > ns_cpfile ) )
rawi = ( void * ) bh_sr - > b_data + NILFS_SR_CPFILE_OFFSET ( inode_size ) ;
err = nilfs_cpfile_read ( sb , checkpoint_size , rawi , & nilfs - > ns_cpfile ) ;
if ( err )
goto failed_dat ;
nilfs - > ns_sufile = nilfs_sufile_new ( nilfs , segment_usage_size ) ;
if ( unlikely ( ! nilfs - > ns_sufile ) )
rawi = ( void * ) bh_sr - > b_data + NILFS_SR_SUFILE_OFFSET ( inode_size ) ;
err = nilfs_sufile_read ( sb , segment_usage_size , rawi ,
& nilfs - > ns_sufile ) ;
if ( err )
goto failed_cpfile ;
err = nilfs_dat_read ( nilfs - > ns_dat , ( void * ) bh_sr - > b_data +
NILFS_SR_DAT_OFFSET ( inode_size ) ) ;
if ( unlikely ( err ) )
goto failed_sufile ;
err = nilfs_cpfile_read ( nilfs - > ns_cpfile , ( void * ) bh_sr - > b_data +
NILFS_SR_CPFILE_OFFSET ( inode_size ) ) ;
if ( unlikely ( err ) )
goto failed_sufile ;
err = nilfs_sufile_read ( nilfs - > ns_sufile , ( void * ) bh_sr - > b_data +
NILFS_SR_SUFILE_OFFSET ( inode_size ) ) ;
if ( unlikely ( err ) )
goto failed_sufile ;
raw_sr = ( struct nilfs_super_root * ) bh_sr - > b_data ;
nilfs - > ns_nongc_ctime = le64_to_cpu ( raw_sr - > sr_nongc_ctime ) ;
@ -160,14 +145,11 @@ static int nilfs_load_super_root(struct the_nilfs *nilfs, sector_t sr_block)
brelse ( bh_sr ) ;
return err ;
failed_sufile :
nilfs_mdt_destroy ( nilfs - > ns_sufile ) ;
failed_cpfile :
nilfs_mdt_destroy ( nilfs - > ns_cpfile ) ;
iput ( nilfs - > ns_cpfile ) ;
failed_dat :
nilfs_mdt_destroy ( nilfs - > ns_dat ) ;
iput ( nilfs - > ns_dat ) ;
goto failed ;
}
@ -290,7 +272,7 @@ int load_nilfs(struct the_nilfs *nilfs, struct nilfs_sb_info *sbi)
goto scan_error ;
}
err = nilfs_load_super_root ( nilfs , ri . ri_super_root ) ;
err = nilfs_load_super_root ( nilfs , sbi - > s_super , ri . ri_super_root ) ;
if ( unlikely ( err ) ) {
printk ( KERN_ERR " NILFS: error loading super root. \n " ) ;
goto failed ;
@ -358,9 +340,9 @@ int load_nilfs(struct the_nilfs *nilfs, struct nilfs_sb_info *sbi)
goto failed ;
failed_unload :
nilfs_mdt_destroy ( nilfs - > ns_cpfile ) ;
nilfs_mdt_destroy ( nilfs - > ns_sufile ) ;
nilfs_mdt_destroy ( nilfs - > ns_dat ) ;
iput ( nilfs - > ns_cpfile ) ;
iput ( nilfs - > ns_sufile ) ;
iput ( nilfs - > ns_dat ) ;
failed :
nilfs_clear_recovery_info ( & ri ) ;
@ -782,7 +764,7 @@ void nilfs_put_root(struct nilfs_root *root)
rb_erase ( & root - > rb_node , & nilfs - > ns_cptree ) ;
spin_unlock ( & nilfs - > ns_cptree_lock ) ;
if ( root - > ifile )
nilfs_mdt_destroy ( root - > ifile ) ;
iput ( root - > ifile ) ;
kfree ( root ) ;
}