diff options
author | Linus Torvalds <torvalds@woody.linux-foundation.org> | 2007-10-11 22:14:22 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@woody.linux-foundation.org> | 2007-10-11 22:14:22 -0400 |
commit | 1ce48904285fe4b0298864f9153a8502ebeac35c (patch) | |
tree | ffe1e0c31cdea427b48ae4d4d59a96ff9d208f32 /drivers/md/dm-crypt.c | |
parent | 55982fd184a065b1c69279d29cbc01dbf424d2f4 (diff) | |
parent | 780513ecb80ea0934fc6833efc4f5ed9ab4ff9bb (diff) |
Merge branch 'block-2.6.24' of git://git.kernel.dk/data/git/linux-2.6-block
* 'block-2.6.24' of git://git.kernel.dk/data/git/linux-2.6-block: (37 commits)
[BLOCK] Fix failing compile with BLK_DEV_IO_TRACE=n
compat_ioctl: move floppy handlers to block/compat_ioctl.c
compat_ioctl: move cdrom handlers to block/compat_ioctl.c
compat_ioctl: move BLKPG handling to block/compat_ioctl.c
compat_ioctl: move hdio calls to block/compat_ioctl.c
compat_ioctl: handle blk_trace ioctls
compat_ioctl: add compat_blkdev_driver_ioctl()
compat_ioctl: move common block ioctls to compat_blkdev_ioctl
Sysace: Don't enable IRQ until after interrupt handler is registered
Sysace: sparse fixes
Sysace: Minor coding convention fixup
drivers/block/umem: use DRIVER_NAME where appropriate
drivers/block/umem: trim trailing whitespace
drivers/block/umem: minor cleanups
drivers/block/umem: use dev_printk()
drivers/block/umem: move private include away from include/linux
Sysace: Labels in C code should not be indented.
Sysace: Add of_platform_bus binding
Sysace: Move IRQ handler registration to occur after FSM is initialized
Sysace: minor rework and cleanup changes
...
Diffstat (limited to 'drivers/md/dm-crypt.c')
-rw-r--r-- | drivers/md/dm-crypt.c | 21 |
1 files changed, 7 insertions, 14 deletions
diff --git a/drivers/md/dm-crypt.c b/drivers/md/dm-crypt.c index bdc52d6922b7..8216a6f75be5 100644 --- a/drivers/md/dm-crypt.c +++ b/drivers/md/dm-crypt.c | |||
@@ -489,7 +489,7 @@ static void dec_pending(struct dm_crypt_io *io, int error) | |||
489 | if (!atomic_dec_and_test(&io->pending)) | 489 | if (!atomic_dec_and_test(&io->pending)) |
490 | return; | 490 | return; |
491 | 491 | ||
492 | bio_endio(io->base_bio, io->base_bio->bi_size, io->error); | 492 | bio_endio(io->base_bio, io->error); |
493 | 493 | ||
494 | mempool_free(io, cc->io_pool); | 494 | mempool_free(io, cc->io_pool); |
495 | } | 495 | } |
@@ -509,25 +509,19 @@ static void kcryptd_queue_io(struct dm_crypt_io *io) | |||
509 | queue_work(_kcryptd_workqueue, &io->work); | 509 | queue_work(_kcryptd_workqueue, &io->work); |
510 | } | 510 | } |
511 | 511 | ||
512 | static int crypt_endio(struct bio *clone, unsigned int done, int error) | 512 | static void crypt_endio(struct bio *clone, int error) |
513 | { | 513 | { |
514 | struct dm_crypt_io *io = clone->bi_private; | 514 | struct dm_crypt_io *io = clone->bi_private; |
515 | struct crypt_config *cc = io->target->private; | 515 | struct crypt_config *cc = io->target->private; |
516 | unsigned read_io = bio_data_dir(clone) == READ; | 516 | unsigned read_io = bio_data_dir(clone) == READ; |
517 | 517 | ||
518 | /* | 518 | /* |
519 | * free the processed pages, even if | 519 | * free the processed pages |
520 | * it's only a partially completed write | ||
521 | */ | 520 | */ |
522 | if (!read_io) | 521 | if (!read_io) { |
523 | crypt_free_buffer_pages(cc, clone, done); | 522 | crypt_free_buffer_pages(cc, clone, clone->bi_size); |
524 | |||
525 | /* keep going - not finished yet */ | ||
526 | if (unlikely(clone->bi_size)) | ||
527 | return 1; | ||
528 | |||
529 | if (!read_io) | ||
530 | goto out; | 523 | goto out; |
524 | } | ||
531 | 525 | ||
532 | if (unlikely(!bio_flagged(clone, BIO_UPTODATE))) { | 526 | if (unlikely(!bio_flagged(clone, BIO_UPTODATE))) { |
533 | error = -EIO; | 527 | error = -EIO; |
@@ -537,12 +531,11 @@ static int crypt_endio(struct bio *clone, unsigned int done, int error) | |||
537 | bio_put(clone); | 531 | bio_put(clone); |
538 | io->post_process = 1; | 532 | io->post_process = 1; |
539 | kcryptd_queue_io(io); | 533 | kcryptd_queue_io(io); |
540 | return 0; | 534 | return; |
541 | 535 | ||
542 | out: | 536 | out: |
543 | bio_put(clone); | 537 | bio_put(clone); |
544 | dec_pending(io, error); | 538 | dec_pending(io, error); |
545 | return error; | ||
546 | } | 539 | } |
547 | 540 | ||
548 | static void clone_init(struct dm_crypt_io *io, struct bio *clone) | 541 | static void clone_init(struct dm_crypt_io *io, struct bio *clone) |