summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authormjg <mjg@FreeBSD.org>2014-10-15 05:17:36 +0000
committermjg <mjg@FreeBSD.org>2014-10-15 05:17:36 +0000
commit143261aa90afa1d15189f4eb6ee1885d3766713f (patch)
tree9fa7e10a82c3ed7f2b2f542aacbec8b20e7f9395
parentc661f55b6cde9fc28d360a94d6e80c699d662bcc (diff)
downloadFreeBSD-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.c9
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);
OpenPOWER on IntegriCloud