[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH] Don't look for a partition map on a floppy
From: |
Robert Mabee |
Subject: |
[PATCH] Don't look for a partition map on a floppy |
Date: |
Fri, 15 Jun 2012 01:10:09 -0400 |
User-agent: |
Mozilla/5.0 (X11; Linux i686; rv:12.0) Gecko/20120430 Thunderbird/12.0.1 |
"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 <address@hidden>
+
+ * 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 <address@hidden>
* 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);
- [PATCH] Don't look for a partition map on a floppy,
Robert Mabee <=