scsi: revert "[SCSI] Get rid of scsi_cmnd->done"
This reverts commit 6f5391c283
("[SCSI]
Get rid of scsi_cmnd->done") that was supposed to be a cleanup commit,
but apparently it causes regressions:
Bug 9370 - v2.6.24-rc2-409-g9418d5d: attempt to access beyond end of device
http://bugzilla.kernel.org/show_bug.cgi?id=9370
this patch should be reintroduced in a more split-up form to make
testing of it easier.
Signed-off-by: Ingo Molnar <mingo@elte.hu>
Acked-by: Matthew Wilcox <matthew@wil.cx>
Cc: James Bottomley <James.Bottomley@HansenPartnership.com>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
committed by
Linus Torvalds
parent
158a962422
commit
ac40532ef0
@@ -59,7 +59,6 @@
|
||||
#include <scsi/scsi_cmnd.h>
|
||||
#include <scsi/scsi_dbg.h>
|
||||
#include <scsi/scsi_device.h>
|
||||
#include <scsi/scsi_driver.h>
|
||||
#include <scsi/scsi_eh.h>
|
||||
#include <scsi/scsi_host.h>
|
||||
#include <scsi/scsi_tcq.h>
|
||||
@@ -368,8 +367,9 @@ void scsi_log_send(struct scsi_cmnd *cmd)
|
||||
scsi_print_command(cmd);
|
||||
if (level > 3) {
|
||||
printk(KERN_INFO "buffer = 0x%p, bufflen = %d,"
|
||||
" queuecommand 0x%p\n",
|
||||
" done = 0x%p, queuecommand 0x%p\n",
|
||||
scsi_sglist(cmd), scsi_bufflen(cmd),
|
||||
cmd->done,
|
||||
cmd->device->host->hostt->queuecommand);
|
||||
|
||||
}
|
||||
@@ -654,12 +654,6 @@ void __scsi_done(struct scsi_cmnd *cmd)
|
||||
blk_complete_request(rq);
|
||||
}
|
||||
|
||||
/* Move this to a header if it becomes more generally useful */
|
||||
static struct scsi_driver *scsi_cmd_to_driver(struct scsi_cmnd *cmd)
|
||||
{
|
||||
return *(struct scsi_driver **)cmd->request->rq_disk->private_data;
|
||||
}
|
||||
|
||||
/*
|
||||
* Function: scsi_finish_command
|
||||
*
|
||||
@@ -671,8 +665,6 @@ void scsi_finish_command(struct scsi_cmnd *cmd)
|
||||
{
|
||||
struct scsi_device *sdev = cmd->device;
|
||||
struct Scsi_Host *shost = sdev->host;
|
||||
struct scsi_driver *drv;
|
||||
unsigned int good_bytes;
|
||||
|
||||
scsi_device_unbusy(sdev);
|
||||
|
||||
@@ -698,13 +690,7 @@ void scsi_finish_command(struct scsi_cmnd *cmd)
|
||||
"Notifying upper driver of completion "
|
||||
"(result %x)\n", cmd->result));
|
||||
|
||||
good_bytes = cmd->request_bufflen;
|
||||
if (cmd->request->cmd_type != REQ_TYPE_BLOCK_PC) {
|
||||
drv = scsi_cmd_to_driver(cmd);
|
||||
if (drv->done)
|
||||
good_bytes = drv->done(cmd);
|
||||
}
|
||||
scsi_io_completion(cmd, good_bytes);
|
||||
cmd->done(cmd);
|
||||
}
|
||||
EXPORT_SYMBOL(scsi_finish_command);
|
||||
|
||||
|
Reference in New Issue
Block a user