All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] fs: Allow number of blocks in block list to be optional, defaulting length to device length
@ 2021-03-21 18:09 Glenn Washburn
  2021-09-01 12:28 ` Daniel Kiper
  0 siblings, 1 reply; 2+ messages in thread
From: Glenn Washburn @ 2021-03-21 18:09 UTC (permalink / raw)
  To: grub-devel, Daniel Kiper; +Cc: Glenn Washburn

This is primarily useful to do something like "loopback newdev (dev)8+" to
create a device that skips the first 4K, which may contain a container
header, eg. a non-standard RAID1 header, that grub does not recognize. This
would allow that container data to be potentially accessed up to the end of
container, which may be necessary for some layouts that store data at the
end. There is currently not a good way to programmatically get the number
of sectors on a disk to set the appropriate length of the blocklist.

Signed-off-by: Glenn Washburn <development@efficientek.com>
---
 docs/grub.texi      | 10 ++++++----
 grub-core/kern/fs.c |  6 +++++-
 2 files changed, 11 insertions(+), 5 deletions(-)

diff --git a/docs/grub.texi b/docs/grub.texi
index eeb3118eb..b1abb6c6a 100644
--- a/docs/grub.texi
+++ b/docs/grub.texi
@@ -3036,16 +3036,18 @@ snapshot name is omitted.
 
 A block list is used for specifying a file that doesn't appear in the
 filesystem, like a chainloader. The syntax is
-@code{[@var{offset}]+@var{length}[,[@var{offset}]+@var{length}]@dots{}}.
+@code{[@var{offset}]+[@var{length}][,[@var{offset}]+[@var{length}]]@dots{}}.
 Here is an example:
 
 @example
-@code{0+100,200+1,300+300}
+@code{0+100,200+1,300+300,800+}
 @end example
 
 This represents that GRUB should read blocks 0 through 99, block 200,
-and blocks 300 through 599. If you omit an offset, then GRUB assumes
-the offset is zero.
+blocks 300 through 599, and blocks 800 until the end of the device.
+If you omit an offset, then GRUB assumes the offset is zero. If the
+length is omitted, then GRUB assumes the block list extends until the
+end of the device.
 
 Like the file name syntax (@pxref{File name syntax}), if a blocklist
 does not contain a device name, then GRUB uses GRUB's @dfn{root
diff --git a/grub-core/kern/fs.c b/grub-core/kern/fs.c
index c698295bc..e0d7e16a2 100644
--- a/grub-core/kern/fs.c
+++ b/grub-core/kern/fs.c
@@ -173,7 +173,11 @@ grub_fs_blocklist_open (grub_file_t file, const char *name)
 	}
 
       p++;
-      blocks[i].length = grub_strtoul (p, &p, 0);
+      if (*p == '\0' || *p == ',')
+        blocks[i].length = max_sectors - blocks[i].offset;
+      else
+        blocks[i].length = grub_strtoul (p, &p, 0);
+
       if (grub_errno != GRUB_ERR_NONE
 	  || blocks[i].length == 0
 	  || (*p && *p != ',' && ! grub_isspace (*p)))
-- 
2.27.0



^ permalink raw reply related	[flat|nested] 2+ messages in thread

* Re: [PATCH] fs: Allow number of blocks in block list to be optional,  defaulting length to device length
  2021-03-21 18:09 [PATCH] fs: Allow number of blocks in block list to be optional, defaulting length to device length Glenn Washburn
@ 2021-09-01 12:28 ` Daniel Kiper
  0 siblings, 0 replies; 2+ messages in thread
From: Daniel Kiper @ 2021-09-01 12:28 UTC (permalink / raw)
  To: Glenn Washburn; +Cc: grub-devel

On Sun, Mar 21, 2021 at 01:09:10PM -0500, Glenn Washburn wrote:
> This is primarily useful to do something like "loopback newdev (dev)8+" to
> create a device that skips the first 4K, which may contain a container
> header, eg. a non-standard RAID1 header, that grub does not recognize. This
> would allow that container data to be potentially accessed up to the end of
> container, which may be necessary for some layouts that store data at the
> end. There is currently not a good way to programmatically get the number
> of sectors on a disk to set the appropriate length of the blocklist.
>
> Signed-off-by: Glenn Washburn <development@efficientek.com>

Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>

Daniel


^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2021-09-01 12:29 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-03-21 18:09 [PATCH] fs: Allow number of blocks in block list to be optional, defaulting length to device length Glenn Washburn
2021-09-01 12:28 ` Daniel Kiper

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.