diff options
author | sos <sos@FreeBSD.org> | 2001-03-13 08:45:05 +0000 |
---|---|---|
committer | sos <sos@FreeBSD.org> | 2001-03-13 08:45:05 +0000 |
commit | 7ebb1f16a1ce41244a0a095e1e5fd128b321a360 (patch) | |
tree | 9504b53d11a707e5cdd983212a208c6f05443ecb /sys/kern/subr_disk.c | |
parent | bfe1c25ad9a03e21fb39ed8ea3468fc04d381f0a (diff) | |
download | FreeBSD-src-7ebb1f16a1ce41244a0a095e1e5fd128b321a360.zip FreeBSD-src-7ebb1f16a1ce41244a0a095e1e5fd128b321a360.tar.gz |
Dont call device close and ioctl functions if device has disappeared.
Reviewed by: phk
Diffstat (limited to 'sys/kern/subr_disk.c')
-rw-r--r-- | sys/kern/subr_disk.c | 7 |
1 files changed, 5 insertions, 2 deletions
diff --git a/sys/kern/subr_disk.c b/sys/kern/subr_disk.c index baf2cda..762658f 100644 --- a/sys/kern/subr_disk.c +++ b/sys/kern/subr_disk.c @@ -280,10 +280,11 @@ diskclose(dev_t dev, int fflag, int devtype, struct proc *p) error = 0; pdev = dkmodpart(dkmodslice(dev, WHOLE_DISK_SLICE), RAW_PART); dp = pdev->si_disk; + if (!dp) + return (ENXIO); dsclose(dev, devtype, dp->d_slice); - if (!dsisopen(dp->d_slice)) { + if (!dsisopen(dp->d_slice)) error = dp->d_devsw->d_close(dp->d_dev, fflag, devtype, p); - } return (error); } @@ -326,6 +327,8 @@ diskioctl(dev_t dev, u_long cmd, caddr_t data, int fflag, struct proc *p) pdev = dkmodpart(dkmodslice(dev, WHOLE_DISK_SLICE), RAW_PART); dp = pdev->si_disk; + if (!dp) + return (ENXIO); error = dsioctl(dev, cmd, data, fflag, &dp->d_slice); if (error == ENOIOCTL) error = dp->d_devsw->d_ioctl(dev, cmd, data, fflag, p); |