All of lore.kernel.org
 help / color / mirror / Atom feed
From: Andrei Borzenkov <arvidjaar@gmail.com>
To: Tim Walberg <twalberg@comcast.net>
Cc: bug-grub@gnu.org, grub-devel@gnu.org
Subject: Re: [BUG] grub-install fails on devices with high minor numbers
Date: Sat, 7 Nov 2015 09:48:44 +0300	[thread overview]
Message-ID: <563D9ECC.1060909@gmail.com> (raw)
In-Reply-To: <20151106195948.GR4710@comcast.net>

06.11.2015 22:59, Tim Walberg пишет:
> On 11/06/2015 21:26 +0300, Andrei Borzenkov wrote:
>>> 	06.11.2015 19:08, Tim Walberg ??????????:
>>> 	>On some relatively large systems that are used for virtualization,
>>> 	>often containing upwards of 100 virtual machines, we've started running
>>> 	>into issues with GRUB not being able to install on a new virtual machine
>>> 	>(using the typical process of mounting all the VM file systems on the host
>>> 	>and running grub-install under chroot). We've tracked the issue down to this
>>> 	>code, which is clearly erroneous - device minor numbers have been more than
>>> 	>8 bits for quite some time now - in grub-core/osdep/devmapper/getroot.c:
>>> 	>
>>> 	>     char *
>>> 	>     grub_util_devmapper_part_to_disk (struct stat *st,
>>> 	>                                   int *is_part, const char *path)
>>> 	>     {
>>> 	>       int major, minor;
>>> 	>
>>> 	>       if (grub_util_get_dm_node_linear_info (st->st_rdev,
>>> 	>                                          &major, &minor, 0))
>>> 	>         {
>>> 	>           *is_part = 1;
>>> 	>           return grub_find_device ("/dev",
>>> 	>                                    (major << 8) | minor);         <<<<< --------- ERROR!
>>> 	>         }
>>> 	>       *is_part = 0;
>>> 	>       return xstrdup (path);
>>> 	>     }
>>> 	>
>>> 	>When we have enough device-mapper devices (including all their partitions)
>>> 	>on a host that the next newly-added set of devices ends up with minor numbers
>>> 	>outside the 8-bit range, this code fails, with the result that grub-install
>>> 	>can't find the devices that it needs to complete the install.
>>> 	>
>>> 	>There might be other places in the code where similar assumptions are made.
>>> 	>Someone more familiar with the code would probably be better for tracking
>>> 	>those down. But, this one at least needs to be fixed.
>>> 	>
>>> 	
>>> 	
>>> 	Does attached patch help?
>
>>> 	From: Andrei Borzenkov <arvidjaar@gmail.com>
>>> 	Subject: [PATCH] devmapper/getroot: use makedev instead of direct shift
>>> 	
>>> 	Fixes device detection with large number of devices.
>>> 	
>>> 	Reported by Tim Wallberg <twalberg@comcast.net>
>>> 	
>>> 	---
>>> 	 grub-core/osdep/devmapper/getroot.c | 3 +--
>>> 	 1 file changed, 1 insertion(+), 2 deletions(-)
>>> 	
>>> 	diff --git a/grub-core/osdep/devmapper/getroot.c b/grub-core/osdep/devmapper/getroot.c
>>> 	index 0a77a04..64419f6 100644
>>> 	--- a/grub-core/osdep/devmapper/getroot.c
>>> 	+++ b/grub-core/osdep/devmapper/getroot.c
>>> 	@@ -208,8 +208,7 @@ grub_util_devmapper_part_to_disk (struct stat *st,
>>> 	 					 &major, &minor, 0))
>>> 	     {
>>> 	       *is_part = 1;
>>> 	-      return grub_find_device ("/dev",
>>> 	-			       (major << 8) | minor);
>>> 	+      return grub_find_device ("/dev", makedev (major, minor));
>>> 	     }
>>> 	   *is_part = 0;
>>> 	   return xstrdup (path);
>>> 	--
>>> 	tg: (cd6d79c..) u/makedev (depends on: master)
>
> End of included message
>
>
> Yes, that appears to have resolved the issue. I was already testing essentially
> that patch on my own, but wasn't sure if there might be similar assumptions
> made elsewhere in the code.

As far as I can tell, other places used makedev() already. Committed. 
Thanks!


      reply	other threads:[~2015-11-07  6:48 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <20151106160813.GP4710@comcast.net>
2015-11-06 18:26 ` [BUG] grub-install fails on devices with high minor numbers Andrei Borzenkov
2015-11-06 19:59   ` Tim Walberg
2015-11-07  6:48     ` Andrei Borzenkov [this message]

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=563D9ECC.1060909@gmail.com \
    --to=arvidjaar@gmail.com \
    --cc=bug-grub@gnu.org \
    --cc=grub-devel@gnu.org \
    --cc=twalberg@comcast.net \
    /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.