Re: [PATCH 2/3] Add EVPD page 0x83 to sysfs

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 02/28/2014 06:01 PM, Christoph Hellwig wrote:
> On Thu, Feb 13, 2014 at 11:07:11AM +0100, Hannes Reinecke wrote:
>> EVPD page 0x83 is used to uniquely identify the device.
>> So instead of having each and every program issue a separate
>> SG_IO call to retrieve this information it does make far more
>> sense to display it in sysfs.
> 
> This just shows binary data from the protocol, so shouldn't it be a
> binary sysfs attribute?
> 
> In general I have to I prefer the actual text attributes, but this is
> still better than having to do all the SG_IO inquirys.
> 
Binary sysfs attributes have a rather special handling, and IIRC
they should be used for direct hardware interaction only.
Also the hexdump is easier to parse for the unsuspecting user.

>> - * Returns 0 on success or a negative error number.
>> + * Returns size of the vpg page on success or a negative error number.
>>   */
>>  static int scsi_vpd_inquiry(struct scsi_device *sdev, unsigned char *buffer,
>>  							u8 page, unsigned len)
>> @@ -962,6 +962,9 @@ static int scsi_vpd_inquiry(struct scsi_device *sdev, unsigned char *buffer,
>>  	int result;
>>  	unsigned char cmd[16];
>>  
>> +	if (len < 4)
>> +		return -EINVAL;
> 
> Seems the change in calling conventions for these existing functions
> should be split into a separate patch?
> 
Ok.

>>  /**
>> + * scsi_attach_vpd - Attach Vital Product Data to a SCSI device structure
>> + * @sdev: The device to ask
>> + *
>> + * Attach the 'Device Identification' VPD page (0x83) to a SCSI device
>> + * structure. This information can be used to identify the device
>> + * uniquely.
>> + */
>> +void scsi_attach_vpd(struct scsi_device *sdev)
>> +{
>> +	int result, i;
>> +	int vpd_len = 255;
>> +	int pg83_supported = 0;
>> +	unsigned char *vpd_buf;
>> +
>> +	if (sdev->skip_vpd_pages)
>> +		return;
>> +retry_pg0:
>> +	vpd_buf = kmalloc(vpd_len, GFP_KERNEL);
>> +	if (!vpd_buf)
>> +		return;
>> +
>> +	/* Ask for all the pages supported by this device */
>> +	result = scsi_vpd_inquiry(sdev, vpd_buf, 0, vpd_len);
>> +	if (result < 0) {
>> +		kfree(vpd_buf);
>> +		return;
>> +	}
>> +	if (result > vpd_len) {
>> +		vpd_len = result;
>> +		kfree(vpd_buf);
>> +		goto retry_pg0;
>> +	}
>> +
>> +	for (i = 4; i < result; i++) {
>> +		if (vpd_buf[i] == 0x83) {
>> +			pg83_supported = 1;
>> +		}
>> +	}
>> +	kfree(vpd_buf);
> 
> Given how many checks all over the place we have which EVPD pages are
> suppored shouldn't we have query for evpd 0, and then set flags in the
> scsi device which are present?
> 
> Either way I think the call to query evpd 0 should be a separate
> function, so even if we don't store the information it's abstracted out.
> 
Hmm. That would work if we were just asking for a single page; but
when we're checking several pages (like 0x83 and 0x80) we'd need
either to pass in a page array or querying page 0 several times.
Neither of which is very appealing.

However, specifying additional flags for the individual pages might
work. I'll see what I can come up with.

> 
> Also the ses code has another query for 0x83, which now could use the
> one attached to the scsi_device.
> 
Ah. Missed that one. Will be converting it.

Cheers,

Hannes
-- 
Dr. Hannes Reinecke		      zSeries & Storage
hare@xxxxxxx			      +49 911 74053 688
SUSE LINUX Products GmbH, Maxfeldstr. 5, 90409 Nürnberg
GF: J. Hawn, J. Guild, F. Imendörffer, HRB 16746 (AG Nürnberg)
--
To unsubscribe from this list: send the line "unsubscribe linux-scsi" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html




[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [SCSI Target Devel]     [Linux SCSI Target Infrastructure]     [Kernel Newbies]     [IDE]     [Security]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux ATA RAID]     [Linux IIO]     [Samba]     [Device Mapper]
  Powered by Linux