id argument is not used for Q_QUOTAOFF, Q_GETFMT, Q_V2_GETINFO, Q_GETINFO, Q_V2_SEETINFO, Q_SETINFO, Q_SYNC, Q_XQUOTAON, Q_XQUOTAOFF, Q_XQUOTARM, Q_XGETQSTAT, Q_XGETQSTATV, Q_XQUOTASYNC, Q_V1_GETSTATS, Q_V2_GETSTATS subcommands, so it makes sense to avoid printing it.
* quota.c (decode_cmd_data): Add id argument parameter, add printing of id argument for Q_GETQUOTA, Q_SETQUOTA, Q_GETNEXTQUOTA, Q_V1_GETQUOTA, Q_V1_SETQUOTA, Q_V2_GETQUOTA, Q_V2_SETQUOTA, Q_XGETQUOTA, Q_XGETNEXTQUOTA, Q_XSETQLIM subcommands and the default case; (SYS_FUNC(quotactl)): remove printing of id argument, add id argument to decode_cmd_data call. --- quota.c | 115 ++++++++++++++++++++++++++++++++++++++++++++++++++++++--------- 1 file changed, 100 insertions(+), 15 deletions(-) diff --git a/quota.c b/quota.c index efef4ed..495bd5f 100644 --- a/quota.c +++ b/quota.c @@ -212,16 +212,29 @@ struct fs_quota_statv { }; static int -decode_cmd_data(struct tcb *tcp, uint32_t cmd, unsigned long data) +decode_cmd_data(struct tcb *tcp, uint32_t id, uint32_t cmd, unsigned long data) { switch (cmd) { + case Q_QUOTAOFF: + break; case Q_GETQUOTA: - if (entering(tcp)) + if (entering(tcp)) { + printuid(", ", id); + tprints(", "); + return 0; + } + + /* Fall-through */ case Q_SETQUOTA: { struct if_dqblk dq; + if (entering(tcp)) { + printuid(", ", id); + tprints(", "); + } + if (umove_or_printaddr(tcp, data, &dq)) break; tprintf("{bhardlimit=%" PRIu64 ", ", dq.dqb_bhardlimit); @@ -245,8 +258,13 @@ decode_cmd_data(struct tcb *tcp, uint32_t cmd, unsigned long data) { struct if_nextdqblk dq; - if (entering(tcp)) + if (entering(tcp)) { + printuid(", ", id); + tprints(", "); + return 0; + } + if (umove_or_printaddr(tcp, data, &dq)) break; tprintf("{bhardlimit=%" PRIu64 ", ", dq.dqb_bhardlimit); @@ -267,12 +285,23 @@ decode_cmd_data(struct tcb *tcp, uint32_t cmd, unsigned long data) break; } case Q_V1_GETQUOTA: - if (entering(tcp)) + if (entering(tcp)) { + printuid(", ", id); + tprints(", "); + return 0; + } + + /* Fall-through */ case Q_V1_SETQUOTA: { struct v1_dqblk dq; + if (entering(tcp)) { + printuid(", ", id); + tprints(", "); + } + if (umove_or_printaddr(tcp, data, &dq)) break; tprintf("{bhardlimit=%u, ", dq.dqb_bhardlimit); @@ -286,12 +315,23 @@ decode_cmd_data(struct tcb *tcp, uint32_t cmd, unsigned long data) break; } case Q_V2_GETQUOTA: - if (entering(tcp)) + if (entering(tcp)) { + printuid(", ", id); + tprints(", "); + return 0; + } + + /* Fall-through */ case Q_V2_SETQUOTA: { struct v2_dqblk dq; + if (entering(tcp)) { + printuid(", ", id); + tprints(", "); + } + if (umove_or_printaddr(tcp, data, &dq)) break; tprintf("{ihardlimit=%u, ", dq.dqb_ihardlimit); @@ -306,12 +346,23 @@ decode_cmd_data(struct tcb *tcp, uint32_t cmd, unsigned long data) } case Q_XGETQUOTA: case Q_XGETNEXTQUOTA: - if (entering(tcp)) + if (entering(tcp)) { + printuid(", ", id); + tprints(", "); + return 0; + } + + /* Fall-through */ case Q_XSETQLIM: { struct xfs_dqblk dq; + if (entering(tcp)) { + printuid(", ", id); + tprints(", "); + } + if (umove_or_printaddr(tcp, data, &dq)) break; tprintf("{version=%d, ", dq.d_version); @@ -342,8 +393,12 @@ decode_cmd_data(struct tcb *tcp, uint32_t cmd, unsigned long data) { uint32_t fmt; - if (entering(tcp)) + if (entering(tcp)) { + tprints(", "); + return 0; + } + if (umove_or_printaddr(tcp, data, &fmt)) break; tprints("["); @@ -352,12 +407,20 @@ decode_cmd_data(struct tcb *tcp, uint32_t cmd, unsigned long data) break; } case Q_GETINFO: - if (entering(tcp)) + if (entering(tcp)) { + tprints(", "); + return 0; + } + + /* Fall-through */ case Q_SETINFO: { struct if_dqinfo dq; + if (entering(tcp)) + tprints(", "); + if (umove_or_printaddr(tcp, data, &dq)) break; tprintf("{bgrace=%" PRIu64 ", ", dq.dqi_bgrace); @@ -370,12 +433,20 @@ decode_cmd_data(struct tcb *tcp, uint32_t cmd, unsigned long data) break; } case Q_V2_GETINFO: - if (entering(tcp)) + if (entering(tcp)) { + tprints(", "); + return 0; + } + + /* Fall-through */ case Q_V2_SETINFO: { struct v2_dqinfo dq; + if (entering(tcp)) + tprints(", "); + if (umove_or_printaddr(tcp, data, &dq)) break; tprintf("{bgrace=%u, ", dq.dqi_bgrace); @@ -391,6 +462,8 @@ decode_cmd_data(struct tcb *tcp, uint32_t cmd, unsigned long data) { struct v1_dqstats dq; + tprints(", "); + if (entering(tcp)) return 0; if (umove_or_printaddr(tcp, data, &dq)) @@ -409,6 +482,8 @@ decode_cmd_data(struct tcb *tcp, uint32_t cmd, unsigned long data) { struct v2_dqstats dq; + tprints(", "); + if (entering(tcp)) return 0; if (umove_or_printaddr(tcp, data, &dq)) @@ -428,8 +503,12 @@ decode_cmd_data(struct tcb *tcp, uint32_t cmd, unsigned long data) { struct xfs_dqstats dq; - if (entering(tcp)) + if (entering(tcp)) { + tprints(", "); + return 0; + } + if (umove_or_printaddr(tcp, data, &dq)) break; tprintf("{version=%d, ", dq.qs_version); @@ -458,8 +537,12 @@ decode_cmd_data(struct tcb *tcp, uint32_t cmd, unsigned long data) { struct fs_quota_statv dq; - if (entering(tcp)) + if (entering(tcp)) { + tprints(", "); + return 0; + } + if (umove_or_printaddr(tcp, data, &dq)) break; tprintf("{version=%d, ", dq.qs_version); @@ -492,6 +575,8 @@ decode_cmd_data(struct tcb *tcp, uint32_t cmd, unsigned long data) { uint32_t flag; + tprints(", "); + if (umove_or_printaddr(tcp, data, &flag)) break; tprints("["); @@ -500,6 +585,8 @@ decode_cmd_data(struct tcb *tcp, uint32_t cmd, unsigned long data) break; } default: + printuid(", ", id); + tprints(", "); printaddr(data); break; } @@ -526,17 +613,15 @@ SYS_FUNC(quotactl) printxval(quotatypes, type, "???QUOTA"); tprints("), "); printpath(tcp, tcp->u_arg[1]); - tprints(", "); switch (cmd) { case Q_QUOTAON: case Q_V1_QUOTAON: + tprints(", "); printxval(quota_formats, id, "QFMT_VFS_???"); tprints(", "); printpath(tcp, tcp->u_arg[3]); return RVAL_DECODED; } - printuid("", id); - tprints(", "); } - return decode_cmd_data(tcp, cmd, tcp->u_arg[3]); + return decode_cmd_data(tcp, id, cmd, tcp->u_arg[3]); } -- 1.7.10.4 ------------------------------------------------------------------------------ _______________________________________________ Strace-devel mailing list Strace-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/strace-devel