@@ -587,27 +587,27 @@ mk_rsumino(xfs_mount_t *mp)
libxfs_irele(ip);
}
-/*
- * makes a new root directory.
- */
-static void
-mk_root_dir(xfs_mount_t *mp)
+/* Initialize a root directory. */
+static int
+init_fs_root_dir(
+ struct xfs_mount *mp,
+ xfs_ino_t ino,
+ mode_t mode,
+ struct xfs_inode **ipp)
{
- xfs_trans_t *tp;
- xfs_inode_t *ip;
- int i;
- int error;
- const mode_t mode = 0755;
- ino_tree_node_t *irec;
+ struct xfs_trans *tp;
+ struct xfs_inode *ip = NULL;
+ struct ino_tree_node *irec;
+ int error;
- ip = NULL;
- i = -libxfs_trans_alloc(mp, &M_RES(mp)->tr_ichange, 10, 0, 0, &tp);
- if (i)
- res_failed(i);
+ error = -libxfs_trans_alloc(mp, &M_RES(mp)->tr_ichange, 10, 0, 0, &tp);
+ if (error)
+ return error;
- error = -libxfs_iget(mp, tp, mp->m_sb.sb_rootino, 0, &ip);
+ error = -libxfs_iget(mp, tp, ino, 0, &ip);
if (error) {
- do_error(_("could not iget root inode -- error - %d\n"), error);
+ libxfs_trans_cancel(tp);
+ return error;
}
/* Reset the root directory. */
@@ -616,14 +616,31 @@ mk_root_dir(xfs_mount_t *mp)
error = -libxfs_trans_commit(tp);
if (error)
- do_error(_("%s: commit failed, error %d\n"), __func__, error);
+ return error;
+
+ irec = find_inode_rec(mp, XFS_INO_TO_AGNO(mp, ino),
+ XFS_INO_TO_AGINO(mp, ino));
+ set_inode_isadir(irec, XFS_INO_TO_AGINO(mp, ino) - irec->ino_startnum);
+ *ipp = ip;
+ return 0;
+}
+
+/*
+ * makes a new root directory.
+ */
+static void
+mk_root_dir(xfs_mount_t *mp)
+{
+ struct xfs_inode *ip = NULL;
+ int error;
+
+ error = init_fs_root_dir(mp, mp->m_sb.sb_rootino, 0755, &ip);
+ if (error)
+ do_error(
+ _("Could not reinitialize root directory inode, error %d\n"),
+ error);
libxfs_irele(ip);
-
- irec = find_inode_rec(mp, XFS_INO_TO_AGNO(mp, mp->m_sb.sb_rootino),
- XFS_INO_TO_AGINO(mp, mp->m_sb.sb_rootino));
- set_inode_isadir(irec, XFS_INO_TO_AGINO(mp, mp->m_sb.sb_rootino) -
- irec->ino_startnum);
}
/*