diff options
author | mjg <mjg@FreeBSD.org> | 2014-10-15 05:17:36 +0000 |
---|---|---|
committer | mjg <mjg@FreeBSD.org> | 2014-10-15 05:17:36 +0000 |
commit | 143261aa90afa1d15189f4eb6ee1885d3766713f (patch) | |
tree | 9fa7e10a82c3ed7f2b2f542aacbec8b20e7f9395 | |
parent | c661f55b6cde9fc28d360a94d6e80c699d662bcc (diff) | |
download | FreeBSD-src-143261aa90afa1d15189f4eb6ee1885d3766713f.zip FreeBSD-src-143261aa90afa1d15189f4eb6ee1885d3766713f.tar.gz |
Don't take devmtx unnecessarily in vn_isdisk.
MFC after: 1 week
-rw-r--r-- | sys/kern/vfs_subr.c | 9 |
1 files changed, 6 insertions, 3 deletions
diff --git a/sys/kern/vfs_subr.c b/sys/kern/vfs_subr.c index 8d2e07e..345aad6 100644 --- a/sys/kern/vfs_subr.c +++ b/sys/kern/vfs_subr.c @@ -3775,17 +3775,20 @@ vn_isdisk(struct vnode *vp, int *errp) { int error; + if (vp->v_type != VCHR) { + error = ENOTBLK; + goto out; + } error = 0; dev_lock(); - if (vp->v_type != VCHR) - error = ENOTBLK; - else if (vp->v_rdev == NULL) + if (vp->v_rdev == NULL) error = ENXIO; 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(); +out: if (errp != NULL) *errp = error; return (error == 0); |