#ifndef BLK_IOPOLL_H #define BLK_IOPOLL_H struct blk_iopoll; typedef int (blk_iopoll_fn)(struct blk_iopoll *, int); struct blk_iopoll { struct list_head list; unsigned long state; unsigned long data; int weight; int max; blk_iopoll_fn *poll; }; enum { IOPOLL_F_SCHED = 0, IOPOLL_F_DISABLE = 1, }; /* * Returns 0 if we successfully set the IOPOLL_F_SCHED bit, indicating * that we were the first to acquire this iop for scheduling. If this iop * is currently disabled, return "failure". */ static inline int blk_iopoll_sched_prep(struct blk_iopoll *iop) { if (!test_bit(IOPOLL_F_DISABLE, &iop->state)) return test_and_set_bit(IOPOLL_F_SCHED, &iop->state); return 1; } static inline int blk_iopoll_disable_pending(struct blk_iopoll *iop) { return test_bit(IOPOLL_F_DISABLE, &iop->state); } extern void blk_iopoll_sched(struct blk_iopoll *); extern void blk_iopoll_init(struct blk_iopoll *, int, blk_iopoll_fn *); extern void blk_iopoll_complete(struct blk_iopoll *); extern void __blk_iopoll_complete(struct blk_iopoll *); extern void blk_iopoll_enable(struct blk_iopoll *); extern void blk_iopoll_disable(struct blk_iopoll *); extern int blk_iopoll_enabled; #endif