Only use blocksizes > 4k on Linux 2.6 and newer systems.  
(Addresses Debian Bug #271064)

diff --git a/misc/mke2fs.c b/misc/mke2fs.c
index fd912c9..fcc9eec 100644
--- a/misc/mke2fs.c
+++ b/misc/mke2fs.c
@@ -85,6 +85,7 @@
 int sync_kludge;	/* Set using the MKE2FS_SYNC env. option */
 
 int sys_page_size = 4096;
+int linux_version_code = 0;
 
 static void usage(void)
 {
@@ -119,6 +120,30 @@
 	return l;
 }
 
+static int parse_version_number(const char *s)
+{
+	int	major, minor, rev;
+	char	*endptr;
+	const char *cp = s;
+
+	if (!s)
+		return 0;
+	major = strtol(cp, &endptr, 10);
+	if (cp == endptr || *endptr != '.')
+		return 0;
+	cp = endptr + 1;
+	minor = strtol(cp, &endptr, 10);
+	if (cp == endptr || *endptr != '.')
+		return 0;
+	cp = endptr + 1;
+	rev = strtol(cp, &endptr, 10);
+	if (cp == endptr)
+		return 0;
+	return ((((major * 256) + minor) * 256) + rev);
+}
+
+
+
 /*
  * This function sets the default parameters for a filesystem
  *
@@ -172,8 +197,12 @@
 		use_bsize = p->blocksize;
 	}
 	if (blocksize <= 0) {
-		if (use_bsize == DEF_MAX_BLOCKSIZE)
+		if (use_bsize == DEF_MAX_BLOCKSIZE) {
 			use_bsize = sys_page_size;
+			if ((linux_version_code < (2*65536 + 6*256)) &&
+			    (use_bsize > 4096))
+				use_bsize = 4096;
+		}
 		if (sector_size && use_bsize < sector_size)
 			use_bsize = sector_size;
 		if ((blocksize < 0) && (use_bsize < (-blocksize)))
@@ -868,9 +897,8 @@
 		perror("uname");
 		exit(1);
 	}
-	if ((ut.release[0] == '1') ||
-	    (ut.release[0] == '2' && ut.release[1] == '.' &&
-	     ut.release[2] < '2' && ut.release[3] == '.')) {
+	linux_version_code = parse_version_number(ut.release);
+	if (linux_version_code && linux_version_code < (2*65536 + 2*256)) {
 		param.s_rev_level = 0;
 		param.s_feature_incompat = 0;
 		param.s_feature_compat = 0;