]> err.no Git - linux-2.6/commitdiff
dm crypt: introduce crypt_write_io_loop
authorMilan Broz <mbroz@redhat.com>
Fri, 8 Feb 2008 02:10:59 +0000 (02:10 +0000)
committerAlasdair G Kergon <agk@redhat.com>
Fri, 8 Feb 2008 02:10:59 +0000 (02:10 +0000)
Introduce crypt_write_io_loop().

Signed-off-by: Milan Broz <mbroz@redhat.com>
Signed-off-by: Alasdair G Kergon <agk@redhat.com>
drivers/md/dm-crypt.c

index 4df7d2f782d8ffc021069f82cba6c20d7031cbf6..986283c5332f95ddcc70dea159ebe965ca33e29a 100644 (file)
@@ -595,17 +595,13 @@ static void kcryptd_crypt_write_io_submit(struct dm_crypt_io *io, int error)
        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.
@@ -645,6 +641,16 @@ static void kcryptd_crypt_write_convert(struct dm_crypt_io *io)
        }
 }
 
+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))