packet: fix error handling
authorAndrew Morton <akpm@linux-foundation.org>
Wed, 25 Apr 2007 20:01:21 +0000 (13:01 -0700)
committerLinus Torvalds <torvalds@woody.linux-foundation.org>
Wed, 25 Apr 2007 20:50:55 +0000 (13:50 -0700)
The packet driver is assuming (reasonably) that the (undocumented)
request.errors is an errno.  But it is in fact some mysterious bitfield.  When
things go wrong we return weird positive numbers to the VFS as pointers and it
goes oops.

Thanks to William Heimbigner for reporting and diagnosis.

(It doesn't oops, but this driver still doesn't work for William)

Cc: William Heimbigner <icxcnika@mar.tar.cc>
Cc: Peter Osterlund <petero2@telia.com>
Cc: Jens Axboe <jens.axboe@oracle.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
drivers/block/pktcdvd.c

index a4fb7038318817d02b6d39f83c5ccf8e004408dd..f1b9dd7d47d62c00868acdba0927d68a0c8777e0 100644 (file)
@@ -777,7 +777,8 @@ static int pkt_generic_packet(struct pktcdvd_device *pd, struct packet_command *
                rq->cmd_flags |= REQ_QUIET;
 
        blk_execute_rq(rq->q, pd->bdev->bd_disk, rq, 0);
-       ret = rq->errors;
+       if (rq->errors)
+               ret = -EIO;
 out:
        blk_put_request(rq);
        return ret;