@@ -752,8 +752,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;
@@ -767,41 +766,38 @@ rtinit(
int error;
/* Create the realtime bitmap inode. */
- error = -libxfs_trans_alloc_rollable(mp, MKFS_BLOCKRES_INODE, &tp);
+ error = -libxfs_imeta_start_create(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_imeta_create(&upd, S_IFREG, &rbmip);
+ 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;
inode_set_atime(VFS_I(rbmip), 0, 0);
libxfs_trans_log_inode(tp, rbmip, XFS_ILOG_CORE);
- libxfs_log_sb(tp);
+
+ error = -libxfs_imeta_commit_update(&upd);
+ if (error)
+ fail(_("Completion of the realtime bitmap inode failed"),
+ error);
mp->m_rbmip = rbmip;
/* Create the realtime summary inode. */
- error = creatproto(&tp, NULL, S_IFREG, 1, 0, &creds, &fsxattrs,
- &rsumip);
- if (error) {
+ error = -libxfs_imeta_start_create(mp, &XFS_IMETA_RTSUMMARY, &upd);
+ if (error)
+ res_failed(error);
+
+ error = -libxfs_imeta_create(&upd, S_IFREG, &rsumip);
+ 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);
+
+ error = -libxfs_imeta_commit_update(&upd);
if (error)
fail(_("Completion of the realtime summary inode failed"),
error);