Module Name:    src
Committed By:   pooka
Date:           Mon Jun 21 14:25:36 UTC 2010

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

Log Message:
Calculate memory mapping size based on underlying file size, not
our window to it.  This fixes cases like opening a window at offsets
[8,32] to a file, which would cause host file offset [0,32-8] to
be mapped, i.e. [0,16] inside the window.  Obviously, access to
the entire in-window [0,24] range should have been mapped (and
after this fix it is).


To generate a diff of this commit:
cvs rdiff -u -r1.40 -r1.41 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.40 src/sys/rump/librump/rumpvfs/rumpblk.c:1.41
--- src/sys/rump/librump/rumpvfs/rumpblk.c:1.40	Tue Jun 15 18:53:48 2010
+++ src/sys/rump/librump/rumpvfs/rumpblk.c	Mon Jun 21 14:25:35 2010
@@ -1,4 +1,4 @@
-/*	$NetBSD: rumpblk.c,v 1.40 2010/06/15 18:53:48 pooka Exp $	*/
+/*	$NetBSD: rumpblk.c,v 1.41 2010/06/21 14:25:35 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.40 2010/06/15 18:53:48 pooka Exp $");
+__KERNEL_RCSID(0, "$NetBSD: rumpblk.c,v 1.41 2010/06/21 14:25:35 pooka Exp $");
 
 #include <sys/param.h>
 #include <sys/buf.h>
@@ -83,7 +83,8 @@
 
 #define STARTWIN(off)		((off) & ~((off_t)memwinsize-1))
 #define INWIN(win,off)		((win)->win_off == STARTWIN(off))
-#define WINSIZE(rblk, win)	(MIN((rblk->rblk_size-win->win_off),memwinsize))
+#define WINSIZE(rblk, win)	(MIN((rblk->rblk_hostsize-win->win_off), \
+				      memwinsize))
 #define WINVALID(win)		((win)->win_off != (off_t)-1)
 #define WINVALIDATE(win)	((win)->win_off = (off_t)-1)
 struct blkwin {
@@ -104,6 +105,7 @@
 #endif
 	uint64_t rblk_size;
 	uint64_t rblk_hostoffset;
+	uint64_t rblk_hostsize;
 	int rblk_ftype;
 
 	/* for mmap */
@@ -433,6 +435,7 @@
 		KASSERT(offset < flen);
 		rblk->rblk_size = flen - offset;
 	}
+	rblk->rblk_hostsize = flen;
 	rblk->rblk_ftype = ftype;
 	makedefaultlabel(&rblk->rblk_label, rblk->rblk_size, i);
 	mutex_exit(&rumpblk_lock);

Reply via email to