From: Eric Sandeen Date: Thu, 31 May 2018 19:09:55 +0000 (-0500) Subject: xfs_repair: fix libxfs api violations in quota repair code X-Git-Tag: v4.17.0-rc1~11 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=585acbe8c577f679a98b8419cbb6109df494705e;p=thirdparty%2Fxfsprogs-dev.git xfs_repair: fix libxfs api violations in quota repair code My "repair quotas" patch forgot about our libxfs API tricks, fix that. Fixes: 5857dce ("xfs_repair: check and repair quota metadata") Signed-off-by: Eric Sandeen Reviewed-by: Darrick J. Wong Signed-off-by: Eric Sandeen --- diff --git a/libxfs/libxfs_api_defs.h b/libxfs/libxfs_api_defs.h index 56f9f8caa..63bf27eac 100644 --- a/libxfs/libxfs_api_defs.h +++ b/libxfs/libxfs_api_defs.h @@ -126,6 +126,10 @@ #define xfs_sb_quota_from_disk libxfs_sb_quota_from_disk #define xfs_sb_to_disk libxfs_sb_to_disk +#define xfs_calc_dquots_per_chunk libxfs_calc_dquots_per_chunk +#define xfs_dquot_verify libxfs_dquot_verify +#define xfs_dquot_repair libxfs_dquot_repair + #define xfs_symlink_blocks libxfs_symlink_blocks #define xfs_symlink_hdr_ok libxfs_symlink_hdr_ok diff --git a/repair/dinode.c b/repair/dinode.c index e8edcd4c4..49d5d058a 100644 --- a/repair/dinode.c +++ b/repair/dinode.c @@ -1345,7 +1345,7 @@ process_quota_inode( } dqchunklen = XFS_FSB_TO_BB(mp, XFS_DQUOT_CLUSTER_SIZE_FSB); - dqperchunk = xfs_calc_dquots_per_chunk(dqchunklen); + dqperchunk = libxfs_calc_dquots_per_chunk(dqchunklen); dqid = 0; qbno = NULLFILEOFF; @@ -1367,12 +1367,12 @@ _("cannot read inode %" PRIu64 ", file block %" PRIu64 ", disk block %" PRIu64 " dqb = bp->b_addr; for (i = 0; i < dqperchunk; i++, dqid++, dqb++) { - xfs_failaddr_t fa; int bad_dqb = 0; /* We only print the first problem we find */ if (xfs_sb_version_hascrc(&mp->m_sb)) { - if (!xfs_verify_cksum((char *)dqb, sizeof(*dqb), + if (!libxfs_verify_cksum((char *)dqb, + sizeof(*dqb), XFS_DQUOT_CRC_OFF)) { do_warn(_("%s: bad CRC for id %u. "), quota_string, dqid); @@ -1388,8 +1388,8 @@ _("cannot read inode %" PRIu64 ", file block %" PRIu64 ", disk block %" PRIu64 " goto bad; } } - fa = xfs_dquot_verify(mp, &dqb->dd_diskdq, dqid, quota_type, 0); - if (fa) { + if (libxfs_dquot_verify(mp, &dqb->dd_diskdq, dqid, + quota_type, 0) != NULL) { do_warn(_("%s: Corrupt quota for id %u. "), quota_string, dqid); bad_dqb = 1; @@ -1401,7 +1401,8 @@ bad: do_warn(_("Would correct.\n")); else { do_warn(_("Corrected.\n")); - xfs_dquot_repair(mp, &dqb->dd_diskdq, dqid, quota_type); + libxfs_dquot_repair(mp, &dqb->dd_diskdq, + dqid, quota_type); writebuf = 1; } }