diff options
Diffstat (limited to 'fs/ocfs2/super.c')
-rw-r--r-- | fs/ocfs2/super.c | 51 |
1 files changed, 25 insertions, 26 deletions
diff --git a/fs/ocfs2/super.c b/fs/ocfs2/super.c index 604e12c4e979..68f4541c2db9 100644 --- a/fs/ocfs2/super.c +++ b/fs/ocfs2/super.c | |||
@@ -1154,19 +1154,19 @@ static int ocfs2_fill_super(struct super_block *sb, void *data, int silent) | |||
1154 | } | 1154 | } |
1155 | 1155 | ||
1156 | status = ocfs2_mount_volume(sb); | 1156 | status = ocfs2_mount_volume(sb); |
1157 | if (osb->root_inode) | ||
1158 | inode = igrab(osb->root_inode); | ||
1159 | |||
1160 | if (status < 0) | 1157 | if (status < 0) |
1161 | goto read_super_error; | 1158 | goto read_super_error; |
1162 | 1159 | ||
1160 | if (osb->root_inode) | ||
1161 | inode = igrab(osb->root_inode); | ||
1162 | |||
1163 | if (!inode) { | 1163 | if (!inode) { |
1164 | status = -EIO; | 1164 | status = -EIO; |
1165 | mlog_errno(status); | 1165 | mlog_errno(status); |
1166 | goto read_super_error; | 1166 | goto read_super_error; |
1167 | } | 1167 | } |
1168 | 1168 | ||
1169 | root = d_alloc_root(inode); | 1169 | root = d_make_root(inode); |
1170 | if (!root) { | 1170 | if (!root) { |
1171 | status = -ENOMEM; | 1171 | status = -ENOMEM; |
1172 | mlog_errno(status); | 1172 | mlog_errno(status); |
@@ -1220,9 +1220,6 @@ static int ocfs2_fill_super(struct super_block *sb, void *data, int silent) | |||
1220 | read_super_error: | 1220 | read_super_error: |
1221 | brelse(bh); | 1221 | brelse(bh); |
1222 | 1222 | ||
1223 | if (inode) | ||
1224 | iput(inode); | ||
1225 | |||
1226 | if (osb) { | 1223 | if (osb) { |
1227 | atomic_set(&osb->vol_state, VOLUME_DISABLED); | 1224 | atomic_set(&osb->vol_state, VOLUME_DISABLED); |
1228 | wake_up(&osb->osb_mount_event); | 1225 | wake_up(&osb->osb_mount_event); |
@@ -1627,21 +1624,17 @@ static int __init ocfs2_init(void) | |||
1627 | init_waitqueue_head(&ocfs2__ioend_wq[i]); | 1624 | init_waitqueue_head(&ocfs2__ioend_wq[i]); |
1628 | 1625 | ||
1629 | status = init_ocfs2_uptodate_cache(); | 1626 | status = init_ocfs2_uptodate_cache(); |
1630 | if (status < 0) { | 1627 | if (status < 0) |
1631 | mlog_errno(status); | 1628 | goto out1; |
1632 | goto leave; | ||
1633 | } | ||
1634 | 1629 | ||
1635 | status = ocfs2_initialize_mem_caches(); | 1630 | status = ocfs2_initialize_mem_caches(); |
1636 | if (status < 0) { | 1631 | if (status < 0) |
1637 | mlog_errno(status); | 1632 | goto out2; |
1638 | goto leave; | ||
1639 | } | ||
1640 | 1633 | ||
1641 | ocfs2_wq = create_singlethread_workqueue("ocfs2_wq"); | 1634 | ocfs2_wq = create_singlethread_workqueue("ocfs2_wq"); |
1642 | if (!ocfs2_wq) { | 1635 | if (!ocfs2_wq) { |
1643 | status = -ENOMEM; | 1636 | status = -ENOMEM; |
1644 | goto leave; | 1637 | goto out3; |
1645 | } | 1638 | } |
1646 | 1639 | ||
1647 | ocfs2_debugfs_root = debugfs_create_dir("ocfs2", NULL); | 1640 | ocfs2_debugfs_root = debugfs_create_dir("ocfs2", NULL); |
@@ -1653,17 +1646,23 @@ static int __init ocfs2_init(void) | |||
1653 | ocfs2_set_locking_protocol(); | 1646 | ocfs2_set_locking_protocol(); |
1654 | 1647 | ||
1655 | status = register_quota_format(&ocfs2_quota_format); | 1648 | status = register_quota_format(&ocfs2_quota_format); |
1656 | leave: | 1649 | if (status < 0) |
1657 | if (status < 0) { | 1650 | goto out4; |
1658 | ocfs2_free_mem_caches(); | 1651 | status = register_filesystem(&ocfs2_fs_type); |
1659 | exit_ocfs2_uptodate_cache(); | 1652 | if (!status) |
1660 | mlog_errno(status); | 1653 | return 0; |
1661 | } | ||
1662 | 1654 | ||
1663 | if (status >= 0) { | 1655 | unregister_quota_format(&ocfs2_quota_format); |
1664 | return register_filesystem(&ocfs2_fs_type); | 1656 | out4: |
1665 | } else | 1657 | destroy_workqueue(ocfs2_wq); |
1666 | return -1; | 1658 | debugfs_remove(ocfs2_debugfs_root); |
1659 | out3: | ||
1660 | ocfs2_free_mem_caches(); | ||
1661 | out2: | ||
1662 | exit_ocfs2_uptodate_cache(); | ||
1663 | out1: | ||
1664 | mlog_errno(status); | ||
1665 | return status; | ||
1667 | } | 1666 | } |
1668 | 1667 | ||
1669 | static void __exit ocfs2_exit(void) | 1668 | static void __exit ocfs2_exit(void) |