Module Name: src Committed By: pooka Date: Thu Nov 19 13:46:56 UTC 2009
Modified Files: src/sys/rump/librump/rumpvfs: rumpblk.c Log Message: * don't open device when calling getfileinfo(), it might need to open the device and will f-a-i-l if it's a block device * use rumpuser_ioctl() as little as possible (going away completely wewy wewy soon) * improve some variable scoping To generate a diff of this commit: cvs rdiff -u -r1.29 -r1.30 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.29 src/sys/rump/librump/rumpvfs/rumpblk.c:1.30 --- src/sys/rump/librump/rumpvfs/rumpblk.c:1.29 Wed Oct 7 09:42:14 2009 +++ src/sys/rump/librump/rumpvfs/rumpblk.c Thu Nov 19 13:46:55 2009 @@ -1,4 +1,4 @@ -/* $NetBSD: rumpblk.c,v 1.29 2009/10/07 09:42:14 pooka Exp $ */ +/* $NetBSD: rumpblk.c,v 1.30 2009/11/19 13:46:55 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.29 2009/10/07 09:42:14 pooka Exp $"); +__KERNEL_RCSID(0, "$NetBSD: rumpblk.c,v 1.30 2009/11/19 13:46:55 pooka Exp $"); #include <sys/param.h> #include <sys/buf.h> @@ -344,16 +344,10 @@ struct rblkdev *rblk; uint64_t flen; size_t len; - int ftype, error, dummy, i; - int fd; + int ftype, error, i; /* devices might not report correct size unless they're open */ - fd = rumpuser_open(path, O_RDONLY, &error); - if (fd == -1) - return error; - rumpuser_getfileinfo(path, &flen, &ftype, &error); - rumpuser_close(fd, &dummy); - if (error) + if (rumpuser_getfileinfo(path, &flen, &ftype, &error) == -1) return error; /* verify host file is of supported type */ @@ -403,7 +397,6 @@ rumpblk_open(dev_t dev, int flag, int fmt, struct lwp *l) { struct rblkdev *rblk = &minors[minor(dev)]; - uint64_t fsize, off; int dummy; int error, fd; @@ -423,10 +416,8 @@ return error; #endif - fsize = rblk->rblk_size; - off = rblk->rblk_hostoffset; - if (rblk->rblk_ftype == RUMPUSER_FT_REG) { + uint64_t fsize = rblk->rblk_size, off = rblk->rblk_hostoffset; struct blkwin *win; int i, winsize; @@ -473,14 +464,14 @@ rblk->rblk_dl.d_secsize = DEV_BSIZE; rblk->rblk_curpi = &rblk->rblk_pi; } else { - if (rumpuser_ioctl(fd, DIOCGDINFO, &rblk->rblk_dl, - &error) == -1) { - KASSERT(error); + rblk->rblk_fd = fd; + + if ((error = rumpblk_ioctl(dev, DIOCGDINFO, &rblk->rblk_dl, + 0, curlwp)) != 0) { rumpuser_close(fd, &dummy); return error; } - rblk->rblk_fd = fd; rblk->rblk_curpi = &rblk->rblk_dl.d_partitions[0]; }