* [PATCH 0/3] export scsi_forget_host @ 2004-06-12 4:19 Mike Anderson 2004-06-12 4:21 ` [PATCH 1/3] scsi_forget_host - export function Mike Anderson 0 siblings, 1 reply; 11+ messages in thread From: Mike Anderson @ 2004-06-12 4:19 UTC (permalink / raw) To: linux-scsi In regards to the mail the other day about rmmod of a LLDD and the errors generated if a child device of the LLDD had write cache enabled. The url reference to the thread is provided below. http://marc.theaimsgroup.com/?t=108689054100009&r=1&w=2 The sequence of patches is against 2.6 bk current but should also apply with some offsets to scsi-misc-2.6. The first patch is the export of the function. The second patch is an example of a LLDD (scsi_debug) using the function. The third patch is not functionally needed, but the scsi_forget_host function name did not appear to fit the other api naming. -andmike -- Michael Anderson andmike@us.ibm.com ^ permalink raw reply [flat|nested] 11+ messages in thread
* [PATCH 1/3] scsi_forget_host - export function 2004-06-12 4:19 [PATCH 0/3] export scsi_forget_host Mike Anderson @ 2004-06-12 4:21 ` Mike Anderson 2004-06-12 4:22 ` [PATCH 2/3] scsi_forget_host - scsi_debug usage Mike Anderson 0 siblings, 1 reply; 11+ messages in thread From: Mike Anderson @ 2004-06-12 4:21 UTC (permalink / raw) To: linux-scsi DESC scsi_forget_host - export function Export scsi_forget_host for use by LLDD Signed-off-by: Mike Anderson <andmike@us.ibm.com> EDESC patched-2.6-andmike/drivers/scsi/scsi_priv.h | 1 - patched-2.6-andmike/drivers/scsi/scsi_syms.c | 1 + patched-2.6-andmike/include/scsi/scsi_host.h | 1 + 3 files changed, 2 insertions(+), 1 deletion(-) diff -puN drivers/scsi/scsi_priv.h~exp_scsi_forget_host drivers/scsi/scsi_priv.h --- patched-2.6/drivers/scsi/scsi_priv.h~exp_scsi_forget_host Sat Jun 12 00:47:35 2004 +++ patched-2.6-andmike/drivers/scsi/scsi_priv.h Sat Jun 12 00:47:35 2004 @@ -137,7 +137,6 @@ extern void scsi_exit_procfs(void); /* scsi_scan.c */ extern int scsi_scan_host_selected(struct Scsi_Host *, unsigned int, unsigned int, unsigned int, int); -extern void scsi_forget_host(struct Scsi_Host *); extern void scsi_rescan_device(struct device *); /* scsi_sysctl.c */ diff -puN drivers/scsi/scsi_syms.c~exp_scsi_forget_host drivers/scsi/scsi_syms.c --- patched-2.6/drivers/scsi/scsi_syms.c~exp_scsi_forget_host Sat Jun 12 00:47:35 2004 +++ patched-2.6-andmike/drivers/scsi/scsi_syms.c Sat Jun 12 00:52:50 2004 @@ -36,6 +36,7 @@ EXPORT_SYMBOL(scsi_register_interface); EXPORT_SYMBOL(scsi_host_alloc); EXPORT_SYMBOL(scsi_add_host); EXPORT_SYMBOL(scsi_scan_host); +EXPORT_SYMBOL(scsi_forget_host); EXPORT_SYMBOL(scsi_remove_host); EXPORT_SYMBOL(scsi_host_get); EXPORT_SYMBOL(scsi_host_put); diff -puN include/scsi/scsi_host.h~exp_scsi_forget_host include/scsi/scsi_host.h --- patched-2.6/include/scsi/scsi_host.h~exp_scsi_forget_host Sat Jun 12 00:47:35 2004 +++ patched-2.6-andmike/include/scsi/scsi_host.h Sat Jun 12 00:52:50 2004 @@ -501,6 +501,7 @@ struct Scsi_Host { 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 void scsi_forget_host(struct Scsi_Host *); extern void scsi_remove_host(struct Scsi_Host *); extern struct Scsi_Host *scsi_host_get(struct Scsi_Host *); extern void scsi_host_put(struct Scsi_Host *t); _ ^ permalink raw reply [flat|nested] 11+ messages in thread
* [PATCH 2/3] scsi_forget_host - scsi_debug usage 2004-06-12 4:21 ` [PATCH 1/3] scsi_forget_host - export function Mike Anderson @ 2004-06-12 4:22 ` Mike Anderson 2004-06-12 4:24 ` [PATCH 3/3] scsi_forget_host - rename scsi_forget_host to scsi_unscan_host Mike Anderson 2004-06-14 8:06 ` [PATCH 2/3] scsi_forget_host - scsi_debug usage Christoph Hellwig 0 siblings, 2 replies; 11+ messages in thread From: Mike Anderson @ 2004-06-12 4:22 UTC (permalink / raw) To: linux-scsi DESC scsi_forget_host - scsi_debug usage Use the export scsi_forget_host interface to remove child scsi devices from the scsi_host prior to removal. Signed-off-by: Mike Anderson <andmike@us.ibm.com> EDESC patched-2.6-andmike/drivers/scsi/scsi_debug.c | 1 + 1 files changed, 1 insertion(+) diff -puN drivers/scsi/scsi_debug.c~use_scsi_forget_host drivers/scsi/scsi_debug.c --- patched-2.6/drivers/scsi/scsi_debug.c~use_scsi_forget_host Sat Jun 12 00:47:43 2004 +++ patched-2.6-andmike/drivers/scsi/scsi_debug.c Sat Jun 12 00:52:50 2004 @@ -1725,6 +1725,7 @@ static int sdebug_driver_remove(struct d return -ENODEV; } + scsi_forget_host(sdbg_host->shost); scsi_remove_host(sdbg_host->shost); list_for_each_safe(lh, lh_sf, &sdbg_host->dev_info_list) { _ ^ permalink raw reply [flat|nested] 11+ messages in thread
* [PATCH 3/3] scsi_forget_host - rename scsi_forget_host to scsi_unscan_host 2004-06-12 4:22 ` [PATCH 2/3] scsi_forget_host - scsi_debug usage Mike Anderson @ 2004-06-12 4:24 ` Mike Anderson 2004-06-14 8:06 ` [PATCH 2/3] scsi_forget_host - scsi_debug usage Christoph Hellwig 1 sibling, 0 replies; 11+ messages in thread From: Mike Anderson @ 2004-06-12 4:24 UTC (permalink / raw) To: linux-scsi DESC scsi_forget_host - rename scsi_forget_host to scsi_unscan_host This patch changes the name of the newly export scsi_forget_host function to scsi_unscan_host. The scsi_unscan_host function name appears to create a more symmetric LLDD interface scsi_add_host scsi_scan_host ... scsi_unscan_host scsi_remove_host Signed-off-by: Mike Anderson <andmike@us.ibm.com> EDESC patched-2.6-andmike/drivers/scsi/hosts.c | 2 +- patched-2.6-andmike/drivers/scsi/scsi_debug.c | 2 +- patched-2.6-andmike/drivers/scsi/scsi_scan.c | 2 +- patched-2.6-andmike/drivers/scsi/scsi_syms.c | 2 +- patched-2.6-andmike/include/scsi/scsi_host.h | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff -puN drivers/scsi/scsi_syms.c~scsi_unscan_host drivers/scsi/scsi_syms.c --- patched-2.6/drivers/scsi/scsi_syms.c~scsi_unscan_host Sat Jun 12 00:47:46 2004 +++ patched-2.6-andmike/drivers/scsi/scsi_syms.c Sat Jun 12 00:47:46 2004 @@ -36,7 +36,7 @@ EXPORT_SYMBOL(scsi_register_interface); EXPORT_SYMBOL(scsi_host_alloc); EXPORT_SYMBOL(scsi_add_host); EXPORT_SYMBOL(scsi_scan_host); -EXPORT_SYMBOL(scsi_forget_host); +EXPORT_SYMBOL(scsi_unscan_host); EXPORT_SYMBOL(scsi_remove_host); EXPORT_SYMBOL(scsi_host_get); EXPORT_SYMBOL(scsi_host_put); diff -puN include/scsi/scsi_host.h~scsi_unscan_host include/scsi/scsi_host.h --- patched-2.6/include/scsi/scsi_host.h~scsi_unscan_host Sat Jun 12 00:47:46 2004 +++ patched-2.6-andmike/include/scsi/scsi_host.h Sat Jun 12 00:47:46 2004 @@ -501,7 +501,7 @@ struct Scsi_Host { 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 void scsi_forget_host(struct Scsi_Host *); +extern void scsi_unscan_host(struct Scsi_Host *); extern void scsi_remove_host(struct Scsi_Host *); extern struct Scsi_Host *scsi_host_get(struct Scsi_Host *); extern void scsi_host_put(struct Scsi_Host *t); diff -puN drivers/scsi/scsi_debug.c~scsi_unscan_host drivers/scsi/scsi_debug.c --- patched-2.6/drivers/scsi/scsi_debug.c~scsi_unscan_host Sat Jun 12 00:47:46 2004 +++ patched-2.6-andmike/drivers/scsi/scsi_debug.c Sat Jun 12 00:47:46 2004 @@ -1725,7 +1725,7 @@ static int sdebug_driver_remove(struct d return -ENODEV; } - scsi_forget_host(sdbg_host->shost); + scsi_unscan_host(sdbg_host->shost); scsi_remove_host(sdbg_host->shost); list_for_each_safe(lh, lh_sf, &sdbg_host->dev_info_list) { diff -puN drivers/scsi/scsi_scan.c~scsi_unscan_host drivers/scsi/scsi_scan.c --- patched-2.6/drivers/scsi/scsi_scan.c~scsi_unscan_host Sat Jun 12 00:47:46 2004 +++ patched-2.6-andmike/drivers/scsi/scsi_scan.c Sat Jun 12 00:47:46 2004 @@ -1259,7 +1259,7 @@ void scsi_scan_host(struct Scsi_Host *sh SCAN_WILD_CARD, 0); } -void scsi_forget_host(struct Scsi_Host *shost) +void scsi_unscan_host(struct Scsi_Host *shost) { struct scsi_device *sdev, *tmp; unsigned long flags; diff -puN drivers/scsi/hosts.c~scsi_unscan_host drivers/scsi/hosts.c --- patched-2.6/drivers/scsi/hosts.c~scsi_unscan_host Sat Jun 12 00:47:46 2004 +++ patched-2.6-andmike/drivers/scsi/hosts.c Sat Jun 12 00:47:46 2004 @@ -79,7 +79,7 @@ void scsi_remove_host(struct Scsi_Host * { scsi_host_cancel(shost, 0); scsi_proc_host_rm(shost); - scsi_forget_host(shost); + scsi_unscan_host(shost); set_bit(SHOST_DEL, &shost->shost_state); _ ^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH 2/3] scsi_forget_host - scsi_debug usage 2004-06-12 4:22 ` [PATCH 2/3] scsi_forget_host - scsi_debug usage Mike Anderson 2004-06-12 4:24 ` [PATCH 3/3] scsi_forget_host - rename scsi_forget_host to scsi_unscan_host Mike Anderson @ 2004-06-14 8:06 ` Christoph Hellwig 2004-06-14 13:06 ` Jens Axboe 2004-06-14 15:23 ` Mike Anderson 1 sibling, 2 replies; 11+ messages in thread From: Christoph Hellwig @ 2004-06-14 8:06 UTC (permalink / raw) To: linux-scsi On Fri, Jun 11, 2004 at 09:22:32PM -0700, Mike Anderson wrote: > DESC > scsi_forget_host - scsi_debug usage > > Use the export scsi_forget_host interface to remove child scsi devices > from the scsi_host prior to removal. Moving this into drivers sounds like a rather bad idea. But with our refcounting in place I wonder whether moving scsi_forget_host first in scsi_remove_host wouldn't simply work. ^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH 2/3] scsi_forget_host - scsi_debug usage 2004-06-14 8:06 ` [PATCH 2/3] scsi_forget_host - scsi_debug usage Christoph Hellwig @ 2004-06-14 13:06 ` Jens Axboe 2004-06-14 13:23 ` Christoph Hellwig 2004-06-14 15:23 ` Mike Anderson 1 sibling, 1 reply; 11+ messages in thread From: Jens Axboe @ 2004-06-14 13:06 UTC (permalink / raw) To: Christoph Hellwig; +Cc: linux-scsi On Mon, Jun 14 2004, Christoph Hellwig wrote: > On Fri, Jun 11, 2004 at 09:22:32PM -0700, Mike Anderson wrote: > > DESC > > scsi_forget_host - scsi_debug usage > > > > Use the export scsi_forget_host interface to remove child scsi devices > > from the scsi_host prior to removal. > > Moving this into drivers sounds like a rather bad idea. But with our Agree > refcounting in place I wonder whether moving scsi_forget_host first in > scsi_remove_host wouldn't simply work. It doesn't, device has already been deleted there. So either that needs to be reworked if we want to allow devices to talk to themselves from ->remove(), or we just move the sync cache call to sd_release() instead. The latter is attached. ===== drivers/scsi/sd.c 1.151 vs edited ===== --- 1.151/drivers/scsi/sd.c 2004-05-29 19:50:44 +02:00 +++ edited/drivers/scsi/sd.c 2004-06-14 15:05:34 +02:00 @@ -108,7 +108,6 @@ static int sd_probe(struct device *); static int sd_remove(struct device *); -static void sd_shutdown(struct device *dev); static void sd_rescan(struct device *); static int sd_init_command(struct scsi_cmnd *); static void sd_read_capacity(struct scsi_disk *sdkp, char *diskname, @@ -120,7 +119,6 @@ .name = "sd", .probe = sd_probe, .remove = sd_remove, - .shutdown = sd_shutdown, }, .rescan = sd_rescan, .init_command = sd_init_command, @@ -402,6 +400,50 @@ return 1; } +/* + * Send a SYNCHRONIZE CACHE instruction down to the device through + * the normal SCSI command structure. Wait for the command to + * complete. + */ +static void sd_sync_cache(struct scsi_device *sdp) +{ + struct scsi_request *sreq; + int retries, res; + + sreq = scsi_allocate_request(sdp, GFP_KERNEL); + if (!sreq) { + printk("FAILED\n No memory for request\n"); + return; + } + + sreq->sr_data_direction = DMA_NONE; + for (retries = 3; retries > 0; --retries) { + unsigned char cmd[10] = { 0 }; + + cmd[0] = SYNCHRONIZE_CACHE; + /* + * Leave the rest of the command zero to indicate + * flush everything. + */ + scsi_wait_req(sreq, cmd, NULL, 0, SD_TIMEOUT, SD_MAX_RETRIES); + if (sreq->sr_result == 0) + break; + } + + res = sreq->sr_result; + if (res) { + printk(KERN_WARNING "FAILED\n status = %x, message = %02x, " + "host = %d, driver = %02x\n ", + status_byte(res), msg_byte(res), + host_byte(res), driver_byte(res)); + if (driver_byte(res) & DRIVER_SENSE) + print_req_sense("sd", sreq); + } + + scsi_release_request(sreq); + printk("\n"); +} + /** * sd_open - open a scsi disk device * @inode: only i_rdev member may be used @@ -498,8 +540,9 @@ SCSI_LOG_HLQUEUE(3, printk("sd_release: disk=%s\n", disk->disk_name)); - if (!--sdkp->openers && sdev->removable) { - if (scsi_block_when_processing_errors(sdev)) + if (!--sdkp->openers) { + sd_sync_cache(sdev); + if (sdev->removable && scsi_block_when_processing_errors(sdev)) scsi_set_medium_removal(sdev, SCSI_REMOVAL_ALLOW); } @@ -1460,7 +1503,6 @@ struct scsi_disk *sdkp = dev_get_drvdata(dev); del_gendisk(sdkp->disk); - sd_shutdown(dev); down(&sd_ref_sem); kref_put(&sdkp->kref); up(&sd_ref_sem); @@ -1492,62 +1534,6 @@ kfree(sdkp); } - -/* - * Send a SYNCHRONIZE CACHE instruction down to the device through - * the normal SCSI command structure. Wait for the command to - * complete. - */ -static void sd_shutdown(struct device *dev) -{ - struct scsi_device *sdp = to_scsi_device(dev); - struct scsi_disk *sdkp; - struct scsi_request *sreq; - int retries, res; - - sdkp = dev_get_drvdata(dev); - if (!sdkp) - return; /* this can happen */ - - if (!scsi_device_online(sdp) || !sdkp->WCE) - return; - - printk(KERN_NOTICE "Synchronizing SCSI cache for disk %s: ", - sdkp->disk->disk_name); - - sreq = scsi_allocate_request(sdp, GFP_KERNEL); - if (!sreq) { - printk("FAILED\n No memory for request\n"); - return; - } - - sreq->sr_data_direction = DMA_NONE; - for (retries = 3; retries > 0; --retries) { - unsigned char cmd[10] = { 0 }; - - cmd[0] = SYNCHRONIZE_CACHE; - /* - * Leave the rest of the command zero to indicate - * flush everything. - */ - scsi_wait_req(sreq, cmd, NULL, 0, SD_TIMEOUT, SD_MAX_RETRIES); - if (sreq->sr_result == 0) - break; - } - - res = sreq->sr_result; - if (res) { - printk(KERN_WARNING "FAILED\n status = %x, message = %02x, " - "host = %d, driver = %02x\n ", - status_byte(res), msg_byte(res), - host_byte(res), driver_byte(res)); - if (driver_byte(res) & DRIVER_SENSE) - print_req_sense("sd", sreq); - } - - scsi_release_request(sreq); - printk("\n"); -} /** * init_sd - entry point for this driver (both when built in or when -- Jens Axboe ^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH 2/3] scsi_forget_host - scsi_debug usage 2004-06-14 13:06 ` Jens Axboe @ 2004-06-14 13:23 ` Christoph Hellwig 2004-06-14 13:26 ` Jens Axboe 0 siblings, 1 reply; 11+ messages in thread From: Christoph Hellwig @ 2004-06-14 13:23 UTC (permalink / raw) To: Jens Axboe; +Cc: linux-scsi On Mon, Jun 14, 2004 at 03:06:19PM +0200, Jens Axboe wrote: > > refcounting in place I wonder whether moving scsi_forget_host first in > > scsi_remove_host wouldn't simply work. > > It doesn't, device has already been deleted there. So either that needs > to be reworked if we want to allow devices to talk to themselves from > ->remove(), or we just move the sync cache call to sd_release() instead. Doing sync cache in sd_release sounds good anyway. But for the rootfs case we need to do it in shutdown aswell. ^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH 2/3] scsi_forget_host - scsi_debug usage 2004-06-14 13:23 ` Christoph Hellwig @ 2004-06-14 13:26 ` Jens Axboe 2004-06-14 13:30 ` Christoph Hellwig 0 siblings, 1 reply; 11+ messages in thread From: Jens Axboe @ 2004-06-14 13:26 UTC (permalink / raw) To: Christoph Hellwig; +Cc: linux-scsi On Mon, Jun 14 2004, Christoph Hellwig wrote: > On Mon, Jun 14, 2004 at 03:06:19PM +0200, Jens Axboe wrote: > > > refcounting in place I wonder whether moving scsi_forget_host first in > > > scsi_remove_host wouldn't simply work. > > > > It doesn't, device has already been deleted there. So either that needs > > to be reworked if we want to allow devices to talk to themselves from > > ->remove(), or we just move the sync cache call to sd_release() instead. > > Doing sync cache in sd_release sounds good anyway. But for the rootfs Yep > case we need to do it in shutdown aswell. But the device is already SDEV_DEL there, so it can't be done without fixing that. What makes the rootfs case special, btw? -- Jens Axboe ^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH 2/3] scsi_forget_host - scsi_debug usage 2004-06-14 13:26 ` Jens Axboe @ 2004-06-14 13:30 ` Christoph Hellwig 2004-06-14 13:36 ` Jens Axboe 0 siblings, 1 reply; 11+ messages in thread From: Christoph Hellwig @ 2004-06-14 13:30 UTC (permalink / raw) To: Jens Axboe; +Cc: linux-scsi On Mon, Jun 14, 2004 at 03:26:09PM +0200, Jens Axboe wrote: > > case we need to do it in shutdown aswell. > > But the device is already SDEV_DEL there, so it can't be done without > fixing that. What makes the rootfs case special, btw? The root device won't ever be closed, so you don't get the final sd_release call. ^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH 2/3] scsi_forget_host - scsi_debug usage 2004-06-14 13:30 ` Christoph Hellwig @ 2004-06-14 13:36 ` Jens Axboe 0 siblings, 0 replies; 11+ messages in thread From: Jens Axboe @ 2004-06-14 13:36 UTC (permalink / raw) To: Christoph Hellwig; +Cc: linux-scsi On Mon, Jun 14 2004, Christoph Hellwig wrote: > On Mon, Jun 14, 2004 at 03:26:09PM +0200, Jens Axboe wrote: > > > case we need to do it in shutdown aswell. > > > > But the device is already SDEV_DEL there, so it can't be done without > > fixing that. What makes the rootfs case special, btw? > > The root device won't ever be closed, so you don't get the final sd_release > call. Ah yes, of course. If you want that to work, then there's no way around juggling the device shutdown stuff around. Or flush cache on 2nd to last release too :-) -- Jens Axboe ^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH 2/3] scsi_forget_host - scsi_debug usage 2004-06-14 8:06 ` [PATCH 2/3] scsi_forget_host - scsi_debug usage Christoph Hellwig 2004-06-14 13:06 ` Jens Axboe @ 2004-06-14 15:23 ` Mike Anderson 1 sibling, 0 replies; 11+ messages in thread From: Mike Anderson @ 2004-06-14 15:23 UTC (permalink / raw) To: Christoph Hellwig; +Cc: linux-scsi Christoph Hellwig [hch@infradead.org] wrote: > On Fri, Jun 11, 2004 at 09:22:32PM -0700, Mike Anderson wrote: > > DESC > > scsi_forget_host - scsi_debug usage > > > > Use the export scsi_forget_host interface to remove child scsi devices > > from the scsi_host prior to removal. > > Moving this into drivers sounds like a rather bad idea. But with our > refcounting in place I wonder whether moving scsi_forget_host first in > scsi_remove_host wouldn't simply work. Why is this a bad idea? We allow the LLDD to control scanning through scsi_scan_host. We also have LLDDs calling scsi_remove_device directly which scsi_forget_host uses. The issue I was trying to address is there are callers that want to call scsi_remove_host during unexpected disconnect situations where they want to reduce more IO being sent to the LLDDs queuecommand. It should be the case that if a LLDD can handle unexpected disconnect that they already have code in there queuecommand to stop the flow of IO in these cases so your suggested change to scsi_remove_host may not negatively effect LLDDs. -andmike -- Michael Anderson andmike@us.ibm.com ^ permalink raw reply [flat|nested] 11+ messages in thread
end of thread, other threads:[~2004-06-14 15:23 UTC | newest] Thread overview: 11+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2004-06-12 4:19 [PATCH 0/3] export scsi_forget_host Mike Anderson 2004-06-12 4:21 ` [PATCH 1/3] scsi_forget_host - export function Mike Anderson 2004-06-12 4:22 ` [PATCH 2/3] scsi_forget_host - scsi_debug usage Mike Anderson 2004-06-12 4:24 ` [PATCH 3/3] scsi_forget_host - rename scsi_forget_host to scsi_unscan_host Mike Anderson 2004-06-14 8:06 ` [PATCH 2/3] scsi_forget_host - scsi_debug usage Christoph Hellwig 2004-06-14 13:06 ` Jens Axboe 2004-06-14 13:23 ` Christoph Hellwig 2004-06-14 13:26 ` Jens Axboe 2004-06-14 13:30 ` Christoph Hellwig 2004-06-14 13:36 ` Jens Axboe 2004-06-14 15:23 ` Mike Anderson
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox