All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Vladimir 'φ-coder/phcoder' Serbinenko" <phcoder@gmail.com>
To: grub-devel@gnu.org
Subject: Re: [PATCH] fix multilevel diskfilter detection after rev 5024
Date: Sun, 16 Jun 2013 03:57:08 +0200	[thread overview]
Message-ID: <51BD1B74.2090008@gmail.com> (raw)
In-Reply-To: <1370675539-31143-1-git-send-email-arvidjaar@gmail.com>

[-- Attachment #1: Type: text/plain, Size: 3082 bytes --]

On 08.06.2013 09:12, Andrey Borzenkov wrote:
> 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.
Do you mean raid on top of raid on top of raid? Otherwise I don't
understand the problem.
> 
> 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;
Still need it. Consider raid on loopback where underlying OS may call
into diskfilter again.
>  
> @@ -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
> 



[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 291 bytes --]

  reply	other threads:[~2013-06-16  1:57 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-06-08  7:12 [PATCH] fix multilevel diskfilter detection after rev 5024 Andrey Borzenkov
2013-06-16  1:57 ` Vladimir 'φ-coder/phcoder' Serbinenko [this message]
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=51BD1B74.2090008@gmail.com \
    --to=phcoder@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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.