Hello community, here is the log from the commit of package grub2 for openSUSE:Factory checked in at 2013-12-19 12:10:56 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/grub2 (Old) and /work/SRC/openSUSE:Factory/.grub2.new (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "grub2" Changes: -------- --- /work/SRC/openSUSE:Factory/grub2/grub2.changes 2013-12-11 15:40:08.000000000 +0100 +++ /work/SRC/openSUSE:Factory/.grub2.new/grub2.changes 2013-12-19 12:10:57.000000000 +0100 @@ -1,0 +2,9 @@ +Tue Dec 17 07:20:33 UTC 2013 - [email protected] + +- add new patches for booting btrfs snapshot (fate#316522) (fate#316232) + * 0001-btrfs-rename-skip_default-to-follow_default.patch + * 0002-btrfs-add-ability-to-boot-from-subvolumes.patch + * 0003-cmdline-add-envvar-loader_cmdline_append.patch + * 0004-btrfs-export-subvolume-envvars.patch + +------------------------------------------------------------------- New: ---- 0001-btrfs-rename-skip_default-to-follow_default.patch 0002-btrfs-add-ability-to-boot-from-subvolumes.patch 0003-cmdline-add-envvar-loader_cmdline_append.patch 0004-btrfs-export-subvolume-envvars.patch ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ grub2.spec ++++++ --- /var/tmp/diff_new_pack.7g5EGy/_old 2013-12-19 12:10:58.000000000 +0100 +++ /var/tmp/diff_new_pack.7g5EGy/_new 2013-12-19 12:10:58.000000000 +0100 @@ -135,6 +135,11 @@ Patch38: grub2-fix-x86_64-efi-startup-stack-alignment.patch Patch39: grub2-fix-x86_64-efi-callwrap-stack-alignment.patch Patch40: 0001-Fix-build-with-FreeType-2.5.1.patch +# Btrfs snapshot booting related patches +Patch100: 0001-btrfs-rename-skip_default-to-follow_default.patch +Patch101: 0002-btrfs-add-ability-to-boot-from-subvolumes.patch +Patch102: 0003-cmdline-add-envvar-loader_cmdline_append.patch +Patch103: 0004-btrfs-export-subvolume-envvars.patch Requires: gettext-runtime %if 0%{?suse_version} >= 1140 Requires: os-prober @@ -254,6 +259,10 @@ %patch38 -p1 %patch39 -p1 %patch40 -p1 +%patch100 -p1 +%patch101 -p1 +%patch102 -p1 +%patch103 -p1 # Generate po/LINGUAS for message catalogs ... ./linguas.sh ++++++ 0001-btrfs-rename-skip_default-to-follow_default.patch ++++++ From: Jeff Mahoney <[email protected]> Subject: grub2/btrfs: rename skip_default to follow_default The skip_default code in find_path uses 1 to indicate that the default should not be skipped, which is confusing. Let's rename that to follow_default. Signed-off-by: Jeff Mahoney <[email protected]> --- grub-core/fs/btrfs.c | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) --- a/grub-core/fs/btrfs.c 2013-06-16 08:24:05.000000000 -0400 +++ b/grub-core/fs/btrfs.c 2013-07-29 09:26:07.421380716 -0400 @@ -1208,7 +1208,7 @@ find_path (struct grub_btrfs_data *data, grub_size_t allocated = 0; struct grub_btrfs_dir_item *direl = NULL; struct grub_btrfs_key key_out; - int skip_default; + int follow_default; const char *ctoken; grub_size_t ctokenlen; char *path_alloc = NULL; @@ -1220,14 +1220,14 @@ find_path (struct grub_btrfs_data *data, key->object_id = data->sblock.root_dir_objectid; key->type = GRUB_BTRFS_ITEM_TYPE_DIR_ITEM; key->offset = 0; - skip_default = 1; + follow_default = 1; origpath = grub_strdup (path); if (!origpath) return grub_errno; while (1) { - if (!skip_default) + if (!follow_default) { while (path[0] == '/') path++; @@ -1254,9 +1254,9 @@ find_path (struct grub_btrfs_data *data, if (ctokenlen == 1 && ctoken[0] == '.') { - if (!skip_default) + if (!follow_default) path = slash; - skip_default = 0; + follow_default = 0; continue; } if (ctokenlen == 2 && ctoken[0] == '.' && ctoken[1] == '.') @@ -1287,9 +1287,9 @@ find_path (struct grub_btrfs_data *data, *type = GRUB_BTRFS_DIR_ITEM_TYPE_DIRECTORY; key->object_id = key_out.offset; - if (!skip_default) + if (!follow_default) path = slash; - skip_default = 0; + follow_default = 0; continue; } @@ -1359,9 +1359,9 @@ find_path (struct grub_btrfs_data *data, return err; } - if (!skip_default) + if (!follow_default) path = slash; - skip_default = 0; + follow_default = 0; if (cdirel->type == GRUB_BTRFS_DIR_ITEM_TYPE_SYMLINK) { struct grub_btrfs_inode inode; @@ -1416,7 +1416,7 @@ find_path (struct grub_btrfs_data *data, key->object_id = data->sblock.root_dir_objectid; key->type = GRUB_BTRFS_ITEM_TYPE_DIR_ITEM; key->offset = 0; - skip_default = 1; + follow_default = 1; } continue; } ++++++ 0002-btrfs-add-ability-to-boot-from-subvolumes.patch ++++++ ++++ 659 lines (skipped) ++++++ 0003-cmdline-add-envvar-loader_cmdline_append.patch ++++++ From: Michael Chang <[email protected]> Subject: add loader_cmdline_append environment variable Add loader_cmdline_append environment variable that appends it's value to the loader's command line. We can use this variable to assign values determined at run time. It will take effect on any subsidiary configs loaded using configfile as well. By means of this variable, we can, for example, set rootflags= according to the selected btrfs snapshots and tell linux kernel's btrfs module to mount the snapshot by the subvolume name or id. Signed-off-by: Michael Chang <[email protected]> --- grub-core/lib/cmdline.c | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/grub-core/lib/cmdline.c b/grub-core/lib/cmdline.c index a702e64..c5be945 100644 --- a/grub-core/lib/cmdline.c +++ b/grub-core/lib/cmdline.c @@ -19,6 +19,8 @@ #include <grub/lib/cmdline.h> #include <grub/misc.h> +#include <grub/mm.h> +#include <grub/env.h> static unsigned int check_arg (char *c, int *has_space) { @@ -65,6 +67,8 @@ int grub_create_loader_cmdline (int argc, char *argv[], char *buf, int i, space; unsigned int arg_size; char *c; + const char *append = NULL; + grub_size_t append_size = 0; for (i = 0; i < argc; i++) { @@ -95,6 +99,23 @@ int grub_create_loader_cmdline (int argc, char *argv[], char *buf, *buf++ = ' '; } + append = grub_env_get ("loader_cmdline_append"); + + if (append) + append_size = grub_strlen (append); + + if (append_size) + { + append_size++; + if (size >= append_size) + { + grub_strcpy (buf, append); + buf += append_size; + size -= append_size; + i++; + } + } + /* Replace last space with null. */ if (i) buf--; -- 1.8.1.4 ++++++ 0004-btrfs-export-subvolume-envvars.patch ++++++ From: Michael Chang <[email protected]> Subject: export btrfs_subvol and btrfs_subvolid We should export btrfs_subvol and btrfs_subvolid to have both visible to subsidiary configuration files loaded using configfile. Signed-off-by: Michael Chang <[email protected]> Index: grub-2.00/grub-core/fs/btrfs.c =================================================================== --- grub-2.00.orig/grub-core/fs/btrfs.c +++ grub-2.00/grub-core/fs/btrfs.c @@ -2252,6 +2252,8 @@ GRUB_MOD_INIT (btrfs) subvol_set_env); grub_register_variable_hook ("btrfs_subvolid", subvolid_get_env, subvolid_set_env); + grub_env_export ("btrfs_subvol"); + grub_env_export ("btrfs_subvolid"); } GRUB_MOD_FINI (btrfs) -- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
