diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2012-03-21 16:36:41 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2012-03-21 16:36:41 -0400 |
commit | e2a0883e4071237d09b604a342c28b96b44a04b3 (patch) | |
tree | aa56f4d376b5eb1c32358c19c2669c2a94e0e1fd /fs/ocfs2/super.c | |
parent | 3a990a52f9f25f45469e272017a31e7a3fda60ed (diff) | |
parent | 07c0c5d8b8c122b2f2df9ee574ac3083daefc981 (diff) |
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs
Pull vfs pile 1 from Al Viro:
"This is _not_ all; in particular, Miklos' and Jan's stuff is not there
yet."
* 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs: (64 commits)
ext4: initialization of ext4_li_mtx needs to be done earlier
debugfs-related mode_t whack-a-mole
hfsplus: add an ioctl to bless files
hfsplus: change finder_info to u32
hfsplus: initialise userflags
qnx4: new helper - try_extent()
qnx4: get rid of qnx4_bread/qnx4_getblk
take removal of PF_FORKNOEXEC to flush_old_exec()
trim includes in inode.c
um: uml_dup_mmap() relies on ->mmap_sem being held, but activate_mm() doesn't hold it
um: embed ->stub_pages[] into mmu_context
gadgetfs: list_for_each_safe() misuse
ocfs2: fix leaks on failure exits in module_init
ecryptfs: make register_filesystem() the last potential failure exit
ntfs: forgets to unregister sysctls on register_filesystem() failure
logfs: missing cleanup on register_filesystem() failure
jfs: mising cleanup on register_filesystem() failure
make configfs_pin_fs() return root dentry on success
configfs: configfs_create_dir() has parent dentry in dentry->d_parent
configfs: sanitize configfs_create()
...
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) |