add @uptodate argument to end_that_request_last() and @error to rq_end_io_fn(). there's no generic way to pass error code to request completion function, making generic error handling of non-fs request difficult (rq->errors is driver-specific and each driver uses it differently). this patch adds @uptodate to end_that_request_last() and @error to rq_end_io_fn(). for fs requests, this doesn't really matter, so just using the same uptodate argument used in the last call to end_that_request_first() should suffice. imho, this can also help the generic command-carrying request jens is working on.
Showing the changes to include/linux/blkdev.h (1 of 21 files). Show all
Unified · Split
| @@ -102,7 +102,7 @@ void copy_io_context(struct io_context **pdst, struct io_context **psrc); · 101 unmodified lines | |||
| 102 | void swap_io_context(struct io_context **ioc1, struct io_context **ioc2); | 102 | void swap_io_context(struct io_context **ioc1, struct io_context **ioc2); |
| 103 | 103 | ||
| 104 | struct request; | 104 | struct request; |
| 105 | typedef void (rq_end_io_fn)(struct request *); | 105 | typedef void (rq_end_io_fn)(struct request *, int); |
| 106 | 106 | ||
| 107 | struct request_list { | 107 | struct request_list { |
| 108 | int count[2]; | 108 | int count[2]; |
| @@ -560,7 +560,7 @@ extern void register_disk(struct gendisk *dev); · 451 unmodified lines | |||
| 560 | extern void generic_make_request(struct bio *bio); | 560 | extern void generic_make_request(struct bio *bio); |
| 561 | extern void blk_put_request(struct request *); | 561 | extern void blk_put_request(struct request *); |
| 562 | extern void __blk_put_request(request_queue_t *, struct request *); | 562 | extern void __blk_put_request(request_queue_t *, struct request *); |
| 563 | extern void blk_end_sync_rq(struct request *rq); | 563 | extern void blk_end_sync_rq(struct request *rq, int error); |
| 564 | extern void blk_attempt_remerge(request_queue_t *, struct request *); | 564 | extern void blk_attempt_remerge(request_queue_t *, struct request *); |
| 565 | extern struct request *blk_get_request(request_queue_t *, int, gfp_t); | 565 | extern struct request *blk_get_request(request_queue_t *, int, gfp_t); |
| 566 | extern void blk_insert_request(request_queue_t *, struct request *, int, void *); | 566 | extern void blk_insert_request(request_queue_t *, struct request *, int, void *); |
| @@ -614,7 +614,7 @@ static inline void blk_run_address_space(struct address_space *mapping) · 47 unmodified lines | |||
| 614 | */ | 614 | */ |
| 615 | extern int end_that_request_first(struct request *, int, int); | 615 | extern int end_that_request_first(struct request *, int, int); |
| 616 | extern int end_that_request_chunk(struct request *, int, int); | 616 | extern int end_that_request_chunk(struct request *, int, int); |
| 617 | extern void end_that_request_last(struct request *); | 617 | extern void end_that_request_last(struct request *, int); |
| 618 | extern void end_request(struct request *req, int uptodate); | 618 | extern void end_request(struct request *req, int uptodate); |
| 619 | 619 | ||
| 620 | /* | 620 | /* |