Re: [PATCH] Improve inquiry printing, take 3

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

 



Ping

On Tue, Jul 04, 2006 at 12:15:20PM -0600, Matthew Wilcox wrote:
> 
>  - Replace scsi_device_types array API with scsi_device_type function API.
>    Gets rid of a lot of common code, as well as being easier to use.
>  - Add the new device types in SPC4 r05a, and rename some of the older ones.
>  - Reformat the printing of inquiry data; now fits on one line and
>    includes PQ.
> 
> I think I've addressed all the feedback from the previous versions.  My
> current test box prints:
> 
> scsi 2:0:1:0: Direct access     HP 18.2G ATLAS10K3_18_SCA HP05 PQ: 0 ANSI: 2
> 
> Signed-off-by: Matthew Wilcox <matthew@xxxxxx>
> 
> Index: ./drivers/block/cciss_scsi.c
> ===================================================================
> RCS file: /var/cvs/linux-2.6/drivers/block/cciss_scsi.c,v
> retrieving revision 1.16
> diff -u -p -r1.16 cciss_scsi.c
> --- ./drivers/block/cciss_scsi.c	3 Apr 2006 13:44:03 -0000	1.16
> +++ ./drivers/block/cciss_scsi.c	4 Jul 2006 17:15:11 -0000
> @@ -251,10 +251,6 @@ scsi_cmd_stack_free(int ctlr)
>  	stk->pool = NULL;
>  }
>  
> -/* scsi_device_types comes from scsi.h */
> -#define DEVICETYPE(n) (n<0 || n>MAX_SCSI_DEVICE_CODE) ? \
> -	"Unknown" : scsi_device_types[n]
> -
>  #if 0
>  static int xmargin=8;
>  static int amargin=60;
> @@ -389,7 +385,7 @@ cciss_scsi_add_entry(int ctlr, int hostn
>  	   time anyway (the scsi layer's inquiries will show that info) */
>  	if (hostno != -1)
>  		printk("cciss%d: %s device c%db%dt%dl%d added.\n", 
> -			ctlr, DEVICETYPE(sd->devtype), hostno, 
> +			ctlr, scsi_device_type(sd->devtype), hostno, 
>  			sd->bus, sd->target, sd->lun);
>  	return 0;
>  }
> @@ -407,7 +403,7 @@ cciss_scsi_remove_entry(int ctlr, int ho
>  		ccissscsi[ctlr].dev[i] = ccissscsi[ctlr].dev[i+1];
>  	ccissscsi[ctlr].ndevices--;
>  	printk("cciss%d: %s device c%db%dt%dl%d removed.\n",
> -		ctlr, DEVICETYPE(sd.devtype), hostno, 
> +		ctlr, scsi_device_type(sd.devtype), hostno, 
>  			sd.bus, sd.target, sd.lun);
>  }
>  
> @@ -458,7 +454,7 @@ adjust_cciss_scsi_table(int ctlr, int ho
>  		if (found == 0) { /* device no longer present. */ 
>  			changes++;
>  			/* printk("cciss%d: %s device c%db%dt%dl%d removed.\n",
> -				ctlr, DEVICETYPE(csd->devtype), hostno, 
> +				ctlr, scsi_device_type(csd->devtype), hostno, 
>  					csd->bus, csd->target, csd->lun); */
>  			cciss_scsi_remove_entry(ctlr, hostno, i);
>  			/* note, i not incremented */
> @@ -468,7 +464,7 @@ adjust_cciss_scsi_table(int ctlr, int ho
>  			printk("cciss%d: device c%db%dt%dl%d type changed "
>  				"(device type now %s).\n",
>  				ctlr, hostno, csd->bus, csd->target, csd->lun,
> -					DEVICETYPE(csd->devtype));
> +					scsi_device_type(csd->devtype));
>  			csd->devtype = sd[j].devtype;
>  			i++;	/* so just move along. */
>  		} else 		/* device is same as it ever was, */
> @@ -1098,7 +1094,7 @@ cciss_update_non_disk_devices(int cntl_n
>  			if (ncurrent >= CCISS_MAX_SCSI_DEVS_PER_HBA) {
>  				printk(KERN_INFO "cciss%d: %s ignored, "
>  					"too many devices.\n", cntl_num,
> -					DEVICETYPE(devtype));
> +					scsi_device_type(devtype));
>  				break;
>  			}
>  			memcpy(&currentsd[ncurrent].scsi3addr[0], 
> Index: ./drivers/scsi/fcal.c
> ===================================================================
> RCS file: /var/cvs/linux-2.6/drivers/scsi/fcal.c,v
> retrieving revision 1.8
> diff -u -p -r1.8 fcal.c
> --- ./drivers/scsi/fcal.c	12 Nov 2005 04:08:10 -0000	1.8
> +++ ./drivers/scsi/fcal.c	4 Jul 2006 17:15:12 -0000
> @@ -249,8 +249,7 @@ int fcal_proc_info (struct Scsi_Host *ho
>  				if (scd->id == target) {
>  					SPRINTF ("  [AL-PA: %02x, Id: %02d, Port WWN: %08x%08x, Node WWN: %08x%08x]  ",
>  						alpa, target, u1[0], u1[1], u2[0], u2[1]);
> -					SPRINTF ("%s ", (scd->type < MAX_SCSI_DEVICE_CODE) ?
> -						scsi_device_types[(short) scd->type] : "Unknown device");
> +					SPRINTF ("%s ", scsi_device_type(scd->type));
>  
>  					for (j = 0; (j < 8) && (scd->vendor[j] >= 0x20); j++)
>  						SPRINTF ("%c", scd->vendor[j]);
> Index: ./drivers/scsi/g_NCR5380.c
> ===================================================================
> RCS file: /var/cvs/linux-2.6/drivers/scsi/g_NCR5380.c,v
> retrieving revision 1.14
> diff -u -p -r1.14 g_NCR5380.c
> --- ./drivers/scsi/g_NCR5380.c	3 Apr 2006 13:44:54 -0000	1.14
> +++ ./drivers/scsi/g_NCR5380.c	4 Jul 2006 17:15:12 -0000
> @@ -813,7 +813,6 @@ static int generic_NCR5380_proc_info(str
>  	struct NCR5380_hostdata *hostdata;
>  #ifdef NCR5380_STATS
>  	struct scsi_device *dev;
> -	extern const char *const scsi_device_types[MAX_SCSI_DEVICE_CODE];
>  #endif
>  
>  	NCR5380_setup(scsi_ptr);
> @@ -853,7 +852,7 @@ static int generic_NCR5380_proc_info(str
>  		long tr = hostdata->time_read[dev->id] / HZ;
>  		long tw = hostdata->time_write[dev->id] / HZ;
>  
> -		PRINTP("  T:%d %s " ANDP dev->id ANDP(dev->type < MAX_SCSI_DEVICE_CODE) ? scsi_device_types[(int) dev->type] : "Unknown");
> +		PRINTP("  T:%d %s " ANDP dev->id ANDP scsi_device_type(dev->type));
>  		for (i = 0; i < 8; i++)
>  			if (dev->vendor[i] >= 0x20)
>  				*(buffer + (len++)) = dev->vendor[i];
> Index: ./drivers/scsi/megaraid.c
> ===================================================================
> RCS file: /var/cvs/linux-2.6/drivers/scsi/megaraid.c,v
> retrieving revision 1.26
> diff -u -p -r1.26 megaraid.c
> --- ./drivers/scsi/megaraid.c	13 May 2006 04:12:19 -0000	1.26
> +++ ./drivers/scsi/megaraid.c	4 Jul 2006 17:15:12 -0000
> @@ -2822,9 +2822,7 @@ mega_print_inquiry(char *page, char *scs
>  
>  	i = scsi_inq[0] & 0x1f;
>  
> -	len += sprintf(page+len, "  Type:   %s ",
> -		i < MAX_SCSI_DEVICE_CODE ? scsi_device_types[i] :
> -		   "Unknown          ");
> +	len += sprintf(page+len, "  Type:   %s ", scsi_device_type(i));
>  
>  	len += sprintf(page+len,
>  	"                 ANSI SCSI revision: %02x", scsi_inq[2] & 0x07);
> Index: ./drivers/scsi/scsi.c
> ===================================================================
> RCS file: /var/cvs/linux-2.6/drivers/scsi/scsi.c,v
> retrieving revision 1.34
> diff -u -p -r1.34 scsi.c
> --- ./drivers/scsi/scsi.c	19 Apr 2006 04:55:59 -0000	1.34
> +++ ./drivers/scsi/scsi.c	4 Jul 2006 17:15:12 -0000
> @@ -97,24 +97,40 @@ unsigned int scsi_logging_level;
>  EXPORT_SYMBOL(scsi_logging_level);
>  #endif
>  
> -const char *const scsi_device_types[MAX_SCSI_DEVICE_CODE] = {
> -	"Direct-Access    ",
> -	"Sequential-Access",
> +static const char *const scsi_device_types[] = {
> +	"Direct access    ",
> +	"Sequential access",
>  	"Printer          ",
>  	"Processor        ",
>  	"WORM             ",
> -	"CD-ROM           ",
> +	"CD/DVD           ",
>  	"Scanner          ",
> -	"Optical Device   ",
> -	"Medium Changer   ",
> +	"Optical memory   ",
> +	"Media changer    ",
>  	"Communications   ",
> -	"Unknown          ",
> -	"Unknown          ",
> +	"ASC IT8          ",
> +	"ASC IT8          ",
>  	"RAID             ",
>  	"Enclosure        ",
> -	"Direct-Access-RBC",
> +	"Direct access RBC",
> +	"Optical card     ",
> +	"Bridge controller",
> +	"Object storage   ",
> +	"Automation/Drive ",
>  };
> -EXPORT_SYMBOL(scsi_device_types);
> +
> +const char * scsi_device_type(unsigned type)
> +{
> +	if (type == 0x1e)
> +		return "Well-known LUN   ";
> +	if (type == 0x1f)
> +		return "No Device        ";
> +	if (type > ARRAY_SIZE(scsi_device_types))
> +		return "Unknown          ";
> +	return scsi_device_types[type];
> +}
> +
> +EXPORT_SYMBOL(scsi_device_type);
>  
>  /*
>   * Function:    scsi_allocate_request
> Index: ./drivers/scsi/scsi_proc.c
> ===================================================================
> RCS file: /var/cvs/linux-2.6/drivers/scsi/scsi_proc.c,v
> retrieving revision 1.9
> diff -u -p -r1.9 scsi_proc.c
> --- ./drivers/scsi/scsi_proc.c	17 Jan 2006 14:51:49 -0000	1.9
> +++ ./drivers/scsi/scsi_proc.c	4 Jul 2006 17:15:12 -0000
> @@ -178,9 +178,7 @@ static int proc_print_scsidevice(struct 
>  
>  	seq_printf(s, "\n");
>  
> -	seq_printf(s, "  Type:   %s ",
> -		     sdev->type < MAX_SCSI_DEVICE_CODE ?
> -	       scsi_device_types[(int) sdev->type] : "Unknown          ");
> +	seq_printf(s, "  Type:   %s ", scsi_device_type(sdev->type));
>  	seq_printf(s, "               ANSI"
>  		     " SCSI revision: %02x", (sdev->scsi_level - 1) ?
>  		     sdev->scsi_level - 1 : 1);
> Index: ./drivers/scsi/scsi_scan.c
> ===================================================================
> RCS file: /var/cvs/linux-2.6/drivers/scsi/scsi_scan.c,v
> retrieving revision 1.41
> diff -u -p -r1.41 scsi_scan.c
> --- ./drivers/scsi/scsi_scan.c	29 May 2006 02:51:18 -0000	1.41
> +++ ./drivers/scsi/scsi_scan.c	4 Jul 2006 17:15:13 -0000
> @@ -186,59 +186,6 @@ static void scsi_unlock_floptical(struct
>  }
>  
>  /**
> - * print_inquiry - printk the inquiry information
> - * @inq_result:	printk this SCSI INQUIRY
> - *
> - * Description:
> - *     printk the vendor, model, and other information found in the
> - *     INQUIRY data in @inq_result.
> - *
> - * Notes:
> - *     Remove this, and replace with a hotplug event that logs any
> - *     relevant information.
> - **/
> -static void print_inquiry(unsigned char *inq_result)
> -{
> -	int i;
> -
> -	printk(KERN_NOTICE "  Vendor: ");
> -	for (i = 8; i < 16; i++)
> -		if (inq_result[i] >= 0x20 && i < inq_result[4] + 5)
> -			printk("%c", inq_result[i]);
> -		else
> -			printk(" ");
> -
> -	printk("  Model: ");
> -	for (i = 16; i < 32; i++)
> -		if (inq_result[i] >= 0x20 && i < inq_result[4] + 5)
> -			printk("%c", inq_result[i]);
> -		else
> -			printk(" ");
> -
> -	printk("  Rev: ");
> -	for (i = 32; i < 36; i++)
> -		if (inq_result[i] >= 0x20 && i < inq_result[4] + 5)
> -			printk("%c", inq_result[i]);
> -		else
> -			printk(" ");
> -
> -	printk("\n");
> -
> -	i = inq_result[0] & 0x1f;
> -
> -	printk(KERN_NOTICE "  Type:   %s ",
> -	       i <
> -	       MAX_SCSI_DEVICE_CODE ? scsi_device_types[i] :
> -	       "Unknown          ");
> -	printk("                 ANSI SCSI revision: %02x",
> -	       inq_result[2] & 0x07);
> -	if ((inq_result[2] & 0x07) == 1 && (inq_result[3] & 0x0f) == 1)
> -		printk(" CCS\n");
> -	else
> -		printk("\n");
> -}
> -
> -/**
>   * scsi_alloc_sdev - allocate and setup a scsi_Device
>   *
>   * Description:
> @@ -706,9 +653,8 @@ static int scsi_add_lun(struct scsi_devi
>  	if (*bflags & BLIST_ISROM) {
>  		/*
>  		 * It would be better to modify sdev->type, and set
> -		 * sdev->removable, but then the print_inquiry() output
> -		 * would not show TYPE_ROM; if print_inquiry() is removed
> -		 * the issue goes away.
> +		 * sdev->removable; this can now be done since
> +		 * print_inquiry has gone away.
>  		 */
>  		inq_result[0] = TYPE_ROM;
>  		inq_result[1] |= 0x80;	/* removable */
> @@ -737,8 +683,6 @@ static int scsi_add_lun(struct scsi_devi
>  		printk(KERN_INFO "scsi: unknown device type %d\n", sdev->type);
>  	}
>  
> -	print_inquiry(inq_result);
> -
>  	/*
>  	 * For a peripheral qualifier (PQ) value of 1 (001b), the SCSI
>  	 * spec says: The device server is capable of supporting the
> @@ -767,6 +711,12 @@ static int scsi_add_lun(struct scsi_devi
>  		sdev->wdtr = 1;
>  	if (inq_result[7] & 0x10)
>  		sdev->sdtr = 1;
> +
> +	sdev_printk(KERN_NOTICE "scsi", sdev, "%s %.8s %.16s %.4s PQ: %d "
> +			"ANSI: %d%s\n", scsi_device_type(sdev->type),
> +			sdev->vendor, sdev->model, sdev->rev,
> +			sdev->inq_periph_qual, inq_result[2] & 0x07,
> +			(inq_result[3] & 0x0f) == 1 ? " CCS" : "");
>  
>  	/*
>  	 * End sysfs code.
> Index: ./include/scsi/scsi.h
> ===================================================================
> RCS file: /var/cvs/linux-2.6/include/scsi/scsi.h,v
> retrieving revision 1.19
> diff -u -p -r1.19 scsi.h
> --- ./include/scsi/scsi.h	3 Apr 2006 13:46:08 -0000	1.19
> +++ ./include/scsi/scsi.h	4 Jul 2006 17:15:14 -0000
> @@ -25,13 +25,6 @@ extern const unsigned char scsi_command_
>  #define COMMAND_SIZE(opcode) scsi_command_size[((opcode) >> 5) & 7]
>  
>  /*
> - *	SCSI device types
> - */
> -
> -#define MAX_SCSI_DEVICE_CODE 15
> -extern const char *const scsi_device_types[MAX_SCSI_DEVICE_CODE];
> -
> -/*
>   * Special value for scanning to specify scanning or rescanning of all
>   * possible channels, (target) ids, or luns on a given shost.
>   */
> @@ -224,6 +217,9 @@ static inline int scsi_status_is_good(in
>  #define TYPE_ENCLOSURE      0x0d    /* Enclosure Services Device */
>  #define TYPE_RBC	    0x0e
>  #define TYPE_NO_LUN         0x7f
> +
> +/* Returns a human-readable name for the device */
> +extern const char * scsi_device_type(unsigned type);
>  
>  /*
>   * standard mode-select header prepended to all mode-select commands
> 
> -
> : 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
-
: 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