summaryrefslogtreecommitdiffstats
path: root/sys/geom/geom_disk.c
diff options
context:
space:
mode:
authorphk <phk@FreeBSD.org>2003-02-11 21:23:34 +0000
committerphk <phk@FreeBSD.org>2003-02-11 21:23:34 +0000
commit9b781d6129abdf71a022410fbd4d55e1795e1599 (patch)
treef64c445b9591219b4c39573cd0866a76241df152 /sys/geom/geom_disk.c
parent4fe8424f92b3f5fcc76023408fdb0f5f07473550 (diff)
downloadFreeBSD-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/geom_disk.c')
-rw-r--r--sys/geom/geom_disk.c17
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);
OpenPOWER on IntegriCloud