summaryrefslogtreecommitdiffstats
path: root/sys/kern
diff options
context:
space:
mode:
authorphk <phk@FreeBSD.org>2004-09-24 06:16:08 +0000
committerphk <phk@FreeBSD.org>2004-09-24 06:16:08 +0000
commit5536d5757bcdba9f55338d879f2757ac320e7a43 (patch)
treec339b7ec414f01e88fde0c23eb9018603451009a /sys/kern
parent63c4403fe8f38a30a1f06157aa337dc35842cb9b (diff)
downloadFreeBSD-src-5536d5757bcdba9f55338d879f2757ac320e7a43.zip
FreeBSD-src-5536d5757bcdba9f55338d879f2757ac320e7a43.tar.gz
Hold dev_lock and check for NULL devsw pointer when we determine
if a vnode is a disk.
Diffstat (limited to 'sys/kern')
-rw-r--r--sys/kern/vfs_subr.c6
1 files changed, 5 insertions, 1 deletions
diff --git a/sys/kern/vfs_subr.c b/sys/kern/vfs_subr.c
index 8908ec6..4f64313 100644
--- a/sys/kern/vfs_subr.c
+++ b/sys/kern/vfs_subr.c
@@ -3541,12 +3541,16 @@ vn_isdisk(vp, errp)
int error;
error = 0;
+ dev_lock();
if (vp->v_type != VCHR)
error = ENOTBLK;
else if (vp->v_rdev == NULL)
error = ENXIO;
- else if (!(devsw(vp->v_rdev)->d_flags & D_DISK))
+ else if (vp->v_rdev->si_devsw == NULL)
+ error = ENXIO;
+ else if (!(vp->v_rdev->si_devsw->d_flags & D_DISK))
error = ENOTBLK;
+ dev_unlock();
if (errp != NULL)
*errp = error;
return (error == 0);
OpenPOWER on IntegriCloud