From: Andrey Borzenkov <arvidjaar@gmail.com>
To: grub-devel@gnu.org
Subject: [PATCH] fix multilevel diskfilter detection after rev 5024
Date: Sat, 8 Jun 2013 11:12:19 +0400 [thread overview]
Message-ID: <1370675539-31143-1-git-send-email-arvidjaar@gmail.com> (raw)
After commit "Fix order to discover ambigouos RAID before discovering
RAIDs on top of it" diskfilter scans all volumes exactly once. This
means that only first level is found. Scanning second time will find
next level etc.
This means that e.g. MD RAID on top of MD RAID is not found.
Change scan to iteratively rescan volume list until nothing new was
detected (or scan depth exceeded).
Signed-off-by: Andrey Borzenkov <arvidjaar@gmail.com>
---
ChangeLog | 5 +++++
grub-core/disk/diskfilter.c | 29 +++++++++++++++++++++--------
2 files changed, 26 insertions(+), 8 deletions(-)
diff --git a/ChangeLog b/ChangeLog
index 4d8f343..bebcc8a 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2013-06-08 Andrey Borzenkov <arvidjaar@gmail.com>
+
+ * grub-core/disk/diskfilter.c (scan_devices): Iteratively
+ rescan diskfilter devices until nothing new is found.
+
2013-06-07 Andrey Borzenkov <arvidjaar@gmail.com>
* grub-core/script/execute.c (grub_script_execute_sourcecode): Split
diff --git a/grub-core/disk/diskfilter.c b/grub-core/disk/diskfilter.c
index c8d267a..0455177 100644
--- a/grub-core/disk/diskfilter.c
+++ b/grub-core/disk/diskfilter.c
@@ -188,6 +188,7 @@ scan_disk (const char *name, int accept_diskfilter)
if (!accept_diskfilter && is_valid_diskfilter_name (name))
return 0;
+ /* FIXME do we still need it? It is not called recursively anymore */
if (scan_depth > 100)
return 0;
@@ -219,6 +220,8 @@ scan_devices (const char *arname)
grub_disk_pull_t pull;
struct grub_diskfilter_vg *vg;
struct grub_diskfilter_lv *lv = NULL;
+ int scan_depth;
+ int need_rescan;
for (pull = 0; pull < GRUB_DISK_PULL_MAX; pull++)
for (p = grub_disk_dev_list; p; p = p->next)
@@ -231,16 +234,26 @@ scan_devices (const char *arname)
return;
}
- for (vg = array_list; vg; vg = vg->next)
+ scan_depth = 0;
+ need_rescan = 1;
+ while (need_rescan && scan_depth++ < 100)
{
- if (vg->lvs)
- for (lv = vg->lvs; lv; lv = lv->next)
- if (!lv->scanned && lv->fullname && lv->became_readable_at)
- {
- scan_disk (lv->fullname, 1);
- lv->scanned = 1;
- }
+ need_rescan = 0;
+ for (vg = array_list; vg; vg = vg->next)
+ {
+ if (vg->lvs)
+ for (lv = vg->lvs; lv; lv = lv->next)
+ if (!lv->scanned && lv->fullname && lv->became_readable_at)
+ {
+ scan_disk (lv->fullname, 1);
+ lv->scanned = 1;
+ need_rescan = 1;
+ }
+ }
}
+
+ if (need_rescan)
+ grub_error (GRUB_ERR_UNKNOWN_DEVICE, "DISKFILTER scan depth exceeded");
}
static int
--
tg: (ac72fb7..) u/diskfilter_multilevel_detect (depends on: master)
next reply other threads:[~2013-06-08 7:12 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-06-08 7:12 Andrey Borzenkov [this message]
2013-06-16 1:57 ` [PATCH] fix multilevel diskfilter detection after rev 5024 Vladimir 'φ-coder/phcoder' Serbinenko
2013-06-16 3:58 ` Andrey Borzenkov
2013-06-16 11:40 ` Vladimir 'φ-coder/phcoder' Serbinenko
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1370675539-31143-1-git-send-email-arvidjaar@gmail.com \
--to=arvidjaar@gmail.com \
--cc=grub-devel@gnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).