[PATCH] decode FIFREEZE/FITHAW/FITRIM ioctls
Mike Frysinger
vapier at gentoo.org
Fri Nov 21 21:13:16 UTC 2014
The freeze/thaw ones are simple, but the trim is an interesting struct.
* block.c (block_ioctl): Handle FIFREEZE/FITHAW/FITRIM.
* ioctl.c (ioctl_decode): Pass 'X' ioctls to block_ioctl.
---
block.c | 20 ++++++++++++++++++++
ioctl.c | 1 +
2 files changed, 21 insertions(+)
diff --git a/block.c b/block.c
index b281b1a..b62e436 100644
--- a/block.c
+++ b/block.c
@@ -116,6 +116,11 @@ block_ioctl(struct tcb *tcp, long code, long arg)
/* take a signed int */
case BLKROSET:
case BLKBSZSET:
+#ifdef FIFREEZE
+ /* First seen in linux-2.6.29 */
+ case FIFREEZE:
+ case FITHAW:
+#endif
if (entering(tcp)) {
int val;
if (umove(tcp, arg, &val) < 0)
@@ -263,6 +268,21 @@ block_ioctl(struct tcb *tcp, long code, long arg)
}
break;
+#ifdef FITRIM
+ /* First seen in linux-2.6.37 */
+ case FITRIM:
+ if (entering(tcp)) {
+ struct fstrim_range fstrim;
+ if (umove(tcp, arg, &fstrim))
+ tprintf(", %#lx", arg);
+ else
+ tprintf(", {start=%#" PRIx64 ", len=%#" PRIx64 ", "
+ "minlen=%#" PRIx64 "}", (uint64_t) fstrim.start,
+ (uint64_t) fstrim.len, (uint64_t) fstrim.minlen);
+ }
+ break;
+#endif
+
/* No arguments or unhandled */
case BLKTRACESTART:
case BLKTRACESTOP:
diff --git a/ioctl.c b/ioctl.c
index 9c743ce..cfd5a24 100644
--- a/ioctl.c
+++ b/ioctl.c
@@ -85,6 +85,7 @@ ioctl_decode(struct tcb *tcp, long code, long arg)
return rtc_ioctl(tcp, code, arg);
case 0x03:
case 0x12:
+ case 'X':
return block_ioctl(tcp, code, arg);
#ifdef HAVE_SCSI_SG_H
case 0x22:
--
2.1.3
More information about the Strace-devel
mailing list