bio: allow individual slabs in the bio_set
[safe/jmp/linux-2.6] / fs / bio.c
1 /*
2  * Copyright (C) 2001 Jens Axboe <axboe@kernel.dk>
3  *
4  * This program is free software; you can redistribute it and/or modify
5  * it under the terms of the GNU General Public License version 2 as
6  * published by the Free Software Foundation.
7  *
8  * This program is distributed in the hope that it will be useful,
9  * but WITHOUT ANY WARRANTY; without even the implied warranty of
10  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
11  * GNU General Public License for more details.
12  *
13  * You should have received a copy of the GNU General Public Licens
14  * along with this program; if not, write to the Free Software
15  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-
16  *
17  */
18 #include <linux/mm.h>
19 #include <linux/swap.h>
20 #include <linux/bio.h>
21 #include <linux/blkdev.h>
22 #include <linux/slab.h>
23 #include <linux/init.h>
24 #include <linux/kernel.h>
25 #include <linux/module.h>
26 #include <linux/mempool.h>
27 #include <linux/workqueue.h>
28 #include <linux/blktrace_api.h>
29 #include <trace/block.h>
30 #include <scsi/sg.h>            /* for struct sg_iovec */
31
32 DEFINE_TRACE(block_split);
33
34 static mempool_t *bio_split_pool __read_mostly;
35
36 /*
37  * if you change this list, also change bvec_alloc or things will
38  * break badly! cannot be bigger than what you can fit into an
39  * unsigned short
40  */
41 #define BV(x) { .nr_vecs = x, .name = "biovec-"__stringify(x) }
42 struct biovec_slab bvec_slabs[BIOVEC_NR_POOLS] __read_mostly = {
43         BV(1), BV(4), BV(16), BV(64), BV(128), BV(BIO_MAX_PAGES),
44 };
45 #undef BV
46
47 /*
48  * fs_bio_set is the bio_set containing bio and iovec memory pools used by
49  * IO code that does not need private memory pools.
50  */
51 struct bio_set *fs_bio_set;
52
53 /*
54  * Our slab pool management
55  */
56 struct bio_slab {
57         struct kmem_cache *slab;
58         unsigned int slab_ref;
59         unsigned int slab_size;
60         char name[8];
61 };
62 static DEFINE_MUTEX(bio_slab_lock);
63 static struct bio_slab *bio_slabs;
64 static unsigned int bio_slab_nr, bio_slab_max;
65
66 static struct kmem_cache *bio_find_or_create_slab(unsigned int extra_size)
67 {
68         unsigned int sz = sizeof(struct bio) + extra_size;
69         struct kmem_cache *slab = NULL;
70         struct bio_slab *bslab;
71         unsigned int i, entry = -1;
72
73         mutex_lock(&bio_slab_lock);
74
75         i = 0;
76         while (i < bio_slab_nr) {
77                 struct bio_slab *bslab = &bio_slabs[i];
78
79                 if (!bslab->slab && entry == -1)
80                         entry = i;
81                 else if (bslab->slab_size == sz) {
82                         slab = bslab->slab;
83                         bslab->slab_ref++;
84                         break;
85                 }
86                 i++;
87         }
88
89         if (slab)
90                 goto out_unlock;
91
92         if (bio_slab_nr == bio_slab_max && entry == -1) {
93                 bio_slab_max <<= 1;
94                 bio_slabs = krealloc(bio_slabs,
95                                      bio_slab_max * sizeof(struct bio_slab),
96                                      GFP_KERNEL);
97                 if (!bio_slabs)
98                         goto out_unlock;
99         }
100         if (entry == -1)
101                 entry = bio_slab_nr++;
102
103         bslab = &bio_slabs[entry];
104
105         snprintf(bslab->name, sizeof(bslab->name), "bio-%d", entry);
106         slab = kmem_cache_create(bslab->name, sz, 0, SLAB_HWCACHE_ALIGN, NULL);
107         if (!slab)
108                 goto out_unlock;
109
110         printk("bio: create slab <%s> at %d\n", bslab->name, entry);
111         bslab->slab = slab;
112         bslab->slab_ref = 1;
113         bslab->slab_size = sz;
114 out_unlock:
115         mutex_unlock(&bio_slab_lock);
116         return slab;
117 }
118
119 static void bio_put_slab(struct bio_set *bs)
120 {
121         struct bio_slab *bslab = NULL;
122         unsigned int i;
123
124         mutex_lock(&bio_slab_lock);
125
126         for (i = 0; i < bio_slab_nr; i++) {
127                 if (bs->bio_slab == bio_slabs[i].slab) {
128                         bslab = &bio_slabs[i];
129                         break;
130                 }
131         }
132
133         if (WARN(!bslab, KERN_ERR "bio: unable to find slab!\n"))
134                 goto out;
135
136         WARN_ON(!bslab->slab_ref);
137
138         if (--bslab->slab_ref)
139                 goto out;
140
141         kmem_cache_destroy(bslab->slab);
142         bslab->slab = NULL;
143
144 out:
145         mutex_unlock(&bio_slab_lock);
146 }
147
148 unsigned int bvec_nr_vecs(unsigned short idx)
149 {
150         return bvec_slabs[idx].nr_vecs;
151 }
152
153 void bvec_free_bs(struct bio_set *bs, struct bio_vec *bv, unsigned int idx)
154 {
155         BIO_BUG_ON(idx >= BIOVEC_NR_POOLS);
156
157         if (idx == BIOVEC_MAX_IDX)
158                 mempool_free(bv, bs->bvec_pool);
159         else {
160                 struct biovec_slab *bvs = bvec_slabs + idx;
161
162                 kmem_cache_free(bvs->slab, bv);
163         }
164 }
165
166 struct bio_vec *bvec_alloc_bs(gfp_t gfp_mask, int nr, unsigned long *idx,
167                               struct bio_set *bs)
168 {
169         struct bio_vec *bvl;
170
171         /*
172          * If 'bs' is given, lookup the pool and do the mempool alloc.
173          * If not, this is a bio_kmalloc() allocation and just do a
174          * kzalloc() for the exact number of vecs right away.
175          */
176         if (!bs)
177                 bvl = kzalloc(nr * sizeof(struct bio_vec), gfp_mask);
178
179         /*
180          * see comment near bvec_array define!
181          */
182         switch (nr) {
183         case 1:
184                 *idx = 0;
185                 break;
186         case 2 ... 4:
187                 *idx = 1;
188                 break;
189         case 5 ... 16:
190                 *idx = 2;
191                 break;
192         case 17 ... 64:
193                 *idx = 3;
194                 break;
195         case 65 ... 128:
196                 *idx = 4;
197                 break;
198         case 129 ... BIO_MAX_PAGES:
199                 *idx = 5;
200                 break;
201         default:
202                 return NULL;
203         }
204
205         /*
206          * idx now points to the pool we want to allocate from. only the
207          * 1-vec entry pool is mempool backed.
208          */
209         if (*idx == BIOVEC_MAX_IDX) {
210 fallback:
211                 bvl = mempool_alloc(bs->bvec_pool, gfp_mask);
212         } else {
213                 struct biovec_slab *bvs = bvec_slabs + *idx;
214                 gfp_t __gfp_mask = gfp_mask & ~(__GFP_WAIT | __GFP_IO);
215
216                 /*
217                  * Make this allocation restricted and don't dump info on
218                  * allocation failures, since we'll fallback to the mempool
219                  * in case of failure.
220                  */
221                 __gfp_mask |= __GFP_NOMEMALLOC | __GFP_NORETRY | __GFP_NOWARN;
222
223                 /*
224                  * Try a slab allocation. If this fails and __GFP_WAIT
225                  * is set, retry with the 1-entry mempool
226                  */
227                 bvl = kmem_cache_alloc(bvs->slab, __gfp_mask);
228                 if (unlikely(!bvl && (gfp_mask & __GFP_WAIT))) {
229                         *idx = BIOVEC_MAX_IDX;
230                         goto fallback;
231                 }
232         }
233
234         if (bvl)
235                 memset(bvl, 0, bvec_nr_vecs(*idx) * sizeof(struct bio_vec));
236
237         return bvl;
238 }
239
240 void bio_free(struct bio *bio, struct bio_set *bs)
241 {
242         void *p;
243
244         if (bio->bi_io_vec)
245                 bvec_free_bs(bs, bio->bi_io_vec, BIO_POOL_IDX(bio));
246
247         if (bio_integrity(bio))
248                 bio_integrity_free(bio, bs);
249
250         /*
251          * If we have front padding, adjust the bio pointer before freeing
252          */
253         p = bio;
254         if (bs->front_pad)
255                 p -= bs->front_pad;
256
257         mempool_free(p, bs->bio_pool);
258 }
259
260 /*
261  * default destructor for a bio allocated with bio_alloc_bioset()
262  */
263 static void bio_fs_destructor(struct bio *bio)
264 {
265         bio_free(bio, fs_bio_set);
266 }
267
268 static void bio_kmalloc_destructor(struct bio *bio)
269 {
270         kfree(bio->bi_io_vec);
271         kfree(bio);
272 }
273
274 void bio_init(struct bio *bio)
275 {
276         memset(bio, 0, sizeof(*bio));
277         bio->bi_flags = 1 << BIO_UPTODATE;
278         bio->bi_comp_cpu = -1;
279         atomic_set(&bio->bi_cnt, 1);
280 }
281
282 /**
283  * bio_alloc_bioset - allocate a bio for I/O
284  * @gfp_mask:   the GFP_ mask given to the slab allocator
285  * @nr_iovecs:  number of iovecs to pre-allocate
286  * @bs:         the bio_set to allocate from. If %NULL, just use kmalloc
287  *
288  * Description:
289  *   bio_alloc_bioset will first try its own mempool to satisfy the allocation.
290  *   If %__GFP_WAIT is set then we will block on the internal pool waiting
291  *   for a &struct bio to become free. If a %NULL @bs is passed in, we will
292  *   fall back to just using @kmalloc to allocate the required memory.
293  *
294  *   Note that the caller must set ->bi_destructor on succesful return
295  *   of a bio, to do the appropriate freeing of the bio once the reference
296  *   count drops to zero.
297  **/
298 struct bio *bio_alloc_bioset(gfp_t gfp_mask, int nr_iovecs, struct bio_set *bs)
299 {
300         struct bio *bio = NULL;
301
302         if (bs) {
303                 void *p = mempool_alloc(bs->bio_pool, gfp_mask);
304
305                 if (p)
306                         bio = p + bs->front_pad;
307         } else
308                 bio = kmalloc(sizeof(*bio), gfp_mask);
309
310         if (likely(bio)) {
311                 struct bio_vec *bvl = NULL;
312
313                 bio_init(bio);
314                 if (likely(nr_iovecs)) {
315                         unsigned long uninitialized_var(idx);
316
317                         bvl = bvec_alloc_bs(gfp_mask, nr_iovecs, &idx, bs);
318                         if (unlikely(!bvl)) {
319                                 if (bs)
320                                         mempool_free(bio, bs->bio_pool);
321                                 else
322                                         kfree(bio);
323                                 bio = NULL;
324                                 goto out;
325                         }
326                         bio->bi_flags |= idx << BIO_POOL_OFFSET;
327                         bio->bi_max_vecs = bvec_nr_vecs(idx);
328                 }
329                 bio->bi_io_vec = bvl;
330         }
331 out:
332         return bio;
333 }
334
335 struct bio *bio_alloc(gfp_t gfp_mask, int nr_iovecs)
336 {
337         struct bio *bio = bio_alloc_bioset(gfp_mask, nr_iovecs, fs_bio_set);
338
339         if (bio)
340                 bio->bi_destructor = bio_fs_destructor;
341
342         return bio;
343 }
344
345 /*
346  * Like bio_alloc(), but doesn't use a mempool backing. This means that
347  * it CAN fail, but while bio_alloc() can only be used for allocations
348  * that have a short (finite) life span, bio_kmalloc() should be used
349  * for more permanent bio allocations (like allocating some bio's for
350  * initalization or setup purposes).
351  */
352 struct bio *bio_kmalloc(gfp_t gfp_mask, int nr_iovecs)
353 {
354         struct bio *bio = bio_alloc_bioset(gfp_mask, nr_iovecs, NULL);
355
356         if (bio)
357                 bio->bi_destructor = bio_kmalloc_destructor;
358
359         return bio;
360 }
361
362 void zero_fill_bio(struct bio *bio)
363 {
364         unsigned long flags;
365         struct bio_vec *bv;
366         int i;
367
368         bio_for_each_segment(bv, bio, i) {
369                 char *data = bvec_kmap_irq(bv, &flags);
370                 memset(data, 0, bv->bv_len);
371                 flush_dcache_page(bv->bv_page);
372                 bvec_kunmap_irq(data, &flags);
373         }
374 }
375 EXPORT_SYMBOL(zero_fill_bio);
376
377 /**
378  * bio_put - release a reference to a bio
379  * @bio:   bio to release reference to
380  *
381  * Description:
382  *   Put a reference to a &struct bio, either one you have gotten with
383  *   bio_alloc or bio_get. The last put of a bio will free it.
384  **/
385 void bio_put(struct bio *bio)
386 {
387         BIO_BUG_ON(!atomic_read(&bio->bi_cnt));
388
389         /*
390          * last put frees it
391          */
392         if (atomic_dec_and_test(&bio->bi_cnt)) {
393                 bio->bi_next = NULL;
394                 bio->bi_destructor(bio);
395         }
396 }
397
398 inline int bio_phys_segments(struct request_queue *q, struct bio *bio)
399 {
400         if (unlikely(!bio_flagged(bio, BIO_SEG_VALID)))
401                 blk_recount_segments(q, bio);
402
403         return bio->bi_phys_segments;
404 }
405
406 /**
407  *      __bio_clone     -       clone a bio
408  *      @bio: destination bio
409  *      @bio_src: bio to clone
410  *
411  *      Clone a &bio. Caller will own the returned bio, but not
412  *      the actual data it points to. Reference count of returned
413  *      bio will be one.
414  */
415 void __bio_clone(struct bio *bio, struct bio *bio_src)
416 {
417         memcpy(bio->bi_io_vec, bio_src->bi_io_vec,
418                 bio_src->bi_max_vecs * sizeof(struct bio_vec));
419
420         /*
421          * most users will be overriding ->bi_bdev with a new target,
422          * so we don't set nor calculate new physical/hw segment counts here
423          */
424         bio->bi_sector = bio_src->bi_sector;
425         bio->bi_bdev = bio_src->bi_bdev;
426         bio->bi_flags |= 1 << BIO_CLONED;
427         bio->bi_rw = bio_src->bi_rw;
428         bio->bi_vcnt = bio_src->bi_vcnt;
429         bio->bi_size = bio_src->bi_size;
430         bio->bi_idx = bio_src->bi_idx;
431 }
432
433 /**
434  *      bio_clone       -       clone a bio
435  *      @bio: bio to clone
436  *      @gfp_mask: allocation priority
437  *
438  *      Like __bio_clone, only also allocates the returned bio
439  */
440 struct bio *bio_clone(struct bio *bio, gfp_t gfp_mask)
441 {
442         struct bio *b = bio_alloc_bioset(gfp_mask, bio->bi_max_vecs, fs_bio_set);
443
444         if (!b)
445                 return NULL;
446
447         b->bi_destructor = bio_fs_destructor;
448         __bio_clone(b, bio);
449
450         if (bio_integrity(bio)) {
451                 int ret;
452
453                 ret = bio_integrity_clone(b, bio, fs_bio_set);
454
455                 if (ret < 0)
456                         return NULL;
457         }
458
459         return b;
460 }
461
462 /**
463  *      bio_get_nr_vecs         - return approx number of vecs
464  *      @bdev:  I/O target
465  *
466  *      Return the approximate number of pages we can send to this target.
467  *      There's no guarantee that you will be able to fit this number of pages
468  *      into a bio, it does not account for dynamic restrictions that vary
469  *      on offset.
470  */
471 int bio_get_nr_vecs(struct block_device *bdev)
472 {
473         struct request_queue *q = bdev_get_queue(bdev);
474         int nr_pages;
475
476         nr_pages = ((q->max_sectors << 9) + PAGE_SIZE - 1) >> PAGE_SHIFT;
477         if (nr_pages > q->max_phys_segments)
478                 nr_pages = q->max_phys_segments;
479         if (nr_pages > q->max_hw_segments)
480                 nr_pages = q->max_hw_segments;
481
482         return nr_pages;
483 }
484
485 static int __bio_add_page(struct request_queue *q, struct bio *bio, struct page
486                           *page, unsigned int len, unsigned int offset,
487                           unsigned short max_sectors)
488 {
489         int retried_segments = 0;
490         struct bio_vec *bvec;
491
492         /*
493          * cloned bio must not modify vec list
494          */
495         if (unlikely(bio_flagged(bio, BIO_CLONED)))
496                 return 0;
497
498         if (((bio->bi_size + len) >> 9) > max_sectors)
499                 return 0;
500
501         /*
502          * For filesystems with a blocksize smaller than the pagesize
503          * we will often be called with the same page as last time and
504          * a consecutive offset.  Optimize this special case.
505          */
506         if (bio->bi_vcnt > 0) {
507                 struct bio_vec *prev = &bio->bi_io_vec[bio->bi_vcnt - 1];
508
509                 if (page == prev->bv_page &&
510                     offset == prev->bv_offset + prev->bv_len) {
511                         prev->bv_len += len;
512
513                         if (q->merge_bvec_fn) {
514                                 struct bvec_merge_data bvm = {
515                                         .bi_bdev = bio->bi_bdev,
516                                         .bi_sector = bio->bi_sector,
517                                         .bi_size = bio->bi_size,
518                                         .bi_rw = bio->bi_rw,
519                                 };
520
521                                 if (q->merge_bvec_fn(q, &bvm, prev) < len) {
522                                         prev->bv_len -= len;
523                                         return 0;
524                                 }
525                         }
526
527                         goto done;
528                 }
529         }
530
531         if (bio->bi_vcnt >= bio->bi_max_vecs)
532                 return 0;
533
534         /*
535          * we might lose a segment or two here, but rather that than
536          * make this too complex.
537          */
538
539         while (bio->bi_phys_segments >= q->max_phys_segments
540                || bio->bi_phys_segments >= q->max_hw_segments) {
541
542                 if (retried_segments)
543                         return 0;
544
545                 retried_segments = 1;
546                 blk_recount_segments(q, bio);
547         }
548
549         /*
550          * setup the new entry, we might clear it again later if we
551          * cannot add the page
552          */
553         bvec = &bio->bi_io_vec[bio->bi_vcnt];
554         bvec->bv_page = page;
555         bvec->bv_len = len;
556         bvec->bv_offset = offset;
557
558         /*
559          * if queue has other restrictions (eg varying max sector size
560          * depending on offset), it can specify a merge_bvec_fn in the
561          * queue to get further control
562          */
563         if (q->merge_bvec_fn) {
564                 struct bvec_merge_data bvm = {
565                         .bi_bdev = bio->bi_bdev,
566                         .bi_sector = bio->bi_sector,
567                         .bi_size = bio->bi_size,
568                         .bi_rw = bio->bi_rw,
569                 };
570
571                 /*
572                  * merge_bvec_fn() returns number of bytes it can accept
573                  * at this offset
574                  */
575                 if (q->merge_bvec_fn(q, &bvm, bvec) < len) {
576                         bvec->bv_page = NULL;
577                         bvec->bv_len = 0;
578                         bvec->bv_offset = 0;
579                         return 0;
580                 }
581         }
582
583         /* If we may be able to merge these biovecs, force a recount */
584         if (bio->bi_vcnt && (BIOVEC_PHYS_MERGEABLE(bvec-1, bvec)))
585                 bio->bi_flags &= ~(1 << BIO_SEG_VALID);
586
587         bio->bi_vcnt++;
588         bio->bi_phys_segments++;
589  done:
590         bio->bi_size += len;
591         return len;
592 }
593
594 /**
595  *      bio_add_pc_page -       attempt to add page to bio
596  *      @q: the target queue
597  *      @bio: destination bio
598  *      @page: page to add
599  *      @len: vec entry length
600  *      @offset: vec entry offset
601  *
602  *      Attempt to add a page to the bio_vec maplist. This can fail for a
603  *      number of reasons, such as the bio being full or target block
604  *      device limitations. The target block device must allow bio's
605  *      smaller than PAGE_SIZE, so it is always possible to add a single
606  *      page to an empty bio. This should only be used by REQ_PC bios.
607  */
608 int bio_add_pc_page(struct request_queue *q, struct bio *bio, struct page *page,
609                     unsigned int len, unsigned int offset)
610 {
611         return __bio_add_page(q, bio, page, len, offset, q->max_hw_sectors);
612 }
613
614 /**
615  *      bio_add_page    -       attempt to add page to bio
616  *      @bio: destination bio
617  *      @page: page to add
618  *      @len: vec entry length
619  *      @offset: vec entry offset
620  *
621  *      Attempt to add a page to the bio_vec maplist. This can fail for a
622  *      number of reasons, such as the bio being full or target block
623  *      device limitations. The target block device must allow bio's
624  *      smaller than PAGE_SIZE, so it is always possible to add a single
625  *      page to an empty bio.
626  */
627 int bio_add_page(struct bio *bio, struct page *page, unsigned int len,
628                  unsigned int offset)
629 {
630         struct request_queue *q = bdev_get_queue(bio->bi_bdev);
631         return __bio_add_page(q, bio, page, len, offset, q->max_sectors);
632 }
633
634 struct bio_map_data {
635         struct bio_vec *iovecs;
636         struct sg_iovec *sgvecs;
637         int nr_sgvecs;
638         int is_our_pages;
639 };
640
641 static void bio_set_map_data(struct bio_map_data *bmd, struct bio *bio,
642                              struct sg_iovec *iov, int iov_count,
643                              int is_our_pages)
644 {
645         memcpy(bmd->iovecs, bio->bi_io_vec, sizeof(struct bio_vec) * bio->bi_vcnt);
646         memcpy(bmd->sgvecs, iov, sizeof(struct sg_iovec) * iov_count);
647         bmd->nr_sgvecs = iov_count;
648         bmd->is_our_pages = is_our_pages;
649         bio->bi_private = bmd;
650 }
651
652 static void bio_free_map_data(struct bio_map_data *bmd)
653 {
654         kfree(bmd->iovecs);
655         kfree(bmd->sgvecs);
656         kfree(bmd);
657 }
658
659 static struct bio_map_data *bio_alloc_map_data(int nr_segs, int iov_count,
660                                                gfp_t gfp_mask)
661 {
662         struct bio_map_data *bmd = kmalloc(sizeof(*bmd), gfp_mask);
663
664         if (!bmd)
665                 return NULL;
666
667         bmd->iovecs = kmalloc(sizeof(struct bio_vec) * nr_segs, gfp_mask);
668         if (!bmd->iovecs) {
669                 kfree(bmd);
670                 return NULL;
671         }
672
673         bmd->sgvecs = kmalloc(sizeof(struct sg_iovec) * iov_count, gfp_mask);
674         if (bmd->sgvecs)
675                 return bmd;
676
677         kfree(bmd->iovecs);
678         kfree(bmd);
679         return NULL;
680 }
681
682 static int __bio_copy_iov(struct bio *bio, struct bio_vec *iovecs,
683                           struct sg_iovec *iov, int iov_count, int uncopy,
684                           int do_free_page)
685 {
686         int ret = 0, i;
687         struct bio_vec *bvec;
688         int iov_idx = 0;
689         unsigned int iov_off = 0;
690         int read = bio_data_dir(bio) == READ;
691
692         __bio_for_each_segment(bvec, bio, i, 0) {
693                 char *bv_addr = page_address(bvec->bv_page);
694                 unsigned int bv_len = iovecs[i].bv_len;
695
696                 while (bv_len && iov_idx < iov_count) {
697                         unsigned int bytes;
698                         char *iov_addr;
699
700                         bytes = min_t(unsigned int,
701                                       iov[iov_idx].iov_len - iov_off, bv_len);
702                         iov_addr = iov[iov_idx].iov_base + iov_off;
703
704                         if (!ret) {
705                                 if (!read && !uncopy)
706                                         ret = copy_from_user(bv_addr, iov_addr,
707                                                              bytes);
708                                 if (read && uncopy)
709                                         ret = copy_to_user(iov_addr, bv_addr,
710                                                            bytes);
711
712                                 if (ret)
713                                         ret = -EFAULT;
714                         }
715
716                         bv_len -= bytes;
717                         bv_addr += bytes;
718                         iov_addr += bytes;
719                         iov_off += bytes;
720
721                         if (iov[iov_idx].iov_len == iov_off) {
722                                 iov_idx++;
723                                 iov_off = 0;
724                         }
725                 }
726
727                 if (do_free_page)
728                         __free_page(bvec->bv_page);
729         }
730
731         return ret;
732 }
733
734 /**
735  *      bio_uncopy_user -       finish previously mapped bio
736  *      @bio: bio being terminated
737  *
738  *      Free pages allocated from bio_copy_user() and write back data
739  *      to user space in case of a read.
740  */
741 int bio_uncopy_user(struct bio *bio)
742 {
743         struct bio_map_data *bmd = bio->bi_private;
744         int ret = 0;
745
746         if (!bio_flagged(bio, BIO_NULL_MAPPED))
747                 ret = __bio_copy_iov(bio, bmd->iovecs, bmd->sgvecs,
748                                      bmd->nr_sgvecs, 1, bmd->is_our_pages);
749         bio_free_map_data(bmd);
750         bio_put(bio);
751         return ret;
752 }
753
754 /**
755  *      bio_copy_user_iov       -       copy user data to bio
756  *      @q: destination block queue
757  *      @map_data: pointer to the rq_map_data holding pages (if necessary)
758  *      @iov:   the iovec.
759  *      @iov_count: number of elements in the iovec
760  *      @write_to_vm: bool indicating writing to pages or not
761  *      @gfp_mask: memory allocation flags
762  *
763  *      Prepares and returns a bio for indirect user io, bouncing data
764  *      to/from kernel pages as necessary. Must be paired with
765  *      call bio_uncopy_user() on io completion.
766  */
767 struct bio *bio_copy_user_iov(struct request_queue *q,
768                               struct rq_map_data *map_data,
769                               struct sg_iovec *iov, int iov_count,
770                               int write_to_vm, gfp_t gfp_mask)
771 {
772         struct bio_map_data *bmd;
773         struct bio_vec *bvec;
774         struct page *page;
775         struct bio *bio;
776         int i, ret;
777         int nr_pages = 0;
778         unsigned int len = 0;
779
780         for (i = 0; i < iov_count; i++) {
781                 unsigned long uaddr;
782                 unsigned long end;
783                 unsigned long start;
784
785                 uaddr = (unsigned long)iov[i].iov_base;
786                 end = (uaddr + iov[i].iov_len + PAGE_SIZE - 1) >> PAGE_SHIFT;
787                 start = uaddr >> PAGE_SHIFT;
788
789                 nr_pages += end - start;
790                 len += iov[i].iov_len;
791         }
792
793         bmd = bio_alloc_map_data(nr_pages, iov_count, gfp_mask);
794         if (!bmd)
795                 return ERR_PTR(-ENOMEM);
796
797         ret = -ENOMEM;
798         bio = bio_alloc(gfp_mask, nr_pages);
799         if (!bio)
800                 goto out_bmd;
801
802         bio->bi_rw |= (!write_to_vm << BIO_RW);
803
804         ret = 0;
805         i = 0;
806         while (len) {
807                 unsigned int bytes;
808
809                 if (map_data)
810                         bytes = 1U << (PAGE_SHIFT + map_data->page_order);
811                 else
812                         bytes = PAGE_SIZE;
813
814                 if (bytes > len)
815                         bytes = len;
816
817                 if (map_data) {
818                         if (i == map_data->nr_entries) {
819                                 ret = -ENOMEM;
820                                 break;
821                         }
822                         page = map_data->pages[i++];
823                 } else
824                         page = alloc_page(q->bounce_gfp | gfp_mask);
825                 if (!page) {
826                         ret = -ENOMEM;
827                         break;
828                 }
829
830                 if (bio_add_pc_page(q, bio, page, bytes, 0) < bytes)
831                         break;
832
833                 len -= bytes;
834         }
835
836         if (ret)
837                 goto cleanup;
838
839         /*
840          * success
841          */
842         if (!write_to_vm) {
843                 ret = __bio_copy_iov(bio, bio->bi_io_vec, iov, iov_count, 0, 0);
844                 if (ret)
845                         goto cleanup;
846         }
847
848         bio_set_map_data(bmd, bio, iov, iov_count, map_data ? 0 : 1);
849         return bio;
850 cleanup:
851         if (!map_data)
852                 bio_for_each_segment(bvec, bio, i)
853                         __free_page(bvec->bv_page);
854
855         bio_put(bio);
856 out_bmd:
857         bio_free_map_data(bmd);
858         return ERR_PTR(ret);
859 }
860
861 /**
862  *      bio_copy_user   -       copy user data to bio
863  *      @q: destination block queue
864  *      @map_data: pointer to the rq_map_data holding pages (if necessary)
865  *      @uaddr: start of user address
866  *      @len: length in bytes
867  *      @write_to_vm: bool indicating writing to pages or not
868  *      @gfp_mask: memory allocation flags
869  *
870  *      Prepares and returns a bio for indirect user io, bouncing data
871  *      to/from kernel pages as necessary. Must be paired with
872  *      call bio_uncopy_user() on io completion.
873  */
874 struct bio *bio_copy_user(struct request_queue *q, struct rq_map_data *map_data,
875                           unsigned long uaddr, unsigned int len,
876                           int write_to_vm, gfp_t gfp_mask)
877 {
878         struct sg_iovec iov;
879
880         iov.iov_base = (void __user *)uaddr;
881         iov.iov_len = len;
882
883         return bio_copy_user_iov(q, map_data, &iov, 1, write_to_vm, gfp_mask);
884 }
885
886 static struct bio *__bio_map_user_iov(struct request_queue *q,
887                                       struct block_device *bdev,
888                                       struct sg_iovec *iov, int iov_count,
889                                       int write_to_vm, gfp_t gfp_mask)
890 {
891         int i, j;
892         int nr_pages = 0;
893         struct page **pages;
894         struct bio *bio;
895         int cur_page = 0;
896         int ret, offset;
897
898         for (i = 0; i < iov_count; i++) {
899                 unsigned long uaddr = (unsigned long)iov[i].iov_base;
900                 unsigned long len = iov[i].iov_len;
901                 unsigned long end = (uaddr + len + PAGE_SIZE - 1) >> PAGE_SHIFT;
902                 unsigned long start = uaddr >> PAGE_SHIFT;
903
904                 nr_pages += end - start;
905                 /*
906                  * buffer must be aligned to at least hardsector size for now
907                  */
908                 if (uaddr & queue_dma_alignment(q))
909                         return ERR_PTR(-EINVAL);
910         }
911
912         if (!nr_pages)
913                 return ERR_PTR(-EINVAL);
914
915         bio = bio_alloc(gfp_mask, nr_pages);
916         if (!bio)
917                 return ERR_PTR(-ENOMEM);
918
919         ret = -ENOMEM;
920         pages = kcalloc(nr_pages, sizeof(struct page *), gfp_mask);
921         if (!pages)
922                 goto out;
923
924         for (i = 0; i < iov_count; i++) {
925                 unsigned long uaddr = (unsigned long)iov[i].iov_base;
926                 unsigned long len = iov[i].iov_len;
927                 unsigned long end = (uaddr + len + PAGE_SIZE - 1) >> PAGE_SHIFT;
928                 unsigned long start = uaddr >> PAGE_SHIFT;
929                 const int local_nr_pages = end - start;
930                 const int page_limit = cur_page + local_nr_pages;
931                 
932                 ret = get_user_pages_fast(uaddr, local_nr_pages,
933                                 write_to_vm, &pages[cur_page]);
934                 if (ret < local_nr_pages) {
935                         ret = -EFAULT;
936                         goto out_unmap;
937                 }
938
939                 offset = uaddr & ~PAGE_MASK;
940                 for (j = cur_page; j < page_limit; j++) {
941                         unsigned int bytes = PAGE_SIZE - offset;
942
943                         if (len <= 0)
944                                 break;
945                         
946                         if (bytes > len)
947                                 bytes = len;
948
949                         /*
950                          * sorry...
951                          */
952                         if (bio_add_pc_page(q, bio, pages[j], bytes, offset) <
953                                             bytes)
954                                 break;
955
956                         len -= bytes;
957                         offset = 0;
958                 }
959
960                 cur_page = j;
961                 /*
962                  * release the pages we didn't map into the bio, if any
963                  */
964                 while (j < page_limit)
965                         page_cache_release(pages[j++]);
966         }
967
968         kfree(pages);
969
970         /*
971          * set data direction, and check if mapped pages need bouncing
972          */
973         if (!write_to_vm)
974                 bio->bi_rw |= (1 << BIO_RW);
975
976         bio->bi_bdev = bdev;
977         bio->bi_flags |= (1 << BIO_USER_MAPPED);
978         return bio;
979
980  out_unmap:
981         for (i = 0; i < nr_pages; i++) {
982                 if(!pages[i])
983                         break;
984                 page_cache_release(pages[i]);
985         }
986  out:
987         kfree(pages);
988         bio_put(bio);
989         return ERR_PTR(ret);
990 }
991
992 /**
993  *      bio_map_user    -       map user address into bio
994  *      @q: the struct request_queue for the bio
995  *      @bdev: destination block device
996  *      @uaddr: start of user address
997  *      @len: length in bytes
998  *      @write_to_vm: bool indicating writing to pages or not
999  *      @gfp_mask: memory allocation flags
1000  *
1001  *      Map the user space address into a bio suitable for io to a block
1002  *      device. Returns an error pointer in case of error.
1003  */
1004 struct bio *bio_map_user(struct request_queue *q, struct block_device *bdev,
1005                          unsigned long uaddr, unsigned int len, int write_to_vm,
1006                          gfp_t gfp_mask)
1007 {
1008         struct sg_iovec iov;
1009
1010         iov.iov_base = (void __user *)uaddr;
1011         iov.iov_len = len;
1012
1013         return bio_map_user_iov(q, bdev, &iov, 1, write_to_vm, gfp_mask);
1014 }
1015
1016 /**
1017  *      bio_map_user_iov - map user sg_iovec table into bio
1018  *      @q: the struct request_queue for the bio
1019  *      @bdev: destination block device
1020  *      @iov:   the iovec.
1021  *      @iov_count: number of elements in the iovec
1022  *      @write_to_vm: bool indicating writing to pages or not
1023  *      @gfp_mask: memory allocation flags
1024  *
1025  *      Map the user space address into a bio suitable for io to a block
1026  *      device. Returns an error pointer in case of error.
1027  */
1028 struct bio *bio_map_user_iov(struct request_queue *q, struct block_device *bdev,
1029                              struct sg_iovec *iov, int iov_count,
1030                              int write_to_vm, gfp_t gfp_mask)
1031 {
1032         struct bio *bio;
1033
1034         bio = __bio_map_user_iov(q, bdev, iov, iov_count, write_to_vm,
1035                                  gfp_mask);
1036         if (IS_ERR(bio))
1037                 return bio;
1038
1039         /*
1040          * subtle -- if __bio_map_user() ended up bouncing a bio,
1041          * it would normally disappear when its bi_end_io is run.
1042          * however, we need it for the unmap, so grab an extra
1043          * reference to it
1044          */
1045         bio_get(bio);
1046
1047         return bio;
1048 }
1049
1050 static void __bio_unmap_user(struct bio *bio)
1051 {
1052         struct bio_vec *bvec;
1053         int i;
1054
1055         /*
1056          * make sure we dirty pages we wrote to
1057          */
1058         __bio_for_each_segment(bvec, bio, i, 0) {
1059                 if (bio_data_dir(bio) == READ)
1060                         set_page_dirty_lock(bvec->bv_page);
1061
1062                 page_cache_release(bvec->bv_page);
1063         }
1064
1065         bio_put(bio);
1066 }
1067
1068 /**
1069  *      bio_unmap_user  -       unmap a bio
1070  *      @bio:           the bio being unmapped
1071  *
1072  *      Unmap a bio previously mapped by bio_map_user(). Must be called with
1073  *      a process context.
1074  *
1075  *      bio_unmap_user() may sleep.
1076  */
1077 void bio_unmap_user(struct bio *bio)
1078 {
1079         __bio_unmap_user(bio);
1080         bio_put(bio);
1081 }
1082
1083 static void bio_map_kern_endio(struct bio *bio, int err)
1084 {
1085         bio_put(bio);
1086 }
1087
1088
1089 static struct bio *__bio_map_kern(struct request_queue *q, void *data,
1090                                   unsigned int len, gfp_t gfp_mask)
1091 {
1092         unsigned long kaddr = (unsigned long)data;
1093         unsigned long end = (kaddr + len + PAGE_SIZE - 1) >> PAGE_SHIFT;
1094         unsigned long start = kaddr >> PAGE_SHIFT;
1095         const int nr_pages = end - start;
1096         int offset, i;
1097         struct bio *bio;
1098
1099         bio = bio_alloc(gfp_mask, nr_pages);
1100         if (!bio)
1101                 return ERR_PTR(-ENOMEM);
1102
1103         offset = offset_in_page(kaddr);
1104         for (i = 0; i < nr_pages; i++) {
1105                 unsigned int bytes = PAGE_SIZE - offset;
1106
1107                 if (len <= 0)
1108                         break;
1109
1110                 if (bytes > len)
1111                         bytes = len;
1112
1113                 if (bio_add_pc_page(q, bio, virt_to_page(data), bytes,
1114                                     offset) < bytes)
1115                         break;
1116
1117                 data += bytes;
1118                 len -= bytes;
1119                 offset = 0;
1120         }
1121
1122         bio->bi_end_io = bio_map_kern_endio;
1123         return bio;
1124 }
1125
1126 /**
1127  *      bio_map_kern    -       map kernel address into bio
1128  *      @q: the struct request_queue for the bio
1129  *      @data: pointer to buffer to map
1130  *      @len: length in bytes
1131  *      @gfp_mask: allocation flags for bio allocation
1132  *
1133  *      Map the kernel address into a bio suitable for io to a block
1134  *      device. Returns an error pointer in case of error.
1135  */
1136 struct bio *bio_map_kern(struct request_queue *q, void *data, unsigned int len,
1137                          gfp_t gfp_mask)
1138 {
1139         struct bio *bio;
1140
1141         bio = __bio_map_kern(q, data, len, gfp_mask);
1142         if (IS_ERR(bio))
1143                 return bio;
1144
1145         if (bio->bi_size == len)
1146                 return bio;
1147
1148         /*
1149          * Don't support partial mappings.
1150          */
1151         bio_put(bio);
1152         return ERR_PTR(-EINVAL);
1153 }
1154
1155 static void bio_copy_kern_endio(struct bio *bio, int err)
1156 {
1157         struct bio_vec *bvec;
1158         const int read = bio_data_dir(bio) == READ;
1159         struct bio_map_data *bmd = bio->bi_private;
1160         int i;
1161         char *p = bmd->sgvecs[0].iov_base;
1162
1163         __bio_for_each_segment(bvec, bio, i, 0) {
1164                 char *addr = page_address(bvec->bv_page);
1165                 int len = bmd->iovecs[i].bv_len;
1166
1167                 if (read && !err)
1168                         memcpy(p, addr, len);
1169
1170                 __free_page(bvec->bv_page);
1171                 p += len;
1172         }
1173
1174         bio_free_map_data(bmd);
1175         bio_put(bio);
1176 }
1177
1178 /**
1179  *      bio_copy_kern   -       copy kernel address into bio
1180  *      @q: the struct request_queue for the bio
1181  *      @data: pointer to buffer to copy
1182  *      @len: length in bytes
1183  *      @gfp_mask: allocation flags for bio and page allocation
1184  *      @reading: data direction is READ
1185  *
1186  *      copy the kernel address into a bio suitable for io to a block
1187  *      device. Returns an error pointer in case of error.
1188  */
1189 struct bio *bio_copy_kern(struct request_queue *q, void *data, unsigned int len,
1190                           gfp_t gfp_mask, int reading)
1191 {
1192         struct bio *bio;
1193         struct bio_vec *bvec;
1194         int i;
1195
1196         bio = bio_copy_user(q, NULL, (unsigned long)data, len, 1, gfp_mask);
1197         if (IS_ERR(bio))
1198                 return bio;
1199
1200         if (!reading) {
1201                 void *p = data;
1202
1203                 bio_for_each_segment(bvec, bio, i) {
1204                         char *addr = page_address(bvec->bv_page);
1205
1206                         memcpy(addr, p, bvec->bv_len);
1207                         p += bvec->bv_len;
1208                 }
1209         }
1210
1211         bio->bi_end_io = bio_copy_kern_endio;
1212
1213         return bio;
1214 }
1215
1216 /*
1217  * bio_set_pages_dirty() and bio_check_pages_dirty() are support functions
1218  * for performing direct-IO in BIOs.
1219  *
1220  * The problem is that we cannot run set_page_dirty() from interrupt context
1221  * because the required locks are not interrupt-safe.  So what we can do is to
1222  * mark the pages dirty _before_ performing IO.  And in interrupt context,
1223  * check that the pages are still dirty.   If so, fine.  If not, redirty them
1224  * in process context.
1225  *
1226  * We special-case compound pages here: normally this means reads into hugetlb
1227  * pages.  The logic in here doesn't really work right for compound pages
1228  * because the VM does not uniformly chase down the head page in all cases.
1229  * But dirtiness of compound pages is pretty meaningless anyway: the VM doesn't
1230  * handle them at all.  So we skip compound pages here at an early stage.
1231  *
1232  * Note that this code is very hard to test under normal circumstances because
1233  * direct-io pins the pages with get_user_pages().  This makes
1234  * is_page_cache_freeable return false, and the VM will not clean the pages.
1235  * But other code (eg, pdflush) could clean the pages if they are mapped
1236  * pagecache.
1237  *
1238  * Simply disabling the call to bio_set_pages_dirty() is a good way to test the
1239  * deferred bio dirtying paths.
1240  */
1241
1242 /*
1243  * bio_set_pages_dirty() will mark all the bio's pages as dirty.
1244  */
1245 void bio_set_pages_dirty(struct bio *bio)
1246 {
1247         struct bio_vec *bvec = bio->bi_io_vec;
1248         int i;
1249
1250         for (i = 0; i < bio->bi_vcnt; i++) {
1251                 struct page *page = bvec[i].bv_page;
1252
1253                 if (page && !PageCompound(page))
1254                         set_page_dirty_lock(page);
1255         }
1256 }
1257
1258 static void bio_release_pages(struct bio *bio)
1259 {
1260         struct bio_vec *bvec = bio->bi_io_vec;
1261         int i;
1262
1263         for (i = 0; i < bio->bi_vcnt; i++) {
1264                 struct page *page = bvec[i].bv_page;
1265
1266                 if (page)
1267                         put_page(page);
1268         }
1269 }
1270
1271 /*
1272  * bio_check_pages_dirty() will check that all the BIO's pages are still dirty.
1273  * If they are, then fine.  If, however, some pages are clean then they must
1274  * have been written out during the direct-IO read.  So we take another ref on
1275  * the BIO and the offending pages and re-dirty the pages in process context.
1276  *
1277  * It is expected that bio_check_pages_dirty() will wholly own the BIO from
1278  * here on.  It will run one page_cache_release() against each page and will
1279  * run one bio_put() against the BIO.
1280  */
1281
1282 static void bio_dirty_fn(struct work_struct *work);
1283
1284 static DECLARE_WORK(bio_dirty_work, bio_dirty_fn);
1285 static DEFINE_SPINLOCK(bio_dirty_lock);
1286 static struct bio *bio_dirty_list;
1287
1288 /*
1289  * This runs in process context
1290  */
1291 static void bio_dirty_fn(struct work_struct *work)
1292 {
1293         unsigned long flags;
1294         struct bio *bio;
1295
1296         spin_lock_irqsave(&bio_dirty_lock, flags);
1297         bio = bio_dirty_list;
1298         bio_dirty_list = NULL;
1299         spin_unlock_irqrestore(&bio_dirty_lock, flags);
1300
1301         while (bio) {
1302                 struct bio *next = bio->bi_private;
1303
1304                 bio_set_pages_dirty(bio);
1305                 bio_release_pages(bio);
1306                 bio_put(bio);
1307                 bio = next;
1308         }
1309 }
1310
1311 void bio_check_pages_dirty(struct bio *bio)
1312 {
1313         struct bio_vec *bvec = bio->bi_io_vec;
1314         int nr_clean_pages = 0;
1315         int i;
1316
1317         for (i = 0; i < bio->bi_vcnt; i++) {
1318                 struct page *page = bvec[i].bv_page;
1319
1320                 if (PageDirty(page) || PageCompound(page)) {
1321                         page_cache_release(page);
1322                         bvec[i].bv_page = NULL;
1323                 } else {
1324                         nr_clean_pages++;
1325                 }
1326         }
1327
1328         if (nr_clean_pages) {
1329                 unsigned long flags;
1330
1331                 spin_lock_irqsave(&bio_dirty_lock, flags);
1332                 bio->bi_private = bio_dirty_list;
1333                 bio_dirty_list = bio;
1334                 spin_unlock_irqrestore(&bio_dirty_lock, flags);
1335                 schedule_work(&bio_dirty_work);
1336         } else {
1337                 bio_put(bio);
1338         }
1339 }
1340
1341 /**
1342  * bio_endio - end I/O on a bio
1343  * @bio:        bio
1344  * @error:      error, if any
1345  *
1346  * Description:
1347  *   bio_endio() will end I/O on the whole bio. bio_endio() is the
1348  *   preferred way to end I/O on a bio, it takes care of clearing
1349  *   BIO_UPTODATE on error. @error is 0 on success, and and one of the
1350  *   established -Exxxx (-EIO, for instance) error values in case
1351  *   something went wrong. Noone should call bi_end_io() directly on a
1352  *   bio unless they own it and thus know that it has an end_io
1353  *   function.
1354  **/
1355 void bio_endio(struct bio *bio, int error)
1356 {
1357         if (error)
1358                 clear_bit(BIO_UPTODATE, &bio->bi_flags);
1359         else if (!test_bit(BIO_UPTODATE, &bio->bi_flags))
1360                 error = -EIO;
1361
1362         if (bio->bi_end_io)
1363                 bio->bi_end_io(bio, error);
1364 }
1365
1366 void bio_pair_release(struct bio_pair *bp)
1367 {
1368         if (atomic_dec_and_test(&bp->cnt)) {
1369                 struct bio *master = bp->bio1.bi_private;
1370
1371                 bio_endio(master, bp->error);
1372                 mempool_free(bp, bp->bio2.bi_private);
1373         }
1374 }
1375
1376 static void bio_pair_end_1(struct bio *bi, int err)
1377 {
1378         struct bio_pair *bp = container_of(bi, struct bio_pair, bio1);
1379
1380         if (err)
1381                 bp->error = err;
1382
1383         bio_pair_release(bp);
1384 }
1385
1386 static void bio_pair_end_2(struct bio *bi, int err)
1387 {
1388         struct bio_pair *bp = container_of(bi, struct bio_pair, bio2);
1389
1390         if (err)
1391                 bp->error = err;
1392
1393         bio_pair_release(bp);
1394 }
1395
1396 /*
1397  * split a bio - only worry about a bio with a single page
1398  * in it's iovec
1399  */
1400 struct bio_pair *bio_split(struct bio *bi, int first_sectors)
1401 {
1402         struct bio_pair *bp = mempool_alloc(bio_split_pool, GFP_NOIO);
1403
1404         if (!bp)
1405                 return bp;
1406
1407         trace_block_split(bdev_get_queue(bi->bi_bdev), bi,
1408                                 bi->bi_sector + first_sectors);
1409
1410         BUG_ON(bi->bi_vcnt != 1);
1411         BUG_ON(bi->bi_idx != 0);
1412         atomic_set(&bp->cnt, 3);
1413         bp->error = 0;
1414         bp->bio1 = *bi;
1415         bp->bio2 = *bi;
1416         bp->bio2.bi_sector += first_sectors;
1417         bp->bio2.bi_size -= first_sectors << 9;
1418         bp->bio1.bi_size = first_sectors << 9;
1419
1420         bp->bv1 = bi->bi_io_vec[0];
1421         bp->bv2 = bi->bi_io_vec[0];
1422         bp->bv2.bv_offset += first_sectors << 9;
1423         bp->bv2.bv_len -= first_sectors << 9;
1424         bp->bv1.bv_len = first_sectors << 9;
1425
1426         bp->bio1.bi_io_vec = &bp->bv1;
1427         bp->bio2.bi_io_vec = &bp->bv2;
1428
1429         bp->bio1.bi_max_vecs = 1;
1430         bp->bio2.bi_max_vecs = 1;
1431
1432         bp->bio1.bi_end_io = bio_pair_end_1;
1433         bp->bio2.bi_end_io = bio_pair_end_2;
1434
1435         bp->bio1.bi_private = bi;
1436         bp->bio2.bi_private = bio_split_pool;
1437
1438         if (bio_integrity(bi))
1439                 bio_integrity_split(bi, bp, first_sectors);
1440
1441         return bp;
1442 }
1443
1444 /**
1445  *      bio_sector_offset - Find hardware sector offset in bio
1446  *      @bio:           bio to inspect
1447  *      @index:         bio_vec index
1448  *      @offset:        offset in bv_page
1449  *
1450  *      Return the number of hardware sectors between beginning of bio
1451  *      and an end point indicated by a bio_vec index and an offset
1452  *      within that vector's page.
1453  */
1454 sector_t bio_sector_offset(struct bio *bio, unsigned short index,
1455                            unsigned int offset)
1456 {
1457         unsigned int sector_sz = queue_hardsect_size(bio->bi_bdev->bd_disk->queue);
1458         struct bio_vec *bv;
1459         sector_t sectors;
1460         int i;
1461
1462         sectors = 0;
1463
1464         if (index >= bio->bi_idx)
1465                 index = bio->bi_vcnt - 1;
1466
1467         __bio_for_each_segment(bv, bio, i, 0) {
1468                 if (i == index) {
1469                         if (offset > bv->bv_offset)
1470                                 sectors += (offset - bv->bv_offset) / sector_sz;
1471                         break;
1472                 }
1473
1474                 sectors += bv->bv_len / sector_sz;
1475         }
1476
1477         return sectors;
1478 }
1479 EXPORT_SYMBOL(bio_sector_offset);
1480
1481 /*
1482  * create memory pools for biovec's in a bio_set.
1483  * use the global biovec slabs created for general use.
1484  */
1485 static int biovec_create_pools(struct bio_set *bs, int pool_entries)
1486 {
1487         struct biovec_slab *bp = bvec_slabs + BIOVEC_MAX_IDX;
1488
1489         bs->bvec_pool = mempool_create_slab_pool(pool_entries, bp->slab);
1490         if (!bs->bvec_pool)
1491                 return -ENOMEM;
1492
1493         return 0;
1494 }
1495
1496 static void biovec_free_pools(struct bio_set *bs)
1497 {
1498         mempool_destroy(bs->bvec_pool);
1499 }
1500
1501 void bioset_free(struct bio_set *bs)
1502 {
1503         if (bs->bio_pool)
1504                 mempool_destroy(bs->bio_pool);
1505
1506         bioset_integrity_free(bs);
1507         biovec_free_pools(bs);
1508         bio_put_slab(bs);
1509
1510         kfree(bs);
1511 }
1512
1513 /**
1514  * bioset_create  - Create a bio_set
1515  * @pool_size:  Number of bio and bio_vecs to cache in the mempool
1516  * @front_pad:  Number of bytes to allocate in front of the returned bio
1517  *
1518  * Description:
1519  *    Set up a bio_set to be used with @bio_alloc_bioset. Allows the caller
1520  *    to ask for a number of bytes to be allocated in front of the bio.
1521  *    Front pad allocation is useful for embedding the bio inside
1522  *    another structure, to avoid allocating extra data to go with the bio.
1523  *    Note that the bio must be embedded at the END of that structure always,
1524  *    or things will break badly.
1525  */
1526 struct bio_set *bioset_create(unsigned int pool_size, unsigned int front_pad)
1527 {
1528         struct bio_set *bs;
1529
1530         bs = kzalloc(sizeof(*bs), GFP_KERNEL);
1531         if (!bs)
1532                 return NULL;
1533
1534         bs->front_pad = front_pad;
1535
1536         bs->bio_slab = bio_find_or_create_slab(front_pad);
1537         if (!bs->bio_slab) {
1538                 kfree(bs);
1539                 return NULL;
1540         }
1541
1542         bs->bio_pool = mempool_create_slab_pool(pool_size, bs->bio_slab);
1543         if (!bs->bio_pool)
1544                 goto bad;
1545
1546         if (bioset_integrity_create(bs, pool_size))
1547                 goto bad;
1548
1549         if (!biovec_create_pools(bs, pool_size))
1550                 return bs;
1551
1552 bad:
1553         bioset_free(bs);
1554         return NULL;
1555 }
1556
1557 static void __init biovec_init_slabs(void)
1558 {
1559         int i;
1560
1561         for (i = 0; i < BIOVEC_NR_POOLS; i++) {
1562                 int size;
1563                 struct biovec_slab *bvs = bvec_slabs + i;
1564
1565                 size = bvs->nr_vecs * sizeof(struct bio_vec);
1566                 bvs->slab = kmem_cache_create(bvs->name, size, 0,
1567                                 SLAB_HWCACHE_ALIGN|SLAB_PANIC, NULL);
1568         }
1569 }
1570
1571 static int __init init_bio(void)
1572 {
1573         bio_slab_max = 2;
1574         bio_slab_nr = 0;
1575         bio_slabs = kzalloc(bio_slab_max * sizeof(struct bio_slab), GFP_KERNEL);
1576         if (!bio_slabs)
1577                 panic("bio: can't allocate bios\n");
1578
1579         bio_integrity_init_slab();
1580         biovec_init_slabs();
1581
1582         fs_bio_set = bioset_create(BIO_POOL_SIZE, 0);
1583         if (!fs_bio_set)
1584                 panic("bio: can't allocate bios\n");
1585
1586         bio_split_pool = mempool_create_kmalloc_pool(BIO_SPLIT_ENTRIES,
1587                                                      sizeof(struct bio_pair));
1588         if (!bio_split_pool)
1589                 panic("bio: can't create split pool\n");
1590
1591         return 0;
1592 }
1593
1594 subsys_initcall(init_bio);
1595
1596 EXPORT_SYMBOL(bio_alloc);
1597 EXPORT_SYMBOL(bio_kmalloc);
1598 EXPORT_SYMBOL(bio_put);
1599 EXPORT_SYMBOL(bio_free);
1600 EXPORT_SYMBOL(bio_endio);
1601 EXPORT_SYMBOL(bio_init);
1602 EXPORT_SYMBOL(__bio_clone);
1603 EXPORT_SYMBOL(bio_clone);
1604 EXPORT_SYMBOL(bio_phys_segments);
1605 EXPORT_SYMBOL(bio_add_page);
1606 EXPORT_SYMBOL(bio_add_pc_page);
1607 EXPORT_SYMBOL(bio_get_nr_vecs);
1608 EXPORT_SYMBOL(bio_map_user);
1609 EXPORT_SYMBOL(bio_unmap_user);
1610 EXPORT_SYMBOL(bio_map_kern);
1611 EXPORT_SYMBOL(bio_copy_kern);
1612 EXPORT_SYMBOL(bio_pair_release);
1613 EXPORT_SYMBOL(bio_split);
1614 EXPORT_SYMBOL(bio_copy_user);
1615 EXPORT_SYMBOL(bio_uncopy_user);
1616 EXPORT_SYMBOL(bioset_create);
1617 EXPORT_SYMBOL(bioset_free);
1618 EXPORT_SYMBOL(bio_alloc_bioset);