From: Milan Broz Introduce crypt_write_io_loop(). Signed-off-by: Milan Broz Signed-off-by: Alasdair G Kergon --- drivers/md/dm-crypt.c | 16 +++++++++++----- 1 files changed, 11 insertions(+), 5 deletions(-) Index: linux-2.6.24-rc2/drivers/md/dm-crypt.c =================================================================== --- linux-2.6.24-rc2.orig/drivers/md/dm-crypt.c 2007-11-20 16:51:30.000000000 +0000 +++ linux-2.6.24-rc2/drivers/md/dm-crypt.c 2007-11-20 16:51:32.000000000 +0000 @@ -597,17 +597,13 @@ static void kcryptd_crypt_write_io_submi io->sector += bio_sectors(clone); } -static void kcryptd_crypt_write_convert(struct dm_crypt_io *io) +static void kcryptd_crypt_write_convert_loop(struct dm_crypt_io *io) { struct crypt_config *cc = io->target->private; struct bio *clone; unsigned remaining = io->base_bio->bi_size; int r; - atomic_inc(&io->pending); - - crypt_convert_init(cc, &io->ctx, NULL, io->base_bio, io->sector); - /* * The allocated buffers can be smaller than the whole bio, * so repeat the whole process until all the data can be handled. @@ -647,6 +643,16 @@ static void kcryptd_crypt_write_convert( } } +static void kcryptd_crypt_write_convert(struct dm_crypt_io *io) +{ + struct crypt_config *cc = io->target->private; + + atomic_inc(&io->pending); + + crypt_convert_init(cc, &io->ctx, NULL, io->base_bio, io->sector); + kcryptd_crypt_write_convert_loop(io); +} + static void kcryptd_crypt_read_done(struct dm_crypt_io *io, int error) { if (unlikely(error < 0))