Fdisk prints wrong partition table on non distribution kernels - gdzie jest problem
Bartek Szady
bszx w bszxdomain.EDU.eu.org
Pią, 14 Gru 2001, 11:53:30 CET
On Fri, 14 Dec 2001, Arek wrote:
> Witam
>
> Troszke dalem sie zmylic ;)
> Problem z fdiskiem nie nie lezy w patchach nakladanych na niego lecz
> na kernel, a dokladnie
> /usr/src/linux/include/linux/hdreg.h
>
> Fdisk budowny w otoczniu naglowków dystrybucyjnych uzywany na systemie
> z wlasnym kernelem dziala zle.
>
> Fdisk budowny w otoczniu naglowków czystego kernela uzywany na
> systemie z wlasnym kernelem dziala dobrze.
>
> Wystarczy podmienic ww. hdreg.h na oryginalny z kernela i jest OK.
> Takze modyfikacja hdreg.h psuje interes - troszke roznic miedzy nimi
> jest. Dzis juz nie mam sily badac tego doklanie.
Pamietam ze kiedys mialem podobny problem gdy uzywalem dystrybucyjnego
fdiska na kernelu bez patcha na IDE
Wedlug mnie problem powstawal w nastepujacym fragmecie getgeometry z
fdisk.c:
--------------
res1 = ioctl(fd, BLKGETSIZE, &longsectors);
#ifdef HDIO_REQ
res2 = ioctl(fd, HDIO_REQ, &geometry);
#else
#ifdef HDIO_GETGEO_BIG
res2 = ioctl(fd, HDIO_GETGEO_BIG, &geometry);
#else
res2 = ioctl(fd, HDIO_GETGEO, &geometry);
#endif
#endif
/* never use geometry.cylinders - it is truncated */
heads = cylinders = sectors = 0;
sector_offset = 1;
if (res2 == 0) {
heads = geometry.heads;
sectors = geometry.sectors;
if (heads * sectors == 0)
res2 = -1;
else if (dos_compatible_flag)
sector_offset = sectors;
}
if (res1 == 0 && res2 == 0) { /* normal case */
cylinders = longsectors / (heads * sectors);
cylinders /= sec_fac; /* do not round up */
} else if (res1 == 0) { /* size but no geometry */
heads = cylinders = 1;
sectors = longsectors / sec_fac;
}
--------
Kernel bez patcha na ide nie rozumial ioctl'a z HDIO_GETGEO_BIG wiec res2
bylo rozne od 0 i ilosc glowic i cylindrow ustawiala sie na 1 a ilosc
sektorow wyliczala sie na podstawie pojemnosci dysku.
Probowalem to poprawic dodajac sprawdzenie res2 i gdy !=0 wywolanie
ioctl(fd, HDIO_GETGEO, &geometry) ale nie testowalem tego.
Patch na IDE zaczal byc mi potrzebny i stracilem zainteresowanie fdiskiem.
--
Pozdrawiam
Bartek Szady
Więcej informacji o liście dyskusyjnej pld-devel-pl