#include DEF_MPERS_TYPE(struct_blkpg_ioctl_arg)
#include DEF_MPERS_TYPE(struct_blkpg_partition)
-#include <linux/blkpg.h>
+#include <linux/ioctl.h>
#include <linux/fs.h>
+typedef struct {
+ int op;
+ int flags;
+ int datalen;
+ void *data;
+} struct_blkpg_ioctl_arg;
+
+#define BLKPG_DEVNAMELTH 64
+#define BLKPG_VOLNAMELTH 64
+typedef struct {
+ int64_t start; /* starting offset in bytes */
+ int64_t length; /* length in bytes */
+ int pno; /* partition number */
+ char devname[BLKPG_DEVNAMELTH]; /* partition name, like sda5 or c0d1p2,
+ to be used in kernel messages */
+ char volname[BLKPG_VOLNAMELTH]; /* volume label */
+} struct_blkpg_partition;
+
#define BLKTRACE_BDEV_SIZE 32
typedef struct blk_user_trace_setup {
char name[BLKTRACE_BDEV_SIZE]; /* output */
uint32_t pid;
} struct_blk_user_trace_setup;
-typedef struct blkpg_ioctl_arg struct_blkpg_ioctl_arg;
-typedef struct blkpg_partition struct_blkpg_partition;
-
#include MPERS_DEFS
+#ifndef BLKPG
+# define BLKPG _IO(0x12,105)
+#endif
+
/*
* ioctl numbers <= 114 are present in Linux 2.4. The following ones have been
* added since then and headers containing them may not be available on every
tprintf(", flags=%d, datalen=%d, data=",
blkpg->flags, blkpg->datalen);
- if (!umove_or_printaddr(tcp, (long) blkpg->data, &p)) {
- tprintf("{start=%lld, length=%lld, pno=%d, devname=",
- (long long) p.start, (long long) p.length, p.pno);
+ if (!umove_or_printaddr(tcp, ptr_to_kulong(blkpg->data), &p)) {
+ tprintf("{start=%" PRId64 ", length=%" PRId64
+ ", pno=%d, devname=",
+ p.start, p.length, p.pno);
print_quoted_string(p.devname, sizeof(p.devname),
QUOTE_0_TERMINATED);
tprints(", volname=");
tprints("}");
}
-MPERS_PRINTER_DECL(int, block_ioctl, struct tcb *tcp,
- const unsigned int code, const long arg)
+MPERS_PRINTER_DECL(int, block_ioctl, struct tcb *const tcp,
+ const unsigned int code, const kernel_ulong_t arg)
{
switch (code) {
/* take arg as a value, not as a pointer */
case BLKRASET:
case BLKFRASET:
- tprintf(", %lu", arg);
+ tprintf(", %" PRI_klu, arg);
break;
/* return an unsigned short */