#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
