/* * Copyright (C) 2003 Christophe Saout <christophe@saout.de> * Copyright (C) 2004 Clemens Fruhwirth <clemens@endorphin.org> * Copyright (C) 2006-2009 Red Hat, Inc. All rights reserved. * * This file is released under the GPL. */#include <linux/completion.h>#include <linux/err.h>#include <linux/module.h>#include <linux/init.h>#include <linux/kernel.h>#include <linux/bio.h>#include <linux/blkdev.h>#include <linux/mempool.h>#include <linux/slab.h>#include <linux/crypto.h>#include <linux/workqueue.h>#include <linux/backing-dev.h>#include <asm/atomic.h>#include <linux/scatterlist.h>#include <asm/page.h>#include <asm/unaligned.h>#include <linux/device-mapper.h>#define DM_MSG_PREFIX"crypt"#define MESG_STR(x) x, sizeof(x)/* * context holding the current state of a multi-part conversion */struct convert_context {struct completion restart;struct bio *bio_in;struct bio *bio_out;unsigned int offset_in;unsigned int offset_out;unsigned int idx_in;unsigned int idx_out;
sector_t sector;
atomic_t pending;};/* * per bio private data */struct dm_crypt_io {struct dm_target *target;struct bio *base_bio;struct work_struct work;struct convert_context ctx;
atomic_t pending;int error;
sector_t sector;struct dm_crypt_io *base_io;};struct dm_crypt_request {struct convert_context *ctx;struct scatterlist sg_in;struct scatterlist sg_out;};struct crypt_config;struct crypt_iv_operations {int(*ctr)(struct crypt_config *cc,struct dm_target *ti,