All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] Don't look for a partition map on a floppy
@ 2012-06-15  5:10 Robert Mabee
  2012-06-15  5:15 ` Vladimir 'φ-coder/phcoder' Serbinenko
  0 siblings, 1 reply; 3+ messages in thread
From: Robert Mabee @ 2012-06-15  5:10 UTC (permalink / raw)
  To: grub-devel

"echo *" takes about 12 seconds on my system (PC, BIOS, empty floppy drive)
because grub_partition_iterate tries to enumerate the partitions on the 
floppy.
"search --no-floppy" probably hits the same delay (not verified) since 
it has to
generate the partition names before it can discard fd[0-9].

I suggest skipping tiny devices (ie < 4 MB) rather than looking at the name
so it won't affect various 100 MB super floppies that might appear as BIOS
floppies and therefore get indistinguishable names in fd[0-9].  Arguably
these drives should continue to support partition maps, at the expense of
long timeouts if they don't handle missing media any better than plain-old
floppy drives do.

=== modified file 'ChangeLog'
--- old/ChangeLog    2012-06-09 17:58:38 +0000
+++ new/ChangeLog    2012-06-15 04:34:50 +0000
@@ -1,3 +1,15 @@
+2012-06-15  Bob Mabee <rmabee@comcast.net>
+
+    * kern/partition.c (grub_partition_is_plausible): New function to
+    decide drive is too small (like floppy) to support partitioning.
+    * (grub_partition_iterate): Use above so search and (*) avoid long
+    timeouts trying to read partmap from a missing floppy.
+
2012-06-09  Vladimir Serbinenko <phcoder@gmail.com>

      * tests/grub_script_expansion.in: Explicitly tell grep that we handle

=== modified file 'grub-core/kern/partition.c'
--- old/grub-core/kern/partition.c    2012-02-08 19:19:44 +0000
+++ new/grub-core/kern/partition.c    2012-06-14 05:30:02 +0000
@@ -162,12 +162,23 @@
    return part;
  }

+/* Very unlikely to find a partmap on a tiny floppy, but looking for a
+   map costs a long timeout if drive is empty, so skip device < 4 MB.
+   (Allowing for a lower-overhead format on biggest media, 2.88 MB.) */
+static int
+grub_partition_is_plausible (struct grub_disk *disk)
+{
+  grub_uint64_t n_bytes = grub_disk_get_size (disk) << 
GRUB_DISK_SECTOR_BITS;
+  return n_bytes >= 4 << 20;
+}
+
  int
  grub_partition_iterate (struct grub_disk *disk,
              int (*hook) (grub_disk_t disk,
                       const grub_partition_t partition))
  {
    int ret = 0;
+  if (!grub_partition_is_plausible (disk)) return ret;

    auto int part_iterate (grub_disk_t dsk, const grub_partition_t p);





^ permalink raw reply	[flat|nested] 3+ messages in thread
[parent not found: <mailman.79.1339776014.12100.grub-devel@gnu.org>]

end of thread, other threads:[~2012-06-16  4:58 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2012-06-15  5:10 [PATCH] Don't look for a partition map on a floppy Robert Mabee
2012-06-15  5:15 ` Vladimir 'φ-coder/phcoder' Serbinenko
     [not found] <mailman.79.1339776014.12100.grub-devel@gnu.org>
2012-06-16  4:58 ` Robert Mabee

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.