diff options
author | Poul-Henning Kamp <phk@FreeBSD.org> | 2000-01-10 12:04:27 +0000 |
---|---|---|
committer | Poul-Henning Kamp <phk@FreeBSD.org> | 2000-01-10 12:04:27 +0000 |
commit | ba4ad1fceab8c8580845aa2006c51598a2573117 (patch) | |
tree | 18a662684776d0307002fcf3247bb0efcf2af594 /sys/kern/vfs_subr.c | |
parent | 54294f449414011dfbfc8f2ccc7c56873d828333 (diff) | |
download | src-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.c | 24 |
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); } |