From: Darrick J. Wong <djwong@xxxxxxxxxx> Convert all open-coded sb metadata inode pointer logging to use libxfs_imeta_create to create metadata inodes. Signed-off-by: Darrick J. Wong <djwong@xxxxxxxxxx> --- mkfs/proto.c | 54 +++++++++++++++++++++++++++++++----------------------- 1 file changed, 31 insertions(+), 23 deletions(-) diff --git a/mkfs/proto.c b/mkfs/proto.c index 3121c35baa1..354c9fa8a02 100644 --- a/mkfs/proto.c +++ b/mkfs/proto.c @@ -680,8 +680,7 @@ static void rtinit( struct xfs_mount *mp) { - struct cred creds; - struct fsxattr fsxattrs; + struct xfs_imeta_update upd; struct xfs_bmbt_irec map[XFS_BMAP_MAX_NMAP]; struct xfs_inode *rbmip; struct xfs_inode *rsumip; @@ -696,45 +695,54 @@ rtinit( int error; /* Create the realtime bitmap inode. */ - error = -libxfs_trans_alloc_rollable(mp, MKFS_BLOCKRES_INODE, &tp); + error = -libxfs_imeta_start_update(mp, &XFS_IMETA_RTBITMAP, &upd); if (error) res_failed(error); - memset(&creds, 0, sizeof(creds)); - memset(&fsxattrs, 0, sizeof(fsxattrs)); - error = creatproto(&tp, NULL, S_IFREG, 1, 0, &creds, &fsxattrs, - &rbmip); - if (error) { + error = -libxfs_trans_alloc(mp, &M_RES(mp)->tr_imeta_create, + libxfs_imeta_create_space_res(mp), 0, 0, &tp); + if (error) + res_failed(error); + + error = -libxfs_imeta_create(&tp, &XFS_IMETA_RTBITMAP, S_IFREG, 0, + &rbmip, &upd); + if (error) fail(_("Realtime bitmap inode allocation failed"), error); - } - /* - * Do our thing with rbmip before allocating rsumip, - * because the next call to createproto may - * commit the transaction in which rbmip was allocated. - */ - mp->m_sb.sb_rbmino = rbmip->i_ino; + rbmip->i_disk_size = mp->m_sb.sb_rbmblocks * mp->m_sb.sb_blocksize; - rbmip->i_diflags = XFS_DIFLAG_NEWRTBM; + rbmip->i_diflags |= XFS_DIFLAG_NEWRTBM; *(uint64_t *)&VFS_I(rbmip)->i_atime = 0; libxfs_trans_log_inode(tp, rbmip, XFS_ILOG_CORE); - libxfs_log_sb(tp); + error = -libxfs_trans_commit(tp); + if (error) + fail(_("Completion of the realtime bitmap inode failed"), + error); mp->m_rbmip = rbmip; + libxfs_imeta_end_update(mp, &upd, 0); /* Create the realtime summary inode. */ - error = creatproto(&tp, NULL, S_IFREG, 1, 0, &creds, &fsxattrs, - &rsumip); - if (error) { + error = -libxfs_imeta_start_update(mp, &XFS_IMETA_RTSUMMARY, &upd); + if (error) + res_failed(error); + + error = -libxfs_trans_alloc(mp, &M_RES(mp)->tr_imeta_create, + libxfs_imeta_create_space_res(mp), 0, 0, &tp); + if (error) + res_failed(error); + + error = -libxfs_imeta_create(&tp, &XFS_IMETA_RTSUMMARY, S_IFREG, 0, + &rsumip, &upd); + if (error) fail(_("Realtime summary inode allocation failed"), error); - } - mp->m_sb.sb_rsumino = rsumip->i_ino; + rsumip->i_disk_size = mp->m_rsumsize; libxfs_trans_log_inode(tp, rsumip, XFS_ILOG_CORE); - libxfs_log_sb(tp); error = -libxfs_trans_commit(tp); if (error) fail(_("Completion of the realtime summary inode failed"), error); mp->m_rsumip = rsumip; + libxfs_imeta_end_update(mp, &upd, 0); /* Zero the realtime bitmap. */ blocks = mp->m_sb.sb_rbmblocks +