diff options
Diffstat (limited to 'include/linux/bio.h')
| -rw-r--r-- | include/linux/bio.h | 85 | 
1 files changed, 13 insertions, 72 deletions
| diff --git a/include/linux/bio.h b/include/linux/bio.h index 9faebf7f9a33..583c10810e32 100644 --- a/include/linux/bio.h +++ b/include/linux/bio.h @@ -41,44 +41,9 @@  #endif  #define BIO_MAX_PAGES		256 -#define BIO_MAX_SIZE		(BIO_MAX_PAGES << PAGE_SHIFT) -#define BIO_MAX_SECTORS		(BIO_MAX_SIZE >> 9) -/* - * upper 16 bits of bi_rw define the io priority of this bio - */ -#define BIO_PRIO_SHIFT	(8 * sizeof(unsigned long) - IOPRIO_BITS) -#define bio_prio(bio)	((bio)->bi_rw >> BIO_PRIO_SHIFT) -#define bio_prio_valid(bio)	ioprio_valid(bio_prio(bio)) - -#define bio_set_prio(bio, prio)		do {			\ -	WARN_ON(prio >= (1 << IOPRIO_BITS));			\ -	(bio)->bi_rw &= ((1UL << BIO_PRIO_SHIFT) - 1);		\ -	(bio)->bi_rw |= ((unsigned long) (prio) << BIO_PRIO_SHIFT);	\ -} while (0) - -/* - * various member access, note that bio_data should of course not be used - * on highmem page vectors - */ -#define __bvec_iter_bvec(bvec, iter)	(&(bvec)[(iter).bi_idx]) - -#define bvec_iter_page(bvec, iter)				\ -	(__bvec_iter_bvec((bvec), (iter))->bv_page) - -#define bvec_iter_len(bvec, iter)				\ -	min((iter).bi_size,					\ -	    __bvec_iter_bvec((bvec), (iter))->bv_len - (iter).bi_bvec_done) - -#define bvec_iter_offset(bvec, iter)				\ -	(__bvec_iter_bvec((bvec), (iter))->bv_offset + (iter).bi_bvec_done) - -#define bvec_iter_bvec(bvec, iter)				\ -((struct bio_vec) {						\ -	.bv_page	= bvec_iter_page((bvec), (iter)),	\ -	.bv_len		= bvec_iter_len((bvec), (iter)),	\ -	.bv_offset	= bvec_iter_offset((bvec), (iter)),	\ -}) +#define bio_prio(bio)			(bio)->bi_ioprio +#define bio_set_prio(bio, prio)		((bio)->bi_ioprio = prio)  #define bio_iter_iovec(bio, iter)				\  	bvec_iter_bvec((bio)->bi_io_vec, (iter)) @@ -106,18 +71,23 @@ static inline bool bio_has_data(struct bio *bio)  {  	if (bio &&  	    bio->bi_iter.bi_size && -	    !(bio->bi_rw & REQ_DISCARD)) +	    bio_op(bio) != REQ_OP_DISCARD)  		return true;  	return false;  } +static inline bool bio_no_advance_iter(struct bio *bio) +{ +	return bio_op(bio) == REQ_OP_DISCARD || bio_op(bio) == REQ_OP_WRITE_SAME; +} +  static inline bool bio_is_rw(struct bio *bio)  {  	if (!bio_has_data(bio))  		return false; -	if (bio->bi_rw & BIO_NO_ADVANCE_ITER_MASK) +	if (bio_no_advance_iter(bio))  		return false;  	return true; @@ -193,39 +163,12 @@ static inline void *bio_data(struct bio *bio)  #define bio_for_each_segment_all(bvl, bio, i)				\  	for (i = 0, bvl = (bio)->bi_io_vec; i < (bio)->bi_vcnt; i++, bvl++) -static inline void bvec_iter_advance(struct bio_vec *bv, struct bvec_iter *iter, -				     unsigned bytes) -{ -	WARN_ONCE(bytes > iter->bi_size, -		  "Attempted to advance past end of bvec iter\n"); - -	while (bytes) { -		unsigned len = min(bytes, bvec_iter_len(bv, *iter)); - -		bytes -= len; -		iter->bi_size -= len; -		iter->bi_bvec_done += len; - -		if (iter->bi_bvec_done == __bvec_iter_bvec(bv, *iter)->bv_len) { -			iter->bi_bvec_done = 0; -			iter->bi_idx++; -		} -	} -} - -#define for_each_bvec(bvl, bio_vec, iter, start)			\ -	for (iter = (start);						\ -	     (iter).bi_size &&						\ -		((bvl = bvec_iter_bvec((bio_vec), (iter))), 1);	\ -	     bvec_iter_advance((bio_vec), &(iter), (bvl).bv_len)) - -  static inline void bio_advance_iter(struct bio *bio, struct bvec_iter *iter,  				    unsigned bytes)  {  	iter->bi_sector += bytes >> 9; -	if (bio->bi_rw & BIO_NO_ADVANCE_ITER_MASK) +	if (bio_no_advance_iter(bio))  		iter->bi_size -= bytes;  	else  		bvec_iter_advance(bio->bi_io_vec, iter, bytes); @@ -253,10 +196,10 @@ static inline unsigned bio_segments(struct bio *bio)  	 * differently:  	 */ -	if (bio->bi_rw & REQ_DISCARD) +	if (bio_op(bio) == REQ_OP_DISCARD)  		return 1; -	if (bio->bi_rw & REQ_WRITE_SAME) +	if (bio_op(bio) == REQ_OP_WRITE_SAME)  		return 1;  	bio_for_each_segment(bv, bio, iter) @@ -473,7 +416,7 @@ static inline void bio_io_error(struct bio *bio)  struct request_queue;  extern int bio_phys_segments(struct request_queue *, struct bio *); -extern int submit_bio_wait(int rw, struct bio *bio); +extern int submit_bio_wait(struct bio *bio);  extern void bio_advance(struct bio *, unsigned);  extern void bio_init(struct bio *); @@ -720,8 +663,6 @@ static inline void bio_inc_remaining(struct bio *bio)   * and the bvec_slabs[].   */  #define BIO_POOL_SIZE 2 -#define BIOVEC_NR_POOLS 6 -#define BIOVEC_MAX_IDX	(BIOVEC_NR_POOLS - 1)  struct bio_set {  	struct kmem_cache *bio_slab; |