grub-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [PATCH V2] grub-core: modify sector by sysfs as disk sector


From: Glenn Washburn
Subject: Re: [PATCH V2] grub-core: modify sector by sysfs as disk sector
Date: Thu, 9 Feb 2023 16:51:48 -0600

On Thu,  9 Feb 2023 13:09:16 +0530
Mukesh Kumar Chaurasiya <mchauras@linux.vnet.ibm.com> wrote:

> The disk sector size provided by sysfs file system considers the
> sector size of 512 irrespective of disk sector size, Thus
> causing the read by grub to an incorrect offset from what was
> originally intended.
> 
> Considering the 512 sector size of sysfs data the actual sector
> needs to be modified corresponding to disk sector size.
> 
> Signed-off-by: Mukesh Kumar Chaurasiya <mchauras@linux.vnet.ibm.com>
> ---
>  grub-core/osdep/linux/hostdisk.c | 8 +++++---
>  include/grub/disk.h              | 7 +++++++
>  2 files changed, 12 insertions(+), 3 deletions(-)
> 
> diff --git a/grub-core/osdep/linux/hostdisk.c
> b/grub-core/osdep/linux/hostdisk.c index 07058f63a..fd0769e3b 100644
> --- a/grub-core/osdep/linux/hostdisk.c
> +++ b/grub-core/osdep/linux/hostdisk.c
> @@ -198,7 +198,8 @@ have_devfs (void)
>  #pragma GCC diagnostic ignored "-Wformat-nonliteral"
>  
>  static int
> -grub_hostdisk_linux_find_partition (char *dev, grub_disk_addr_t
> sector) +grub_hostdisk_linux_find_partition (const grub_disk_t disk,
> char *dev,
> +                                    grub_disk_addr_t sector)
>  {
>    size_t len = strlen (dev);
>    const char *format;
> @@ -263,7 +264,8 @@ grub_hostdisk_linux_find_partition (char *dev,
> grub_disk_addr_t sector) if (fstat (fd, &st) < 0
>         || !grub_util_device_is_mapped_stat (&st)
>         || !grub_util_get_dm_node_linear_info (st.st_rdev, 0, 0,
> &start))
> -     start = grub_util_find_partition_start_os (real_dev);
> +        start = grub_disk_to_native_sector (disk,
> +
> grub_util_find_partition_start_os (real_dev)); /* We don't care about
> errors here.  */

There needs to be a space to tab conversion here on both lines. Perhaps
Daniel you can do this when merging.

Glenn

>    grub_errno = GRUB_ERR_NONE;
>  
> @@ -344,7 +346,7 @@ grub_util_fd_open_device (const grub_disk_t disk,
> grub_disk_addr_t sector, int f && strncmp (dev, "/dev/", 5) == 0)
>        {
>       if (sector >= part_start)
> -       is_partition = grub_hostdisk_linux_find_partition (dev,
> part_start);
> +       is_partition = grub_hostdisk_linux_find_partition (disk,
> dev, part_start); else
>         *max = part_start - sector;
>        }
> diff --git a/include/grub/disk.h b/include/grub/disk.h
> index 25c141ea2..071b2f7df 100644
> --- a/include/grub/disk.h
> +++ b/include/grub/disk.h
> @@ -208,6 +208,13 @@ grub_disk_from_native_sector (grub_disk_t disk,
> grub_disk_addr_t sector) return sector << (disk->log_sector_size -
> GRUB_DISK_SECTOR_BITS); }
>  
> +/* Convert from GRUB native disk sized sector to disk sized sector.
> */ +static inline grub_disk_addr_t
> +grub_disk_to_native_sector (grub_disk_t disk, grub_disk_addr_t
> sector) +{
> +  return sector >> (disk->log_sector_size - GRUB_DISK_SECTOR_BITS);
> +}
> +
>  /* This is called from the memory manager.  */
>  void grub_disk_cache_invalidate_all (void);
>  



reply via email to

[Prev in Thread] Current Thread [Next in Thread]