diff --git a/ChangeLog b/ChangeLog index f3b277020..6f4934cf6 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2008-11-29 Robert Millan + + * disk/ata.c (grub_ata_pciinit): Handle errors rised by + grub_ata_device_initialize() calls. + 2008-11-28 Krzysztof Smiechowicz * fs/affs.c (grub_affs_iterate_dir): Return failure when directory diff --git a/disk/ata.c b/disk/ata.c index 214a2cac7..6e0b8b805 100644 --- a/disk/ata.c +++ b/disk/ata.c @@ -541,7 +541,25 @@ grub_ata_pciinit (int bus, int device, int func, if (rega && regb) { grub_ata_device_initialize (controller * 2 + i, 0, rega, regb); + + /* Most errors rised by grub_ata_device_initialize() are harmless. + They just indicate this particular drive is not responding, most + likely because it doesn't exist. We might want to ignore specific + error types here, instead of printing them. */ + if (grub_errno) + { + grub_print_error (); + grub_errno = GRUB_ERR_NONE; + } + grub_ata_device_initialize (controller * 2 + i, 1, rega, regb); + + /* Likewise. */ + if (grub_errno) + { + grub_print_error (); + grub_errno = GRUB_ERR_NONE; + } } }