diff options
author | phk <phk@FreeBSD.org> | 2004-09-24 06:16:08 +0000 |
---|---|---|
committer | phk <phk@FreeBSD.org> | 2004-09-24 06:16:08 +0000 |
commit | 5536d5757bcdba9f55338d879f2757ac320e7a43 (patch) | |
tree | c339b7ec414f01e88fde0c23eb9018603451009a /sys/kern | |
parent | 63c4403fe8f38a30a1f06157aa337dc35842cb9b (diff) | |
download | FreeBSD-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.c | 6 |
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); |