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.
This commit is contained in:
Poul-Henning Kamp 2003-02-11 21:23:34 +00:00
parent 1e35598c3a
commit 99af707c39
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=110727

View file

@ -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);