@@ -123,6 +123,7 @@
#define xfs_dir2_shrink_inode libxfs_dir2_shrink_inode
#define xfs_dir_createname libxfs_dir_createname
+#define xfs_dir_create_new_child libxfs_dir_create_new_child
#define xfs_dir_init libxfs_dir_init
#define xfs_dir_ino_validate libxfs_dir_ino_validate
#define xfs_dir_lookup libxfs_dir_lookup
@@ -804,6 +804,11 @@ mk_orphanage(
struct xfs_icreate_args args = {
.nlink = 2,
};
+ struct xfs_name xname = {
+ .name = ORPHANAGE,
+ .len = strlen(ORPHANAGE),
+ .type = XFS_DIR3_FT_DIR,
+ };
struct xfs_trans *tp;
struct xfs_inode *ip;
struct xfs_inode *pip;
@@ -814,7 +819,6 @@ mk_orphanage(
int error;
int nres;
const umode_t mode = S_IFDIR | 0755;
- struct xfs_name xname;
libxfs_icreate_args_rootfile(&args, mode);
@@ -830,9 +834,6 @@ mk_orphanage(
i, ORPHANAGE);
args.pip = pip;
- xname.name = (unsigned char *)ORPHANAGE;
- xname.len = strlen(ORPHANAGE);
- xname.type = XFS_DIR3_FT_DIR;
if (libxfs_dir_lookup(NULL, pip, &xname, &ino, NULL) == 0)
return ino;
@@ -845,15 +846,6 @@ mk_orphanage(
if (i)
res_failed(i);
- /*
- * use iget/ijoin instead of trans_iget because the ialloc
- * wrapper can commit the transaction and start a new one
- */
-/* i = -libxfs_iget(mp, NULL, mp->m_sb.sb_rootino, 0, &pip);
- if (i)
- do_error(_("%d - couldn't iget root inode to make %s\n"),
- i, ORPHANAGE);*/
-
error = -libxfs_dialloc(&tp, mp->m_sb.sb_rootino, mode, &ino);
if (error)
do_error(_("%s inode allocation failed %d\n"),
@@ -902,26 +894,22 @@ mk_orphanage(
/*
* create the actual entry
*/
- error = -libxfs_dir_createname(tp, pip, &xname, ip->i_ino, nres);
+ error = -libxfs_dir_create_new_child(tp, nres, pip, &xname, ip);
if (error)
do_error(
_("can't make %s, createname error %d\n"),
ORPHANAGE, error);
/*
- * bump up the link count in the root directory to account
- * for .. in the new directory, and update the irec copy of the
+ * We bumped up the link count in the root directory to account
+ * for .. in the new directory, so now update the irec copy of the
* on-disk nlink so we don't fail the link count check later.
*/
- inc_nlink(VFS_I(pip));
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));
add_inode_ref(irec, 0);
set_inode_disk_nlinks(irec, 0, get_inode_disk_nlinks(irec, 0) + 1);
- libxfs_trans_log_inode(tp, pip, XFS_ILOG_CORE);
- libxfs_dir_init(tp, ip, pip);
- libxfs_trans_log_inode(tp, ip, XFS_ILOG_CORE);
error = -libxfs_trans_commit(tp);
if (error) {
do_error(_("%s directory creation failed -- bmapf error %d\n"),