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);