diff options
author | phk <phk@FreeBSD.org> | 2003-02-11 21:23:34 +0000 |
---|---|---|
committer | phk <phk@FreeBSD.org> | 2003-02-11 21:23:34 +0000 |
commit | 9b781d6129abdf71a022410fbd4d55e1795e1599 (patch) | |
tree | f64c445b9591219b4c39573cd0866a76241df152 /sys/geom | |
parent | 4fe8424f92b3f5fcc76023408fdb0f5f07473550 (diff) | |
download | FreeBSD-src-9b781d6129abdf71a022410fbd4d55e1795e1599.zip FreeBSD-src-9b781d6129abdf71a022410fbd4d55e1795e1599.tar.gz |
Check disk->d_maxsize/dev->si_iosize_max at open time rather than in strategy.
Printf a warning and use DFLTPHYS if the drive has not set a size.
Diffstat (limited to 'sys/geom')
-rw-r--r-- | sys/geom/geom_disk.c | 17 |
1 files changed, 7 insertions, 10 deletions
diff --git a/sys/geom/geom_disk.c b/sys/geom/geom_disk.c index d671517..ba3d961 100644 --- a/sys/geom/geom_disk.c +++ b/sys/geom/geom_disk.c @@ -123,6 +123,13 @@ g_disk_access(struct g_provider *pp, int r, int w, int e) pp->mediasize = dp->d_mediasize; pp->sectorsize = dp->d_sectorsize; dp->d_flags |= DISKFLAG_OPEN; + if (dp->d_maxsize == 0 && dp->d_dev->si_iosize_max != 0) + dp->d_maxsize = dp->d_dev->si_iosize_max; + if (dp->d_maxsize == 0) { + printf("WARNING: Disk drive %s%d has no d_maxsize\n", + dp->d_name, dp->d_unit); + dp->d_maxsize = DFLTPHYS; + } } else if ((pp->acr + pp->acw + pp->ace) > 0 && (r + w + e) == 0) { if (dp->d_close != NULL || dp->d_cclose != NULL) { g_disk_lock_giant(dp); @@ -195,16 +202,6 @@ g_disk_start(struct bio *bp) /* fall-through */ case BIO_READ: case BIO_WRITE: - if (dp->d_dev->si_iosize_max != 0) - dp->d_maxsize = dp->d_dev->si_iosize_max; -#ifdef maybe - else - /* - * XXX: Who knows how many drivers have undeclared - * limitations ? - */ - dp->d_maxsize = DFLTPHYS; -#endif off = 0; bp3 = NULL; bp2 = g_clone_bio(bp); |