From: Christoph Hellwig <hch@lst.de>
To: Stephen Rothwell <sfr@canb.auug.org.au>
Cc: akpm@osdl.org, linus@osdl.org, anton@samba.org, paulus@samba.org,
axboe@suse.de, piggin@cyberone.com.au,
viro@parcelfarce.linux.theplanet.co.uk,
linux-kernel@vger.kernel.org
Subject: Re: [PATCH] iSeries virtual disk
Date: Fri, 27 Feb 2004 14:37:17 +0100 [thread overview]
Message-ID: <20040227133717.GA13381@lst.de> (raw)
In-Reply-To: <20040228002614.2b4ff994.sfr@canb.auug.org.au>
On Sat, Feb 28, 2004 at 12:26:14AM +1100, Stephen Rothwell wrote:
> It is the highest index of all the configured disks. Did you read my
> previous email? If disks 1 2 4 and 7 are configured, the
> open_data.max_disk will be 7. If the admin thena adds disk 23, the next
> time we probe (by calling the HV open interface) the returned max_disk
> will be 23.
>
> I do not apologise for braindead interfaces in code I didn't write ...
> In this case I just have to use it.
You don't need to apologize. It's braindead and I don't really care
who messed it up. But again even with this the logic isn't good.
Here's a totally untested patch to fix it up:
--- 1.1/drivers/block/viodasd.c Fri Feb 27 06:25:15 2004
+++ edited/drivers/block/viodasd.c Fri Feb 27 15:37:06 2004
@@ -70,7 +70,7 @@
MAX_DISK_NAME = sizeof(((struct gendisk *)0)->disk_name)
};
-static int viodasd_max_disk;
+static int viodasd_max_disk = 1; /* probe at least one disk */
static spinlock_t viodasd_spinlock = SPIN_LOCK_UNLOCKED;
#define VIOMAXREQ 16
@@ -209,7 +209,6 @@
(int)we.rc, we.sub_result, err->msg);
return -EIO;
}
- viodasd_max_disk = we.max_disk;
return 0;
}
@@ -451,10 +450,9 @@
}
/*
- * Probe a single disk and fill in the viodasd_device structure
- * for it.
+ * Probe a single disk and fill in the viodasd_device structure for it.
*/
-static void probe_disk(struct viodasd_device *d)
+static void __init probe_disk(struct viodasd_device *d)
{
HvLpEvent_Rc hvrc;
struct viodasd_waitevent we;
@@ -483,6 +481,14 @@
if (we.rc != 0)
return;
+
+ if (we.max_disk > (MAX_DISKNO - 1)) {
+ printk(VIOD_KERN_INFO
+ "Only examining the first %d of %d disks connected\n",
+ MAX_DISKNO, we.max_disk + 1);
+ we.max_disk = MAX_DISKNO - 1;
+ }
+
viodasd_max_disk = we.max_disk;
/* Send the close event to OS/400. We DON'T expect a response */
@@ -744,27 +750,13 @@
/* Initialize our request handler */
vio_setHandler(viomajorsubtype_blockio, handle_block_event);
- viodasd_max_disk = MAX_DISKNO - 1;
- for (i = 0; (i <= viodasd_max_disk) && (i < MAX_DISKNO); i++) {
- /*
- * Note that probe_disk has side effects:
- * a) it updates the size of the disk
- * b) it updates viodasd_max_disk
- * c) it registers the disk if it has not done so already
- */
+ /* probe_disk updates viodasd_max_disk */
+ for (i = 0; i <= viodasd_max_disk; i++)
probe_disk(&viodasd_devices[i]);
- }
-
- if (viodasd_max_disk > (MAX_DISKNO - 1))
- printk(VIOD_KERN_INFO
- "Only examining the first %d of %d disks connected\n",
- MAX_DISKNO, viodasd_max_disk + 1);
-
return 0;
}
-module_init(viodasd_init);
-void viodasd_exit(void)
+static void __exit viodasd_exit(void)
{
int i;
struct viodasd_device *d;
@@ -783,4 +775,5 @@
viopath_close(viopath_hostLp, viomajorsubtype_blockio, VIOMAXREQ + 2);
}
+module_init(viodasd_init);
module_exit(viodasd_exit);
next prev parent reply other threads:[~2004-02-27 13:37 UTC|newest]
Thread overview: 21+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <20040123163504.36582570.sfr@canb.auug.org.au>
[not found] ` <20040122221136.174550c3.akpm@osdl.org>
2004-02-26 6:23 ` [PATCH] iSeries virtual disk Stephen Rothwell
2004-02-26 7:29 ` Jeff Garzik
2004-02-26 7:40 ` Jens Axboe
2004-02-27 0:44 ` Stephen Rothwell
2004-02-26 7:52 ` Stephen Rothwell
2004-02-26 7:58 ` Jeff Garzik
2004-02-27 0:42 ` Stephen Rothwell
2004-02-27 1:50 ` Jeff Garzik
2004-02-27 2:45 ` Stephen Rothwell
2004-02-27 2:50 ` Jeff Garzik
2004-02-26 9:51 ` Christoph Hellwig
2004-02-27 1:04 ` Stephen Rothwell
2004-02-27 11:32 ` Christoph Hellwig
2004-02-27 11:57 ` Stephen Rothwell
2004-02-27 12:13 ` Christoph Hellwig
2004-02-27 13:26 ` Stephen Rothwell
2004-02-27 13:37 ` Christoph Hellwig [this message]
2004-02-27 13:44 ` Christoph Hellwig
2004-02-27 23:26 ` Stephen Rothwell
2004-02-26 17:35 ` Linus Torvalds
2004-02-27 0:45 ` Stephen Rothwell
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=20040227133717.GA13381@lst.de \
--to=hch@lst.de \
--cc=akpm@osdl.org \
--cc=anton@samba.org \
--cc=axboe@suse.de \
--cc=linus@osdl.org \
--cc=linux-kernel@vger.kernel.org \
--cc=paulus@samba.org \
--cc=piggin@cyberone.com.au \
--cc=sfr@canb.auug.org.au \
--cc=viro@parcelfarce.linux.theplanet.co.uk \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox