Sfoglia il codice sorgente

Applying Suses dosfstools-2.11-mkdosfs-geo0.diff from Ludwig Nussel
<lnussel@suse.de> to fix handling of zero heads and sectors:

* the HDIO_GETGEO ioctl works on device mapper devices but returns
zero heads and sectors. Therefore let's a) assume dummy values in
that case in mkdosfs and b) don't consider such fat file systems as
invalid in dosfsck. The Linux kernel accepts them anyways.

Signed-off-by: Daniel Baumann <mail@daniel-baumann.ch>

Daniel Baumann 15 anni fa
parent
commit
f74695618b
2 ha cambiato i file con 4 aggiunte e 2 eliminazioni
  1. 2 0
      dosfsck/boot.c
  2. 2 2
      mkdosfs/mkdosfs.c

+ 2 - 0
dosfsck/boot.c

@@ -375,9 +375,11 @@ void read_boot(DOS_FS *fs)
     if (logical_sector_size & (SECTOR_SIZE-1))
 	die("Logical sector size (%d bytes) is not a multiple of the physical "
 	  "sector size.",logical_sector_size);
+#if 0 /* linux kernel doesn't check that either */
     /* ++roman: On Atari, these two fields are often left uninitialized */
     if (!atari_format && (!b.secs_track || !b.heads))
 	die("Invalid disk format in boot sector.");
+#endif
     if (verbose) dump_boot(fs,&b,logical_sector_size);
 }
 

+ 2 - 2
mkdosfs/mkdosfs.c

@@ -746,8 +746,8 @@ establish_params (int device_num,int size)
     {
       /* Can we get the drive geometry? (Note I'm not too sure about */
       /* whether to use HDIO_GETGEO or HDIO_REQ) */
-      if (ioctl (dev, HDIO_GETGEO, &geometry)) {
-	printf ("unable to get drive geometry, using default 255/63");
+      if (ioctl (dev, HDIO_GETGEO, &geometry) || geometry.sectors == 0 || geometry.heads == 0) {
+	printf ("unable to get drive geometry, using default 255/63\n");
         bs.secs_track = CT_LE_W(63);
         bs.heads = CT_LE_W(255);
       }