diff --git a/grub2-ieee1275-FCP-methods-for-WWPN-and-LUNs.patch b/grub2-ieee1275-FCP-methods-for-WWPN-and-LUNs.patch new file mode 100644 index 0000000..9913742 --- /dev/null +++ b/grub2-ieee1275-FCP-methods-for-WWPN-and-LUNs.patch @@ -0,0 +1,118 @@ +From: Diego Domingos +Date: Fri, 10 Aug 2018 16:29:50 -0400 +Subject: ieee1275: implement FCP methods for WWPN and LUNs +References: bsc#1093145 +Patch-mainline: not yet + +This patch enables the fcp-targets and fcp-luns methods which are +responsible to get WWPNs and LUNs for fibre channel devices. + +Those methods are specially necessary if the boot directory and grub +installation are in different FCP disks, allowing the dev_iterate() +to find the WWPNs and LUNs when called by searchfs.uuid tool. + +Signed-off-by: Diego Domingos +--- + grub-core/disk/ieee1275/ofdisk.c | 89 +++++++++++++++++++++++++++++++++++++++- + 1 file changed, 88 insertions(+), 1 deletion(-) + +diff --git a/grub-core/disk/ieee1275/ofdisk.c b/grub-core/disk/ieee1275/ofdisk.c +index 235c0fe..bb213f1 100644 +--- a/grub-core/disk/ieee1275/ofdisk.c ++++ b/grub-core/disk/ieee1275/ofdisk.c +@@ -209,7 +209,94 @@ dev_iterate_real (const char *name, const char *path) + static void + dev_iterate (const struct grub_ieee1275_devalias *alias) + { +- if (grub_strcmp (alias->type, "vscsi") == 0) ++ if (grub_strcmp (alias->type, "fcp") == 0){ ++ ++ /* If we are dealing with fcp devices, we need ++ * to find the WWPNs and LUNs to iterate them */ ++ grub_ieee1275_ihandle_t ihandle; ++ grub_uint64_t *ptr_targets, *ptr_luns; ++ unsigned int i, j, pos; ++ char *buf, *bufptr; ++ ++ struct set_fcp_targets_args ++ { ++ struct grub_ieee1275_common_hdr common; ++ grub_ieee1275_cell_t method; ++ grub_ieee1275_cell_t ihandle; ++ grub_ieee1275_cell_t catch_result; ++ grub_ieee1275_cell_t nentries; ++ grub_ieee1275_cell_t table; ++ } args_targets; ++ ++ struct set_fcp_luns_args ++ { ++ struct grub_ieee1275_common_hdr common; ++ grub_ieee1275_cell_t method; ++ grub_ieee1275_cell_t ihandle; ++ grub_ieee1275_cell_t wwpn_h; ++ grub_ieee1275_cell_t wwpn_l; ++ grub_ieee1275_cell_t catch_result; ++ grub_ieee1275_cell_t nentries; ++ grub_ieee1275_cell_t table; ++ } args_luns; ++ ++ grub_ieee1275_open (alias->path, &ihandle); ++ ++ INIT_IEEE1275_COMMON (&args_targets.common, "call-method", 2, 3); ++ args_targets.method = (grub_ieee1275_cell_t) "fcp-targets"; ++ args_targets.ihandle = ihandle; ++ args_targets.table = 0; ++ args_targets.nentries = 0; ++ ++ INIT_IEEE1275_COMMON (&args_luns.common, "call-method", 4, 3); ++ args_luns.method = (grub_ieee1275_cell_t) "fcp-luns"; ++ args_luns.ihandle = ihandle; ++ args_luns.table = 0; ++ args_luns.nentries = 0; ++ ++ IEEE1275_CALL_ENTRY_FN (&args_targets); ++ ++ buf = grub_malloc (grub_strlen (alias->path) + 32 + 32); ++ ++ if (!buf) ++ return; ++ ++ bufptr = grub_stpcpy (buf, alias->path); ++ ++ /* For each WWPN discovered we need to find his associated LUNS ++ * calling the fcp-luns method */ ++ for (i=0; i< args_targets.nentries; i++){ ++ ptr_targets = *(grub_uint64_t **) (args_targets.table + 4 + 8 * i); ++ while(*ptr_targets){ ++ args_luns.wwpn_l = (grub_ieee1275_cell_t) (*ptr_targets); ++ args_luns.wwpn_h = (grub_ieee1275_cell_t) (*ptr_targets >> 32); ++ pos=grub_snprintf (bufptr, 32, "/disk@%" PRIxGRUB_UINT64_T, ++ *ptr_targets++); ++ IEEE1275_CALL_ENTRY_FN (&args_luns); ++ ptr_luns = *(grub_uint64_t **) (args_luns.table); ++ ++ for(j=0;jtype, "vscsi") == 0) + { + static grub_ieee1275_ihandle_t ihandle; + struct set_color_args diff --git a/grub2.changes b/grub2.changes index 44991d3..3b1a293 100644 --- a/grub2.changes +++ b/grub2.changes @@ -1,3 +1,9 @@ +------------------------------------------------------------------- +Wed Sep 26 08:01:05 UTC 2018 - mchang@suse.com + +- ieee1275: implement FCP methods for WWPN and LUNs (bsc#1093145) + * grub2-ieee1275-FCP-methods-for-WWPN-and-LUNs.patch + ------------------------------------------------------------------- Thu Sep 13 08:38:01 UTC 2018 - mchang@suse.com diff --git a/grub2.spec b/grub2.spec index 7bdd88d..e850828 100644 --- a/grub2.spec +++ b/grub2.spec @@ -258,6 +258,7 @@ Patch213: grub2-Fix-incorrect-netmask-on-ppc64.patch Patch214: grub2-ieee1275-open-raw-mode.patch Patch215: grub2-ppc64-cas-new-scope.patch Patch216: 0001-ofnet-Initialize-structs-in-bootpath-parser.patch +Patch217: grub2-ieee1275-FCP-methods-for-WWPN-and-LUNs.patch Patch233: grub2-use-stat-instead-of-udevadm-for-partition-lookup.patch Patch234: fix-grub2-use-stat-instead-of-udevadm-for-partition-lookup-with-new-glibc.patch Patch236: grub2-efi_gop-avoid-low-resolution.patch @@ -548,6 +549,7 @@ swap partition while in resuming %patch214 -p1 %patch215 -p1 %patch216 -p1 +%patch217 -p1 %patch233 -p1 %patch234 -p1 %patch236 -p1