X-Git-Url: http://ftp.safe.ca/?a=blobdiff_plain;f=block%2Fblk.h;h=d2e49af90db548ffa68e950bd800a48fdde79a1d;hb=c26156b2534c75bb3cdedf76f6ad1340971cf5bd;hp=de74254cb9161918121e10189fc095abfc897b1d;hpb=c7c22e4d5c1fdebfac4dba76de7d0338c2b0d832;p=safe%2Fjmp%2Flinux-2.6 diff --git a/block/blk.h b/block/blk.h index de74254..d2e49af 100644 --- a/block/blk.h +++ b/block/blk.h @@ -17,6 +17,43 @@ void __blk_queue_free_tags(struct request_queue *q); void blk_unplug_work(struct work_struct *work); void blk_unplug_timeout(unsigned long data); +void blk_rq_timed_out_timer(unsigned long data); +void blk_delete_timer(struct request *); +void blk_add_timer(struct request *); +void __generic_unplug_device(struct request_queue *); + +/* + * Internal atomic flags for request handling + */ +enum rq_atomic_flags { + REQ_ATOM_COMPLETE = 0, +}; + +/* + * EH timer and IO completion will both attempt to 'grab' the request, make + * sure that only one of them suceeds + */ +static inline int blk_mark_rq_complete(struct request *rq) +{ + return test_and_set_bit(REQ_ATOM_COMPLETE, &rq->atomic_flags); +} + +static inline void blk_clear_rq_complete(struct request *rq) +{ + clear_bit(REQ_ATOM_COMPLETE, &rq->atomic_flags); +} + +#ifdef CONFIG_FAIL_IO_TIMEOUT +int blk_should_fake_timeout(struct request_queue *); +ssize_t part_timeout_show(struct device *, struct device_attribute *, char *); +ssize_t part_timeout_store(struct device *, struct device_attribute *, + const char *, size_t); +#else +static inline int blk_should_fake_timeout(struct request_queue *q) +{ + return 0; +} +#endif struct io_context *current_io_context(gfp_t gfp_flags, int node);