A bit of premptive GEOM POLA magic: If we don't get a virgin disklabel

from /dev/food0, then try from /dev/f00d0c, in strange cases this work.
This commit is contained in:
Poul-Henning Kamp 2002-03-03 21:21:45 +00:00
parent f5976f2b20
commit 5b4455186e
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=91603
2 changed files with 32 additions and 12 deletions

View File

@ -1613,13 +1613,23 @@ getvirginlabel(void)
* Try to use the new get-virgin-label ioctl. If it fails,
* fallback to the old get-disdk-info ioctl.
*/
if (ioctl(f, DIOCGDVIRGIN, &lab) < 0) {
if (ioctl(f, DIOCGDINFO, &lab) < 0) {
warn("ioctl DIOCGDINFO");
close(f);
return (NULL);
}
if (ioctl(f, DIOCGDVIRGIN, &lab) == 0)
goto out;
if (ioctl(f, DIOCGDINFO, &lab) == 0)
goto out;
close(f);
(void)snprintf(namebuf, BBSIZE, "%s%s%c", _PATH_DEV, dkname,
'a' + RAW_PART);
if ((f = open(namebuf, O_RDONLY)) == -1) {
warn("cannot open %s", namebuf);
return (NULL);
}
if (ioctl(f, DIOCGDINFO, &lab) == 0)
goto out;
close(f);
warn("No virgin disklabel found %s", namebuf);
return (NULL);
out:
close(f);
lab.d_boot0 = NULL;
lab.d_boot1 = NULL;

View File

@ -1613,13 +1613,23 @@ getvirginlabel(void)
* Try to use the new get-virgin-label ioctl. If it fails,
* fallback to the old get-disdk-info ioctl.
*/
if (ioctl(f, DIOCGDVIRGIN, &lab) < 0) {
if (ioctl(f, DIOCGDINFO, &lab) < 0) {
warn("ioctl DIOCGDINFO");
close(f);
return (NULL);
}
if (ioctl(f, DIOCGDVIRGIN, &lab) == 0)
goto out;
if (ioctl(f, DIOCGDINFO, &lab) == 0)
goto out;
close(f);
(void)snprintf(namebuf, BBSIZE, "%s%s%c", _PATH_DEV, dkname,
'a' + RAW_PART);
if ((f = open(namebuf, O_RDONLY)) == -1) {
warn("cannot open %s", namebuf);
return (NULL);
}
if (ioctl(f, DIOCGDINFO, &lab) == 0)
goto out;
close(f);
warn("No virgin disklabel found %s", namebuf);
return (NULL);
out:
close(f);
lab.d_boot0 = NULL;
lab.d_boot1 = NULL;