1
0
mirror of https://git.FreeBSD.org/src.git synced 2024-12-01 08:27:59 +00:00

For removable devices without media we set a zero mediasize but a non-zero

sectorsize in order to avoid a lot of checks around various divisions etc.

Enforce the sectorsize being > 0 with a KASSERT on successful open.

Fix scsi_cd.c to return 2k sectors when no media inserted.
This commit is contained in:
Poul-Henning Kamp 2004-09-05 21:15:58 +00:00
parent f46a6aac29
commit 5ae652c0ed
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=134824
3 changed files with 14 additions and 1 deletions

View File

@ -2723,7 +2723,7 @@ cdcheckmedia(struct cam_periph *periph)
cdprevent(periph, PR_PREVENT);
softc->disk->d_maxsize = DFLTPHYS;
softc->disk->d_sectorsize = 0;
softc->disk->d_sectorsize = 2048;
softc->disk->d_mediasize = 0;
/*

View File

@ -706,6 +706,9 @@ g_access(struct g_consumer *cp, int dcr, int dcw, int dce)
cp->acr += dcr;
cp->acw += dcw;
cp->ace += dce;
if (pp->acr != 0 || pp->acw != 0 || pp->ace != 0)
KASSERT(pp->sectorsize > 0,
("Provider %s lacks sectorsize", pp->name));
}
return (error);
}

View File

@ -138,3 +138,13 @@ application | | | | X | X |
geom_slice.h is special in that it documents a "library" for implementing
a specific kind of class, and consequently does not appear in the above
matrix.
-----------------------------------------------------------------------
Removable media.
In general, the theory is that a drive creates the provider when it has
a media and destroys it when the media disappears.
In a more realistic world, we will allow a provider to be opened medialess
(set any sectorsize and a mediasize==0) in order to allow operations like
open/close tray etc.