Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

[SCSI] aacraid: add support for long serial number information

Support displaying long serial number information. Reuse sysfs handler
internally as helper.

Signed-off-by: Mark Salyzyn <aacraid@adaptec.com>
Signed-off-by: James Bottomley <James.Bottomley@SteelEye.com>

authored by

Salyzyn, Mark and committed by
James Bottomley
24f02e1d b27e66df

+19 -7
+6 -4
drivers/scsi/aacraid/aachba.c
··· 1179 1179 } 1180 1180 1181 1181 if (!dev->in_reset) { 1182 + char buffer[16]; 1182 1183 tmp = le32_to_cpu(dev->adapter_info.kernelrev); 1183 1184 printk(KERN_INFO "%s%d: kernel %d.%d-%d[%d] %.*s\n", 1184 1185 dev->name, ··· 1200 1199 dev->name, dev->id, 1201 1200 tmp>>24,(tmp>>16)&0xff,tmp&0xff, 1202 1201 le32_to_cpu(dev->adapter_info.biosbuild)); 1203 - if (le32_to_cpu(dev->adapter_info.serial[0]) != 0xBAD0) 1204 - printk(KERN_INFO "%s%d: serial %x\n", 1205 - dev->name, dev->id, 1206 - le32_to_cpu(dev->adapter_info.serial[0])); 1202 + buffer[0] = '\0'; 1203 + if (aac_show_serial_number( 1204 + shost_to_class(dev->scsi_host_ptr), buffer)) 1205 + printk(KERN_INFO "%s%d: serial %s", 1206 + dev->name, dev->id, buffer); 1207 1207 if (dev->supplement_adapter_info.VpdInfo.Tsid[0]) { 1208 1208 printk(KERN_INFO "%s%d: TSID %.*s\n", 1209 1209 dev->name, dev->id,
+4
drivers/scsi/aacraid/aacraid.h
··· 1822 1822 int aac_get_containers(struct aac_dev *dev); 1823 1823 int aac_scsi_cmd(struct scsi_cmnd *cmd); 1824 1824 int aac_dev_ioctl(struct aac_dev *dev, int cmd, void __user *arg); 1825 + #ifndef shost_to_class 1826 + #define shost_to_class(shost) &shost->shost_classdev 1827 + #endif 1828 + ssize_t aac_show_serial_number(struct class_device *class_dev, char *buf); 1825 1829 int aac_do_ioctl(struct aac_dev * dev, int cmd, void __user *arg); 1826 1830 int aac_rx_init(struct aac_dev *dev); 1827 1831 int aac_rkt_init(struct aac_dev *dev);
+9 -3
drivers/scsi/aacraid/linit.c
··· 770 770 return len; 771 771 } 772 772 773 - static ssize_t aac_show_serial_number(struct class_device *class_dev, 774 - char *buf) 773 + ssize_t aac_show_serial_number(struct class_device *class_dev, char *buf) 775 774 { 776 775 struct aac_dev *dev = (struct aac_dev*)class_to_shost(class_dev)->hostdata; 777 776 int len = 0; 778 777 779 778 if (le32_to_cpu(dev->adapter_info.serial[0]) != 0xBAD0) 780 - len = snprintf(buf, PAGE_SIZE, "%x\n", 779 + len = snprintf(buf, PAGE_SIZE, "%06X\n", 781 780 le32_to_cpu(dev->adapter_info.serial[0])); 781 + if (len && 782 + !memcmp(&dev->supplement_adapter_info.MfgPcbaSerialNo[ 783 + sizeof(dev->supplement_adapter_info.MfgPcbaSerialNo)+2-len], 784 + buf, len)) 785 + len = snprintf(buf, PAGE_SIZE, "%.*s\n", 786 + (int)sizeof(dev->supplement_adapter_info.MfgPcbaSerialNo), 787 + dev->supplement_adapter_info.MfgPcbaSerialNo); 782 788 return len; 783 789 } 784 790