Module Name: src Committed By: pooka Date: Mon Aug 3 16:22:00 UTC 2009
Modified Files: src/sys/rump/librump/rumpvfs: Makefile.rumpvfs rumpblk.c Log Message: Support read/write in rumpblk via physio() To generate a diff of this commit: cvs rdiff -u -r1.9 -r1.10 src/sys/rump/librump/rumpvfs/Makefile.rumpvfs cvs rdiff -u -r1.24 -r1.25 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/Makefile.rumpvfs diff -u src/sys/rump/librump/rumpvfs/Makefile.rumpvfs:1.9 src/sys/rump/librump/rumpvfs/Makefile.rumpvfs:1.10 --- src/sys/rump/librump/rumpvfs/Makefile.rumpvfs:1.9 Wed Jun 10 20:50:51 2009 +++ src/sys/rump/librump/rumpvfs/Makefile.rumpvfs Mon Aug 3 16:22:00 2009 @@ -1,4 +1,4 @@ -# $NetBSD: Makefile.rumpvfs,v 1.9 2009/06/10 20:50:51 pooka Exp $ +# $NetBSD: Makefile.rumpvfs,v 1.10 2009/08/03 16:22:00 pooka Exp $ # .include "${RUMPTOP}/Makefile.rump" @@ -18,6 +18,9 @@ SRCS+= fstrans_stub.c vfsops_stub.c +# sys/kern I/O +SRCS+= kern_physio.c + # sys/kern vfs SRCS+= vfs_bio.c vfs_cache.c vfs_cwd.c vfs_dirhash.c vfs_getcwd.c \ vfs_hooks.c vfs_init.c vfs_lockf.c vfs_lookup.c vfs_subr.c \ Index: src/sys/rump/librump/rumpvfs/rumpblk.c diff -u src/sys/rump/librump/rumpvfs/rumpblk.c:1.24 src/sys/rump/librump/rumpvfs/rumpblk.c:1.25 --- src/sys/rump/librump/rumpvfs/rumpblk.c:1.24 Mon Aug 3 14:23:30 2009 +++ src/sys/rump/librump/rumpvfs/rumpblk.c Mon Aug 3 16:22:00 2009 @@ -1,4 +1,4 @@ -/* $NetBSD: rumpblk.c,v 1.24 2009/08/03 14:23:30 pooka Exp $ */ +/* $NetBSD: rumpblk.c,v 1.25 2009/08/03 16:22:00 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.24 2009/08/03 14:23:30 pooka Exp $"); +__KERNEL_RCSID(0, "$NetBSD: rumpblk.c,v 1.25 2009/08/03 16:22:00 pooka Exp $"); #include <sys/param.h> #include <sys/buf.h> @@ -89,7 +89,7 @@ static struct rblkdev { char *rblk_path; int rblk_fd; - int rblk_refcnt; + int rblk_opencnt; #ifdef HAS_ODIRECT int rblk_dfd; #endif @@ -376,7 +376,8 @@ int ft, dummy; int error, fd; - KASSERT(rblk->rblk_fd == -1); /* XXX */ + if (rblk->rblk_fd != -1) + return 0; /* XXX: refcount, open mode */ fd = rumpuser_open(rblk->rblk_path, OFLAGS(flag), &error); if (error) return error; @@ -492,18 +493,31 @@ return 0; } +static int +do_physio(dev_t dev, struct uio *uio, int which) +{ + void (*strat)(struct buf *); + + if (blkfail) + strat = rumpblk_strategy_fail; + else + strat = rumpblk_strategy; + + return physio(strat, NULL, dev, which, minphys, uio); +} + int rumpblk_read(dev_t dev, struct uio *uio, int flags) { - panic("%s: unimplemented", __func__); + return do_physio(dev, uio, B_READ); } int rumpblk_write(dev_t dev, struct uio *uio, int flags) { - panic("%s: unimplemented", __func__); + return do_physio(dev, uio, B_WRITE); } static void