All of lore.kernel.org
 help / color / mirror / Atom feed
From: Christoph Hellwig <hch@infradead.org>
To: linux-scsi@vger.kernel.org
Subject: Re: [RFC][PATCH] 2.5 hosts.c and scsi_host list cleanup
Date: Thu, 5 Sep 2002 00:01:58 +0100	[thread overview]
Message-ID: <20020905000158.A14644@infradead.org> (raw)
In-Reply-To: <20020904204310.GA3588@beaverton.ibm.com>; from andmike@us.ibm.com on Wed, Sep 04, 2002 at 01:43:10PM -0700

On Wed, Sep 04, 2002 at 01:43:10PM -0700, Mike Anderson wrote:
> I have created a patch against 2.5.33 that cleans up the scsi_host
> lists.
> 	- Switch scsi host template, name, host lists to struct
> 	  list_head's.
> 	- Moved all scsi_host related register / unregister functions
> 	  into hosts.c
> 	- Added list accessor interface and created a function similar
> 	  to driverfs bus_for_each_dev.
> 
> The patch is available at:
> http://www-124.ibm.com/storageio/gen-io/patch-scsi_hosts-2.5.33-1.gz

Any chance you could include it in the mail the next time?  Makes
readin and annotating a lot easier..


+	sh = scsi_shost_hn_get(hostnum);
+	
+	if (sh == NULL) /* This really shouldn't ever happen. */

The additional space between the two statements looks very strange

-	while(host != NULL && host->host_no != host_no)
-		host = host->next;
+	host = scsi_shost_hn_get(host_no);
 
 	if(host == NULL)

Dito.

  *  Updated to reflect the new initialization scheme for the higher 
  *  level of scsi drivers (sd/sr/st)
  *  September 17, 2000 Torben Mathiasen <tmm@image.dk>
+ *
+ *  Modified:
+ *  	Restructured scsi_host lists and associated functions.
+ *  		Mike Anderson (andmike@us.ibm.com)

Maybe you could follow the changelog style already present in the file?

  */
 
 
-/*
-static const char RCSid[] = "$Header: /vger/u4/cvs/linux/drivers/scsi/hosts.c,v 1.20 1996/12/12 19:18:32 davem Exp $";
-*/

Good to see this die!

-Scsi_Host_Template * scsi_hosts;
+	list_for_each_safe(lh, lh_sf, &scsi_shost_list) {
+		shost = list_entry(lh, struct Scsi_Host, sh_list);
+		if (shost->hostt == shost_tp) {
+			spin_unlock(&scsi_shost_list_lock);
+			(void)callback(shost);
+			spin_lock(&scsi_shost_list_lock);

The void cast isn't needed.

+		devfs_unregister (sdev->de);
+		put_device(&sdev->sdev_driverfs_dev);

Maybe make the coding style a little more consistent?  Yes, compared to the
old code you did a _really_ _really_ good job, but please take it to the end..

+	for (sdev = shost->host_queue; sdev;
+	     sdev = shost->host_queue) {

I wonder whether this wouldn't better be a do { } while loop.


+		scsi_release_commandblocks(sdev);
+
+		blk_cleanup_queue(&sdev->request_queue);
+		/* Next free up the Scsi_Device structures for this host */
+		shost->host_queue = sdev->next;
+		if (sdev->inquiry)
+			kfree(sdev->inquiry);
+		kfree((char *) sdev);

No need to cast.

+	/* Remove the instance of the individual hosts */
+	pcount = registered_shosts;
+	if (shost->hostt->release)
+		(*shost->hostt->release) (shost);
+	else {
+		/* This is the default case for the release function.
+		 * It should do the right thing for most correctly
+		 * written host adapters.
+		 */
+		if (shost->irq)
+			free_irq(shost->irq, NULL);
+		if (shost->dma_channel != 0xff)
+			free_dma(shost->dma_channel);
+		if (shost->io_port && shost->n_io_port)
+			release_region(shost->io_port, shost->n_io_port);

This code shouldn't be in generic code (again not your fault).  Move it to
a generic_scsi_host_release() function or so to nicely separate it out.

+	kfree((char *) shost);

See above.

+
+	len = strlen(name);
+	shost_name = (Scsi_Host_Name *) kmalloc(sizeof(Scsi_Host_Name),
+						GFP_KERNEL);

Cast isn't really needed again.


+	shost = (struct Scsi_Host *)kmalloc(sizeof(struct Scsi_Host) +
+					    xtr_bytes,
+					    (shost_tp->unchecked_isa_dma
+					     && xtr_bytes ?  GFP_DMA : 0)
+					    | GFP_KERNEL);

This is ugly as hell.  (Yes, I know it was in the old code).  What about
the following?

	gfp_mask = GFP_KERNEL;
	if (shost_tp->unchecked_isa_dma && xtr_bytes)
		gfp_mask |= __GFP_DMA;

	shost = kmalloc(sizeof(struct Scsi_Host) + xtr_bytes, gfp_mask);



+	if(!shost) {

small coding style oddities again..

+	if (!blk_nohighio)
+	shost->highmem_io = shost_tp->highmem_io;

Umm..


+
+	/*
+	 * detect should do its own locking
+	 * FIXME present is now set is scsi_register which breaks manual
+	 * registration code below.
+	 */
+	(void) shost_tp->detect(shost_tp);

No need for the cast again.

+			/*
+			 * The low-level driver failed to register a driver.
+			 * We can do this now.
+			 */
+			if(scsi_register(shost_tp, 0)==NULL)
+			{

Consistency.

+	(void) shost_tp_for_each_shost(shost_tp, shost_chk_and_release);

Again.

+void __init scsi_shost_hn_init(char *shost_hn)
+{
+	char *temp = shost_hn;
+
+	while (temp) {
+		while (*temp && (*temp != ':') && (*temp != ','))
+		    temp++;
+		if (!*temp)
+		    temp = NULL;
+		else
+		    *temp++ = 0;

Indentation consistency.


Except of those nitpacks the patch looks fine.  That code needed a big
overhaul badly.

  reply	other threads:[~2002-09-04 23:01 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2002-09-04 20:43 [RFC][PATCH] 2.5 hosts.c and scsi_host list cleanup Mike Anderson
2002-09-04 23:01 ` Christoph Hellwig [this message]
2002-09-04 23:26   ` Andries Brouwer
2002-09-05  5:45     ` Mike Anderson
2002-09-05  5:43   ` Mike Anderson

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20020905000158.A14644@infradead.org \
    --to=hch@infradead.org \
    --cc=linux-scsi@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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.