quota: ensure that names of structure fields are printed properly

* quota.c (PRINT_FIELD_D, PRINT_FIELD_U, PRINT_FIELD_X): New macros.
(decode_cmd_data): Use them to print structure fields.
This commit is contained in:
Дмитрий Левин 2016-09-27 01:08:38 +00:00
parent 906dc4aaa1
commit ee9e7a7e5b

205
quota.c
View File

@ -158,6 +158,18 @@ struct fs_quota_statv {
uint64_t qs_pad2[8];
};
#define PRINT_FIELD_D(prefix, where, field) \
tprintf("%s%s=%lld", (prefix), #field, \
sign_extend_unsigned_to_ll((where).field))
#define PRINT_FIELD_U(prefix, where, field) \
tprintf("%s%s=%llu", (prefix), #field, \
zero_extend_signed_to_ull((where).field))
#define PRINT_FIELD_X(prefix, where, field) \
tprintf("%s%s=%#llx", (prefix), #field, \
zero_extend_signed_to_ull((where).field))
static int
decode_cmd_data(struct tcb *tcp, uint32_t id, uint32_t cmd, unsigned long data)
{
@ -192,21 +204,22 @@ decode_cmd_data(struct tcb *tcp, uint32_t id, uint32_t cmd, unsigned long data)
if (umove_or_printaddr(tcp, data, &dq))
break;
tprintf("{dqb_bhardlimit=%" PRIu64 ", ", dq.dqb_bhardlimit);
tprintf("dqb_bsoftlimit=%" PRIu64 ", ", dq.dqb_bsoftlimit);
tprintf("dqb_curspace=%" PRIu64 ", ", dq.dqb_curspace);
tprintf("dqb_ihardlimit=%" PRIu64 ", ", dq.dqb_ihardlimit);
tprintf("dqb_isoftlimit=%" PRIu64 ", ", dq.dqb_isoftlimit);
tprintf("dqb_curinodes=%" PRIu64 ", ", dq.dqb_curinodes);
PRINT_FIELD_U("{", dq, dqb_bhardlimit);
PRINT_FIELD_U(", ", dq, dqb_bsoftlimit);
PRINT_FIELD_U(", ", dq, dqb_curspace);
PRINT_FIELD_U(", ", dq, dqb_ihardlimit);
PRINT_FIELD_U(", ", dq, dqb_isoftlimit);
PRINT_FIELD_U(", ", dq, dqb_curinodes);
if (!abbrev(tcp)) {
tprintf("dqb_btime=%" PRIu64 ", ", dq.dqb_btime);
tprintf("dqb_itime=%" PRIu64 ", ", dq.dqb_itime);
tprints("dqb_valid=");
PRINT_FIELD_U(", ", dq, dqb_btime);
PRINT_FIELD_U(", ", dq, dqb_itime);
tprints(", dqb_valid=");
printflags(if_dqblk_valid,
dq.dqb_valid, "QIF_???");
tprints("}");
} else
tprints("...}");
} else {
tprints(", ...");
}
tprints("}");
break;
}
case Q_GETNEXTQUOTA:
@ -222,21 +235,24 @@ decode_cmd_data(struct tcb *tcp, uint32_t id, uint32_t cmd, unsigned long data)
if (umove_or_printaddr(tcp, data, &dq))
break;
tprintf("{dqb_bhardlimit=%" PRIu64 ", ", dq.dqb_bhardlimit);
tprintf("dqb_bsoftlimit=%" PRIu64 ", ", dq.dqb_bsoftlimit);
tprintf("dqb_curspace=%" PRIu64 ", ", dq.dqb_curspace);
tprintf("dqb_ihardlimit=%" PRIu64 ", ", dq.dqb_ihardlimit);
tprintf("dqb_isoftlimit=%" PRIu64 ", ", dq.dqb_isoftlimit);
tprintf("dqb_curinodes=%" PRIu64 ", ", dq.dqb_curinodes);
PRINT_FIELD_U("{", dq, dqb_bhardlimit);
PRINT_FIELD_U(", ", dq, dqb_bsoftlimit);
PRINT_FIELD_U(", ", dq, dqb_curspace);
PRINT_FIELD_U(", ", dq, dqb_ihardlimit);
PRINT_FIELD_U(", ", dq, dqb_isoftlimit);
PRINT_FIELD_U(", ", dq, dqb_curinodes);
if (!abbrev(tcp)) {
tprintf("dqb_btime=%" PRIu64 ", ", dq.dqb_btime);
tprintf("dqb_itime=%" PRIu64 ", ", dq.dqb_itime);
tprints("dqb_valid=");
PRINT_FIELD_U(", ", dq, dqb_btime);
PRINT_FIELD_U(", ", dq, dqb_itime);
tprints(", dqb_valid=");
printflags(if_dqblk_valid,
dq.dqb_valid, "QIF_???");
tprintf(", dqb_id=%u}", dq.dqb_id);
} else
tprintf("dqb_id=%u, ...}", dq.dqb_id);
PRINT_FIELD_U(", ", dq, dqb_id);
} else {
PRINT_FIELD_U(", ", dq, dqb_id);
tprints(", ...");
}
tprints("}");
break;
}
case Q_XGETQUOTA:
@ -260,32 +276,32 @@ decode_cmd_data(struct tcb *tcp, uint32_t id, uint32_t cmd, unsigned long data)
if (umove_or_printaddr(tcp, data, &dq))
break;
tprintf("{d_version=%d, ", dq.d_version);
tprints("d_flags=");
PRINT_FIELD_D("{", dq, d_version);
tprints(", d_flags=");
printflags(xfs_dqblk_flags,
(uint8_t) dq.d_flags, "XFS_???_QUOTA");
tprintf(", d_fieldmask=%#x, ", dq.d_fieldmask);
tprintf("d_id=%u, ", dq.d_id);
tprintf("d_blk_hardlimit=%" PRIu64 ", ", dq.d_blk_hardlimit);
tprintf("d_blk_softlimit=%" PRIu64 ", ", dq.d_blk_softlimit);
tprintf("d_ino_hardlimit=%" PRIu64 ", ", dq.d_ino_hardlimit);
tprintf("d_ino_softlimit=%" PRIu64 ", ", dq.d_ino_softlimit);
tprintf("d_bcount=%" PRIu64 ", ", dq.d_bcount);
tprintf("d_icount=%" PRIu64 ", ", dq.d_icount);
PRINT_FIELD_X(", ", dq, d_fieldmask);
PRINT_FIELD_U(", ", dq, d_id);
PRINT_FIELD_U(", ", dq, d_blk_hardlimit);
PRINT_FIELD_U(", ", dq, d_blk_softlimit);
PRINT_FIELD_U(", ", dq, d_ino_hardlimit);
PRINT_FIELD_U(", ", dq, d_ino_softlimit);
PRINT_FIELD_U(", ", dq, d_bcount);
PRINT_FIELD_U(", ", dq, d_icount);
if (!abbrev(tcp)) {
tprintf("d_itimer=%d, ", dq.d_itimer);
tprintf("d_btimer=%d, ", dq.d_btimer);
tprintf("d_iwarns=%u, ", dq.d_iwarns);
tprintf("d_bwarns=%u, ", dq.d_bwarns);
tprintf("d_rtb_hardlimit=%" PRIu64 ", ",
dq.d_rtb_hardlimit);
tprintf("d_rtb_softlimit=%" PRIu64 ", ",
dq.d_rtb_softlimit);
tprintf("d_rtbcount=%" PRIu64 ", ", dq.d_rtbcount);
tprintf("d_rtbtimer=%d, ", dq.d_rtbtimer);
tprintf("d_rtbwarns=%u}", dq.d_rtbwarns);
} else
tprints("...}");
PRINT_FIELD_D(", ", dq, d_itimer);
PRINT_FIELD_D(", ", dq, d_btimer);
PRINT_FIELD_U(", ", dq, d_iwarns);
PRINT_FIELD_U(", ", dq, d_bwarns);
PRINT_FIELD_U(", ", dq, d_rtb_hardlimit);
PRINT_FIELD_U(", ", dq, d_rtb_softlimit);
PRINT_FIELD_U(", ", dq, d_rtbcount);
PRINT_FIELD_D(", ", dq, d_rtbtimer);
PRINT_FIELD_U(", ", dq, d_rtbwarns);
} else {
tprints(", ...");
}
tprints("}");
break;
}
case Q_GETFMT:
@ -322,9 +338,9 @@ decode_cmd_data(struct tcb *tcp, uint32_t id, uint32_t cmd, unsigned long data)
if (umove_or_printaddr(tcp, data, &dq))
break;
tprintf("{dqi_bgrace=%" PRIu64 ", ", dq.dqi_bgrace);
tprintf("dqi_igrace=%" PRIu64 ", ", dq.dqi_igrace);
tprints("dqi_flags=");
PRINT_FIELD_U("{", dq, dqi_bgrace);
PRINT_FIELD_U(", ", dq, dqi_igrace);
tprints(", dqi_flags=");
printflags(if_dqinfo_flags, dq.dqi_flags, "DQF_???");
tprints(", dqi_valid=");
printflags(if_dqinfo_valid, dq.dqi_valid, "IIF_???");
@ -343,28 +359,27 @@ decode_cmd_data(struct tcb *tcp, uint32_t id, uint32_t cmd, unsigned long data)
if (umove_or_printaddr(tcp, data, &dq))
break;
tprintf("{qs_version=%d, ", dq.qs_version);
if (abbrev(tcp)) {
tprints("...}");
break;
PRINT_FIELD_D("{", dq, qs_version);
if (!abbrev(tcp)) {
tprints(", qs_flags=");
printflags(xfs_quota_flags,
dq.qs_flags, "XFS_QUOTA_???");
PRINT_FIELD_U(", ", dq, qs_incoredqs);
PRINT_FIELD_U(", qs_uquota={", dq.qs_uquota, qfs_ino);
PRINT_FIELD_U(", ", dq.qs_uquota, qfs_nblks);
PRINT_FIELD_U(", ", dq.qs_uquota, qfs_nextents);
PRINT_FIELD_U("}, qs_gquota={", dq.qs_gquota, qfs_ino);
PRINT_FIELD_U(", ", dq.qs_gquota, qfs_nblks);
PRINT_FIELD_U(", ", dq.qs_gquota, qfs_nextents);
PRINT_FIELD_D("}, ", dq, qs_btimelimit);
PRINT_FIELD_D(", ", dq, qs_itimelimit);
PRINT_FIELD_D(", ", dq, qs_rtbtimelimit);
PRINT_FIELD_U(", ", dq, qs_bwarnlimit);
PRINT_FIELD_U(", ", dq, qs_iwarnlimit);
} else {
tprints(", ...");
}
tprints("qs_flags=");
printflags(xfs_quota_flags,
dq.qs_flags, "XFS_QUOTA_???");
tprintf(", qs_incoredqs=%u, ", dq.qs_incoredqs);
tprints("qs_uquota={");
tprintf("qfs_ino=%" PRIu64 ", ", dq.qs_uquota.qfs_ino);
tprintf("qfs_nblks=%" PRIu64 ", ", dq.qs_uquota.qfs_nblks);
tprintf("qfs_nextents=%u}, ", dq.qs_uquota.qfs_nextents);
tprints("qs_gquota={");
tprintf("qfs_ino=%" PRIu64 ", ", dq.qs_gquota.qfs_ino);
tprintf("qfs_nblks=%" PRIu64 ", ", dq.qs_gquota.qfs_nblks);
tprintf("qfs_nextents=%u}, ", dq.qs_gquota.qfs_nextents);
tprintf("qs_btimelimit=%d, ", dq.qs_btimelimit);
tprintf("qs_itimelimit=%d, ", dq.qs_itimelimit);
tprintf("qs_rtbtimelimit=%d, ", dq.qs_rtbtimelimit);
tprintf("qs_bwarnlimit=%u, ", dq.qs_bwarnlimit);
tprintf("qs_iwarnlimit=%u}", dq.qs_iwarnlimit);
tprints("}");
break;
}
case Q_XGETQSTATV:
@ -379,32 +394,30 @@ decode_cmd_data(struct tcb *tcp, uint32_t id, uint32_t cmd, unsigned long data)
if (umove_or_printaddr(tcp, data, &dq))
break;
tprintf("{qs_version=%d, ", dq.qs_version);
if (abbrev(tcp)) {
tprints("...}");
break;
PRINT_FIELD_D("{", dq, qs_version);
if (!abbrev(tcp)) {
tprints(", qs_flags=");
printflags(xfs_quota_flags,
dq.qs_flags, "XFS_QUOTA_???");
PRINT_FIELD_U(", ", dq, qs_incoredqs);
PRINT_FIELD_U(", qs_uquota={", dq.qs_uquota, qfs_ino);
PRINT_FIELD_U(", ", dq.qs_uquota, qfs_nblks);
PRINT_FIELD_U(", ", dq.qs_uquota, qfs_nextents);
PRINT_FIELD_U("}, qs_gquota={", dq.qs_gquota, qfs_ino);
PRINT_FIELD_U(", ", dq.qs_gquota, qfs_nblks);
PRINT_FIELD_U(", ", dq.qs_gquota, qfs_nextents);
PRINT_FIELD_U("}, qs_pquota={", dq.qs_pquota, qfs_ino);
PRINT_FIELD_U(", ", dq.qs_pquota, qfs_nblks);
PRINT_FIELD_U(", ", dq.qs_pquota, qfs_nextents);
PRINT_FIELD_D("}, ", dq, qs_btimelimit);
PRINT_FIELD_D(", ", dq, qs_itimelimit);
PRINT_FIELD_D(", ", dq, qs_rtbtimelimit);
PRINT_FIELD_U(", ", dq, qs_bwarnlimit);
PRINT_FIELD_U(", ", dq, qs_iwarnlimit);
} else {
tprints(", ...");
}
tprints("qs_flags=");
printflags(xfs_quota_flags,
dq.qs_flags, "XFS_QUOTA_???");
tprintf(", qs_incoredqs=%u, ", dq.qs_incoredqs);
tprints("qs_uquota={");
tprintf("qfs_ino=%" PRIu64 ", ", dq.qs_uquota.qfs_ino);
tprintf("qfs_nblks=%" PRIu64 ", ", dq.qs_uquota.qfs_nblks);
tprintf("qfs_nextents=%u}, ", dq.qs_uquota.qfs_nextents);
tprints("qs_gquota={");
tprintf("qfs_ino=%" PRIu64 ", ", dq.qs_gquota.qfs_ino);
tprintf("qfs_nblks=%" PRIu64 ", ", dq.qs_gquota.qfs_nblks);
tprintf("qfs_nextents=%u}, ", dq.qs_gquota.qfs_nextents);
tprints("qs_pquota={");
tprintf("qfs_ino=%" PRIu64 ", ", dq.qs_pquota.qfs_ino);
tprintf("qfs_nblks=%" PRIu64 ", ", dq.qs_pquota.qfs_nblks);
tprintf("qfs_nextents=%u}, ", dq.qs_pquota.qfs_nextents);
tprintf("qs_btimelimit=%d, ", dq.qs_btimelimit);
tprintf("qs_itimelimit=%d, ", dq.qs_itimelimit);
tprintf("qs_rtbtimelimit=%d, ", dq.qs_rtbtimelimit);
tprintf("qs_bwarnlimit=%u, ", dq.qs_bwarnlimit);
tprintf("qs_iwarnlimit=%u}", dq.qs_iwarnlimit);
tprints("}");
break;
}
case Q_XQUOTAON: