@@ -678,29 +678,27 @@ parse_proto(
*/
static void
rtinit(
- xfs_mount_t *mp)
+ struct xfs_mount *mp)
{
- xfs_fileoff_t bno;
- xfs_fileoff_t ebno;
- xfs_bmbt_irec_t *ep;
- int error;
- int i;
- xfs_bmbt_irec_t map[XFS_BMAP_MAX_NMAP];
- xfs_extlen_t nsumblocks;
- uint blocks;
- int nmap;
- xfs_inode_t *rbmip;
- xfs_inode_t *rsumip;
- xfs_trans_t *tp;
- struct cred creds;
- struct fsxattr fsxattrs;
+ struct cred creds;
+ struct fsxattr fsxattrs;
+ struct xfs_bmbt_irec map[XFS_BMAP_MAX_NMAP];
+ struct xfs_inode *rbmip;
+ struct xfs_inode *rsumip;
+ struct xfs_trans *tp;
+ struct xfs_bmbt_irec *ep;
+ xfs_fileoff_t bno;
+ xfs_fileoff_t ebno;
+ xfs_extlen_t nsumblocks;
+ uint blocks;
+ int i;
+ int nmap;
+ int error;
- /*
- * First, allocate the inodes.
- */
- i = -libxfs_trans_alloc_rollable(mp, MKFS_BLOCKRES_INODE, &tp);
- if (i)
- res_failed(i);
+ /* Create the realtime bitmap inode. */
+ error = -libxfs_trans_alloc_rollable(mp, MKFS_BLOCKRES_INODE, &tp);
+ if (error)
+ res_failed(error);
memset(&creds, 0, sizeof(creds));
memset(&fsxattrs, 0, sizeof(fsxattrs));
@@ -721,6 +719,8 @@ rtinit(
libxfs_trans_log_inode(tp, rbmip, XFS_ILOG_CORE);
libxfs_log_sb(tp);
mp->m_rbmip = rbmip;
+
+ /* Create the realtime summary inode. */
error = creatproto(&tp, NULL, S_IFREG, 1, 0, &creds, &fsxattrs,
&rsumip);
if (error) {
@@ -735,14 +735,13 @@ rtinit(
fail(_("Completion of the realtime summary inode failed"),
error);
mp->m_rsumip = rsumip;
- /*
- * Next, give the bitmap file some zero-filled blocks.
- */
+
+ /* Zero the realtime bitmap. */
blocks = mp->m_sb.sb_rbmblocks +
XFS_BM_MAXLEVELS(mp, XFS_DATA_FORK) - 1;
- i = -libxfs_trans_alloc_rollable(mp, blocks, &tp);
- if (i)
- res_failed(i);
+ error = -libxfs_trans_alloc_rollable(mp, blocks, &tp);
+ if (error)
+ res_failed(error);
libxfs_trans_ijoin(tp, rbmip, 0);
bno = 0;
@@ -751,10 +750,10 @@ rtinit(
error = -libxfs_bmapi_write(tp, rbmip, bno,
(xfs_extlen_t)(mp->m_sb.sb_rbmblocks - bno),
0, mp->m_sb.sb_rbmblocks, map, &nmap);
- if (error) {
+ if (error)
fail(_("Allocation of the realtime bitmap failed"),
error);
- }
+
for (i = 0, ep = map; i < nmap; i++, ep++) {
libxfs_device_zero(mp->m_ddev_targp,
XFS_FSB_TO_DADDR(mp, ep->br_startblock),
@@ -768,25 +767,24 @@ rtinit(
fail(_("Block allocation of the realtime bitmap inode failed"),
error);
- /*
- * Give the summary file some zero-filled blocks.
- */
+ /* Zero the summary file. */
nsumblocks = mp->m_rsumsize >> mp->m_sb.sb_blocklog;
blocks = nsumblocks + XFS_BM_MAXLEVELS(mp, XFS_DATA_FORK) - 1;
- i = -libxfs_trans_alloc_rollable(mp, blocks, &tp);
- if (i)
- res_failed(i);
+ error = -libxfs_trans_alloc_rollable(mp, blocks, &tp);
+ if (error)
+ res_failed(error);
libxfs_trans_ijoin(tp, rsumip, 0);
+
bno = 0;
while (bno < nsumblocks) {
nmap = XFS_BMAP_MAX_NMAP;
error = -libxfs_bmapi_write(tp, rsumip, bno,
(xfs_extlen_t)(nsumblocks - bno),
0, nsumblocks, map, &nmap);
- if (error) {
+ if (error)
fail(_("Allocation of the realtime summary failed"),
error);
- }
+
for (i = 0, ep = map; i < nmap; i++, ep++) {
libxfs_device_zero(mp->m_ddev_targp,
XFS_FSB_TO_DADDR(mp, ep->br_startblock),
@@ -794,6 +792,7 @@ rtinit(
bno += ep->br_blockcount;
}
}
+
error = -libxfs_trans_commit(tp);
if (error)
fail(_("Block allocation of the realtime summary inode failed"),
@@ -804,13 +803,15 @@ rtinit(
* Do one transaction per bitmap block.
*/
for (bno = 0; bno < mp->m_sb.sb_rextents; bno = ebno) {
- i = -libxfs_trans_alloc(mp, &M_RES(mp)->tr_itruncate,
+ error = -libxfs_trans_alloc(mp, &M_RES(mp)->tr_itruncate,
0, 0, 0, &tp);
- if (i)
- res_failed(i);
+ if (error)
+ res_failed(error);
+
libxfs_trans_ijoin(tp, rbmip, 0);
ebno = XFS_RTMIN(mp->m_sb.sb_rextents,
bno + NBBY * mp->m_sb.sb_blocksize);
+
error = -libxfs_rtfree_extent(tp, bno, (xfs_extlen_t)(ebno-bno));
if (error) {
fail(_("Error initializing the realtime space"),