Module Name:    src
Committed By:   pooka
Date:           Wed Oct  7 09:23:03 UTC 2009

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

Log Message:
do initial window allocation test at proper offsets


To generate a diff of this commit:
cvs rdiff -u -r1.27 -r1.28 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.27 src/sys/rump/librump/rumpvfs/rumpblk.c:1.28
--- src/sys/rump/librump/rumpvfs/rumpblk.c:1.27	Wed Oct  7 09:17:54 2009
+++ src/sys/rump/librump/rumpvfs/rumpblk.c	Wed Oct  7 09:23:03 2009
@@ -1,4 +1,4 @@
-/*	$NetBSD: rumpblk.c,v 1.27 2009/10/07 09:17:54 pooka Exp $	*/
+/*	$NetBSD: rumpblk.c,v 1.28 2009/10/07 09:23:03 pooka Exp $	*/
 
 /*
  * Copyright (c) 2009 Antti Kantee.  All Rights Reserved.
@@ -43,7 +43,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: rumpblk.c,v 1.27 2009/10/07 09:17:54 pooka Exp $");
+__KERNEL_RCSID(0, "$NetBSD: rumpblk.c,v 1.28 2009/10/07 09:23:03 pooka Exp $");
 
 #include <sys/param.h>
 #include <sys/buf.h>
@@ -394,7 +394,7 @@
 rumpblk_open(dev_t dev, int flag, int fmt, struct lwp *l)
 {
 	struct rblkdev *rblk = &minors[minor(dev)];
-	uint64_t fsize;
+	uint64_t fsize, off;
 	int dummy;
 	int error, fd;
 
@@ -414,6 +414,9 @@
 		return error;
 #endif
 
+	fsize = rblk->rblk_size;
+	off = rblk->rblk_hostoffset;
+
 	if (rblk->rblk_ftype == RUMPUSER_FT_REG) {
 		struct blkwin *win;
 		int i, winsize;
@@ -435,7 +438,7 @@
 		TAILQ_INIT(&rblk->rblk_lruq);
 		rblk->rblk_fd = fd;
 
-		for (i = 0; i < memwincnt && i * memwinsize < fsize; i++) {
+		for (i = 0; i < memwincnt && off + i*memwinsize < fsize; i++) {
 			win = kmem_zalloc(sizeof(*win), KM_SLEEP);
 			WINVALIDATE(win);
 			TAILQ_INSERT_TAIL(&rblk->rblk_lruq, win, win_lru);
@@ -446,7 +449,8 @@
 			 * necessary VA available
 			 */
 			winsize = 1;
-			win = getwindow(rblk, i*memwinsize, &winsize, &error); 
+			win = getwindow(rblk, off + i*memwinsize, &winsize,
+			    &error); 
 			if (win) {
 				putwindow(rblk, win);
 			} else {

Reply via email to