block, fs, drivers: remove REQ_OP compat defs and related code
[cascardo/linux.git] / include / linux / bio.h
1 /*
2  * 2.5 block I/O model
3  *
4  * Copyright (C) 2001 Jens Axboe <axboe@suse.de>
5  *
6  * This program is free software; you can redistribute it and/or modify
7  * it under the terms of the GNU General Public License version 2 as
8  * published by the Free Software Foundation.
9  *
10  * This program is distributed in the hope that it will be useful,
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
12  *
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14  * GNU General Public License for more details.
15  *
16  * You should have received a copy of the GNU General Public Licens
17  * along with this program; if not, write to the Free Software
18  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-
19  */
20 #ifndef __LINUX_BIO_H
21 #define __LINUX_BIO_H
22
23 #include <linux/highmem.h>
24 #include <linux/mempool.h>
25 #include <linux/ioprio.h>
26 #include <linux/bug.h>
27
28 #ifdef CONFIG_BLOCK
29
30 #include <asm/io.h>
31
32 /* struct bio, bio_vec and BIO_* flags are defined in blk_types.h */
33 #include <linux/blk_types.h>
34
35 #define BIO_DEBUG
36
37 #ifdef BIO_DEBUG
38 #define BIO_BUG_ON      BUG_ON
39 #else
40 #define BIO_BUG_ON
41 #endif
42
43 #define BIO_MAX_PAGES           256
44 #define BIO_MAX_SIZE            (BIO_MAX_PAGES << PAGE_SHIFT)
45 #define BIO_MAX_SECTORS         (BIO_MAX_SIZE >> 9)
46
47 #define bio_prio(bio)                   (bio)->bi_ioprio
48 #define bio_set_prio(bio, prio)         ((bio)->bi_ioprio = prio)
49
50 /*
51  * various member access, note that bio_data should of course not be used
52  * on highmem page vectors
53  */
54 #define __bvec_iter_bvec(bvec, iter)    (&(bvec)[(iter).bi_idx])
55
56 #define bvec_iter_page(bvec, iter)                              \
57         (__bvec_iter_bvec((bvec), (iter))->bv_page)
58
59 #define bvec_iter_len(bvec, iter)                               \
60         min((iter).bi_size,                                     \
61             __bvec_iter_bvec((bvec), (iter))->bv_len - (iter).bi_bvec_done)
62
63 #define bvec_iter_offset(bvec, iter)                            \
64         (__bvec_iter_bvec((bvec), (iter))->bv_offset + (iter).bi_bvec_done)
65
66 #define bvec_iter_bvec(bvec, iter)                              \
67 ((struct bio_vec) {                                             \
68         .bv_page        = bvec_iter_page((bvec), (iter)),       \
69         .bv_len         = bvec_iter_len((bvec), (iter)),        \
70         .bv_offset      = bvec_iter_offset((bvec), (iter)),     \
71 })
72
73 #define bio_iter_iovec(bio, iter)                               \
74         bvec_iter_bvec((bio)->bi_io_vec, (iter))
75
76 #define bio_iter_page(bio, iter)                                \
77         bvec_iter_page((bio)->bi_io_vec, (iter))
78 #define bio_iter_len(bio, iter)                                 \
79         bvec_iter_len((bio)->bi_io_vec, (iter))
80 #define bio_iter_offset(bio, iter)                              \
81         bvec_iter_offset((bio)->bi_io_vec, (iter))
82
83 #define bio_page(bio)           bio_iter_page((bio), (bio)->bi_iter)
84 #define bio_offset(bio)         bio_iter_offset((bio), (bio)->bi_iter)
85 #define bio_iovec(bio)          bio_iter_iovec((bio), (bio)->bi_iter)
86
87 #define bio_multiple_segments(bio)                              \
88         ((bio)->bi_iter.bi_size != bio_iovec(bio).bv_len)
89 #define bio_sectors(bio)        ((bio)->bi_iter.bi_size >> 9)
90 #define bio_end_sector(bio)     ((bio)->bi_iter.bi_sector + bio_sectors((bio)))
91
92 /*
93  * Check whether this bio carries any data or not. A NULL bio is allowed.
94  */
95 static inline bool bio_has_data(struct bio *bio)
96 {
97         if (bio &&
98             bio->bi_iter.bi_size &&
99             bio_op(bio) != REQ_OP_DISCARD)
100                 return true;
101
102         return false;
103 }
104
105 static inline bool bio_no_advance_iter(struct bio *bio)
106 {
107         return bio_op(bio) == REQ_OP_DISCARD || bio_op(bio) == REQ_OP_WRITE_SAME;
108 }
109
110 static inline bool bio_is_rw(struct bio *bio)
111 {
112         if (!bio_has_data(bio))
113                 return false;
114
115         if (bio_no_advance_iter(bio))
116                 return false;
117
118         return true;
119 }
120
121 static inline bool bio_mergeable(struct bio *bio)
122 {
123         if (bio->bi_rw & REQ_NOMERGE_FLAGS)
124                 return false;
125
126         return true;
127 }
128
129 static inline unsigned int bio_cur_bytes(struct bio *bio)
130 {
131         if (bio_has_data(bio))
132                 return bio_iovec(bio).bv_len;
133         else /* dataless requests such as discard */
134                 return bio->bi_iter.bi_size;
135 }
136
137 static inline void *bio_data(struct bio *bio)
138 {
139         if (bio_has_data(bio))
140                 return page_address(bio_page(bio)) + bio_offset(bio);
141
142         return NULL;
143 }
144
145 /*
146  * will die
147  */
148 #define bio_to_phys(bio)        (page_to_phys(bio_page((bio))) + (unsigned long) bio_offset((bio)))
149 #define bvec_to_phys(bv)        (page_to_phys((bv)->bv_page) + (unsigned long) (bv)->bv_offset)
150
151 /*
152  * queues that have highmem support enabled may still need to revert to
153  * PIO transfers occasionally and thus map high pages temporarily. For
154  * permanent PIO fall back, user is probably better off disabling highmem
155  * I/O completely on that queue (see ide-dma for example)
156  */
157 #define __bio_kmap_atomic(bio, iter)                            \
158         (kmap_atomic(bio_iter_iovec((bio), (iter)).bv_page) +   \
159                 bio_iter_iovec((bio), (iter)).bv_offset)
160
161 #define __bio_kunmap_atomic(addr)       kunmap_atomic(addr)
162
163 /*
164  * merge helpers etc
165  */
166
167 /* Default implementation of BIOVEC_PHYS_MERGEABLE */
168 #define __BIOVEC_PHYS_MERGEABLE(vec1, vec2)     \
169         ((bvec_to_phys((vec1)) + (vec1)->bv_len) == bvec_to_phys((vec2)))
170
171 /*
172  * allow arch override, for eg virtualized architectures (put in asm/io.h)
173  */
174 #ifndef BIOVEC_PHYS_MERGEABLE
175 #define BIOVEC_PHYS_MERGEABLE(vec1, vec2)       \
176         __BIOVEC_PHYS_MERGEABLE(vec1, vec2)
177 #endif
178
179 #define __BIO_SEG_BOUNDARY(addr1, addr2, mask) \
180         (((addr1) | (mask)) == (((addr2) - 1) | (mask)))
181 #define BIOVEC_SEG_BOUNDARY(q, b1, b2) \
182         __BIO_SEG_BOUNDARY(bvec_to_phys((b1)), bvec_to_phys((b2)) + (b2)->bv_len, queue_segment_boundary((q)))
183
184 /*
185  * drivers should _never_ use the all version - the bio may have been split
186  * before it got to the driver and the driver won't own all of it
187  */
188 #define bio_for_each_segment_all(bvl, bio, i)                           \
189         for (i = 0, bvl = (bio)->bi_io_vec; i < (bio)->bi_vcnt; i++, bvl++)
190
191 static inline void bvec_iter_advance(struct bio_vec *bv, struct bvec_iter *iter,
192                                      unsigned bytes)
193 {
194         WARN_ONCE(bytes > iter->bi_size,
195                   "Attempted to advance past end of bvec iter\n");
196
197         while (bytes) {
198                 unsigned len = min(bytes, bvec_iter_len(bv, *iter));
199
200                 bytes -= len;
201                 iter->bi_size -= len;
202                 iter->bi_bvec_done += len;
203
204                 if (iter->bi_bvec_done == __bvec_iter_bvec(bv, *iter)->bv_len) {
205                         iter->bi_bvec_done = 0;
206                         iter->bi_idx++;
207                 }
208         }
209 }
210
211 #define for_each_bvec(bvl, bio_vec, iter, start)                        \
212         for (iter = (start);                                            \
213              (iter).bi_size &&                                          \
214                 ((bvl = bvec_iter_bvec((bio_vec), (iter))), 1); \
215              bvec_iter_advance((bio_vec), &(iter), (bvl).bv_len))
216
217
218 static inline void bio_advance_iter(struct bio *bio, struct bvec_iter *iter,
219                                     unsigned bytes)
220 {
221         iter->bi_sector += bytes >> 9;
222
223         if (bio_no_advance_iter(bio))
224                 iter->bi_size -= bytes;
225         else
226                 bvec_iter_advance(bio->bi_io_vec, iter, bytes);
227 }
228
229 #define __bio_for_each_segment(bvl, bio, iter, start)                   \
230         for (iter = (start);                                            \
231              (iter).bi_size &&                                          \
232                 ((bvl = bio_iter_iovec((bio), (iter))), 1);             \
233              bio_advance_iter((bio), &(iter), (bvl).bv_len))
234
235 #define bio_for_each_segment(bvl, bio, iter)                            \
236         __bio_for_each_segment(bvl, bio, iter, (bio)->bi_iter)
237
238 #define bio_iter_last(bvec, iter) ((iter).bi_size == (bvec).bv_len)
239
240 static inline unsigned bio_segments(struct bio *bio)
241 {
242         unsigned segs = 0;
243         struct bio_vec bv;
244         struct bvec_iter iter;
245
246         /*
247          * We special case discard/write same, because they interpret bi_size
248          * differently:
249          */
250
251         if (bio_op(bio) == REQ_OP_DISCARD)
252                 return 1;
253
254         if (bio_op(bio) == REQ_OP_WRITE_SAME)
255                 return 1;
256
257         bio_for_each_segment(bv, bio, iter)
258                 segs++;
259
260         return segs;
261 }
262
263 /*
264  * get a reference to a bio, so it won't disappear. the intended use is
265  * something like:
266  *
267  * bio_get(bio);
268  * submit_bio(rw, bio);
269  * if (bio->bi_flags ...)
270  *      do_something
271  * bio_put(bio);
272  *
273  * without the bio_get(), it could potentially complete I/O before submit_bio
274  * returns. and then bio would be freed memory when if (bio->bi_flags ...)
275  * runs
276  */
277 static inline void bio_get(struct bio *bio)
278 {
279         bio->bi_flags |= (1 << BIO_REFFED);
280         smp_mb__before_atomic();
281         atomic_inc(&bio->__bi_cnt);
282 }
283
284 static inline void bio_cnt_set(struct bio *bio, unsigned int count)
285 {
286         if (count != 1) {
287                 bio->bi_flags |= (1 << BIO_REFFED);
288                 smp_mb__before_atomic();
289         }
290         atomic_set(&bio->__bi_cnt, count);
291 }
292
293 static inline bool bio_flagged(struct bio *bio, unsigned int bit)
294 {
295         return (bio->bi_flags & (1U << bit)) != 0;
296 }
297
298 static inline void bio_set_flag(struct bio *bio, unsigned int bit)
299 {
300         bio->bi_flags |= (1U << bit);
301 }
302
303 static inline void bio_clear_flag(struct bio *bio, unsigned int bit)
304 {
305         bio->bi_flags &= ~(1U << bit);
306 }
307
308 static inline void bio_get_first_bvec(struct bio *bio, struct bio_vec *bv)
309 {
310         *bv = bio_iovec(bio);
311 }
312
313 static inline void bio_get_last_bvec(struct bio *bio, struct bio_vec *bv)
314 {
315         struct bvec_iter iter = bio->bi_iter;
316         int idx;
317
318         if (unlikely(!bio_multiple_segments(bio))) {
319                 *bv = bio_iovec(bio);
320                 return;
321         }
322
323         bio_advance_iter(bio, &iter, iter.bi_size);
324
325         if (!iter.bi_bvec_done)
326                 idx = iter.bi_idx - 1;
327         else    /* in the middle of bvec */
328                 idx = iter.bi_idx;
329
330         *bv = bio->bi_io_vec[idx];
331
332         /*
333          * iter.bi_bvec_done records actual length of the last bvec
334          * if this bio ends in the middle of one io vector
335          */
336         if (iter.bi_bvec_done)
337                 bv->bv_len = iter.bi_bvec_done;
338 }
339
340 enum bip_flags {
341         BIP_BLOCK_INTEGRITY     = 1 << 0, /* block layer owns integrity data */
342         BIP_MAPPED_INTEGRITY    = 1 << 1, /* ref tag has been remapped */
343         BIP_CTRL_NOCHECK        = 1 << 2, /* disable HBA integrity checking */
344         BIP_DISK_NOCHECK        = 1 << 3, /* disable disk integrity checking */
345         BIP_IP_CHECKSUM         = 1 << 4, /* IP checksum */
346 };
347
348 /*
349  * bio integrity payload
350  */
351 struct bio_integrity_payload {
352         struct bio              *bip_bio;       /* parent bio */
353
354         struct bvec_iter        bip_iter;
355
356         bio_end_io_t            *bip_end_io;    /* saved I/O completion fn */
357
358         unsigned short          bip_slab;       /* slab the bip came from */
359         unsigned short          bip_vcnt;       /* # of integrity bio_vecs */
360         unsigned short          bip_max_vcnt;   /* integrity bio_vec slots */
361         unsigned short          bip_flags;      /* control flags */
362
363         struct work_struct      bip_work;       /* I/O completion */
364
365         struct bio_vec          *bip_vec;
366         struct bio_vec          bip_inline_vecs[0];/* embedded bvec array */
367 };
368
369 #if defined(CONFIG_BLK_DEV_INTEGRITY)
370
371 static inline struct bio_integrity_payload *bio_integrity(struct bio *bio)
372 {
373         if (bio->bi_rw & REQ_INTEGRITY)
374                 return bio->bi_integrity;
375
376         return NULL;
377 }
378
379 static inline bool bio_integrity_flagged(struct bio *bio, enum bip_flags flag)
380 {
381         struct bio_integrity_payload *bip = bio_integrity(bio);
382
383         if (bip)
384                 return bip->bip_flags & flag;
385
386         return false;
387 }
388
389 static inline sector_t bip_get_seed(struct bio_integrity_payload *bip)
390 {
391         return bip->bip_iter.bi_sector;
392 }
393
394 static inline void bip_set_seed(struct bio_integrity_payload *bip,
395                                 sector_t seed)
396 {
397         bip->bip_iter.bi_sector = seed;
398 }
399
400 #endif /* CONFIG_BLK_DEV_INTEGRITY */
401
402 extern void bio_trim(struct bio *bio, int offset, int size);
403 extern struct bio *bio_split(struct bio *bio, int sectors,
404                              gfp_t gfp, struct bio_set *bs);
405
406 /**
407  * bio_next_split - get next @sectors from a bio, splitting if necessary
408  * @bio:        bio to split
409  * @sectors:    number of sectors to split from the front of @bio
410  * @gfp:        gfp mask
411  * @bs:         bio set to allocate from
412  *
413  * Returns a bio representing the next @sectors of @bio - if the bio is smaller
414  * than @sectors, returns the original bio unchanged.
415  */
416 static inline struct bio *bio_next_split(struct bio *bio, int sectors,
417                                          gfp_t gfp, struct bio_set *bs)
418 {
419         if (sectors >= bio_sectors(bio))
420                 return bio;
421
422         return bio_split(bio, sectors, gfp, bs);
423 }
424
425 extern struct bio_set *bioset_create(unsigned int, unsigned int);
426 extern struct bio_set *bioset_create_nobvec(unsigned int, unsigned int);
427 extern void bioset_free(struct bio_set *);
428 extern mempool_t *biovec_create_pool(int pool_entries);
429
430 extern struct bio *bio_alloc_bioset(gfp_t, int, struct bio_set *);
431 extern void bio_put(struct bio *);
432
433 extern void __bio_clone_fast(struct bio *, struct bio *);
434 extern struct bio *bio_clone_fast(struct bio *, gfp_t, struct bio_set *);
435 extern struct bio *bio_clone_bioset(struct bio *, gfp_t, struct bio_set *bs);
436
437 extern struct bio_set *fs_bio_set;
438
439 static inline struct bio *bio_alloc(gfp_t gfp_mask, unsigned int nr_iovecs)
440 {
441         return bio_alloc_bioset(gfp_mask, nr_iovecs, fs_bio_set);
442 }
443
444 static inline struct bio *bio_clone(struct bio *bio, gfp_t gfp_mask)
445 {
446         return bio_clone_bioset(bio, gfp_mask, fs_bio_set);
447 }
448
449 static inline struct bio *bio_kmalloc(gfp_t gfp_mask, unsigned int nr_iovecs)
450 {
451         return bio_alloc_bioset(gfp_mask, nr_iovecs, NULL);
452 }
453
454 static inline struct bio *bio_clone_kmalloc(struct bio *bio, gfp_t gfp_mask)
455 {
456         return bio_clone_bioset(bio, gfp_mask, NULL);
457
458 }
459
460 extern void bio_endio(struct bio *);
461
462 static inline void bio_io_error(struct bio *bio)
463 {
464         bio->bi_error = -EIO;
465         bio_endio(bio);
466 }
467
468 struct request_queue;
469 extern int bio_phys_segments(struct request_queue *, struct bio *);
470
471 extern int submit_bio_wait(struct bio *bio);
472 extern void bio_advance(struct bio *, unsigned);
473
474 extern void bio_init(struct bio *);
475 extern void bio_reset(struct bio *);
476 void bio_chain(struct bio *, struct bio *);
477
478 extern int bio_add_page(struct bio *, struct page *, unsigned int,unsigned int);
479 extern int bio_add_pc_page(struct request_queue *, struct bio *, struct page *,
480                            unsigned int, unsigned int);
481 struct rq_map_data;
482 extern struct bio *bio_map_user_iov(struct request_queue *,
483                                     const struct iov_iter *, gfp_t);
484 extern void bio_unmap_user(struct bio *);
485 extern struct bio *bio_map_kern(struct request_queue *, void *, unsigned int,
486                                 gfp_t);
487 extern struct bio *bio_copy_kern(struct request_queue *, void *, unsigned int,
488                                  gfp_t, int);
489 extern void bio_set_pages_dirty(struct bio *bio);
490 extern void bio_check_pages_dirty(struct bio *bio);
491
492 void generic_start_io_acct(int rw, unsigned long sectors,
493                            struct hd_struct *part);
494 void generic_end_io_acct(int rw, struct hd_struct *part,
495                          unsigned long start_time);
496
497 #ifndef ARCH_IMPLEMENTS_FLUSH_DCACHE_PAGE
498 # error "You should define ARCH_IMPLEMENTS_FLUSH_DCACHE_PAGE for your platform"
499 #endif
500 #if ARCH_IMPLEMENTS_FLUSH_DCACHE_PAGE
501 extern void bio_flush_dcache_pages(struct bio *bi);
502 #else
503 static inline void bio_flush_dcache_pages(struct bio *bi)
504 {
505 }
506 #endif
507
508 extern void bio_copy_data(struct bio *dst, struct bio *src);
509 extern int bio_alloc_pages(struct bio *bio, gfp_t gfp);
510
511 extern struct bio *bio_copy_user_iov(struct request_queue *,
512                                      struct rq_map_data *,
513                                      const struct iov_iter *,
514                                      gfp_t);
515 extern int bio_uncopy_user(struct bio *);
516 void zero_fill_bio(struct bio *bio);
517 extern struct bio_vec *bvec_alloc(gfp_t, int, unsigned long *, mempool_t *);
518 extern void bvec_free(mempool_t *, struct bio_vec *, unsigned int);
519 extern unsigned int bvec_nr_vecs(unsigned short idx);
520
521 #ifdef CONFIG_BLK_CGROUP
522 int bio_associate_blkcg(struct bio *bio, struct cgroup_subsys_state *blkcg_css);
523 int bio_associate_current(struct bio *bio);
524 void bio_disassociate_task(struct bio *bio);
525 #else   /* CONFIG_BLK_CGROUP */
526 static inline int bio_associate_blkcg(struct bio *bio,
527                         struct cgroup_subsys_state *blkcg_css) { return 0; }
528 static inline int bio_associate_current(struct bio *bio) { return -ENOENT; }
529 static inline void bio_disassociate_task(struct bio *bio) { }
530 #endif  /* CONFIG_BLK_CGROUP */
531
532 #ifdef CONFIG_HIGHMEM
533 /*
534  * remember never ever reenable interrupts between a bvec_kmap_irq and
535  * bvec_kunmap_irq!
536  */
537 static inline char *bvec_kmap_irq(struct bio_vec *bvec, unsigned long *flags)
538 {
539         unsigned long addr;
540
541         /*
542          * might not be a highmem page, but the preempt/irq count
543          * balancing is a lot nicer this way
544          */
545         local_irq_save(*flags);
546         addr = (unsigned long) kmap_atomic(bvec->bv_page);
547
548         BUG_ON(addr & ~PAGE_MASK);
549
550         return (char *) addr + bvec->bv_offset;
551 }
552
553 static inline void bvec_kunmap_irq(char *buffer, unsigned long *flags)
554 {
555         unsigned long ptr = (unsigned long) buffer & PAGE_MASK;
556
557         kunmap_atomic((void *) ptr);
558         local_irq_restore(*flags);
559 }
560
561 #else
562 static inline char *bvec_kmap_irq(struct bio_vec *bvec, unsigned long *flags)
563 {
564         return page_address(bvec->bv_page) + bvec->bv_offset;
565 }
566
567 static inline void bvec_kunmap_irq(char *buffer, unsigned long *flags)
568 {
569         *flags = 0;
570 }
571 #endif
572
573 static inline char *__bio_kmap_irq(struct bio *bio, struct bvec_iter iter,
574                                    unsigned long *flags)
575 {
576         return bvec_kmap_irq(&bio_iter_iovec(bio, iter), flags);
577 }
578 #define __bio_kunmap_irq(buf, flags)    bvec_kunmap_irq(buf, flags)
579
580 #define bio_kmap_irq(bio, flags) \
581         __bio_kmap_irq((bio), (bio)->bi_iter, (flags))
582 #define bio_kunmap_irq(buf,flags)       __bio_kunmap_irq(buf, flags)
583
584 /*
585  * BIO list management for use by remapping drivers (e.g. DM or MD) and loop.
586  *
587  * A bio_list anchors a singly-linked list of bios chained through the bi_next
588  * member of the bio.  The bio_list also caches the last list member to allow
589  * fast access to the tail.
590  */
591 struct bio_list {
592         struct bio *head;
593         struct bio *tail;
594 };
595
596 static inline int bio_list_empty(const struct bio_list *bl)
597 {
598         return bl->head == NULL;
599 }
600
601 static inline void bio_list_init(struct bio_list *bl)
602 {
603         bl->head = bl->tail = NULL;
604 }
605
606 #define BIO_EMPTY_LIST  { NULL, NULL }
607
608 #define bio_list_for_each(bio, bl) \
609         for (bio = (bl)->head; bio; bio = bio->bi_next)
610
611 static inline unsigned bio_list_size(const struct bio_list *bl)
612 {
613         unsigned sz = 0;
614         struct bio *bio;
615
616         bio_list_for_each(bio, bl)
617                 sz++;
618
619         return sz;
620 }
621
622 static inline void bio_list_add(struct bio_list *bl, struct bio *bio)
623 {
624         bio->bi_next = NULL;
625
626         if (bl->tail)
627                 bl->tail->bi_next = bio;
628         else
629                 bl->head = bio;
630
631         bl->tail = bio;
632 }
633
634 static inline void bio_list_add_head(struct bio_list *bl, struct bio *bio)
635 {
636         bio->bi_next = bl->head;
637
638         bl->head = bio;
639
640         if (!bl->tail)
641                 bl->tail = bio;
642 }
643
644 static inline void bio_list_merge(struct bio_list *bl, struct bio_list *bl2)
645 {
646         if (!bl2->head)
647                 return;
648
649         if (bl->tail)
650                 bl->tail->bi_next = bl2->head;
651         else
652                 bl->head = bl2->head;
653
654         bl->tail = bl2->tail;
655 }
656
657 static inline void bio_list_merge_head(struct bio_list *bl,
658                                        struct bio_list *bl2)
659 {
660         if (!bl2->head)
661                 return;
662
663         if (bl->head)
664                 bl2->tail->bi_next = bl->head;
665         else
666                 bl->tail = bl2->tail;
667
668         bl->head = bl2->head;
669 }
670
671 static inline struct bio *bio_list_peek(struct bio_list *bl)
672 {
673         return bl->head;
674 }
675
676 static inline struct bio *bio_list_pop(struct bio_list *bl)
677 {
678         struct bio *bio = bl->head;
679
680         if (bio) {
681                 bl->head = bl->head->bi_next;
682                 if (!bl->head)
683                         bl->tail = NULL;
684
685                 bio->bi_next = NULL;
686         }
687
688         return bio;
689 }
690
691 static inline struct bio *bio_list_get(struct bio_list *bl)
692 {
693         struct bio *bio = bl->head;
694
695         bl->head = bl->tail = NULL;
696
697         return bio;
698 }
699
700 /*
701  * Increment chain count for the bio. Make sure the CHAIN flag update
702  * is visible before the raised count.
703  */
704 static inline void bio_inc_remaining(struct bio *bio)
705 {
706         bio_set_flag(bio, BIO_CHAIN);
707         smp_mb__before_atomic();
708         atomic_inc(&bio->__bi_remaining);
709 }
710
711 /*
712  * bio_set is used to allow other portions of the IO system to
713  * allocate their own private memory pools for bio and iovec structures.
714  * These memory pools in turn all allocate from the bio_slab
715  * and the bvec_slabs[].
716  */
717 #define BIO_POOL_SIZE 2
718 #define BIOVEC_NR_POOLS 6
719 #define BIOVEC_MAX_IDX  (BIOVEC_NR_POOLS - 1)
720
721 struct bio_set {
722         struct kmem_cache *bio_slab;
723         unsigned int front_pad;
724
725         mempool_t *bio_pool;
726         mempool_t *bvec_pool;
727 #if defined(CONFIG_BLK_DEV_INTEGRITY)
728         mempool_t *bio_integrity_pool;
729         mempool_t *bvec_integrity_pool;
730 #endif
731
732         /*
733          * Deadlock avoidance for stacking block drivers: see comments in
734          * bio_alloc_bioset() for details
735          */
736         spinlock_t              rescue_lock;
737         struct bio_list         rescue_list;
738         struct work_struct      rescue_work;
739         struct workqueue_struct *rescue_workqueue;
740 };
741
742 struct biovec_slab {
743         int nr_vecs;
744         char *name;
745         struct kmem_cache *slab;
746 };
747
748 /*
749  * a small number of entries is fine, not going to be performance critical.
750  * basically we just need to survive
751  */
752 #define BIO_SPLIT_ENTRIES 2
753
754 #if defined(CONFIG_BLK_DEV_INTEGRITY)
755
756 #define bip_for_each_vec(bvl, bip, iter)                                \
757         for_each_bvec(bvl, (bip)->bip_vec, iter, (bip)->bip_iter)
758
759 #define bio_for_each_integrity_vec(_bvl, _bio, _iter)                   \
760         for_each_bio(_bio)                                              \
761                 bip_for_each_vec(_bvl, _bio->bi_integrity, _iter)
762
763 extern struct bio_integrity_payload *bio_integrity_alloc(struct bio *, gfp_t, unsigned int);
764 extern void bio_integrity_free(struct bio *);
765 extern int bio_integrity_add_page(struct bio *, struct page *, unsigned int, unsigned int);
766 extern bool bio_integrity_enabled(struct bio *bio);
767 extern int bio_integrity_prep(struct bio *);
768 extern void bio_integrity_endio(struct bio *);
769 extern void bio_integrity_advance(struct bio *, unsigned int);
770 extern void bio_integrity_trim(struct bio *, unsigned int, unsigned int);
771 extern int bio_integrity_clone(struct bio *, struct bio *, gfp_t);
772 extern int bioset_integrity_create(struct bio_set *, int);
773 extern void bioset_integrity_free(struct bio_set *);
774 extern void bio_integrity_init(void);
775
776 #else /* CONFIG_BLK_DEV_INTEGRITY */
777
778 static inline void *bio_integrity(struct bio *bio)
779 {
780         return NULL;
781 }
782
783 static inline bool bio_integrity_enabled(struct bio *bio)
784 {
785         return false;
786 }
787
788 static inline int bioset_integrity_create(struct bio_set *bs, int pool_size)
789 {
790         return 0;
791 }
792
793 static inline void bioset_integrity_free (struct bio_set *bs)
794 {
795         return;
796 }
797
798 static inline int bio_integrity_prep(struct bio *bio)
799 {
800         return 0;
801 }
802
803 static inline void bio_integrity_free(struct bio *bio)
804 {
805         return;
806 }
807
808 static inline int bio_integrity_clone(struct bio *bio, struct bio *bio_src,
809                                       gfp_t gfp_mask)
810 {
811         return 0;
812 }
813
814 static inline void bio_integrity_advance(struct bio *bio,
815                                          unsigned int bytes_done)
816 {
817         return;
818 }
819
820 static inline void bio_integrity_trim(struct bio *bio, unsigned int offset,
821                                       unsigned int sectors)
822 {
823         return;
824 }
825
826 static inline void bio_integrity_init(void)
827 {
828         return;
829 }
830
831 static inline bool bio_integrity_flagged(struct bio *bio, enum bip_flags flag)
832 {
833         return false;
834 }
835
836 static inline void *bio_integrity_alloc(struct bio * bio, gfp_t gfp,
837                                                                 unsigned int nr)
838 {
839         return ERR_PTR(-EINVAL);
840 }
841
842 static inline int bio_integrity_add_page(struct bio *bio, struct page *page,
843                                         unsigned int len, unsigned int offset)
844 {
845         return 0;
846 }
847
848 #endif /* CONFIG_BLK_DEV_INTEGRITY */
849
850 #endif /* CONFIG_BLOCK */
851 #endif /* __LINUX_BIO_H */