@@ -1712,27 +1712,14 @@ xfs_mount_alloc(
STATIC int
-xfs_fs_fill_super(
- struct super_block *sb,
- void *data,
+__xfs_fs_fill_super(
+ struct xfs_mount *mp,
int silent)
{
+ struct super_block *sb = mp->m_super;
struct inode *root;
- struct xfs_mount *mp = NULL;
- int flags = 0, error = -ENOMEM;
-
- /*
- * allocate mp and do all low-level struct initializations before we
- * attach it to the super
- */
- mp = xfs_mount_alloc(sb);
- if (!mp)
- goto out;
- sb->s_fs_info = mp;
-
- error = xfs_parseargs(mp, (char *)data);
- if (error)
- goto out_free_fsname;
+ int flags = 0;
+ int error;
sb_min_blocksize(sb, BBSIZE);
sb->s_xattr = xfs_xattr_handlers;
@@ -1759,7 +1746,7 @@ xfs_fs_fill_super(
error = xfs_open_devices(mp);
if (error)
- goto out_free_fsname;
+ goto out;
error = xfs_init_mount_workqueues(mp);
if (error)
@@ -1894,10 +1881,6 @@ xfs_fs_fill_super(
xfs_destroy_mount_workqueues(mp);
out_close_devices:
xfs_close_devices(mp);
- out_free_fsname:
- sb->s_fs_info = NULL;
- xfs_free_fsname(mp);
- kfree(mp);
out:
return error;
@@ -1907,6 +1890,41 @@ xfs_fs_fill_super(
goto out_free_sb;
}
+STATIC int
+xfs_fs_fill_super(
+ struct super_block *sb,
+ void *data,
+ int silent)
+{
+ struct xfs_mount *mp;
+ int error;
+
+ /*
+ * allocate mp and do all low-level struct initializations before we
+ * attach it to the super
+ */
+ mp = xfs_mount_alloc(sb);
+ if (!mp)
+ return -ENOMEM;
+ sb->s_fs_info = mp;
+
+ error = xfs_parseargs(mp, (char *)data);
+ if (error)
+ goto out_free_fsname;
+
+ error = __xfs_fs_fill_super(mp, silent);
+ if (error)
+ goto out_free_fsname;
+
+ return 0;
+
+ out_free_fsname:
+ sb->s_fs_info = NULL;
+ xfs_free_fsname(mp);
+ kfree(mp);
+ return error;
+}
+
STATIC void
xfs_fs_put_super(
struct super_block *sb)