Module Name:    src
Committed By:   pooka
Date:           Sun Jan 31 13:15:09 UTC 2010

Modified Files:
        src/sys/rump/librump/rumpvfs: rumpblk.c

Log Message:
If RUMP_BLKSECTSHIFT is set in the environment, use that as
device sector size instead of DEV_BSHIFT.


To generate a diff of this commit:
cvs rdiff -u -r1.36 -r1.37 src/sys/rump/librump/rumpvfs/rumpblk.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/rump/librump/rumpvfs/rumpblk.c
diff -u src/sys/rump/librump/rumpvfs/rumpblk.c:1.36 src/sys/rump/librump/rumpvfs/rumpblk.c:1.37
--- src/sys/rump/librump/rumpvfs/rumpblk.c:1.36	Wed Jan 27 22:03:11 2010
+++ src/sys/rump/librump/rumpvfs/rumpblk.c	Sun Jan 31 13:15:08 2010
@@ -1,4 +1,4 @@
-/*	$NetBSD: rumpblk.c,v 1.36 2010/01/27 22:03:11 pooka Exp $	*/
+/*	$NetBSD: rumpblk.c,v 1.37 2010/01/31 13:15:08 pooka Exp $	*/
 
 /*
  * Copyright (c) 2009 Antti Kantee.  All Rights Reserved.
@@ -52,7 +52,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: rumpblk.c,v 1.36 2010/01/27 22:03:11 pooka Exp $");
+__KERNEL_RCSID(0, "$NetBSD: rumpblk.c,v 1.37 2010/01/31 13:15:08 pooka Exp $");
 
 #include <sys/param.h>
 #include <sys/buf.h>
@@ -156,6 +156,7 @@
 static int blkfail;
 static unsigned randstate;
 static kmutex_t rumpblk_lock;
+static int sectshift = DEV_BSHIFT;
 
 static void
 makedefaultlabel(struct disklabel *lp, off_t size, int part)
@@ -165,8 +166,8 @@
 	memset(lp, 0, sizeof(*lp));
 
 	lp->d_secperunit = size;
-	lp->d_secsize = DEV_BSIZE;
-	lp->d_nsectors = size >> DEV_BSHIFT;
+	lp->d_secsize = 1 << sectshift;
+	lp->d_nsectors = size >> sectshift;
 	lp->d_ntracks = 1;
 	lp->d_ncylinders = 1;
 	lp->d_secpercyl = lp->d_nsectors;
@@ -184,7 +185,7 @@
 	for (i = 0; i < part; i++) {
 		lp->d_partitions[i].p_fstype = FS_UNUSED;
 	}
-	lp->d_partitions[part].p_size = size >> DEV_BSHIFT;
+	lp->d_partitions[part].p_size = size >> sectshift;
 	lp->d_npartitions = part+1;
 	/* XXX: file system type? */
 
@@ -337,6 +338,17 @@
 			printf("invalid RUMP_BLKWINCOUNT %d, ", tmp);
 		printf("using %d for memwincount\n", memwincnt);
 	}
+	if (rumpuser_getenv("RUMP_BLKSECTSHIFT", buf, sizeof(buf), &error)==0){
+		printf("rumpblk: ");
+		tmp = strtoul(buf, NULL, 10);
+		if (tmp >= DEV_BSHIFT)
+			sectshift = tmp;
+		else
+			printf("RUMP_BLKSECTSHIFT must be least %d (now %d), ",
+			   DEV_BSHIFT, tmp); 
+		printf("using %d for sector shift (size %d)\n",
+		    sectshift, 1<<sectshift);
+	}
 
 	memset(minors, 0, sizeof(minors));
 	for (i = 0; i < RUMPBLK_SIZE; i++) {
@@ -594,7 +606,7 @@
 		ev_bread_total.ev_count++;
 	}
 
-	off = bp->b_blkno << DEV_BSHIFT;
+	off = bp->b_blkno << sectshift;
 	/*
 	 * Do bounds checking if we're working on a file.  Otherwise
 	 * invalid file systems might attempt to read beyond EOF.  This
@@ -688,9 +700,10 @@
 			if (!async) {
 				/* O_DIRECT not fully automatic yet */
 #ifdef HAS_ODIRECT
-				if ((off & (DEV_BSIZE-1)) == 0
-				    && ((intptr_t)bp->b_data&(DEV_BSIZE-1)) == 0
-				    && (bp->b_bcount & (DEV_BSIZE-1)) == 0)
+				if ((off & ((1<<sectshift)-1)) == 0
+				    && ((intptr_t)bp->b_data
+				      & ((1<<sectshift)-1)) == 0
+				    && (bp->b_bcount & ((1<<sectshift)-1)) == 0)
 					fd = rblk->rblk_dfd;
 				else
 #endif

Reply via email to