dm crypt: leverage immutable biovecs when decrypting on read
authorMike Snitzer <snitzer@redhat.com>
Thu, 9 Apr 2015 20:53:24 +0000 (16:53 -0400)
committerMike Snitzer <snitzer@redhat.com>
Wed, 15 Apr 2015 16:10:25 +0000 (12:10 -0400)
Commit 003b5c571 ("block: Convert drivers to immutable biovecs")
stopped short of changing dm-crypt to leverage the fact that the biovec
array of a bio will no longer be modified.

Switch to using bio_clone_fast() when cloning bios for decryption after
read.

Signed-off-by: Mike Snitzer <snitzer@redhat.com>
drivers/md/dm-crypt.c

index ea09d5464a9f8dc176c75a396ec63f627f106857..aa1238facbebd891202c08eb29b05a34413723ae 100644 (file)
@@ -1124,15 +1124,15 @@ static void clone_init(struct dm_crypt_io *io, struct bio *clone)
 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;