@@ -1533,6 +1533,16 @@ static journal_t *journal_init_common(struct block_device *bdev,
1533
1533
if (!journal )
1534
1534
return NULL ;
1535
1535
1536
+ journal -> j_blocksize = blocksize ;
1537
+ journal -> j_dev = bdev ;
1538
+ journal -> j_fs_dev = fs_dev ;
1539
+ journal -> j_blk_offset = start ;
1540
+ journal -> j_total_len = len ;
1541
+
1542
+ err = journal_load_superblock (journal );
1543
+ if (err )
1544
+ goto err_cleanup ;
1545
+
1536
1546
init_waitqueue_head (& journal -> j_wait_transaction_locked );
1537
1547
init_waitqueue_head (& journal -> j_wait_done_commit );
1538
1548
init_waitqueue_head (& journal -> j_wait_commit );
@@ -1544,12 +1554,15 @@ static journal_t *journal_init_common(struct block_device *bdev,
1544
1554
mutex_init (& journal -> j_checkpoint_mutex );
1545
1555
spin_lock_init (& journal -> j_revoke_lock );
1546
1556
spin_lock_init (& journal -> j_list_lock );
1557
+ spin_lock_init (& journal -> j_history_lock );
1547
1558
rwlock_init (& journal -> j_state_lock );
1548
1559
1549
1560
journal -> j_commit_interval = (HZ * JBD2_DEFAULT_MAX_COMMIT_AGE );
1550
1561
journal -> j_min_batch_time = 0 ;
1551
1562
journal -> j_max_batch_time = 15000 ; /* 15ms */
1552
1563
atomic_set (& journal -> j_reserved_credits , 0 );
1564
+ lockdep_init_map (& journal -> j_trans_commit_map , "jbd2_handle" ,
1565
+ & jbd2_trans_commit_key , 0 );
1553
1566
1554
1567
/* The journal is marked for error until we succeed with recovery! */
1555
1568
journal -> j_flags = JBD2_ABORT ;
@@ -1559,18 +1572,10 @@ static journal_t *journal_init_common(struct block_device *bdev,
1559
1572
if (err )
1560
1573
goto err_cleanup ;
1561
1574
1562
- spin_lock_init (& journal -> j_history_lock );
1563
-
1564
- lockdep_init_map (& journal -> j_trans_commit_map , "jbd2_handle" ,
1565
- & jbd2_trans_commit_key , 0 );
1566
-
1567
- /* journal descriptor can store up to n blocks -bzzz */
1568
- journal -> j_blocksize = blocksize ;
1569
- journal -> j_dev = bdev ;
1570
- journal -> j_fs_dev = fs_dev ;
1571
- journal -> j_blk_offset = start ;
1572
- journal -> j_total_len = len ;
1573
- /* We need enough buffers to write out full descriptor block. */
1575
+ /*
1576
+ * journal descriptor can store up to n blocks, we need enough
1577
+ * buffers to write out full descriptor block.
1578
+ */
1574
1579
n = journal -> j_blocksize / jbd2_min_tag_size ();
1575
1580
journal -> j_wbufsize = n ;
1576
1581
journal -> j_fc_wbuf = NULL ;
@@ -1579,7 +1584,8 @@ static journal_t *journal_init_common(struct block_device *bdev,
1579
1584
if (!journal -> j_wbuf )
1580
1585
goto err_cleanup ;
1581
1586
1582
- err = journal_load_superblock (journal );
1587
+ err = percpu_counter_init (& journal -> j_checkpoint_jh_count , 0 ,
1588
+ GFP_KERNEL );
1583
1589
if (err )
1584
1590
goto err_cleanup ;
1585
1591
@@ -1588,21 +1594,18 @@ static journal_t *journal_init_common(struct block_device *bdev,
1588
1594
journal -> j_shrinker .count_objects = jbd2_journal_shrink_count ;
1589
1595
journal -> j_shrinker .seeks = DEFAULT_SEEKS ;
1590
1596
journal -> j_shrinker .batch = journal -> j_max_transaction_buffers ;
1591
-
1592
- if (percpu_counter_init (& journal -> j_checkpoint_jh_count , 0 , GFP_KERNEL ))
1597
+ err = register_shrinker (& journal -> j_shrinker , "jbd2-journal:(%u:%u)" ,
1598
+ MAJOR (bdev -> bd_dev ), MINOR (bdev -> bd_dev ));
1599
+ if (err )
1593
1600
goto err_cleanup ;
1594
1601
1595
- if (register_shrinker (& journal -> j_shrinker , "jbd2-journal:(%u:%u)" ,
1596
- MAJOR (bdev -> bd_dev ), MINOR (bdev -> bd_dev ))) {
1597
- percpu_counter_destroy (& journal -> j_checkpoint_jh_count );
1598
- goto err_cleanup ;
1599
- }
1600
1602
return journal ;
1601
1603
1602
1604
err_cleanup :
1603
- brelse ( journal -> j_sb_buffer );
1605
+ percpu_counter_destroy ( & journal -> j_checkpoint_jh_count );
1604
1606
kfree (journal -> j_wbuf );
1605
1607
jbd2_journal_destroy_revoke (journal );
1608
+ journal_fail_superblock (journal );
1606
1609
kfree (journal );
1607
1610
return NULL ;
1608
1611
}
0 commit comments