]> git.ipfire.org Git - thirdparty/grub.git/commitdiff
2006-11-11 Jeroen Dekkers <jeroen@dekkers.cx>
authorjeroen <jeroen@localhost>
Fri, 10 Nov 2006 23:31:55 +0000 (23:31 +0000)
committerjeroen <jeroen@localhost>
Fri, 10 Nov 2006 23:31:55 +0000 (23:31 +0000)
* kern/disk.c (grub_disk_read): When there is a read error, always
try to read only the necessary data.

* conf/i386-pc.rmk (grub_probe_SOURCES): Add disk/lvm.c and
disk/raid.c.
* include/grub/disk.h [GRUB_UTIL] (grub_raid_init): New
prototype.
[GRUB_UTIL] (grub_raid_fini): Likewise.
[GRUB_UTIL] (grub_lvm_init): Likewise.
[GRUB_UTIL] (grub_lvm_fini): Likewise.
* util/i386/pc/grub-probe.c (probe): Check whether DEVICE_NAME is
RAID device and copy DEVICE_NAME to DRIVE_NAME in that case.
(main): Call grub_raid_init(), grub_lvm_init(), grub_lvm_fini()
and grub_raid_fini().

ChangeLog
conf/i386-pc.mk
conf/i386-pc.rmk
include/grub/disk.h
kern/disk.c
util/i386/pc/grub-probe.c

index 6fed6d4a66e08fee48a888b3a7aab633b7fb489c..9d42600579e79a32bff08f3588de9d20bf299d1f 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,20 @@
+2006-11-11  Jeroen Dekkers  <jeroen@dekkers.cx>
+
+       * kern/disk.c (grub_disk_read): When there is a read error, always
+       try to read only the necessary data.
+       
+       * conf/i386-pc.rmk (grub_probe_SOURCES): Add disk/lvm.c and
+       disk/raid.c.
+       * include/grub/disk.h [GRUB_UTIL] (grub_raid_init): New
+       prototype.
+       [GRUB_UTIL] (grub_raid_fini): Likewise.
+       [GRUB_UTIL] (grub_lvm_init): Likewise.
+       [GRUB_UTIL] (grub_lvm_fini): Likewise.  
+       * util/i386/pc/grub-probe.c (probe): Check whether DEVICE_NAME is
+       RAID device and copy DEVICE_NAME to DRIVE_NAME in that case.
+       (main): Call grub_raid_init(), grub_lvm_init(), grub_lvm_fini()
+       and grub_raid_fini().
+       
 2006-11-09  Jeroen Dekkers  <jeroen@dekkers.cx>
 
        * include/grub/types.h (__unused): Rename to UNUSED.
index 06d5184e4a46139bad2cce72078df52733a92bcb..daa04f985374f01a0dca4724911c5675c5d8194a 100644 (file)
@@ -353,12 +353,12 @@ grub_probe_SOURCES = util/i386/pc/grub-probe.c    \
        kern/device.c kern/disk.c kern/err.c kern/misc.c fs/fat.c       \
        fs/ext2.c kern/parser.c kern/partition.c partmap/pc.c fs/ufs.c  \
        fs/minix.c fs/hfs.c fs/jfs.c kern/fs.c kern/env.c fs/fshelp.c   \
-       fs/xfs.c fs/affs.c fs/sfs.c fs/hfsplus.c
-CLEANFILES += grub-probe grub_probe-util_i386_pc_grub_probe.o grub_probe-util_i386_pc_biosdisk.o grub_probe-util_misc.o grub_probe-util_i386_pc_getroot.o grub_probe-kern_device.o grub_probe-kern_disk.o grub_probe-kern_err.o grub_probe-kern_misc.o grub_probe-fs_fat.o grub_probe-fs_ext2.o grub_probe-kern_parser.o grub_probe-kern_partition.o grub_probe-partmap_pc.o grub_probe-fs_ufs.o grub_probe-fs_minix.o grub_probe-fs_hfs.o grub_probe-fs_jfs.o grub_probe-kern_fs.o grub_probe-kern_env.o grub_probe-fs_fshelp.o grub_probe-fs_xfs.o grub_probe-fs_affs.o grub_probe-fs_sfs.o grub_probe-fs_hfsplus.o
-MOSTLYCLEANFILES += grub_probe-util_i386_pc_grub_probe.d grub_probe-util_i386_pc_biosdisk.d grub_probe-util_misc.d grub_probe-util_i386_pc_getroot.d grub_probe-kern_device.d grub_probe-kern_disk.d grub_probe-kern_err.d grub_probe-kern_misc.d grub_probe-fs_fat.d grub_probe-fs_ext2.d grub_probe-kern_parser.d grub_probe-kern_partition.d grub_probe-partmap_pc.d grub_probe-fs_ufs.d grub_probe-fs_minix.d grub_probe-fs_hfs.d grub_probe-fs_jfs.d grub_probe-kern_fs.d grub_probe-kern_env.d grub_probe-fs_fshelp.d grub_probe-fs_xfs.d grub_probe-fs_affs.d grub_probe-fs_sfs.d grub_probe-fs_hfsplus.d
+       fs/xfs.c fs/affs.c fs/sfs.c fs/hfsplus.c disk/lvm.c disk/raid.c
+CLEANFILES += grub-probe grub_probe-util_i386_pc_grub_probe.o grub_probe-util_i386_pc_biosdisk.o grub_probe-util_misc.o grub_probe-util_i386_pc_getroot.o grub_probe-kern_device.o grub_probe-kern_disk.o grub_probe-kern_err.o grub_probe-kern_misc.o grub_probe-fs_fat.o grub_probe-fs_ext2.o grub_probe-kern_parser.o grub_probe-kern_partition.o grub_probe-partmap_pc.o grub_probe-fs_ufs.o grub_probe-fs_minix.o grub_probe-fs_hfs.o grub_probe-fs_jfs.o grub_probe-kern_fs.o grub_probe-kern_env.o grub_probe-fs_fshelp.o grub_probe-fs_xfs.o grub_probe-fs_affs.o grub_probe-fs_sfs.o grub_probe-fs_hfsplus.o grub_probe-disk_lvm.o grub_probe-disk_raid.o
+MOSTLYCLEANFILES += grub_probe-util_i386_pc_grub_probe.d grub_probe-util_i386_pc_biosdisk.d grub_probe-util_misc.d grub_probe-util_i386_pc_getroot.d grub_probe-kern_device.d grub_probe-kern_disk.d grub_probe-kern_err.d grub_probe-kern_misc.d grub_probe-fs_fat.d grub_probe-fs_ext2.d grub_probe-kern_parser.d grub_probe-kern_partition.d grub_probe-partmap_pc.d grub_probe-fs_ufs.d grub_probe-fs_minix.d grub_probe-fs_hfs.d grub_probe-fs_jfs.d grub_probe-kern_fs.d grub_probe-kern_env.d grub_probe-fs_fshelp.d grub_probe-fs_xfs.d grub_probe-fs_affs.d grub_probe-fs_sfs.d grub_probe-fs_hfsplus.d grub_probe-disk_lvm.d grub_probe-disk_raid.d
 
-grub-probe: $(grub_probe_DEPENDENCIES) grub_probe-util_i386_pc_grub_probe.o grub_probe-util_i386_pc_biosdisk.o grub_probe-util_misc.o grub_probe-util_i386_pc_getroot.o grub_probe-kern_device.o grub_probe-kern_disk.o grub_probe-kern_err.o grub_probe-kern_misc.o grub_probe-fs_fat.o grub_probe-fs_ext2.o grub_probe-kern_parser.o grub_probe-kern_partition.o grub_probe-partmap_pc.o grub_probe-fs_ufs.o grub_probe-fs_minix.o grub_probe-fs_hfs.o grub_probe-fs_jfs.o grub_probe-kern_fs.o grub_probe-kern_env.o grub_probe-fs_fshelp.o grub_probe-fs_xfs.o grub_probe-fs_affs.o grub_probe-fs_sfs.o grub_probe-fs_hfsplus.o
-       $(CC) -o $@ grub_probe-util_i386_pc_grub_probe.o grub_probe-util_i386_pc_biosdisk.o grub_probe-util_misc.o grub_probe-util_i386_pc_getroot.o grub_probe-kern_device.o grub_probe-kern_disk.o grub_probe-kern_err.o grub_probe-kern_misc.o grub_probe-fs_fat.o grub_probe-fs_ext2.o grub_probe-kern_parser.o grub_probe-kern_partition.o grub_probe-partmap_pc.o grub_probe-fs_ufs.o grub_probe-fs_minix.o grub_probe-fs_hfs.o grub_probe-fs_jfs.o grub_probe-kern_fs.o grub_probe-kern_env.o grub_probe-fs_fshelp.o grub_probe-fs_xfs.o grub_probe-fs_affs.o grub_probe-fs_sfs.o grub_probe-fs_hfsplus.o $(LDFLAGS) $(grub_probe_LDFLAGS)
+grub-probe: $(grub_probe_DEPENDENCIES) grub_probe-util_i386_pc_grub_probe.o grub_probe-util_i386_pc_biosdisk.o grub_probe-util_misc.o grub_probe-util_i386_pc_getroot.o grub_probe-kern_device.o grub_probe-kern_disk.o grub_probe-kern_err.o grub_probe-kern_misc.o grub_probe-fs_fat.o grub_probe-fs_ext2.o grub_probe-kern_parser.o grub_probe-kern_partition.o grub_probe-partmap_pc.o grub_probe-fs_ufs.o grub_probe-fs_minix.o grub_probe-fs_hfs.o grub_probe-fs_jfs.o grub_probe-kern_fs.o grub_probe-kern_env.o grub_probe-fs_fshelp.o grub_probe-fs_xfs.o grub_probe-fs_affs.o grub_probe-fs_sfs.o grub_probe-fs_hfsplus.o grub_probe-disk_lvm.o grub_probe-disk_raid.o
+       $(CC) -o $@ grub_probe-util_i386_pc_grub_probe.o grub_probe-util_i386_pc_biosdisk.o grub_probe-util_misc.o grub_probe-util_i386_pc_getroot.o grub_probe-kern_device.o grub_probe-kern_disk.o grub_probe-kern_err.o grub_probe-kern_misc.o grub_probe-fs_fat.o grub_probe-fs_ext2.o grub_probe-kern_parser.o grub_probe-kern_partition.o grub_probe-partmap_pc.o grub_probe-fs_ufs.o grub_probe-fs_minix.o grub_probe-fs_hfs.o grub_probe-fs_jfs.o grub_probe-kern_fs.o grub_probe-kern_env.o grub_probe-fs_fshelp.o grub_probe-fs_xfs.o grub_probe-fs_affs.o grub_probe-fs_sfs.o grub_probe-fs_hfsplus.o grub_probe-disk_lvm.o grub_probe-disk_raid.o $(LDFLAGS) $(grub_probe_LDFLAGS)
 
 grub_probe-util_i386_pc_grub_probe.o: util/i386/pc/grub-probe.c
        $(CC) -Iutil/i386/pc -I$(srcdir)/util/i386/pc $(CPPFLAGS) $(CFLAGS) -DGRUB_UTIL=1 $(grub_probe_CFLAGS) -MD -c -o $@ $<
@@ -456,6 +456,14 @@ grub_probe-fs_hfsplus.o: fs/hfsplus.c
        $(CC) -Ifs -I$(srcdir)/fs $(CPPFLAGS) $(CFLAGS) -DGRUB_UTIL=1 $(grub_probe_CFLAGS) -MD -c -o $@ $<
 -include grub_probe-fs_hfsplus.d
 
+grub_probe-disk_lvm.o: disk/lvm.c
+       $(CC) -Idisk -I$(srcdir)/disk $(CPPFLAGS) $(CFLAGS) -DGRUB_UTIL=1 $(grub_probe_CFLAGS) -MD -c -o $@ $<
+-include grub_probe-disk_lvm.d
+
+grub_probe-disk_raid.o: disk/raid.c
+       $(CC) -Idisk -I$(srcdir)/disk $(CPPFLAGS) $(CFLAGS) -DGRUB_UTIL=1 $(grub_probe_CFLAGS) -MD -c -o $@ $<
+-include grub_probe-disk_raid.d
+
 
 # For grub-emu.
 grub_emu_DEPENDENCIES = grub_script.tab.c grub_script.tab.h            \
index a8a2d7349c9e7ed1d47329a35b48e6956050c231..c8e8941893024df59cce7f7eca615fbf9190b60c 100644 (file)
@@ -75,7 +75,7 @@ grub_probe_SOURCES = util/i386/pc/grub-probe.c        \
        kern/device.c kern/disk.c kern/err.c kern/misc.c fs/fat.c       \
        fs/ext2.c kern/parser.c kern/partition.c partmap/pc.c fs/ufs.c  \
        fs/minix.c fs/hfs.c fs/jfs.c kern/fs.c kern/env.c fs/fshelp.c   \
-       fs/xfs.c fs/affs.c fs/sfs.c fs/hfsplus.c
+       fs/xfs.c fs/affs.c fs/sfs.c fs/hfsplus.c disk/lvm.c disk/raid.c
 
 # For grub-emu.
 grub_emu_DEPENDENCIES = grub_script.tab.c grub_script.tab.h            \
index 011efe63d2cc8ac9e0bcc0897cacdc591bd8c4f6..9d6ad8fbaa39f3b84347c388941a9cb15e3cdbdb 100644 (file)
@@ -136,4 +136,11 @@ grub_err_t EXPORT_FUNC(grub_disk_write) (grub_disk_t disk,
 
 grub_uint64_t EXPORT_FUNC(grub_disk_get_size) (grub_disk_t disk);
 
+#ifdef GRUB_UTIL
+void grub_raid_init (void);
+void grub_raid_fini (void);
+void grub_lvm_init (void);
+void grub_lvm_fini (void);
+#endif
+
 #endif /* ! GRUB_DISK_HEADER */
index 77f1dbaaeb5d577f7f7fae7718532c6931e4260d..33875d43064246e82ee84c803f475684cffb96c0 100644 (file)
@@ -412,11 +412,6 @@ grub_disk_read (grub_disk_t disk, grub_disk_addr_t sector,
 
              grub_errno = GRUB_ERR_NONE;
 
-             /* If more data is required, no way.  */
-             if (pos + size
-                 >= (GRUB_DISK_SECTOR_SIZE << GRUB_DISK_CACHE_BITS))
-               goto finish;
-
              num = ((size + GRUB_DISK_SECTOR_SIZE - 1)
                     >> GRUB_DISK_SECTOR_BITS);
              if ((disk->dev->read) (disk, sector, num, tmp_buf))
index 7f71dafe9397cb9289f3b5c56b21e66daf8638dd..0abc7a20dbeaf68cf48e407ffee8c274bd2d7d4d 100644 (file)
@@ -97,13 +97,21 @@ probe (const char *path)
       goto end;
     }
 
-  drive_name = grub_util_biosdisk_get_grub_dev (device_name);
-  if (! drive_name)
+  if (device_name[0] == 'm' && device_name[1] == 'd'
+      && device_name[2] >= '0' && device_name[2] <= '9')
     {
-      fprintf (stderr, "cannot find a GRUB drive for %s.\n", device_name);
-      goto end;
+      drive_name = xstrdup (device_name);
     }
-
+  else
+    {
+      drive_name = grub_util_biosdisk_get_grub_dev (device_name);
+      if (! drive_name)
+       {
+         fprintf (stderr, "cannot find a GRUB drive for %s.\n", device_name);
+         goto end;
+       }
+    }
+  
   if (print == PRINT_DRIVE)
     {
       printf ("(%s)\n", drive_name);
@@ -236,7 +244,9 @@ main (int argc, char *argv[])
   /* Initialize the emulated biosdisk driver.  */
   grub_util_biosdisk_init (dev_map ? : DEFAULT_DEVICE_MAP);
   grub_pc_partition_map_init ();
-
+  grub_raid_init ();
+  grub_lvm_init ();
+  
   /* Initialize filesystems.  */
   grub_fat_init ();
   grub_ext2_init ();
@@ -256,6 +266,8 @@ main (int argc, char *argv[])
   grub_jfs_fini ();
   grub_xfs_fini ();
   
+  grub_lvm_fini ();
+  grub_raid_fini ();
   grub_pc_partition_map_fini ();
   grub_util_biosdisk_fini ();