Mpersify decoder of struct xfs_dqstats
* xfs_quota_stat.h: New file. * fetch_struct_xfs_quotastat.c: Likewise. * Makefile.am (strace_SOURCES): Add them. * quota.c: Include xfs_quota_stat.h (struct fs_qfilestat, struct xfs_dqstats): Moved to xfs_quota_stat.h. (decode_cmd_data) <case Q_XGETQSTAT>: Use fetch_struct_quotastat.
This commit is contained in:
parent
44a99c878b
commit
de6e322986
@ -144,6 +144,7 @@ strace_SOURCES = \
|
||||
fetch_struct_stat.c \
|
||||
fetch_struct_stat64.c \
|
||||
fetch_struct_statfs.c \
|
||||
fetch_struct_xfs_quotastat.c \
|
||||
file_handle.c \
|
||||
file_ioctl.c \
|
||||
filter_qualify.c \
|
||||
@ -348,6 +349,7 @@ strace_SOURCES = \
|
||||
v4l2.c \
|
||||
wait.c \
|
||||
xattr.c \
|
||||
xfs_quota_stat.h \
|
||||
xlat.c \
|
||||
xlat.h \
|
||||
xmalloc.c \
|
||||
|
35
fetch_struct_xfs_quotastat.c
Normal file
35
fetch_struct_xfs_quotastat.c
Normal file
@ -0,0 +1,35 @@
|
||||
#include "defs.h"
|
||||
|
||||
#include DEF_MPERS_TYPE(struct_xfs_dqstats)
|
||||
|
||||
#include "xfs_quota_stat.h"
|
||||
typedef struct xfs_dqstats struct_xfs_dqstats;
|
||||
|
||||
#include MPERS_DEFS
|
||||
|
||||
MPERS_PRINTER_DECL(bool, fetch_struct_quotastat, struct tcb *const tcp,
|
||||
const kernel_ulong_t data, void *p)
|
||||
{
|
||||
struct xfs_dqstats *dq = p;
|
||||
struct_xfs_dqstats dqstat;
|
||||
|
||||
if (umove_or_printaddr(tcp, data, &dqstat))
|
||||
return false;
|
||||
|
||||
dq->qs_version = dqstat.qs_version;
|
||||
dq->qs_flags = dqstat.qs_flags;
|
||||
dq->qs_pad = dqstat.qs_pad;
|
||||
dq->qs_uquota.qfs_ino = dqstat.qs_uquota.qfs_ino;
|
||||
dq->qs_uquota.qfs_nblks = dqstat.qs_uquota.qfs_nblks;
|
||||
dq->qs_uquota.qfs_nextents = dqstat.qs_uquota.qfs_nextents;
|
||||
dq->qs_gquota.qfs_ino = dqstat.qs_gquota.qfs_ino;
|
||||
dq->qs_gquota.qfs_nblks = dqstat.qs_gquota.qfs_nblks;
|
||||
dq->qs_gquota.qfs_nextents = dqstat.qs_gquota.qfs_nextents;
|
||||
dq->qs_incoredqs = dqstat.qs_incoredqs;
|
||||
dq->qs_btimelimit = dqstat.qs_btimelimit;
|
||||
dq->qs_itimelimit = dqstat.qs_itimelimit;
|
||||
dq->qs_rtbtimelimit = dqstat.qs_rtbtimelimit;
|
||||
dq->qs_bwarnlimit = dqstat.qs_bwarnlimit;
|
||||
dq->qs_iwarnlimit = dqstat.qs_iwarnlimit;
|
||||
return true;
|
||||
}
|
64
quota.c
64
quota.c
@ -32,6 +32,7 @@
|
||||
|
||||
#include "defs.h"
|
||||
#include "print_fields.h"
|
||||
#include "xfs_quota_stat.h"
|
||||
|
||||
#define SUBCMDMASK 0x00ff
|
||||
#define SUBCMDSHIFT 8
|
||||
@ -114,26 +115,6 @@ struct if_dqinfo {
|
||||
uint32_t dqi_valid;
|
||||
};
|
||||
|
||||
typedef struct fs_qfilestat {
|
||||
uint64_t qfs_ino; /* inode number */
|
||||
uint64_t qfs_nblks; /* number of BBs 512-byte-blks */
|
||||
uint32_t qfs_nextents; /* number of extents */
|
||||
} fs_qfilestat_t;
|
||||
|
||||
struct xfs_dqstats {
|
||||
int8_t qs_version; /* version number for future changes */
|
||||
uint16_t qs_flags; /* XFS_QUOTA_{U,P,G}DQ_{ACCT,ENFD} */
|
||||
int8_t qs_pad; /* unused */
|
||||
fs_qfilestat_t qs_uquota; /* user quota storage information */
|
||||
fs_qfilestat_t qs_gquota; /* group quota storage information */
|
||||
uint32_t qs_incoredqs; /* number of dquots incore */
|
||||
int32_t qs_btimelimit; /* limit for blks timer */
|
||||
int32_t qs_itimelimit; /* limit for inodes timer */
|
||||
int32_t qs_rtbtimelimit; /* limit for rt blks timer */
|
||||
uint16_t qs_bwarnlimit; /* limit for num warnings */
|
||||
uint16_t qs_iwarnlimit; /* limit for num warnings */
|
||||
};
|
||||
|
||||
struct fs_qfilestatv {
|
||||
uint64_t qfs_ino, qfs_nblks;
|
||||
uint32_t qfs_nextents, qfs_pad;
|
||||
@ -336,29 +317,28 @@ decode_cmd_data(struct tcb *tcp, uint32_t id, uint32_t cmd, kernel_ulong_t data)
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (umove_or_printaddr(tcp, data, &dq))
|
||||
break;
|
||||
PRINT_FIELD_D("{", dq, qs_version);
|
||||
if (!abbrev(tcp)) {
|
||||
PRINT_FIELD_FLAGS(", ", dq, qs_flags,
|
||||
xfs_quota_flags, "XFS_QUOTA_???");
|
||||
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("}, ", dq, qs_incoredqs);
|
||||
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(", ...");
|
||||
if (fetch_struct_quotastat(tcp, data, &dq)) {
|
||||
PRINT_FIELD_D("{", dq, qs_version);
|
||||
if (!abbrev(tcp)) {
|
||||
PRINT_FIELD_FLAGS(", ", dq, qs_flags,
|
||||
xfs_quota_flags, "XFS_QUOTA_???");
|
||||
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("}, ", dq, qs_incoredqs);
|
||||
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("}");
|
||||
}
|
||||
tprints("}");
|
||||
break;
|
||||
}
|
||||
case Q_XGETQSTATV:
|
||||
|
22
xfs_quota_stat.h
Normal file
22
xfs_quota_stat.h
Normal file
@ -0,0 +1,22 @@
|
||||
#include <stdint.h>
|
||||
#include "kernel_types.h"
|
||||
|
||||
typedef struct fs_qfilestat {
|
||||
uint64_t qfs_ino; /* inode number */
|
||||
uint64_t qfs_nblks; /* number of BBs 512-byte-blks */
|
||||
uint32_t qfs_nextents; /* number of extents */
|
||||
} fs_qfilestat_t;
|
||||
|
||||
struct xfs_dqstats {
|
||||
int8_t qs_version; /* version number for future changes */
|
||||
uint16_t qs_flags; /* XFS_QUOTA_{U,P,G}DQ_{ACCT,ENFD} */
|
||||
int8_t qs_pad; /* unused */
|
||||
fs_qfilestat_t qs_uquota; /* user quota storage information */
|
||||
fs_qfilestat_t qs_gquota; /* group quota storage information */
|
||||
uint32_t qs_incoredqs; /* number of dquots incore */
|
||||
int32_t qs_btimelimit; /* limit for blks timer */
|
||||
int32_t qs_itimelimit; /* limit for inodes timer */
|
||||
int32_t qs_rtbtimelimit; /* limit for rt blks timer */
|
||||
uint16_t qs_bwarnlimit; /* limit for num warnings */
|
||||
uint16_t qs_iwarnlimit; /* limit for num warnings */
|
||||
};
|
Loading…
Reference in New Issue
Block a user