From: Dmitry V. Levin Date: Tue, 19 Jan 2016 21:48:59 +0000 (+0000) Subject: quotactl: add Q_XGETQSTATV command decoding X-Git-Tag: v4.12~626 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=ed227111a43a200e01bae751435f1c089df8b60a;p=strace quotactl: add Q_XGETQSTATV command decoding * quota.c (fs_qfilestatv, fs_quota_statv): New structures. (decode_cmd_data): Handle Q_XGETQSTATV case. --- diff --git a/quota.c b/quota.c index 5926e2e0..a113d466 100644 --- a/quota.c +++ b/quota.c @@ -177,6 +177,27 @@ struct xfs_dqstats uint16_t qs_iwarnlimit; /* limit for num warnings */ }; +struct fs_qfilestatv { + uint64_t qfs_ino, qfs_nblks; + uint32_t qfs_nextents, qfs_pad; +}; + +struct fs_quota_statv { + int8_t qs_version; + uint8_t qs_pad1; + uint16_t qs_flags; + uint32_t qs_incoredqs; + struct fs_qfilestatv qs_uquota; + struct fs_qfilestatv qs_gquota; + struct fs_qfilestatv qs_pquota; + int32_t qs_btimelimit; + int32_t qs_itimelimit; + int32_t qs_rtbtimelimit; + uint16_t qs_bwarnlimit; + uint16_t qs_iwarnlimit; + uint64_t qs_pad2[8]; +}; + static int decode_cmd_data(struct tcb *tcp, uint32_t cmd, unsigned long data) { @@ -394,6 +415,39 @@ decode_cmd_data(struct tcb *tcp, uint32_t cmd, unsigned long data) tprintf("iwarnlimit=%u}", dq.qs_iwarnlimit); break; } + case Q_XGETQSTATV: + { + struct fs_quota_statv dq; + + if (entering(tcp)) + return 0; + if (umove_or_printaddr(tcp, data, &dq)) + break; + tprintf("{version=%d, ", dq.qs_version); + if (abbrev(tcp)) { + tprints("...}"); + break; + } + tprints("flags="); + printflags(xfs_quota_flags, + dq.qs_flags, "XFS_QUOTA_???"); + tprintf(", incoredqs=%u, ", dq.qs_incoredqs); + tprintf("u_ino=%" PRIu64 ", ", dq.qs_uquota.qfs_ino); + tprintf("u_nblks=%" PRIu64 ", ", dq.qs_uquota.qfs_nblks); + tprintf("u_nextents=%u, ", dq.qs_uquota.qfs_nextents); + tprintf("g_ino=%" PRIu64 ", ", dq.qs_gquota.qfs_ino); + tprintf("g_nblks=%" PRIu64 ", ", dq.qs_gquota.qfs_nblks); + tprintf("g_nextents=%u, ", dq.qs_gquota.qfs_nextents); + tprintf("p_ino=%" PRIu64 ", ", dq.qs_pquota.qfs_ino); + tprintf("p_nblks=%" PRIu64 ", ", dq.qs_pquota.qfs_nblks); + tprintf("p_nextents=%u, ", dq.qs_pquota.qfs_nextents); + tprintf("btimelimit=%d, ", dq.qs_btimelimit); + tprintf("itimelimit=%d, ", dq.qs_itimelimit); + tprintf("rtbtimelimit=%d, ", dq.qs_rtbtimelimit); + tprintf("bwarnlimit=%u, ", dq.qs_bwarnlimit); + tprintf("iwarnlimit=%u}", dq.qs_iwarnlimit); + break; + } case Q_XQUOTAON: case Q_XQUOTAOFF: {