From 8214b94c8fd3fdbe50299b2c18766cc2c46546d8 Mon Sep 17 00:00:00 2001
From: Alessandro Rubini <rubini@gnudd.com>
Date: Wed, 23 Nov 2011 18:29:52 +0100
Subject: [PATCH] zio-dump: check ZIO version

Signed-off-by: Alessandro Rubini <rubini@gnudd.com>
Acked-by: Federico Vaga <federico.vaga@gmail.com>
---
 zio-dump.c | 21 +++++++++++++++++++++
 1 file changed, 21 insertions(+)

diff --git a/zio-dump.c b/zio-dump.c
index 2964421..317a8c3 100644
--- a/zio-dump.c
+++ b/zio-dump.c
@@ -20,6 +20,7 @@ char *prgname;
 
 void read_channel(int cfd, int dfd, FILE *log)
 {
+	int err = 0;
 	struct zio_control ctrl;
 	int i, j;
 
@@ -41,6 +42,26 @@ void read_channel(int cfd, int dfd, FILE *log)
 		break; /* ok */
 	}
 
+	/* Fail badly if the version is not the right one */
+	if (ctrl.major_version != ZIO_MAJOR_VERSION)
+		err++;
+	if (ZIO_MAJOR_VERSION == 0 && ctrl.minor_version != ZIO_MINOR_VERSION)
+		err++;
+	if (err) {
+		fprintf(stderr, "%s: kernel has zio %i.%i, "
+			"but I'm compiled for %i.%i\n", prgname,
+			ctrl.major_version, ctrl.minor_version,
+			ZIO_MAJOR_VERSION, ZIO_MINOR_VERSION);
+		exit(1);
+	}
+	if (ctrl.minor_version != ZIO_MINOR_VERSION) {
+		static int warned;
+
+		if (!warned++)
+			fprintf(stderr, "%s: warning: minor version mismatch\n",
+				prgname);
+	}
+
 	printf("Ctrl: version %i.%i, trigger %.16s, dev %.16s, "
 	       "cset %i, chan %i\n",
 	       ctrl.major_version, ctrl.minor_version,
-- 
GitLab