summaryrefslogtreecommitdiff
path: root/include/linux
diff options
context:
space:
mode:
Diffstat (limited to 'include/linux')
-rw-r--r--include/linux/bio.h3
-rw-r--r--include/linux/blk.h21
-rw-r--r--include/linux/blkdev.h28
-rw-r--r--include/linux/elevator.h7
4 files changed, 38 insertions, 21 deletions
diff --git a/include/linux/bio.h b/include/linux/bio.h
index 93ac8216aae4..d272c152ebda 100644
--- a/include/linux/bio.h
+++ b/include/linux/bio.h
@@ -101,6 +101,7 @@ struct bio {
#define BIO_EOF 2 /* out-out-bounds error */
#define BIO_SEG_VALID 3 /* nr_hw_seg valid */
#define BIO_CLONED 4 /* doesn't own data */
+#define BIO_BOUNCED 5 /* bio is a bounce bio */
#define bio_flagged(bio, flag) ((bio)->bi_flags & (1 << (flag)))
/*
@@ -201,7 +202,7 @@ struct bio {
extern struct bio *bio_alloc(int, int);
extern void bio_put(struct bio *);
-extern int bio_endio(struct bio *, unsigned int, int);
+extern void bio_endio(struct bio *, unsigned int, int);
struct request_queue;
extern inline int bio_phys_segments(struct request_queue *, struct bio *);
extern inline int bio_hw_segments(struct request_queue *, struct bio *);
diff --git a/include/linux/blk.h b/include/linux/blk.h
index 7fbd3f6acae8..6f47ea7c853c 100644
--- a/include/linux/blk.h
+++ b/include/linux/blk.h
@@ -39,33 +39,20 @@ void initrd_init(void);
*/
extern int end_that_request_first(struct request *, int, int);
+extern int end_that_request_chunk(struct request *, int, int);
extern void end_that_request_last(struct request *);
struct request *elv_next_request(request_queue_t *q);
static inline void blkdev_dequeue_request(struct request *req)
{
- list_del(&req->queuelist);
+ BUG_ON(list_empty(&req->queuelist));
+
+ list_del_init(&req->queuelist);
if (req->q)
elv_remove_request(req->q, req);
}
-#define _elv_add_request_core(q, rq, where, plug) \
- do { \
- if ((plug)) \
- blk_plug_device((q)); \
- (q)->elevator.elevator_add_req_fn((q), (rq), (where)); \
- } while (0)
-
-#define _elv_add_request(q, rq, back, p) do { \
- if ((back)) \
- _elv_add_request_core((q), (rq), (q)->queue_head.prev, (p)); \
- else \
- _elv_add_request_core((q), (rq), &(q)->queue_head, (p)); \
-} while (0)
-
-#define elv_add_request(q, rq, back) _elv_add_request((q), (rq), (back), 1)
-
#if defined(MAJOR_NR) || defined(IDE_DRIVER)
#if (MAJOR_NR != SCSI_TAPE_MAJOR) && (MAJOR_NR != OSST_MAJOR)
#if !defined(IDE_DRIVER)
diff --git a/include/linux/blkdev.h b/include/linux/blkdev.h
index 42e81a4a0cab..de87dee16f83 100644
--- a/include/linux/blkdev.h
+++ b/include/linux/blkdev.h
@@ -26,6 +26,8 @@ struct request {
struct list_head queuelist; /* looking for ->queue? you must _not_
* access it directly, use
* blkdev_dequeue_request! */
+ int ref_count;
+
void *elevator_private;
unsigned char cmd[16];
@@ -215,6 +217,7 @@ struct request_queue
unsigned int max_segment_size;
unsigned long seg_boundary_mask;
+ unsigned int dma_alignment;
wait_queue_head_t queue_wait;
@@ -254,6 +257,13 @@ struct request_queue
*/
#define blk_queue_headactive(q, head_active)
+/*
+ * q->prep_rq_fn return values
+ */
+#define BLKPREP_OK 0 /* serve it */
+#define BLKPREP_KILL 1 /* fatal error, kill */
+#define BLKPREP_DEFER 2 /* leave on queue */
+
extern unsigned long blk_max_low_pfn, blk_max_pfn;
/*
@@ -268,7 +278,7 @@ extern unsigned long blk_max_low_pfn, blk_max_pfn;
#define BLK_BOUNCE_ISA (ISA_DMA_THRESHOLD)
extern int init_emergency_isa_pool(void);
-void blk_queue_bounce(request_queue_t *q, struct bio **bio);
+inline void blk_queue_bounce(request_queue_t *q, struct bio **bio);
#define rq_for_each_bio(bio, rq) \
if ((rq->bio)) \
@@ -339,6 +349,7 @@ extern void blk_queue_segment_boundary(request_queue_t *, unsigned long);
extern void blk_queue_assign_lock(request_queue_t *, spinlock_t *);
extern void blk_queue_prep_rq(request_queue_t *, prep_rq_fn *pfn);
extern void blk_queue_merge_bvec(request_queue_t *, merge_bvec_fn *);
+extern void blk_queue_dma_alignment(request_queue_t *, int);
extern struct backing_dev_info *blk_get_backing_dev_info(struct block_device *bdev);
extern int blk_rq_map_sg(request_queue_t *, struct request *, struct scatterlist *);
@@ -385,6 +396,21 @@ static inline int bdev_hardsect_size(struct block_device *bdev)
return queue_hardsect_size(bdev_get_queue(bdev));
}
+static inline int queue_dma_alignment(request_queue_t *q)
+{
+ int retval = 511;
+
+ if (q && q->dma_alignment)
+ retval = q->dma_alignment;
+
+ return retval;
+}
+
+static inline int bdev_dma_aligment(struct block_device *bdev)
+{
+ return queue_dma_alignment(bdev_get_queue(bdev));
+}
+
#define blk_finished_io(nsects) do { } while (0)
#define blk_started_io(nsects) do { } while (0)
diff --git a/include/linux/elevator.h b/include/linux/elevator.h
index 8a54a1c5e5af..62092e8ed2ad 100644
--- a/include/linux/elevator.h
+++ b/include/linux/elevator.h
@@ -40,8 +40,8 @@ struct elevator_s
/*
* block elevator interface
*/
-extern void __elv_add_request(request_queue_t *, struct request *,
- struct list_head *);
+extern void elv_add_request(request_queue_t *, struct request *, int, int);
+extern void __elv_add_request(request_queue_t *, struct request *, int, int);
extern int elv_merge(request_queue_t *, struct list_head **, struct bio *);
extern void elv_merge_requests(request_queue_t *, struct request *,
struct request *);
@@ -50,6 +50,9 @@ extern void elv_remove_request(request_queue_t *, struct request *);
extern int elv_queue_empty(request_queue_t *);
extern inline struct list_head *elv_get_sort_head(request_queue_t *, struct request *);
+#define __elv_add_request_pos(q, rq, pos) \
+ (q)->elevator.elevator_add_req_fn((q), (rq), (pos))
+
/*
* noop I/O scheduler. always merges, always inserts new request at tail
*/