[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