<html><head><meta name="color-scheme" content="light dark"></head><body><pre style="word-wrap: break-word; white-space: pre-wrap;">
From: viro@parcelfarce.linux.theplanet.co.uk

Moved allocation and setup (but not adding) of gendisk into pd_probe_drive().



---

 25-akpm/drivers/block/paride/pd.c |   36 ++++++++++++++++++------------------
 1 files changed, 18 insertions(+), 18 deletions(-)

diff -puN drivers/block/paride/pd.c~PI20-gendisk_setup-RC1 drivers/block/paride/pd.c
--- 25/drivers/block/paride/pd.c~PI20-gendisk_setup-RC1	Wed Jan 14 13:46:22 2004
+++ 25-akpm/drivers/block/paride/pd.c	Wed Jan 14 13:46:22 2004
@@ -866,13 +866,26 @@ static struct block_device_operations pd
 
 static int pd_probe_drive(struct pd_unit *disk)
 {
+	struct gendisk *p = alloc_disk(1 &lt;&lt; PD_BITS);
+	if (!p)
+		return 0;
+	strcpy(p-&gt;disk_name, disk-&gt;name);
+	p-&gt;fops = &amp;pd_fops;
+	p-&gt;major = major;
+	p-&gt;first_minor = (disk - pd) &lt;&lt; PD_BITS;
+	disk-&gt;gd = p;
+	p-&gt;private_data = disk;
+	p-&gt;queue = pd_queue;
+
 	if (disk-&gt;drive == -1) {
 		for (disk-&gt;drive = 0; disk-&gt;drive &lt;= 1; disk-&gt;drive++)
 			if (pd_identify(disk))
 				return 1;
-		return 0;
-	}
-	return pd_identify(disk);
+	} else if (pd_identify(disk))
+		return 1;
+	disk-&gt;gd = NULL;
+	put_disk(p);
+	return 0;
 }
 
 static int pd_detect(void)
@@ -910,21 +923,8 @@ static int pd_detect(void)
 	}
 	for (unit = 0, disk = pd; unit &lt; PD_UNITS; unit++, disk++) {
 		if (disk-&gt;present) {
-			struct gendisk *p = alloc_disk(1 &lt;&lt; PD_BITS);
-			if (!p) {
-				disk-&gt;present = 0;
-				k--;
-				continue;
-			}
-			strcpy(p-&gt;disk_name, disk-&gt;name);
-			p-&gt;fops = &amp;pd_fops;
-			p-&gt;major = major;
-			p-&gt;first_minor = unit &lt;&lt; PD_BITS;
-			set_capacity(p, disk-&gt;capacity);
-			disk-&gt;gd = p;
-			p-&gt;private_data = disk;
-			p-&gt;queue = pd_queue;
-			add_disk(p);
+			set_capacity(disk-&gt;gd, disk-&gt;capacity);
+			add_disk(disk-&gt;gd);
 		}
 	}
 	if (k)

_
</pre></body></html>