static int kcryptd_io_read(struct dm_crypt_io *io, gfp_t gfp)
 {
        struct crypt_config *cc = io->cc;
-       struct bio *base_bio = io->base_bio;
        struct bio *clone;
 
        /*
-        * The block layer might modify the bvec array, so always
-        * copy the required bvecs because we need the original
-        * one in order to decrypt the whole bio data *afterwards*.
+        * We need the original biovec array in order to decrypt
+        * the whole bio data *afterwards* -- thanks to immutable
+        * biovecs we don't need to worry about the block layer
+        * modifying the biovec array; so leverage bio_clone_fast().
         */
-       clone = bio_clone_bioset(base_bio, gfp, cc->bs);
+       clone = bio_clone_fast(io->base_bio, gfp, cc->bs);
        if (!clone)
                return 1;