On 15.06.2012 07:10, Robert Mabee wrote: > "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]. >
search -s stops when it finds first matching device and floppies are checked in the last place. > 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. Minix floppies are partitioned. > > === 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 <rma...@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 <phco...@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); > > > > > _______________________________________________ > Grub-devel mailing list > Grub-devel@gnu.org > https://lists.gnu.org/mailman/listinfo/grub-devel > -- Regards Vladimir 'φ-coder/phcoder' Serbinenko
signature.asc
Description: OpenPGP digital signature
_______________________________________________ Grub-devel mailing list Grub-devel@gnu.org https://lists.gnu.org/mailman/listinfo/grub-devel