2011/8/27 Jonathan Nieder <jrnie...@gmail.com>: >> #601974 is indeed fixed in unstable, it wasn't closed in changelog >> because the fix was applied directly to upstream (and included with >> 1.99-1 upload). I've closed that bug and put everyone involved on CC. >> >> #610184 might not be fixed in unstable according to this report: >> http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=610184#64 . Given >> the situation I wouldn't include it in this proposed update. > > Thanks. Do you have an updated patch for review?
Here you are. -- Robert Millan
=== modified file 'debian/changelog' --- debian/changelog 2011-01-18 10:55:00 +0000 +++ debian/changelog 2011-08-27 09:58:02 +0000 @@ -1,3 +1,19 @@ +grub2 (1.98+20100804-15) UNRELEASED; urgency=low + + [ Colin Watson ] + * Backport from upstream: + - Handle Xen split-partition disk image devices (closes: 601974). + - Ensure uniqueness of RAID array numbers even if some elements have a + name (closes: #609804). + + [ Robert Millan ] + * Fix grub-probe detection for ATA devices using `ata' driver on kFreeBSD 9. + - kfreebsd-9_ada_devices.patch + * Mark la_array as packed. + - zfs_packed_la_array.patch + + -- Robert Millan <r...@debian.org> Wed, 03 Aug 2011 14:26:57 +0200 + grub2 (1.98+20100804-14) unstable; urgency=low [ Updated translations ] === added file 'debian/patches/kfreebsd-9_ada_devices.patch' --- debian/patches/kfreebsd-9_ada_devices.patch 1970-01-01 00:00:00 +0000 +++ debian/patches/kfreebsd-9_ada_devices.patch 2011-07-17 12:16:49 +0000 @@ -0,0 +1,71 @@ +2011-06-16 Robert Millan <r...@gnu.org> + + Detect `ataraid' devices on GNU/kFreeBSD. Fix for ATA devices using + `ata' driver on kernel of FreeBSD 9. + + * util/deviceiter.c [__FreeBSD_kernel__] (get_ada_disk_name) + (get_ataraid_disk_name): New functions. + [__FreeBSD_kernel__] (grub_util_iterate_devices): Scan for ataraid + (/dev/ar[0-9]+) and ada (/dev/ada[0-9]+) devices using + get_ataraid_disk_name() and get_ada_disk_name(). + +=== modified file 'util/deviceiter.c' +--- a/util/deviceiter.c ++++ b/util/deviceiter.c +@@ -286,6 +286,20 @@ + #endif + } + ++#ifdef __FreeBSD_kernel__ ++static void ++get_ada_disk_name (char *name, int unit) ++{ ++ sprintf (name, "/dev/ada%d", unit); ++} ++ ++static void ++get_ataraid_disk_name (char *name, int unit) ++{ ++ sprintf (name, "/dev/ar%d", unit); ++} ++#endif ++ + #ifdef __linux__ + static void + get_virtio_disk_name (char *name, int unit) +@@ -613,6 +627,35 @@ + } + } + ++#ifdef __FreeBSD_kernel__ ++ /* IDE disks using ATA Direct Access driver. */ ++ if (get_kfreebsd_version () >= 800000) ++ for (i = 0; i < 96; i++) ++ { ++ char name[16]; ++ ++ get_ada_disk_name (name, i); ++ if (check_device_readable_unique (name)) ++ { ++ if (hook (name, 0)) ++ goto out; ++ } ++ } ++ ++ /* ATARAID disks. */ ++ for (i = 0; i < 8; i++) ++ { ++ char name[20]; ++ ++ get_ataraid_disk_name (name, i); ++ if (check_device_readable_unique (name)) ++ { ++ if (hook (name, 0)) ++ goto out; ++ } ++ } ++#endif ++ + #ifdef __linux__ + /* Virtio disks. */ + for (i = 0; i < 26; i++) === added file 'debian/patches/raid_number_uniqueness.patch' --- debian/patches/raid_number_uniqueness.patch 1970-01-01 00:00:00 +0000 +++ debian/patches/raid_number_uniqueness.patch 2011-06-11 21:27:11 +0000 @@ -0,0 +1,21 @@ +Description: Ensure uniqueness of RAID array numbers + ... even if some elements have a name. +Author: Vladimir 'phcoder' Serbinenko <phco...@gmail.com> +Bug-Debian: http://bugs.debian.org/609804 +Forwarded: yes +Applied-Upstream: http://bazaar.launchpad.net/~vcs-imports/grub/grub2-bzr/revision/3076 +Last-Update: 2011-06-11 + +Index: b/disk/raid.c +=================================================================== +--- a/disk/raid.c ++++ b/disk/raid.c +@@ -559,7 +559,7 @@ + { + for (p = array_list; p != NULL; p = p->next) + { +- if (! p->name && p->number == array->number) ++ if (p->number == array->number) + break; + } + } === modified file 'debian/patches/series' --- debian/patches/series 2011-01-04 13:32:23 +0000 +++ debian/patches/series 2011-08-27 09:58:02 +0000 @@ -35,3 +35,7 @@ echo_utf-8_clean.patch multiboot_unaligned_pointer.patch pci_probe.patch raid_spurious_members.patch +xen_disk_names.patch +raid_number_uniqueness.patch +kfreebsd-9_ada_devices.patch +zfs_packed_la_array.patch === added file 'debian/patches/xen_disk_names.patch' --- debian/patches/xen_disk_names.patch 1970-01-01 00:00:00 +0000 +++ debian/patches/xen_disk_names.patch 2011-06-11 21:05:00 +0000 @@ -0,0 +1,75 @@ +Description: Handle Xen split-partition disk image devices + If opening the disk device returns GRUB_ERR_UNKNOWN_DEVICE, treat the + partition device as a disk in its own right. This can happen with Xen disk + images. +Author: Colin Watson <cjwat...@ubuntu.com> +Bug-Debian: http://bugs.debian.org/601974 +Forwarded: yes +Applied-Upstream: http://bazaar.launchpad.net/~vcs-imports/grub/grub2-bzr/revision/2832 +Last-Update: 2011-06-11 + +Index: b/kern/emu/hostdisk.c +=================================================================== +--- a/kern/emu/hostdisk.c ++++ b/kern/emu/hostdisk.c +@@ -1353,12 +1353,15 @@ + #endif /* defined(__NetBSD__) */ + + static int +-find_system_device (const char *os_dev, struct stat *st) ++find_system_device (const char *os_dev, struct stat *st, int convert) + { + unsigned int i; + char *os_disk; + +- os_disk = convert_system_partition_to_system_disk (os_dev, st); ++ if (convert) ++ os_disk = convert_system_partition_to_system_disk (os_dev, st); ++ else ++ os_disk = xstrdup (os_dev); + if (! os_disk) + return -1; + +@@ -1392,7 +1395,7 @@ + return 0; + } + +- drive = find_system_device (os_dev, &st); ++ drive = find_system_device (os_dev, &st, 1); + if (drive < 0) + { + grub_error (GRUB_ERR_UNKNOWN_DEVICE, +@@ -1498,7 +1501,32 @@ + free (name); + + if (! disk) +- return 0; ++ { ++ /* We already know that the partition exists. Given that we already ++ checked the device map above, we can only get ++ GRUB_ERR_UNKNOWN_DEVICE at this point if the disk does not exist. ++ This can happen on Xen, where disk images in the host can be ++ assigned to devices that have partition-like names in the guest ++ but are really more like disks. */ ++ if (grub_errno == GRUB_ERR_UNKNOWN_DEVICE) ++ { ++ grub_util_warn ++ ("disk does not exist, so falling back to partition device %s", ++ os_dev); ++ ++ drive = find_system_device (os_dev, &st, 0); ++ if (drive < 0) ++ { ++ grub_error (GRUB_ERR_UNKNOWN_DEVICE, ++ "no mapping exists for `%s'", os_dev); ++ return 0; ++ } ++ ++ return make_device_name (drive, -1, -1); ++ } ++ else ++ return 0; ++ } + + partname = NULL; + grub_partition_iterate (disk, find_partition); === added file 'debian/patches/zfs_packed_la_array.patch' --- debian/patches/zfs_packed_la_array.patch 1970-01-01 00:00:00 +0000 +++ debian/patches/zfs_packed_la_array.patch 2011-08-03 12:27:39 +0000 @@ -0,0 +1,17 @@ +2011-08-03 Robert Millan <r...@gnu.org> + + * include/grub/zfs/zap_leaf.h (typedef union zap_leaf_chunk): Mark + la_array as packed. + Reported by: Zachary Bedell + +--- a/debian/grub-extras/zfs/include/grub/zfs/zap_leaf.h ++++ b/debian/grub-extras/zfs/include/grub/zfs/zap_leaf.h +@@ -90,7 +90,7 @@ + { + grub_uint8_t la_array[ZAP_LEAF_ARRAY_BYTES]; + grub_uint64_t la_array64; +- }; ++ } __attribute__ ((packed)); + grub_uint16_t la_next; /* next blk or CHAIN_END */ + } l_array; + struct zap_leaf_free {