diff options
Diffstat (limited to 'drivers/block/xd.c')
-rw-r--r-- | drivers/block/xd.c | 15 |
1 files changed, 8 insertions, 7 deletions
diff --git a/drivers/block/xd.c b/drivers/block/xd.c index 64b496fce98b..6f6ad82ec0c0 100644 --- a/drivers/block/xd.c +++ b/drivers/block/xd.c | |||
@@ -314,21 +314,22 @@ static void do_xd_request (struct request_queue * q) | |||
314 | int retry; | 314 | int retry; |
315 | 315 | ||
316 | if (!blk_fs_request(req)) { | 316 | if (!blk_fs_request(req)) { |
317 | end_request(req, 0); | 317 | __blk_end_request_cur(req, -EIO); |
318 | continue; | 318 | continue; |
319 | } | 319 | } |
320 | if (block + count > get_capacity(req->rq_disk)) { | 320 | if (block + count > get_capacity(req->rq_disk)) { |
321 | end_request(req, 0); | 321 | __blk_end_request_cur(req, -EIO); |
322 | continue; | 322 | continue; |
323 | } | 323 | } |
324 | if (rw != READ && rw != WRITE) { | 324 | if (rw != READ && rw != WRITE) { |
325 | printk("do_xd_request: unknown request\n"); | 325 | printk("do_xd_request: unknown request\n"); |
326 | end_request(req, 0); | 326 | __blk_end_request_cur(req, -EIO); |
327 | continue; | 327 | continue; |
328 | } | 328 | } |
329 | for (retry = 0; (retry < XD_RETRIES) && !res; retry++) | 329 | for (retry = 0; (retry < XD_RETRIES) && !res; retry++) |
330 | res = xd_readwrite(rw, disk, req->buffer, block, count); | 330 | res = xd_readwrite(rw, disk, req->buffer, block, count); |
331 | end_request(req, res); /* wrap up, 0 = fail, 1 = success */ | 331 | /* wrap up, 0 = success, -errno = fail */ |
332 | __blk_end_request_cur(req, res); | ||
332 | } | 333 | } |
333 | } | 334 | } |
334 | 335 | ||
@@ -418,7 +419,7 @@ static int xd_readwrite (u_char operation,XD_INFO *p,char *buffer,u_int block,u_ | |||
418 | printk("xd%c: %s timeout, recalibrating drive\n",'a'+drive,(operation == READ ? "read" : "write")); | 419 | printk("xd%c: %s timeout, recalibrating drive\n",'a'+drive,(operation == READ ? "read" : "write")); |
419 | xd_recalibrate(drive); | 420 | xd_recalibrate(drive); |
420 | spin_lock_irq(&xd_lock); | 421 | spin_lock_irq(&xd_lock); |
421 | return (0); | 422 | return -EIO; |
422 | case 2: | 423 | case 2: |
423 | if (sense[0] & 0x30) { | 424 | if (sense[0] & 0x30) { |
424 | printk("xd%c: %s - ",'a'+drive,(operation == READ ? "reading" : "writing")); | 425 | printk("xd%c: %s - ",'a'+drive,(operation == READ ? "reading" : "writing")); |
@@ -439,7 +440,7 @@ static int xd_readwrite (u_char operation,XD_INFO *p,char *buffer,u_int block,u_ | |||
439 | else | 440 | else |
440 | printk(" - no valid disk address\n"); | 441 | printk(" - no valid disk address\n"); |
441 | spin_lock_irq(&xd_lock); | 442 | spin_lock_irq(&xd_lock); |
442 | return (0); | 443 | return -EIO; |
443 | } | 444 | } |
444 | if (xd_dma_buffer) | 445 | if (xd_dma_buffer) |
445 | for (i=0; i < (temp * 0x200); i++) | 446 | for (i=0; i < (temp * 0x200); i++) |
@@ -448,7 +449,7 @@ static int xd_readwrite (u_char operation,XD_INFO *p,char *buffer,u_int block,u_ | |||
448 | count -= temp, buffer += temp * 0x200, block += temp; | 449 | count -= temp, buffer += temp * 0x200, block += temp; |
449 | } | 450 | } |
450 | spin_lock_irq(&xd_lock); | 451 | spin_lock_irq(&xd_lock); |
451 | return (1); | 452 | return 0; |
452 | } | 453 | } |
453 | 454 | ||
454 | /* xd_recalibrate: recalibrate a given drive and reset controller if necessary */ | 455 | /* xd_recalibrate: recalibrate a given drive and reset controller if necessary */ |