[dm-devel] [PATCH v2 4/6] libmultipath: factor out code to get vpd page data

Martin Wilck martin.wilck at suse.com
Wed Dec 16 21:13:49 UTC 2020


On Wed, 2020-11-04 at 00:54 -0600, Benjamin Marzinski wrote:
> A future patch will reuse the code to get the vpd page data, so
> factor
> it out from get_vpd_sgio().
> 
> Signed-off-by: Benjamin Marzinski <bmarzins at redhat.com>
> ---
>  libmultipath/discovery.c | 19 +++++++++++++++----
>  1 file changed, 15 insertions(+), 4 deletions(-)
> 
> diff --git a/libmultipath/discovery.c b/libmultipath/discovery.c
> index a97d2998..95ddbbbd 100644
> --- a/libmultipath/discovery.c
> +++ b/libmultipath/discovery.c
> @@ -1319,11 +1319,10 @@ get_vpd_sysfs (struct udev_device *parent,
> int pg, char * str, int maxlen)
>  	return len;
>  }
>  
> -int
> -get_vpd_sgio (int fd, int pg, int vend_id, char * str, int maxlen)
> +static int
> +fetch_vpd_page(int fd, int pg, unsigned char *buff)
>  {
> -	int len, buff_len;
> -	unsigned char buff[4096];
> +	int buff_len;
>  
>  	memset(buff, 0x0, 4096);

I don't know ... I think we shouldn't write any new functions making
assumptions about the size of buffers passed to them, even if the
caller is directly next to them in the code.

>  	if (sgio_get_vpd(buff, 4096, fd, pg) < 0) {
> @@ -1344,6 +1343,18 @@ get_vpd_sgio (int fd, int pg, int vend_id,
> char * str, int maxlen)
>  		condlog(3, "vpd pg%02x page truncated", pg);
>  		buff_len = 4096;
>  	}
> +	return buff_len;
> +}
> +
> +int
> +get_vpd_sgio (int fd, int pg, int vend_id, char * str, int maxlen)
> +{
> +	int len, buff_len;
> +	unsigned char buff[4096];
> +
> +	buff_len = fetch_vpd_page(fd, pg, buff);
> +	if (buff_len < 0)
> +		return buff_len;
>  	if (pg == 0x80)
>  		len = parse_vpd_pg80(buff, str, maxlen);
>  	else if (pg == 0x83)

-- 
Dr. Martin Wilck <mwilck at suse.com>, Tel. +49 (0)911 74053 2107
SUSE  Software Solutions Germany GmbH
HRB 36809, AG Nürnberg GF: Felix
Imendörffer






More information about the dm-devel mailing list