crypt_dec_pending(io);
 }
 
+#define CRYPT_MAP_READ_GFP GFP_NOWAIT
+
 static int kcryptd_io_read(struct dm_crypt_io *io, gfp_t gfp)
 {
        struct crypt_config *cc = io->cc;
                return 1;
        }
 
-       submit_bio_noacct(clone);
+       dm_submit_bio_remap(io->base_bio, clone, (gfp != CRYPT_MAP_READ_GFP));
        return 0;
 }
 
 {
        struct bio *clone = io->ctx.bio_out;
 
-       submit_bio_noacct(clone);
+       dm_submit_bio_remap(io->base_bio, clone, true);
 }
 
 #define crypt_io_from_node(node) rb_entry((node), struct dm_crypt_io, rb_node)
 
        if ((likely(!async) && test_bit(DM_CRYPT_NO_OFFLOAD, &cc->flags)) ||
            test_bit(DM_CRYPT_NO_WRITE_WORKQUEUE, &cc->flags)) {
-               submit_bio_noacct(clone);
+               dm_submit_bio_remap(io->base_bio, clone, true);
                return;
        }
 
 
        ti->num_flush_bios = 1;
        ti->limit_swap_bios = true;
+       ti->accounts_remapped_io = true;
 
        dm_audit_log_ctr(DM_MSG_PREFIX, ti, 1);
        return 0;
                io->ctx.r.req = (struct skcipher_request *)(io + 1);
 
        if (bio_data_dir(io->base_bio) == READ) {
-               if (kcryptd_io_read(io, GFP_NOWAIT))
+               if (kcryptd_io_read(io, CRYPT_MAP_READ_GFP))
                        kcryptd_queue_read(io);
        } else
                kcryptd_queue_crypt(io);
 
 static struct target_type crypt_target = {
        .name   = "crypt",
-       .version = {1, 23, 0},
+       .version = {1, 24, 0},
        .module = THIS_MODULE,
        .ctr    = crypt_ctr,
        .dtr    = crypt_dtr,