aboutsummaryrefslogtreecommitdiff
path: root/sys/kern/vfs_subr.c
diff options
context:
space:
mode:
authorPoul-Henning Kamp <phk@FreeBSD.org>2000-01-10 12:04:27 +0000
committerPoul-Henning Kamp <phk@FreeBSD.org>2000-01-10 12:04:27 +0000
commitba4ad1fceab8c8580845aa2006c51598a2573117 (patch)
tree18a662684776d0307002fcf3247bb0efcf2af594 /sys/kern/vfs_subr.c
parent54294f449414011dfbfc8f2ccc7c56873d828333 (diff)
downloadsrc-ba4ad1fceab8c8580845aa2006c51598a2573117.tar.gz
src-ba4ad1fceab8c8580845aa2006c51598a2573117.zip
Give vn_isdisk() a second argument where it can return a suitable errno.
Suggested by: bde
Notes
Notes: svn path=/head/; revision=55756
Diffstat (limited to 'sys/kern/vfs_subr.c')
-rw-r--r--sys/kern/vfs_subr.c24
1 files changed, 18 insertions, 6 deletions
diff --git a/sys/kern/vfs_subr.c b/sys/kern/vfs_subr.c
index 4e6123e2c397..97d62510b83e 100644
--- a/sys/kern/vfs_subr.c
+++ b/sys/kern/vfs_subr.c
@@ -1012,7 +1012,7 @@ sched_sync(void)
* slot we are safe.
*/
if (TAILQ_EMPTY(&vp->v_dirtyblkhd) &&
- !vn_isdisk(vp))
+ !vn_isdisk(vp, NULL))
panic("sched_sync: fsync failed vp %p tag %d", vp, vp->v_tag);
/*
* Put us back on the worklist. The worklist
@@ -2516,7 +2516,7 @@ vfs_object_create(vp, p, cred)
vm_object_t object;
int error = 0;
- if (!vn_isdisk(vp) && vn_canvmio(vp) == FALSE)
+ if (!vn_isdisk(vp, NULL) && vn_canvmio(vp) == FALSE)
return 0;
retry:
@@ -2875,15 +2875,27 @@ vn_todev(vp)
* Check if vnode represents a disk device
*/
int
-vn_isdisk(vp)
+vn_isdisk(vp, errp)
struct vnode *vp;
+ int *errp;
{
- if (vp->v_type != VBLK && vp->v_type != VCHR)
+ if (vp->v_type != VBLK && vp->v_type != VCHR) {
+ if (errp != NULL)
+ *errp = ENOTBLK;
return (0);
- if (!devsw(vp->v_rdev))
+ }
+ if (!devsw(vp->v_rdev)) {
+ if (errp != NULL)
+ *errp = ENXIO;
return (0);
- if (!(devsw(vp->v_rdev)->d_flags & D_DISK))
+ }
+ if (!(devsw(vp->v_rdev)->d_flags & D_DISK)) {
+ if (errp != NULL)
+ *errp = ENOTBLK;
return (0);
+ }
+ if (errp != NULL)
+ *errp = 0;
return (1);
}