[PATCH] PPC64 iSeries virtual disk update

From: Stephen Rothwell
Date: Sun Feb 29 2004 - 23:39:52 EST


Hi Linus,

This patch (hopefully) addresses concerns Christoph Hellwig had with
the virtual disk probing code.

--
Cheers,
Stephen Rothwell sfr@xxxxxxxxxxxxxxxx
http://www.canb.auug.org.au/~sfr/

diff -ruN 2.6.4-rc1.boottime/drivers/block/viodasd.c 2.6.4-rc1.boottime.dasd/drivers/block/viodasd.c
--- 2.6.4-rc1.boottime/drivers/block/viodasd.c 2004-03-01 01:17:20.000000000 +1100
+++ 2.6.4-rc1.boottime.dasd/drivers/block/viodasd.c 2004-03-01 14:53:50.000000000 +1100
@@ -70,7 +70,6 @@
MAX_DISK_NAME = sizeof(((struct gendisk *)0)->disk_name)
};

-static int viodasd_max_disk;
static spinlock_t viodasd_spinlock = SPIN_LOCK_UNLOCKED;

#define VIOMAXREQ 16
@@ -209,7 +208,6 @@
(int)we.rc, we.sub_result, err->msg);
return -EIO;
}
- viodasd_max_disk = we.max_disk;

return 0;
}
@@ -483,7 +481,17 @@

if (we.rc != 0)
return;
- viodasd_max_disk = we.max_disk;
+ if (we.max_disk > (MAX_DISKNO - 1)) {
+ static int warned;
+
+ if (warned == 0) {
+ warned++;
+ printk(VIOD_KERN_INFO
+ "Only examining the first %d "
+ "of %d disks connected\n",
+ MAX_DISKNO, we.max_disk + 1);
+ }
+ }

/* Send the close event to OS/400. We DON'T expect a response */
hvrc = HvCallEvent_signalLpEventFast(viopath_hostLp,
@@ -744,21 +752,8 @@
/* 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
- */
+ for (i = 0; i < MAX_DISKNO; 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;
}

Attachment: pgp00000.pgp
Description: PGP signature