From b72d44a11a3e68c484e9dd40c44735766716ed1d Mon Sep 17 00:00:00 2001 From: Vladimir 'phcoder' Serbinenko Date: Wed, 18 Apr 2012 23:11:33 +0200 Subject: [PATCH] Scan mdraid before LVM. * include/grub/diskfilter.h (grub_diskfilter_register): Renamed to .. (grub_diskfilter_register_front): ... this. (grub_diskfilter_register_back): New function. All users of grub_diskfilter_register updated. --- ChangeLog | 9 +++++++++ grub-core/disk/dmraid_nvidia.c | 2 +- grub-core/disk/ldm.c | 2 +- grub-core/disk/lvm.c | 2 +- grub-core/disk/mdraid1x_linux.c | 2 +- grub-core/disk/mdraid_linux.c | 2 +- include/grub/diskfilter.h | 12 +++++++++++- 7 files changed, 25 insertions(+), 6 deletions(-) diff --git a/ChangeLog b/ChangeLog index 23dac4858..e9e0edde6 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,12 @@ +2012-04-18 Vladimir Serbinenko + + Scan mdraid before LVM. + + * include/grub/diskfilter.h (grub_diskfilter_register): Renamed to .. + (grub_diskfilter_register_front): ... this. + (grub_diskfilter_register_back): New function. + All users of grub_diskfilter_register updated. + 2012-04-18 Vladimir Serbinenko * util/grub-install.in: Fix an automatic target detection bug. diff --git a/grub-core/disk/dmraid_nvidia.c b/grub-core/disk/dmraid_nvidia.c index e0d7a2e98..7b03e9036 100644 --- a/grub-core/disk/dmraid_nvidia.c +++ b/grub-core/disk/dmraid_nvidia.c @@ -177,7 +177,7 @@ static struct grub_diskfilter grub_dmraid_nv_dev = GRUB_MOD_INIT(dm_nv) { - grub_diskfilter_register (&grub_dmraid_nv_dev); + grub_diskfilter_register_front (&grub_dmraid_nv_dev); } GRUB_MOD_FINI(dm_nv) diff --git a/grub-core/disk/ldm.c b/grub-core/disk/ldm.c index 5a36d26be..0e4761b5a 100644 --- a/grub-core/disk/ldm.c +++ b/grub-core/disk/ldm.c @@ -1001,7 +1001,7 @@ static struct grub_diskfilter grub_ldm_dev = { GRUB_MOD_INIT (ldm) { - grub_diskfilter_register (&grub_ldm_dev); + grub_diskfilter_register_back (&grub_ldm_dev); } GRUB_MOD_FINI (ldm) diff --git a/grub-core/disk/lvm.c b/grub-core/disk/lvm.c index d7be3e8a5..e0cf880cf 100644 --- a/grub-core/disk/lvm.c +++ b/grub-core/disk/lvm.c @@ -756,7 +756,7 @@ static struct grub_diskfilter grub_lvm_dev = { GRUB_MOD_INIT (lvm) { - grub_diskfilter_register (&grub_lvm_dev); + grub_diskfilter_register_back (&grub_lvm_dev); } GRUB_MOD_FINI (lvm) diff --git a/grub-core/disk/mdraid1x_linux.c b/grub-core/disk/mdraid1x_linux.c index 49d0ff467..a0e65a8cc 100644 --- a/grub-core/disk/mdraid1x_linux.c +++ b/grub-core/disk/mdraid1x_linux.c @@ -224,7 +224,7 @@ static struct grub_diskfilter grub_mdraid_dev = { GRUB_MOD_INIT (mdraid1x) { - grub_diskfilter_register (&grub_mdraid_dev); + grub_diskfilter_register_front (&grub_mdraid_dev); } GRUB_MOD_FINI (mdraid1x) diff --git a/grub-core/disk/mdraid_linux.c b/grub-core/disk/mdraid_linux.c index 961020950..f408fd37e 100644 --- a/grub-core/disk/mdraid_linux.c +++ b/grub-core/disk/mdraid_linux.c @@ -274,7 +274,7 @@ GRUB_MOD_INIT (mdraid09_be) GRUB_MOD_INIT (mdraid09) #endif { - grub_diskfilter_register (&grub_mdraid_dev); + grub_diskfilter_register_front (&grub_mdraid_dev); } #ifdef MODE_BIGENDIAN diff --git a/include/grub/diskfilter.h b/include/grub/diskfilter.h index 95754564d..38bb3addd 100644 --- a/include/grub/diskfilter.h +++ b/include/grub/diskfilter.h @@ -148,11 +148,21 @@ typedef struct grub_diskfilter *grub_diskfilter_t; extern grub_diskfilter_t grub_diskfilter_list; static inline void -grub_diskfilter_register (grub_diskfilter_t diskfilter) +grub_diskfilter_register_front (grub_diskfilter_t diskfilter) { grub_list_push (GRUB_AS_LIST_P (&grub_diskfilter_list), GRUB_AS_LIST (diskfilter)); } + +static inline void +grub_diskfilter_register_back (grub_diskfilter_t diskfilter) +{ + grub_diskfilter_t p, *q; + for (q = &grub_diskfilter_list, p = *q; p; q = &p->next, p = *q); + diskfilter->next = NULL; + diskfilter->prev = q; + *q = diskfilter; +} static inline void grub_diskfilter_unregister (grub_diskfilter_t diskfilter) {