These changes are the raw update to linux-4.4.6-rt14. Kernel sources
[kvmfornfv.git] / kernel / drivers / md / bcache / io.c
index fa028fa..86a0bb8 100644 (file)
 
 #include <linux/blkdev.h>
 
-static unsigned bch_bio_max_sectors(struct bio *bio)
-{
-       struct request_queue *q = bdev_get_queue(bio->bi_bdev);
-       struct bio_vec bv;
-       struct bvec_iter iter;
-       unsigned ret = 0, seg = 0;
-
-       if (bio->bi_rw & REQ_DISCARD)
-               return min(bio_sectors(bio), q->limits.max_discard_sectors);
-
-       bio_for_each_segment(bv, bio, iter) {
-               struct bvec_merge_data bvm = {
-                       .bi_bdev        = bio->bi_bdev,
-                       .bi_sector      = bio->bi_iter.bi_sector,
-                       .bi_size        = ret << 9,
-                       .bi_rw          = bio->bi_rw,
-               };
-
-               if (seg == min_t(unsigned, BIO_MAX_PAGES,
-                                queue_max_segments(q)))
-                       break;
-
-               if (q->merge_bvec_fn &&
-                   q->merge_bvec_fn(q, &bvm, &bv) < (int) bv.bv_len)
-                       break;
-
-               seg++;
-               ret += bv.bv_len >> 9;
-       }
-
-       ret = min(ret, queue_max_sectors(q));
-
-       WARN_ON(!ret);
-       ret = max_t(int, ret, bio_iovec(bio).bv_len >> 9);
-
-       return ret;
-}
-
-static void bch_bio_submit_split_done(struct closure *cl)
-{
-       struct bio_split_hook *s = container_of(cl, struct bio_split_hook, cl);
-
-       s->bio->bi_end_io = s->bi_end_io;
-       s->bio->bi_private = s->bi_private;
-       bio_endio_nodec(s->bio, 0);
-
-       closure_debug_destroy(&s->cl);
-       mempool_free(s, s->p->bio_split_hook);
-}
-
-static void bch_bio_submit_split_endio(struct bio *bio, int error)
-{
-       struct closure *cl = bio->bi_private;
-       struct bio_split_hook *s = container_of(cl, struct bio_split_hook, cl);
-
-       if (error)
-               clear_bit(BIO_UPTODATE, &s->bio->bi_flags);
-
-       bio_put(bio);
-       closure_put(cl);
-}
-
-void bch_generic_make_request(struct bio *bio, struct bio_split_pool *p)
-{
-       struct bio_split_hook *s;
-       struct bio *n;
-
-       if (!bio_has_data(bio) && !(bio->bi_rw & REQ_DISCARD))
-               goto submit;
-
-       if (bio_sectors(bio) <= bch_bio_max_sectors(bio))
-               goto submit;
-
-       s = mempool_alloc(p->bio_split_hook, GFP_NOIO);
-       closure_init(&s->cl, NULL);
-
-       s->bio          = bio;
-       s->p            = p;
-       s->bi_end_io    = bio->bi_end_io;
-       s->bi_private   = bio->bi_private;
-       bio_get(bio);
-
-       do {
-               n = bio_next_split(bio, bch_bio_max_sectors(bio),
-                                  GFP_NOIO, s->p->bio_split);
-
-               n->bi_end_io    = bch_bio_submit_split_endio;
-               n->bi_private   = &s->cl;
-
-               closure_get(&s->cl);
-               generic_make_request(n);
-       } while (n != bio);
-
-       continue_at(&s->cl, bch_bio_submit_split_done, NULL);
-submit:
-       generic_make_request(bio);
-}
-
 /* Bios with headers */
 
 void bch_bbio_free(struct bio *bio, struct cache_set *c)
@@ -138,7 +40,7 @@ void __bch_submit_bbio(struct bio *bio, struct cache_set *c)
        bio->bi_bdev            = PTR_CACHE(c, &b->key, 0)->bdev;
 
        b->submit_time_us = local_clock_us();
-       closure_bio_submit(bio, bio->bi_private, PTR_CACHE(c, &b->key, 0));
+       closure_bio_submit(bio, bio->bi_private);
 }
 
 void bch_submit_bbio(struct bio *bio, struct cache_set *c,