Source kernel commit:
390b4775d6787706b1846f15623a68e576ec900c
Pass the xfs_icreate_args object to xfs_dialloc since we can extract the
relevant mode (really just the file type) and parent inumber from there.
This simplifies the calling convention in preparation for the next
patch.
Signed-off-by: Darrick J. Wong <djwong@kernel.org>
Reviewed-by: Christoph Hellwig <hch@lst.de>
return error;
}
- error = -libxfs_dialloc(&tp, 0, args.mode, &ino);
+ error = -libxfs_dialloc(&tp, &args, &ino);
if (error) {
dbprintf(_("alloc inode: %s\n"), strerror(error));
goto out_cancel;
int
xfs_dialloc(
struct xfs_trans **tpp,
- xfs_ino_t parent,
- umode_t mode,
+ const struct xfs_icreate_args *args,
xfs_ino_t *new_ino)
{
struct xfs_mount *mp = (*tpp)->t_mountp;
+ xfs_ino_t parent = args->pip ? args->pip->i_ino : 0;
+ umode_t mode = args->mode & S_IFMT;
xfs_agnumber_t agno;
int error = 0;
xfs_agnumber_t start_agno;
return xfs_buf_offset(b, o << (mp)->m_sb.sb_inodelog);
}
+struct xfs_icreate_args;
+
/*
* Allocate an inode on disk. Mode is used to tell whether the new inode will
* need space, and whether it is a directory.
*/
-int xfs_dialloc(struct xfs_trans **tpp, xfs_ino_t parent, umode_t mode,
+int xfs_dialloc(struct xfs_trans **tpp, const struct xfs_icreate_args *args,
xfs_ino_t *new_ino);
int xfs_difree(struct xfs_trans *tp, struct xfs_perag *pag,
};
struct xfs_inode *ip;
struct inode *inode;
- xfs_ino_t parent_ino = dp ? dp->i_ino : 0;
xfs_ino_t ino;
int error;
* Call the space management code to pick the on-disk inode to be
* allocated.
*/
- error = -libxfs_dialloc(tpp, parent_ino, mode, &ino);
+ error = -libxfs_dialloc(tpp, &args, &ino);
if (error)
return error;
if (error)
res_failed(error);
- error = -libxfs_dialloc(&tp, 0, args.mode, &ino);
+ error = -libxfs_dialloc(&tp, &args, &ino);
if (error)
goto fail;
if (i)
res_failed(i);
- error = -libxfs_dialloc(&tp, mp->m_sb.sb_rootino, args.mode, &ino);
+ error = -libxfs_dialloc(&tp, &args, &ino);
if (error)
do_error(_("%s inode allocation failed %d\n"),
ORPHANAGE, error);