Skip to content

Commit

Permalink
dm crypt: move convert_context inside dm_crypt_io
Browse files Browse the repository at this point in the history
Move convert_context inside dm_crypt_io.

Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
Signed-off-by: Milan Broz <mbroz@redhat.com>
Signed-off-by: Alasdair G Kergon <agk@redhat.com>
  • Loading branch information
Milan Broz authored and Alasdair G Kergon committed Feb 8, 2008
1 parent 009cd09 commit 5301703
Showing 1 changed file with 21 additions and 20 deletions.
41 changes: 21 additions & 20 deletions drivers/md/dm-crypt.c
Original file line number Diff line number Diff line change
Expand Up @@ -27,17 +27,6 @@
#define DM_MSG_PREFIX "crypt"
#define MESG_STR(x) x, sizeof(x)

/*
* per bio private data
*/
struct dm_crypt_io {
struct dm_target *target;
struct bio *base_bio;
struct work_struct work;
atomic_t pending;
int error;
};

/*
* context holding the current state of a multi-part conversion
*/
Expand All @@ -52,6 +41,20 @@ struct convert_context {
int write;
};

/*
* 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;
};

struct crypt_config;

struct crypt_iv_operations {
Expand Down Expand Up @@ -579,13 +582,12 @@ static void process_write(struct dm_crypt_io *io)
struct crypt_config *cc = io->target->private;
struct bio *base_bio = io->base_bio;
struct bio *clone;
struct convert_context ctx;
unsigned remaining = base_bio->bi_size;
sector_t sector = base_bio->bi_sector - io->target->begin;

atomic_inc(&io->pending);

crypt_convert_init(cc, &ctx, NULL, base_bio, sector, 1);
crypt_convert_init(cc, &io->ctx, NULL, base_bio, sector, 1);

/*
* The allocated buffers can be smaller than the whole bio,
Expand All @@ -598,18 +600,18 @@ static void process_write(struct dm_crypt_io *io)
return;
}

ctx.bio_out = clone;
ctx.idx_out = 0;
io->ctx.bio_out = clone;
io->ctx.idx_out = 0;

if (unlikely(crypt_convert(cc, &ctx) < 0)) {
if (unlikely(crypt_convert(cc, &io->ctx) < 0)) {
crypt_free_buffer_pages(cc, clone);
bio_put(clone);
crypt_dec_pending(io, -EIO);
return;
}

/* crypt_convert should have filled the clone bio */
BUG_ON(ctx.idx_out < clone->bi_vcnt);
BUG_ON(io->ctx.idx_out < clone->bi_vcnt);

clone->bi_sector = cc->start + sector;
remaining -= clone->bi_size;
Expand All @@ -634,12 +636,11 @@ static void process_write(struct dm_crypt_io *io)
static void process_read_endio(struct dm_crypt_io *io)
{
struct crypt_config *cc = io->target->private;
struct convert_context ctx;

crypt_convert_init(cc, &ctx, io->base_bio, io->base_bio,
crypt_convert_init(cc, &io->ctx, io->base_bio, io->base_bio,
io->base_bio->bi_sector - io->target->begin, 0);

crypt_dec_pending(io, crypt_convert(cc, &ctx));
crypt_dec_pending(io, crypt_convert(cc, &io->ctx));
}

static void kcryptd_do_work(struct work_struct *work)
Expand Down

0 comments on commit 5301703

Please sign in to comment.