{
struct xfs_mount *mp = rtg->rtg_mount;
struct xfs_trans *tp;
- struct xfs_inode *dp, *ip;
- const char *path;
struct xfs_btree_cur *bt_cur;
int error;
- path = xfs_rtginode_path(rtg->rtg_rgno, XFS_RTG_RMAP);
- if (!path) {
- dbprintf(
- _("Cannot create path to rtgroup %u rmap inode\n"),
- rtg->rtg_rgno);
- return ENOMEM;
- }
-
error = -libxfs_trans_alloc_empty(mp, &tp);
if (error) {
dbprintf(
_("Cannot alloc transaction to look up rtgroup %u rmap inode\n"),
rtg->rtg_rgno);
- goto out_path;
+ return error;
}
- error = -libxfs_imeta_load(tp, mp->m_metadirip, "realtime", S_IFDIR,
- &dp);
+ error = -xfs_rtginode_load_rtdir(tp);
if (error) {
dbprintf(_("Cannot load realtime inode, error %d\n"),
error);
goto out_trans;
}
- error = -libxfs_imeta_load(tp, dp, path, S_IFREG, &ip);
+ error = -xfs_rtginode_load(rtg, XFS_RTG_RMAP, tp);
if (error) {
dbprintf(_("Cannot load rtgroup %u rmap inode, error %d\n"),
rtg->rtg_rgno, error);
goto out_rele_dp;
}
- bt_cur = libxfs_rtrmapbt_init_cursor(mp, tp, rtg, ip);
+ bt_cur = libxfs_rtrmapbt_init_cursor(mp, tp, rtg,
+ rtg->rtg_inodes[XFS_RTG_RMAP]);
if (!bt_cur) {
dbprintf(_("Not enough memory.\n"));
goto out_rele_ip;
out_cur:
libxfs_btree_del_cursor(bt_cur, error);
out_rele_ip:
- libxfs_irele(ip);
+ libxfs_irele(rtg->rtg_inodes[XFS_RTG_RMAP]);
+ rtg->rtg_inodes[XFS_RTG_RMAP] = NULL;
out_rele_dp:
- libxfs_irele(dp);
+ libxfs_irele(mp->m_rtdirip);
+ mp->m_rtdirip = NULL;
out_trans:
libxfs_trans_cancel(tp);
-out_path:
- kfree(path);
return error;
}