From: Albert H. <he...@us...> - 2006-03-24 21:45:24
|
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; |