struct xfs_mount *mp = tp->t_mountp;
int error;
+ /*
+ * Don't use metafile iget here because we're resetting sb-rooted
+ * inodes that live at fixed inumbers, but these inodes could be in
+ * an arbitrary state.
+ */
error = -libxfs_iget(mp, tp, ino, 0, ipp);
if (error)
return error;
fill_rbmino(
struct xfs_mount *mp)
{
- struct xfs_trans *tp;
struct xfs_inode *ip;
int error;
- error = -libxfs_trans_alloc_rollable(mp, 10, &tp);
- if (error)
- res_failed(error);
-
- error = -libxfs_iget(mp, tp, mp->m_sb.sb_rbmino, 0, &ip);
- libxfs_trans_cancel(tp);
+ error = -libxfs_metafile_iget(mp, mp->m_sb.sb_rbmino,
+ XFS_METAFILE_RTBITMAP, &ip);
if (error)
do_error(
_("couldn't iget realtime bitmap inode, error %d\n"), error);
fill_rsumino(
struct xfs_mount *mp)
{
- struct xfs_trans *tp;
struct xfs_inode *ip;
int error;
- error = -libxfs_trans_alloc_rollable(mp, 10, &tp);
- if (error)
- res_failed(error);
-
- error = -libxfs_iget(mp, tp, mp->m_sb.sb_rsumino, 0, &ip);
- libxfs_trans_cancel(tp);
+ error = -libxfs_metafile_iget(mp, mp->m_sb.sb_rsumino,
+ XFS_METAFILE_RTSUMMARY, &ip);
if (error)
do_error(
_("couldn't iget realtime summary inode, error %d\n"), error);
struct xfs_ifork *ifp;
struct qc_dquots *dquots = NULL;
struct avl64node *node, *n;
+ struct xfs_trans *tp;
xfs_ino_t ino = NULLFSINO;
+ enum xfs_metafile_type metafile_type;
int error;
switch (type) {
case XFS_DQTYPE_USER:
ino = mp->m_sb.sb_uquotino;
dquots = user_dquots;
+ metafile_type = XFS_METAFILE_USRQUOTA;
break;
case XFS_DQTYPE_GROUP:
ino = mp->m_sb.sb_gquotino;
dquots = group_dquots;
+ metafile_type = XFS_METAFILE_GRPQUOTA;
break;
case XFS_DQTYPE_PROJ:
ino = mp->m_sb.sb_pquotino;
dquots = proj_dquots;
+ metafile_type = XFS_METAFILE_PRJQUOTA;
break;
}
if (!dquots || !chkd_flags)
return;
- error = -libxfs_iget(mp, NULL, ino, 0, &ip);
+ error = -libxfs_trans_alloc_empty(mp, &tp);
+ if (error)
+ do_error(_("could not alloc transaction to open quota file\n"));
+
+ error = -libxfs_trans_metafile_iget(tp, ino, metafile_type, &ip);
if (error) {
do_warn(
_("could not open %s inode %"PRIu64" for quotacheck, err=%d\n"),
qflags_typestr(type), ino, error);
chkd_flags = 0;
- return;
+ goto out_trans;
}
ifp = xfs_ifork_ptr(ip, XFS_DATA_FORK);
- error = -libxfs_iread_extents(NULL, ip, XFS_DATA_FORK);
+ error = -libxfs_iread_extents(tp, ip, XFS_DATA_FORK);
if (error) {
do_warn(
_("could not read %s inode %"PRIu64" extents, err=%d\n"),
}
err:
libxfs_irele(ip);
+out_trans:
+ libxfs_trans_cancel(tp);
}
/*
static void
check_rtfile_contents(
struct xfs_mount *mp,
- const char *filename,
- xfs_ino_t ino,
- void *buf,
+ enum xfs_metafile_type metafile_type,
xfs_fileoff_t filelen)
{
struct xfs_bmbt_irec map;
struct xfs_buf *bp;
struct xfs_inode *ip;
+ const char *filename;
+ void *buf;
+ xfs_ino_t ino;
xfs_fileoff_t bno = 0;
int error;
- error = -libxfs_iget(mp, NULL, ino, 0, &ip);
+ switch (metafile_type) {
+ case XFS_METAFILE_RTBITMAP:
+ ino = mp->m_sb.sb_rbmino;
+ filename = "rtbitmap";
+ buf = btmcompute;
+ break;
+ case XFS_METAFILE_RTSUMMARY:
+ ino = mp->m_sb.sb_rsumino;
+ filename = "rtsummary";
+ buf = sumcompute;
+ break;
+ default:
+ return;
+ }
+
+ error = -libxfs_metafile_iget(mp, ino, metafile_type, &ip);
if (error) {
do_warn(_("unable to open %s file, err %d\n"), filename, error);
return;
if (need_rbmino)
return;
- check_rtfile_contents(mp, "rtbitmap", mp->m_sb.sb_rbmino, btmcompute,
+ check_rtfile_contents(mp, XFS_METAFILE_RTBITMAP,
mp->m_sb.sb_rbmblocks);
}
if (need_rsumino)
return;
- check_rtfile_contents(mp, "rtsummary", mp->m_sb.sb_rsumino, sumcompute,
- mp->m_rsumblocks);
+ check_rtfile_contents(mp, XFS_METAFILE_RTSUMMARY, mp->m_rsumblocks);
}