From: Darrick J. Wong <djwong@xxxxxxxxxx> 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@xxxxxxxxxx> Reviewed-by: Christoph Hellwig <hch@xxxxxx> --- db/iunlink.c | 2 +- libxfs/xfs_ialloc.c | 5 +++-- libxfs/xfs_ialloc.h | 4 +++- mkfs/proto.c | 5 ++--- repair/phase6.c | 2 +- 5 files changed, 10 insertions(+), 8 deletions(-) diff --git a/db/iunlink.c b/db/iunlink.c index 0dc68b7240c1a3..55ba5af5a3c563 100644 --- a/db/iunlink.c +++ b/db/iunlink.c @@ -223,7 +223,7 @@ create_unlinked( 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; diff --git a/libxfs/xfs_ialloc.c b/libxfs/xfs_ialloc.c index c526f677e072b4..83e3d7d7c5a1b3 100644 --- a/libxfs/xfs_ialloc.c +++ b/libxfs/xfs_ialloc.c @@ -1850,11 +1850,12 @@ xfs_dialloc_try_ag( 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; diff --git a/libxfs/xfs_ialloc.h b/libxfs/xfs_ialloc.h index b549627e3a6150..3a1323155a455a 100644 --- a/libxfs/xfs_ialloc.h +++ b/libxfs/xfs_ialloc.h @@ -33,11 +33,13 @@ xfs_make_iptr(struct xfs_mount *mp, struct xfs_buf *b, int o) 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, diff --git a/mkfs/proto.c b/mkfs/proto.c index 8a51bfb264cedf..42ac3e10929b52 100644 --- a/mkfs/proto.c +++ b/mkfs/proto.c @@ -428,7 +428,6 @@ creatproto( }; struct xfs_inode *ip; struct inode *inode; - xfs_ino_t parent_ino = dp ? dp->i_ino : 0; xfs_ino_t ino; int error; @@ -440,7 +439,7 @@ creatproto( * 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; @@ -769,7 +768,7 @@ create_sb_metadata_file( if (error) res_failed(error); - error = -libxfs_dialloc(&tp, 0, args.mode, &ino); + error = -libxfs_dialloc(&tp, &args, &ino); if (error) goto fail; diff --git a/repair/phase6.c b/repair/phase6.c index ba28edaa41c24c..b48f18b06a5c81 100644 --- a/repair/phase6.c +++ b/repair/phase6.c @@ -873,7 +873,7 @@ mk_orphanage( 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);