From: Robert Mabee <rmabee@comcast.net>
To: grub-devel@gnu.org
Subject: [PATCH] Don't look for a partition map on a floppy
Date: Fri, 15 Jun 2012 01:10:09 -0400 [thread overview]
Message-ID: <4FDAC3B1.3010303@comcast.net> (raw)
"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);
next reply other threads:[~2012-06-15 5:10 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-06-15 5:10 Robert Mabee [this message]
2012-06-15 5:15 ` [PATCH] Don't look for a partition map on a floppy Vladimir 'φ-coder/phcoder' Serbinenko
[not found] <mailman.79.1339776014.12100.grub-devel@gnu.org>
2012-06-16 4:58 ` Robert Mabee
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=4FDAC3B1.3010303@comcast.net \
--to=rmabee@comcast.net \
--cc=grub-devel@gnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
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.