[PATCH 3/4] xfs_repair: call IRELE(ip) after libxfs_trans_iget calls

Eric Sandeen
2015-08-20T18:10:11Z

Commit 260c85e libxfs: dont free xfs_inode until complete
changed the alloc/free convention a bit:

Originally, the xfs_inode are released upon the first
call to xfs_trans_cancel, xfs_trans_commit, or
inode_item_done.
<snip>
This patch does the following:
1) Removes the iput from the transaction completion and
requires that the xfs_inode allocators call IRELE()
when they are done with the pointer.

But that change missed several callers in xfs_repair phase6;
fix that up.

Addresses-Coverity-Id: 1315100
Addresses-Coverity-Id: 1315101
Signed-off-by: Eric Sandeen <sandeen@redhat.com>
---
repair/phase6.c | 6 ++++++
1 files changed, 6 insertions(+), 0 deletions(-)

diff --git a/repair/phase6.c b/repair/phase6.c
index 9cfedbf..04638c2 100644
--- a/repair/phase6.c
+++ b/repair/phase6.c
@@ -585,6 +585,7 @@ mk_rbmino(xfs_mount_t *mp)
error);
}
libxfs_trans_commit(tp);
+ IRELE(ip);
}

static int
@@ -654,6 +655,7 @@ _("can't access block %" PRIu64 " (fsbno %" PRIu64 ") of realtime bitmap inode %
}

libxfs_trans_commit(tp);
+ IRELE(ip);
return(0);
}

@@ -714,6 +716,7 @@ fill_rsumino(xfs_mount_t *mp)
do_warn(
_("can't access block %" PRIu64 " (fsbno %" PRIu64 ") of realtime summary inode %" PRIu64 "\n"),
bno, map.br_startblock, mp->m_sb.sb_rsumino);
+ IRELE(ip);
return(1);
}

@@ -726,6 +729,7 @@ _("can't access block %" PRIu64 " (fsbno %" PRIu64 ") of realtime summary inode
}

libxfs_trans_commit(tp);
+ IRELE(ip);
return(0);
}

@@ -846,6 +850,7 @@ mk_rsumino(xfs_mount_t *mp)
error);
}
libxfs_trans_commit(tp);
+ IRELE(ip);
}

/*
@@ -920,6 +925,7 @@ mk_root_dir(xfs_mount_t *mp)
libxfs_dir_init(tp, ip, ip);

libxfs_trans_commit(tp);
+ IRELE(ip);

irec = find_inode_rec(mp, XFS_INO_TO_AGNO(mp, mp->m_sb.sb_rootino),
XFS_INO_TO_AGINO(mp, mp->m_sb.sb_rootino));