* [PATCH 0/2] ieee1275/powerpc: implement ofpath to enable hint feature for FC and dm devices
@ 2020-11-20 18:43 Diego Domingos
2020-11-20 18:43 ` [PATCH 1/2] ieee1275/powerpc: implements fibre channel discovery for ofpathname Diego Domingos
` (2 more replies)
0 siblings, 3 replies; 5+ messages in thread
From: Diego Domingos @ 2020-11-20 18:43 UTC (permalink / raw)
To: grub-devel
The grub-ofpathname and hint feature for ieee1275 are not working since there is no code implemented to get the information needed about fibre channel devices and device mapper.
This patch series implements the codes for both groups of devices and with them we can get the --hint-ieee1275 working properly.
^ permalink raw reply [flat|nested] 5+ messages in thread
* [PATCH 1/2] ieee1275/powerpc: implements fibre channel discovery for ofpathname
2020-11-20 18:43 [PATCH 0/2] ieee1275/powerpc: implement ofpath to enable hint feature for FC and dm devices Diego Domingos
@ 2020-11-20 18:43 ` Diego Domingos
2020-11-20 18:43 ` [PATCH 2/2] ieee1275/powerpc: enables device mapper discovery Diego Domingos
2021-11-16 7:29 ` [PATCH 0/2] ieee1275/powerpc: implement ofpath to enable hint feature for FC and dm devices Javier Martinez Canillas
2 siblings, 0 replies; 5+ messages in thread
From: Diego Domingos @ 2020-11-20 18:43 UTC (permalink / raw)
To: grub-devel
From: Diego Domingos <diegodo@br.ibm.com>
grub-ofpathname doesn't work with fibre channel because there is no
function currently implemented for it.
This patch enables it by prividing a function that looks for the port
name, building the entire path for OF devices.
---
grub-core/osdep/linux/ofpath.c | 49 ++++++++++++++++++++++++++++++++++
1 file changed, 49 insertions(+)
diff --git a/grub-core/osdep/linux/ofpath.c b/grub-core/osdep/linux/ofpath.c
index a6153d359..0f5d54e9f 100644
--- a/grub-core/osdep/linux/ofpath.c
+++ b/grub-core/osdep/linux/ofpath.c
@@ -350,6 +350,38 @@ of_path_of_ide(const char *sys_devname __attribute__((unused)), const char *devi
return ret;
}
+
+static void
+of_fc_port_name(const char *path, const char *subpath, char *port_name)
+{
+ char *bname, *basepath, *p;
+ int fd;
+
+ bname = xmalloc(sizeof(char)*150);
+ basepath = xmalloc(strlen(path));
+
+ /* Generate the path to get port name information from the drive */
+ strncpy(basepath,path,subpath-path);
+ basepath[subpath-path-1] = '\0';
+ p = get_basename(basepath);
+ snprintf(bname,sizeof(char)*150,"%s/fc_transport/%s/port_name",basepath,p);
+
+ /* Read the information from the port name */
+ fd = open (bname, O_RDONLY);
+ if (fd < 0)
+ grub_util_error (_("cannot open `%s': %s"), bname, strerror (errno));
+
+ if (read(fd,port_name,sizeof(char)*19) < 0)
+ grub_util_error (_("cannot read `%s': %s"), bname, strerror (errno));
+
+ sscanf(port_name,"0x%s",port_name);
+
+ close(fd);
+
+ free(bname);
+ free(basepath);
+}
+
#ifdef __sparc__
static char *
of_path_of_nvme(const char *sys_devname __attribute__((unused)),
@@ -577,6 +609,16 @@ of_path_of_scsi(const char *sys_devname __attribute__((unused)), const char *dev
digit_string = trailing_digits (device);
if (strncmp (of_path, "/vdevice/", sizeof ("/vdevice/") - 1) == 0)
{
+ if(strstr(of_path,"vfc-client"))
+ {
+ char * port_name = xmalloc(sizeof(char)*17);
+ of_fc_port_name(sysfs_path, p, port_name);
+
+ snprintf(disk,sizeof(disk),"/%s@%s", disk_name, port_name);
+ free(port_name);
+ }
+ else
+ {
unsigned long id = 0x8000 | (tgt << 8) | (bus << 5) | lun;
if (*digit_string == '\0')
{
@@ -590,6 +632,13 @@ of_path_of_scsi(const char *sys_devname __attribute__((unused)), const char *dev
snprintf(disk, sizeof (disk),
"/%s@%04lx000000000000:%c", disk_name, id, 'a' + (part - 1));
}
+ }
+ } else if (strstr(of_path,"fibre-channel")||(strstr(of_path,"vfc-client"))){
+ char * port_name = xmalloc(sizeof(char)*17);
+ of_fc_port_name(sysfs_path, p, port_name);
+
+ snprintf(disk,sizeof(disk),"/%s@%s", disk_name, port_name);
+ free(port_name);
}
else
{
--
2.21.3
^ permalink raw reply related [flat|nested] 5+ messages in thread
* [PATCH 2/2] ieee1275/powerpc: enables device mapper discovery
2020-11-20 18:43 [PATCH 0/2] ieee1275/powerpc: implement ofpath to enable hint feature for FC and dm devices Diego Domingos
2020-11-20 18:43 ` [PATCH 1/2] ieee1275/powerpc: implements fibre channel discovery for ofpathname Diego Domingos
@ 2020-11-20 18:43 ` Diego Domingos
2021-11-16 7:29 ` [PATCH 0/2] ieee1275/powerpc: implement ofpath to enable hint feature for FC and dm devices Javier Martinez Canillas
2 siblings, 0 replies; 5+ messages in thread
From: Diego Domingos @ 2020-11-20 18:43 UTC (permalink / raw)
To: grub-devel
From: Diego Domingos <diegodo@br.ibm.com>
this patch enables the device mapper discovery on ofpath.c. Currently,
when we are dealing with a device like /dev/dm-* the ofpath returns null
since there is no function implemented to handle this case.
This patch implements a function that will look into /sys/block/dm-*
devices and search recursively inside slaves directory to find the root
disk.
---
grub-core/osdep/linux/ofpath.c | 64 +++++++++++++++++++++++++++++++++-
1 file changed, 63 insertions(+), 1 deletion(-)
diff --git a/grub-core/osdep/linux/ofpath.c b/grub-core/osdep/linux/ofpath.c
index 0f5d54e9f..cc849d9c9 100644
--- a/grub-core/osdep/linux/ofpath.c
+++ b/grub-core/osdep/linux/ofpath.c
@@ -37,6 +37,7 @@
#include <fcntl.h>
#include <errno.h>
#include <ctype.h>
+#include <dirent.h>
#ifdef __sparc__
typedef enum
@@ -755,13 +756,74 @@ strip_trailing_digits (const char *p)
return new;
}
+static char *
+get_slave_from_dm(const char * device){
+ char *curr_device, *tmp;
+ char *directory;
+ char *ret = NULL;
+
+ directory = grub_strdup (device);
+ tmp = get_basename(directory);
+ curr_device = grub_strdup (tmp);
+ *tmp = '\0';
+
+ /* Recursively check for slaves devices so we can find the root device */
+ while ((curr_device[0] == 'd') && (curr_device[1] == 'm') && (curr_device[2] == '-')){
+ DIR *dp;
+ struct dirent *ep;
+ char* device_path;
+
+ device_path = grub_xasprintf ("/sys/block/%s/slaves", curr_device);
+ dp = opendir(device_path);
+ free(device_path);
+
+ if (dp != NULL)
+ {
+ ep = readdir (dp);
+ while (ep != NULL){
+
+ /* avoid some system directories */
+ if (!strcmp(ep->d_name,"."))
+ goto next_dir;
+ if (!strcmp(ep->d_name,".."))
+ goto next_dir;
+
+ free (curr_device);
+ free (ret);
+ curr_device = grub_strdup (ep->d_name);
+ ret = grub_xasprintf ("%s%s", directory, curr_device);
+ break;
+
+ next_dir:
+ ep = readdir (dp);
+ continue;
+ }
+ closedir (dp);
+ }
+ else
+ grub_util_warn (_("cannot open directory `%s'"), device_path);
+ }
+
+ free (directory);
+ free (curr_device);
+
+ return ret;
+}
+
char *
grub_util_devname_to_ofpath (const char *sys_devname)
{
- char *name_buf, *device, *devnode, *devicenode, *ofpath;
+ char *name_buf, *device, *devnode, *devicenode, *ofpath, *realname;
name_buf = xrealpath (sys_devname);
+ realname = get_slave_from_dm (name_buf);
+ if (realname)
+ {
+ free (name_buf);
+ name_buf = realname;
+ }
+
device = get_basename (name_buf);
devnode = strip_trailing_digits (name_buf);
devicenode = strip_trailing_digits (device);
--
2.21.3
^ permalink raw reply related [flat|nested] 5+ messages in thread
* Re: [PATCH 0/2] ieee1275/powerpc: implement ofpath to enable hint feature for FC and dm devices
2020-11-20 18:43 [PATCH 0/2] ieee1275/powerpc: implement ofpath to enable hint feature for FC and dm devices Diego Domingos
2020-11-20 18:43 ` [PATCH 1/2] ieee1275/powerpc: implements fibre channel discovery for ofpathname Diego Domingos
2020-11-20 18:43 ` [PATCH 2/2] ieee1275/powerpc: enables device mapper discovery Diego Domingos
@ 2021-11-16 7:29 ` Javier Martinez Canillas
2021-11-16 8:09 ` Michael Chang
2 siblings, 1 reply; 5+ messages in thread
From: Javier Martinez Canillas @ 2021-11-16 7:29 UTC (permalink / raw)
To: The development of GNU GRUB, Diego Domingos
Hello Diego,
On 11/20/20 19:43, Diego Domingos wrote:
> The grub-ofpathname and hint feature for ieee1275 are not working since there is no code implemented to get the information needed about fibre channel devices and device mapper.
>
> This patch series implements the codes for both groups of devices and with them we can get the --hint-ieee1275 working properly.
>
We are using these patches in Fedora and RHEL for some time and
it does solve the mentioned issues.
Tested-by: Javier Martinez Canillas <javierm@redhat.com>
Best regards,
--
Javier Martinez Canillas
Linux Engineering
Red Hat
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH 0/2] ieee1275/powerpc: implement ofpath to enable hint feature for FC and dm devices
2021-11-16 7:29 ` [PATCH 0/2] ieee1275/powerpc: implement ofpath to enable hint feature for FC and dm devices Javier Martinez Canillas
@ 2021-11-16 8:09 ` Michael Chang
0 siblings, 0 replies; 5+ messages in thread
From: Michael Chang @ 2021-11-16 8:09 UTC (permalink / raw)
To: The development of GNU GRUB; +Cc: Diego Domingos
On Tue, Nov 16, 2021 at 08:29:49AM +0100, Javier Martinez Canillas wrote:
> Hello Diego,
>
> On 11/20/20 19:43, Diego Domingos wrote:
> > The grub-ofpathname and hint feature for ieee1275 are not working since there is no code implemented to get the information needed about fibre channel devices and device mapper.
> >
> > This patch series implements the codes for both groups of devices and with them we can get the --hint-ieee1275 working properly.
> >
>
> We are using these patches in Fedora and RHEL for some time and
> it does solve the mentioned issues.
>
> Tested-by: Javier Martinez Canillas <javierm@redhat.com>
Same with SUSE/openSUSE.
Tested-by: Michael Chang <mchang@suse.com>
Thanks,
Michael
>
> Best regards,
> --
> Javier Martinez Canillas
> Linux Engineering
> Red Hat
>
>
> _______________________________________________
> Grub-devel mailing list
> Grub-devel@gnu.org
> https://lists.gnu.org/mailman/listinfo/grub-devel
^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2021-11-16 8:10 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2020-11-20 18:43 [PATCH 0/2] ieee1275/powerpc: implement ofpath to enable hint feature for FC and dm devices Diego Domingos
2020-11-20 18:43 ` [PATCH 1/2] ieee1275/powerpc: implements fibre channel discovery for ofpathname Diego Domingos
2020-11-20 18:43 ` [PATCH 2/2] ieee1275/powerpc: enables device mapper discovery Diego Domingos
2021-11-16 7:29 ` [PATCH 0/2] ieee1275/powerpc: implement ofpath to enable hint feature for FC and dm devices Javier Martinez Canillas
2021-11-16 8:09 ` Michael Chang
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.