Update of /cvsroot/gc-linux/linux/drivers/block/gcn-di
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv4338/drivers/block/gcn-di
Modified Files:
gcn-di.c
Log Message:
2.6.16 merged.
Index: gcn-di.c
===================================================================
RCS file: /cvsroot/gc-linux/linux/drivers/block/gcn-di/gcn-di.c,v
retrieving revision 1.16
retrieving revision 1.17
diff -u -d -r1.16 -r1.17
--- gcn-di.c 19 Jan 2006 00:31:40 -0000 1.16
+++ gcn-di.c 24 Mar 2006 21:45:18 -0000 1.17
@@ -1824,6 +1824,7 @@
struct di_device *ddev = cmd->ddev;
struct request *req;
unsigned long flags;
+ int uptodate = (cmd->result & DI_SR_TCINT)?1:0;
spin_lock_irqsave(&ddev->lock, flags);
@@ -1833,11 +1834,10 @@
spin_unlock_irqrestore(&ddev->lock, flags);
if (req) {
- if (!end_that_request_first(req,
- (cmd->result & DI_SR_TCINT)?1:0,
+ if (!end_that_request_first(req, uptodate,
req->current_nr_sectors)) {
add_disk_randomness(req->rq_disk);
- end_that_request_last(req);
+ end_that_request_last(req, uptodate);
}
spin_lock(&ddev->queue_lock);
blk_start_queue(ddev->queue);
@@ -2138,9 +2138,13 @@
spin_unlock_irqrestore(&ddev->io_lock, flags);
di_retrieve_drive_model(ddev);
- di_select_drive_code(ddev);
- di_check_for_addons(ddev);
+ if (di_select_drive_code(ddev)) {
+ free_irq(ddev->irq, ddev);
+ retval = -ENODEV;
+ goto out;
+ }
+ di_check_for_addons(ddev);
di_schedule_motor_off(ddev, DI_MOTOR_OFF_TIMEOUT);
out:
@@ -2405,6 +2409,8 @@
retval = driver_register(&di_driver);
if (!retval) {
retval = platform_device_register(&di_device.pdev);
+ if (retval)
+ driver_unregister(&di_driver);
}
return retval;
|