public inbox for linux-scsi@vger.kernel.org
 help / color / mirror / Atom feed
* [PATCH] pull scsi_scan_host out of scsi_add_host
@ 2003-07-07 14:30 Christoph Hellwig
  2003-07-08  8:03 ` Mike Anderson
  0 siblings, 1 reply; 5+ messages in thread
From: Christoph Hellwig @ 2003-07-07 14:30 UTC (permalink / raw)
  To: James.Bottomley; +Cc: linux-scsi

As Douglas mentioned on this list a while ago there's hardware these
days where we don't want to automatically perform an initial bus scan
in scsi_add_host.  Currently we only have ieee1394 in the tree but
I can imagine more uses like iscsi or certain fc setups.

This patch removes the call to scsi_scan_host from scsi_add_host
and moves it into the drivers that want in.


diff -Nru a/drivers/block/cciss_scsi.c b/drivers/block/cciss_scsi.c
--- a/drivers/block/cciss_scsi.c	Sun Jul  6 18:14:28 2003
+++ b/drivers/block/cciss_scsi.c	Sun Jul  6 18:14:28 2003
@@ -712,7 +712,8 @@
 	sh->hostdata[0] = (unsigned long) hba[ctlr];
 	sh->irq = hba[ctlr]->intr;
 	sh->unique_id = sh->irq;
-	scsi_add_host(sh, &hba[ctlr]->pdev->dev);
+	scsi_add_host(sh, &hba[ctlr]->pdev->dev); /* XXX handle failure */
+	scsi_scan_host(sh);
 
 	return 1;
 }
diff -Nru a/drivers/scsi/NCR_D700.c b/drivers/scsi/NCR_D700.c
--- a/drivers/scsi/NCR_D700.c	Sun Jul  6 18:14:28 2003
+++ b/drivers/scsi/NCR_D700.c	Sun Jul  6 18:14:28 2003
@@ -218,7 +218,8 @@
 		goto irq_failed;
 	}
 
-	scsi_add_host(host, p->dev);
+	scsi_add_host(host, p->dev); /* XXX handle failure */
+	scsi_scan_host(host);
 
 	p->hosts[siop] = host;
 	hostdata->dev = p->dev;
diff -Nru a/drivers/scsi/aha1740.c b/drivers/scsi/aha1740.c
--- a/drivers/scsi/aha1740.c	Sun Jul  6 18:14:28 2003
+++ b/drivers/scsi/aha1740.c	Sun Jul  6 18:14:28 2003
@@ -636,7 +636,8 @@
 	}
 
 	eisa_set_drvdata (edev, shpnt);
-	scsi_add_host (shpnt, dev);
+	scsi_add_host (shpnt, dev); /* XXX handle failure */
+	scsi_scan_host (shpnt)
 	return 0;
 
  err_unmap:
diff -Nru a/drivers/scsi/aic7xxx/aic79xx_osm.c b/drivers/scsi/aic7xxx/aic79xx_osm.c
--- a/drivers/scsi/aic7xxx/aic79xx_osm.c	Sun Jul  6 18:14:28 2003
+++ b/drivers/scsi/aic7xxx/aic79xx_osm.c	Sun Jul  6 18:14:28 2003
@@ -2173,7 +2173,8 @@
 	ahd_unlock(ahd, &s);
 
 #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,5,0)
-	scsi_add_host(host, &ahd->dev_softc->dev);
+	scsi_add_host(host, &ahd->dev_softc->dev); /* XXX handle failure */
+	scsi_scan_host(host);
 #endif
 	return (0);
 }
diff -Nru a/drivers/scsi/aic7xxx/aic7xxx_osm.c b/drivers/scsi/aic7xxx/aic7xxx_osm.c
--- a/drivers/scsi/aic7xxx/aic7xxx_osm.c	Sun Jul  6 18:14:28 2003
+++ b/drivers/scsi/aic7xxx/aic7xxx_osm.c	Sun Jul  6 18:14:28 2003
@@ -1811,7 +1811,8 @@
 	ahc_unlock(ahc, &s);
 
 #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,5,0)
-	scsi_add_host(host, (ahc->dev_softc ? &ahc->dev_softc->dev : NULL));
+	scsi_add_host(host, (ahc->dev_softc ? &ahc->dev_softc->dev : NULL)); /* XXX handle failure */
+	scsi_scan_host(host);
 #endif
 	return (0);
 }
diff -Nru a/drivers/scsi/arm/acornscsi.c b/drivers/scsi/arm/acornscsi.c
--- a/drivers/scsi/arm/acornscsi.c	Sun Jul  6 18:14:28 2003
+++ b/drivers/scsi/arm/acornscsi.c	Sun Jul  6 18:14:28 2003
@@ -3043,9 +3043,13 @@
 	acornscsi_resetcard(ashost);
 
 	ret = scsi_add_host(host, &ec->dev);
-	if (ret == 0)
-		goto out;
+	if (ret)
+		goto err_7;
 
+	scsi_scan_host(host);
+	goto out;
+
+ err_7:
 	free_irq(host->irq, ashost);
  err_6:
 	release_region(host->io_port, 2048);
diff -Nru a/drivers/scsi/arm/cumana_1.c b/drivers/scsi/arm/cumana_1.c
--- a/drivers/scsi/arm/cumana_1.c	Sun Jul  6 18:14:28 2003
+++ b/drivers/scsi/arm/cumana_1.c	Sun Jul  6 18:14:28 2003
@@ -297,9 +297,13 @@
 	printk("\n");
 
 	ret = scsi_add_host(host, &ec->dev);
-	if (ret == 0)
-		goto out;
+	if (ret)
+		goto out_free_irq;
 
+	scsi_scan_host(host);
+	goto out;
+
+ out_free_irq:
 	free_irq(host->irq, host);
  out_release:
 	release_region(host->io_port, host->n_io_port);
diff -Nru a/drivers/scsi/arm/ecoscsi.c b/drivers/scsi/arm/ecoscsi.c
--- a/drivers/scsi/arm/ecoscsi.c	Sun Jul  6 18:14:29 2003
+++ b/drivers/scsi/arm/ecoscsi.c	Sun Jul  6 18:14:29 2003
@@ -205,7 +205,8 @@
 	NCR5380_print_options(host);
 	printk("\n");
 
-	scsi_add_host(host, NULL);
+	scsi_add_host(host, NULL); /* XXX handle failure */
+	scsi_scan_host(host);
 	return 0;
 
 release_reg:
diff -Nru a/drivers/scsi/arm/fas216.c b/drivers/scsi/arm/fas216.c
--- a/drivers/scsi/arm/fas216.c	Sun Jul  6 18:14:28 2003
+++ b/drivers/scsi/arm/fas216.c	Sun Jul  6 18:14:28 2003
@@ -2861,6 +2861,8 @@
 	ret = scsi_add_host(host, dev);
 	if (ret)
 		fas216_writeb(info, REG_CMD, CMD_RESETCHIP);
+	else
+		scsi_scan_host(host);
 
 	return ret;
 }
diff -Nru a/drivers/scsi/arm/oak.c b/drivers/scsi/arm/oak.c
--- a/drivers/scsi/arm/oak.c	Sun Jul  6 18:14:28 2003
+++ b/drivers/scsi/arm/oak.c	Sun Jul  6 18:14:28 2003
@@ -158,9 +158,13 @@
 	printk("\n");
 
 	ret = scsi_add_host(host, &ec->dev);
-	if (ret == 0)
-		goto out;
+	if (ret)
+		goto out_release;
 
+	scsi_scan_host(host);
+	goto out;
+
+ out_release:
 	release_region(host->io_port, host->n_io_port);
  unreg:
 	scsi_host_put(host);
diff -Nru a/drivers/scsi/dc395x.c b/drivers/scsi/dc395x.c
--- a/drivers/scsi/dc395x.c	Sun Jul  6 18:14:28 2003
+++ b/drivers/scsi/dc395x.c	Sun Jul  6 18:14:28 2003
@@ -6214,7 +6214,8 @@
 	pci_set_drvdata(pdev, scsi_host);
 
 	/* get the scsi mid level to scan for new devices on the bus */
-	scsi_add_host(scsi_host, &pdev->dev);
+	scsi_add_host(scsi_host, &pdev->dev);	/* XXX handle failure */
+	scsi_scan_host(scsi_host);
 
 	return 0;
 }
diff -Nru a/drivers/scsi/hosts.c b/drivers/scsi/hosts.c
--- a/drivers/scsi/hosts.c	Sun Jul  6 18:14:28 2003
+++ b/drivers/scsi/hosts.c	Sun Jul  6 18:14:28 2003
@@ -81,19 +81,15 @@
 	printk(KERN_INFO "scsi%d : %s\n", shost->host_no,
 			sht->info ? sht->info(shost) : sht->name);
 
-	error = scsi_sysfs_add_host(shost, dev);
-
 	if (!shost->can_queue) {
 		printk(KERN_ERR "%s: can_queue = 0 no longer supported\n",
 				sht->name);
 		error = -EINVAL;
 	}
 
-	if (!error) {
+	error = scsi_sysfs_add_host(shost, dev);
+	if (!error)
 		scsi_proc_host_add(shost);
-		scsi_scan_host(shost);
-	}
-			
 	return error;
 }
 
diff -Nru a/drivers/scsi/ide-scsi.c b/drivers/scsi/ide-scsi.c
--- a/drivers/scsi/ide-scsi.c	Sun Jul  6 18:14:29 2003
+++ b/drivers/scsi/ide-scsi.c	Sun Jul  6 18:14:29 2003
@@ -978,8 +978,10 @@
 		idescsi_setup (drive, idescsi);
 		drive->disk->fops = &idescsi_ops;
 		err = scsi_add_host(host, &idescsi_primary);
-		if (!err)
+		if (!err) {
+			scsi_scan_host(host);
 			return 0;
+		}
 		/* fall through on error */
 		ide_unregister_subdriver(drive);
 	}
diff -Nru a/drivers/scsi/ips.h b/drivers/scsi/ips.h
--- a/drivers/scsi/ips.h	Sun Jul  6 18:14:28 2003
+++ b/drivers/scsi/ips.h	Sun Jul  6 18:14:28 2003
@@ -111,7 +111,7 @@
    #else
       #define IPS_REGISTER_HOSTS(SHT)      (!ips_detect(SHT))
       #define IPS_UNREGISTER_HOSTS(SHT)
-      #define IPS_ADD_HOST(shost,device)   scsi_add_host(shost,device)
+      #define IPS_ADD_HOST(shost,device)   do { scsi_add_host(shost,device); scsi_scan_host(shost); } while (0)
       #define IPS_REMOVE_HOST(shost)       scsi_remove_host(shost)
       #define IPS_SCSI_SET_DEVICE(sh,ha)   scsi_set_device(sh, &(ha)->pcidev->dev)
       #define IPS_PRINTK(level, pcidev, format, arg...)                 \
diff -Nru a/drivers/scsi/lasi700.c b/drivers/scsi/lasi700.c
--- a/drivers/scsi/lasi700.c	Sun Jul  6 18:14:28 2003
+++ b/drivers/scsi/lasi700.c	Sun Jul  6 18:14:28 2003
@@ -128,7 +128,8 @@
 	}
 
 	dev_set_drvdata(&dev->dev, host);
-	scsi_add_host(host, &dev->dev);
+	scsi_add_host(host, &dev->dev); /* XXX handle failure */
+	scsi_scan_host(host);
 
 	return 0;
 
diff -Nru a/drivers/scsi/nsp32.c b/drivers/scsi/nsp32.c
--- a/drivers/scsi/nsp32.c	Sun Jul  6 18:14:28 2003
+++ b/drivers/scsi/nsp32.c	Sun Jul  6 18:14:28 2003
@@ -1820,7 +1820,8 @@
 		goto free_irq;
         }
 
-	scsi_add_host(host, &pdev->dev);
+	scsi_add_host(host, &pdev->dev); /* XXX handle failure */
+	scsi_scan_host(host);
 	pci_set_drvdata(pdev, host);
 	return 0;
 
diff -Nru a/drivers/scsi/pcmcia/aha152x_stub.c b/drivers/scsi/pcmcia/aha152x_stub.c
--- a/drivers/scsi/pcmcia/aha152x_stub.c	Sun Jul  6 18:14:29 2003
+++ b/drivers/scsi/pcmcia/aha152x_stub.c	Sun Jul  6 18:14:29 2003
@@ -278,7 +278,8 @@
 	goto cs_failed;
     }
 
-    scsi_add_host(host, NULL);
+    scsi_add_host(host, NULL); /* XXX handle failure */
+    scsi_scan_host(host);
 
     sprintf(info->node.dev_name, "scsi%d", host->host_no);
     link->dev = &info->node;
diff -Nru a/drivers/scsi/pcmcia/fdomain_stub.c b/drivers/scsi/pcmcia/fdomain_stub.c
--- a/drivers/scsi/pcmcia/fdomain_stub.c	Sun Jul  6 18:14:28 2003
+++ b/drivers/scsi/pcmcia/fdomain_stub.c	Sun Jul  6 18:14:28 2003
@@ -254,7 +254,8 @@
 	goto cs_failed;
     }
  
-    scsi_add_host(host, NULL);
+    scsi_add_host(host, NULL); /* XXX handle failure */
+    scsi_scan_host(host);
 
     sprintf(info->node.dev_name, "scsi%d", host->host_no);
     link->dev = &info->node;
diff -Nru a/drivers/scsi/pcmcia/nsp_cs.c b/drivers/scsi/pcmcia/nsp_cs.c
--- a/drivers/scsi/pcmcia/nsp_cs.c	Sun Jul  6 18:14:29 2003
+++ b/drivers/scsi/pcmcia/nsp_cs.c	Sun Jul  6 18:14:29 2003
@@ -1773,7 +1773,8 @@
 		       req.Base+req.Size-1);
 	printk("\n");
 
-	scsi_add_host(host, NULL);
+	scsi_add_host(host, NULL); /* XXX handle failure */
+	scsi_scan_host(host);
 	link->state &= ~DEV_CONFIG_PENDING;
 	return;
 
diff -Nru a/drivers/scsi/pcmcia/qlogic_stub.c b/drivers/scsi/pcmcia/qlogic_stub.c
--- a/drivers/scsi/pcmcia/qlogic_stub.c	Sun Jul  6 18:14:28 2003
+++ b/drivers/scsi/pcmcia/qlogic_stub.c	Sun Jul  6 18:14:28 2003
@@ -270,7 +270,8 @@
 	link->dev = &info->node;
 	info->host = host;
 
-	scsi_add_host(host, NULL);
+	scsi_add_host(host, NULL); /* XXX handle failure */
+	scsi_scan_host(host);
 
 out:
 	link->state &= ~DEV_CONFIG_PENDING;
diff -Nru a/drivers/scsi/scsi_debug.c b/drivers/scsi/scsi_debug.c
--- a/drivers/scsi/scsi_debug.c	Sun Jul  6 18:14:29 2003
+++ b/drivers/scsi/scsi_debug.c	Sun Jul  6 18:14:29 2003
@@ -1701,7 +1701,8 @@
                 printk(KERN_ERR "%s: scsi_add_host failed\n", __FUNCTION__);
                 error = -ENODEV;
 		scsi_host_put(hpnt);
-        }
+        } else
+		scsi_scan_host(hpnt);
 
 
         return error;
diff -Nru a/drivers/scsi/scsi_module.c b/drivers/scsi/scsi_module.c
--- a/drivers/scsi/scsi_module.c	Sun Jul  6 18:14:28 2003
+++ b/drivers/scsi/scsi_module.c	Sun Jul  6 18:14:28 2003
@@ -40,6 +40,7 @@
 		error = scsi_add_host(shost, NULL);
 		if (error)
 			goto fail;
+		scsi_scan_host(shost);
 	}
 	return 0;
  fail:
diff -Nru a/drivers/scsi/scsi_priv.h b/drivers/scsi/scsi_priv.h
--- a/drivers/scsi/scsi_priv.h	Sun Jul  6 18:14:29 2003
+++ b/drivers/scsi/scsi_priv.h	Sun Jul  6 18:14:29 2003
@@ -102,7 +102,6 @@
 #endif /* CONFIG_PROC_FS */
 
 /* scsi_scan.c */
-extern void scsi_scan_host(struct Scsi_Host *);
 extern void scsi_forget_host(struct Scsi_Host *);
 extern void scsi_free_sdev(struct scsi_device *);
 extern void scsi_free_shost(struct Scsi_Host *);
diff -Nru a/drivers/scsi/scsi_syms.c b/drivers/scsi/scsi_syms.c
--- a/drivers/scsi/scsi_syms.c	Sun Jul  6 18:14:28 2003
+++ b/drivers/scsi/scsi_syms.c	Sun Jul  6 18:14:28 2003
@@ -34,6 +34,7 @@
 EXPORT_SYMBOL(scsi_register_interface);
 EXPORT_SYMBOL(scsi_host_alloc);
 EXPORT_SYMBOL(scsi_add_host);
+EXPORT_SYMBOL(scsi_scan_host);
 EXPORT_SYMBOL(scsi_remove_host);
 EXPORT_SYMBOL(scsi_host_get);
 EXPORT_SYMBOL(scsi_host_put);
diff -Nru a/drivers/scsi/sim710.c b/drivers/scsi/sim710.c
--- a/drivers/scsi/sim710.c	Sun Jul  6 18:14:29 2003
+++ b/drivers/scsi/sim710.c	Sun Jul  6 18:14:29 2003
@@ -138,7 +138,8 @@
 		goto out_unregister;
 	}
 
-	scsi_add_host(host, dev);
+	scsi_add_host(host, dev); /* XXX handle failure */
+	scsi_scan_host(host);
 	hostdata->dev = dev;
 
 	return 0;
diff -Nru a/drivers/usb/image/hpusbscsi.c b/drivers/usb/image/hpusbscsi.c
--- a/drivers/usb/image/hpusbscsi.c	Sun Jul  6 18:14:29 2003
+++ b/drivers/usb/image/hpusbscsi.c	Sun Jul  6 18:14:29 2003
@@ -109,7 +109,8 @@
 		goto out_unlink_controlurb;
 
 	new->host->hostdata[0] = (unsigned long)new;
-	scsi_add_host(new->host, &intf->dev);
+	scsi_add_host(new->host, &intf->dev); /* XXX handle failure */
+	scsi_scan_host(new->host);
 
 	new->sense_command[0] = REQUEST_SENSE;
 	new->sense_command[4] = HPUSBSCSI_SENSE_LENGTH;
diff -Nru a/drivers/usb/image/microtek.c b/drivers/usb/image/microtek.c
--- a/drivers/usb/image/microtek.c	Sun Jul  6 18:14:29 2003
+++ b/drivers/usb/image/microtek.c	Sun Jul  6 18:14:29 2003
@@ -817,7 +817,8 @@
 		goto out_free_urb;
 
 	new_desc->host->hostdata[0] = (unsigned long)new_desc;
-	scsi_add_host(new_desc->host, NULL);
+	scsi_add_host(new_desc->host, NULL); /* XXX handle failure */
+	scsi_scan_host(new_desc->host);
 
 	usb_set_intfdata(intf, new_desc);
 	return 0;
diff -Nru a/drivers/usb/storage/usb.c b/drivers/usb/storage/usb.c
--- a/drivers/usb/storage/usb.c	Sun Jul  6 18:14:28 2003
+++ b/drivers/usb/storage/usb.c	Sun Jul  6 18:14:28 2003
@@ -958,6 +958,8 @@
 		goto BadDevice;
 	}
 
+	scsi_scan_host(us->host);
+
 	printk(KERN_DEBUG 
 	       "WARNING: USB Mass Storage data integrity not assured\n");
 	printk(KERN_DEBUG 
diff -Nru a/include/scsi/scsi_host.h b/include/scsi/scsi_host.h
--- a/include/scsi/scsi_host.h	Sun Jul  6 18:14:28 2003
+++ b/include/scsi/scsi_host.h	Sun Jul  6 18:14:28 2003
@@ -477,6 +477,7 @@
 
 extern struct Scsi_Host *scsi_host_alloc(struct scsi_host_template *, int);
 extern int scsi_add_host(struct Scsi_Host *, struct device *);
+extern void scsi_scan_host(struct Scsi_Host *);
 extern int scsi_remove_host(struct Scsi_Host *);
 extern void scsi_host_get(struct Scsi_Host *);
 extern void scsi_host_put(struct Scsi_Host *t);
diff -Nru a/drivers/scsi/NCR_Q720.c b/drivers/scsi/NCR_Q720.c
--- a/drivers/scsi/NCR_Q720.c	Sun Jul  6 18:41:18 2003
+++ b/drivers/scsi/NCR_Q720.c	Sun Jul  6 18:41:18 2003
@@ -85,6 +85,7 @@
 	__u8 scsr1 = readb(vaddr + NCR_Q720_SCSR_OFFSET + 1);
 	__u8 differential = readb(vaddr + NCR_Q720_SCSR_OFFSET) & 0x20;
 	__u8 version;
+	int error;
 
 	scsi_id = scsr1 >> 4;
 	/* enable burst length 16 (FIXME: should allow this) */
@@ -120,9 +121,12 @@
 	scsr1 &= ~0x01;
 	writeb(scsr1, vaddr + NCR_Q720_SCSR_OFFSET + 1);
 
-	scsi_add_host(p->hosts[siop], p->dev);
-
-	return 0;
+	error = scsi_add_host(p->hosts[siop], p->dev);
+	if (error)
+		ncr53c8xx_release(p->hosts[siop]);
+	else
+		scsi_scan_host(p->hosts[siop]);
+	return error;
 
  fail:
 	return -ENODEV;
diff -Nru a/drivers/scsi/sd.c b/drivers/scsi/sd.c
--- a/drivers/scsi/sd.c	Sun Jul  6 18:41:18 2003
+++ b/drivers/scsi/sd.c	Sun Jul  6 18:41:18 2003
@@ -606,35 +606,8 @@
 
 static void sd_rescan(struct device *dev)
 {
-	struct scsi_device *sdp = to_scsi_device(dev);
 	struct scsi_disk *sdkp = dev_get_drvdata(dev);
-	struct gendisk *gd;
-	struct scsi_request *SRpnt;
-	unsigned char *buffer;
-
-	if (!sdkp || sdp->online == FALSE || !sdkp->media_present)
-		return;
-		
-	gd = sdkp->disk;
-	
-	SCSI_LOG_HLQUEUE(3, printk("sd_rescan: disk=%s\n", gd->disk_name));
-	
-	SRpnt = scsi_allocate_request(sdp);
-	if (!SRpnt) {
-		printk(KERN_WARNING "(sd_rescan:) Request allocation "
-		       "failure.\n");
-		return;
-	}
-
-	if (sdkp->device->host->unchecked_isa_dma)
-		buffer = kmalloc(512, GFP_DMA);
-	else
-		buffer = kmalloc(512, GFP_KERNEL);
-
-    	sd_read_capacity(sdkp, gd->disk_name, SRpnt, buffer);
-	set_capacity(gd, sdkp->capacity);	
-	scsi_release_request(SRpnt);
-	kfree(buffer);
+	sd_revalidate_disk(sdkp->disk);
 }
 
 static struct block_device_operations sd_fops = {
diff -Nru a/drivers/scsi/zalon.c b/drivers/scsi/zalon.c
--- a/drivers/scsi/zalon.c	Sun Jul  6 18:41:18 2003
+++ b/drivers/scsi/zalon.c	Sun Jul  6 18:41:18 2003
@@ -85,7 +85,7 @@
 {
 	struct gsc_irq gsc_irq;
 	u32 zalon_vers;
-	int irq;
+	int irq, error = -ENODEV;
 	unsigned long zalon = dev->hpa;
 	unsigned long io_port = zalon + GSC_SCSI_ZALON_OFFSET;
 	static int unit = 0;
@@ -147,11 +147,18 @@
 
 	dev_set_drvdata(&dev->dev, host);
 
-	scsi_add_host(host, &dev->dev);
+	error = scsi_add_host(host, &dev->dev);
+	if (error)
+		goto fail_free_irq;
 
+	scsi_scan_host(host);
 	return 0;
+
+ fail_free_irq:
+	free_irq(irq, host);
  fail:
-	return -ENODEV;
+	ncr53c8xx_release(host);
+	return error;
 }
 
 static struct parisc_device_id zalon_tbl[] = {

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH] pull scsi_scan_host out of scsi_add_host
  2003-07-07 14:30 [PATCH] pull scsi_scan_host out of scsi_add_host Christoph Hellwig
@ 2003-07-08  8:03 ` Mike Anderson
  2003-07-08  8:23   ` Christoph Hellwig
  2003-07-08  9:03   ` Oliver Neukum
  0 siblings, 2 replies; 5+ messages in thread
From: Mike Anderson @ 2003-07-08  8:03 UTC (permalink / raw)
  To: Christoph Hellwig; +Cc: James.Bottomley, linux-scsi

Christoph Hellwig [hch@lst.de] wrote:
> As Douglas mentioned on this list a while ago there's hardware these
> days where we don't want to automatically perform an initial bus scan
> in scsi_add_host.  Currently we only have ieee1394 in the tree but
> I can imagine more uses like iscsi or certain fc setups.
> 
> This patch removes the call to scsi_scan_host from scsi_add_host
> and moves it into the drivers that want in.

Would we want to make a symmetric interface and pull the
unscan out of scsi_remove_host also?

-andmike
--
Michael Anderson
andmike@us.ibm.com


^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH] pull scsi_scan_host out of scsi_add_host
  2003-07-08  8:03 ` Mike Anderson
@ 2003-07-08  8:23   ` Christoph Hellwig
  2003-07-08  9:03   ` Oliver Neukum
  1 sibling, 0 replies; 5+ messages in thread
From: Christoph Hellwig @ 2003-07-08  8:23 UTC (permalink / raw)
  To: James.Bottomley, linux-scsi

On Tue, Jul 08, 2003 at 01:03:35AM -0700, Mike Anderson wrote:
> Would we want to make a symmetric interface and pull the
> unscan out of scsi_remove_host also?

It would make sense if we something like an unscan.  But the closest
thing to an unscan is scsi_forget_host which just releases the
scsi_device structures.  Given that we can't free a host without
releasing the devices first and scsi_forget_host is a noop if
shost->my_devices is empty I don't this makes gains anything.


^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH] pull scsi_scan_host out of scsi_add_host
  2003-07-08  8:03 ` Mike Anderson
  2003-07-08  8:23   ` Christoph Hellwig
@ 2003-07-08  9:03   ` Oliver Neukum
  2003-07-08 15:56     ` Mike Anderson
  1 sibling, 1 reply; 5+ messages in thread
From: Oliver Neukum @ 2003-07-08  9:03 UTC (permalink / raw)
  To: Mike Anderson, Christoph Hellwig; +Cc: James.Bottomley, linux-scsi

Am Dienstag, 8. Juli 2003 10:03 schrieb Mike Anderson:
> Christoph Hellwig [hch@lst.de] wrote:
> > As Douglas mentioned on this list a while ago there's hardware these
> > days where we don't want to automatically perform an initial bus scan
> > in scsi_add_host.  Currently we only have ieee1394 in the tree but
> > I can imagine more uses like iscsi or certain fc setups.
> > 
> > This patch removes the call to scsi_scan_host from scsi_add_host
> > and moves it into the drivers that want in.
> 
> Would we want to make a symmetric interface and pull the
> unscan out of scsi_remove_host also?

Unless you are talking about multipath, you have to forget
all devices connected to a controller, so what sense would
it make?

Philosophically speaking, scanning is an operation that cannot
be simply undone. You can undo device/driver bindings but you
cannot undo a bus scan.

	Regards
		Oliver


^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH] pull scsi_scan_host out of scsi_add_host
  2003-07-08  9:03   ` Oliver Neukum
@ 2003-07-08 15:56     ` Mike Anderson
  0 siblings, 0 replies; 5+ messages in thread
From: Mike Anderson @ 2003-07-08 15:56 UTC (permalink / raw)
  To: Oliver Neukum; +Cc: Christoph Hellwig, James.Bottomley, linux-scsi

Oliver Neukum [oliver@neukum.org] wrote:
> Am Dienstag, 8. Juli 2003 10:03 schrieb Mike Anderson:
> > Christoph Hellwig [hch@lst.de] wrote:
> > > As Douglas mentioned on this list a while ago there's hardware these
> > > days where we don't want to automatically perform an initial bus scan
> > > in scsi_add_host.  Currently we only have ieee1394 in the tree but
> > > I can imagine more uses like iscsi or certain fc setups.
> > > 
> > > This patch removes the call to scsi_scan_host from scsi_add_host
> > > and moves it into the drivers that want in.
> > 
> > Would we want to make a symmetric interface and pull the
> > unscan out of scsi_remove_host also?
> 
> Unless you are talking about multipath, you have to forget
> all devices connected to a controller, so what sense would
> it make?

Probably not much sense. I was thinking of a progression to user assisted
scanning. In that a driver could never call scsi_scan_host directly and
conversely never call scsi_forget_host directly. 

But in the removal case there is not much response a user space hotplug
handler could make besides a delayed call to scsi_remove_device.

> 
> Philosophically speaking, scanning is an operation that cannot
> be simply undone. You can undo device/driver bindings but you
> cannot undo a bus scan.

Maybe it was a confusing choice of words. The operation I was describing
was to undo the binding.

-andmike
--
Michael Anderson
andmike@us.ibm.com


^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2003-07-08 15:39 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2003-07-07 14:30 [PATCH] pull scsi_scan_host out of scsi_add_host Christoph Hellwig
2003-07-08  8:03 ` Mike Anderson
2003-07-08  8:23   ` Christoph Hellwig
2003-07-08  9:03   ` Oliver Neukum
2003-07-08 15:56     ` Mike Anderson

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox