Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 71722
b: refs/heads/master
c: 9934a8b
h: refs/heads/master
v: v3
  • Loading branch information
Milan Broz authored and Alasdair G Kergon committed Oct 20, 2007
1 parent 55174ec commit 643a9d1
Show file tree
Hide file tree
Showing 2 changed files with 15 additions and 19 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: d336416ff1e6f7715f6dcb3b4e3e60626e406dd0
refs/heads/master: 9934a8bea2fc67e6f07d74304eca2a91d251bfe8
32 changes: 14 additions & 18 deletions trunk/drivers/md/dm-crypt.c
Original file line number Diff line number Diff line change
Expand Up @@ -80,6 +80,7 @@ struct crypt_config {
mempool_t *page_pool;
struct bio_set *bs;

struct workqueue_struct *queue;
/*
* crypto related data
*/
Expand Down Expand Up @@ -480,13 +481,14 @@ static void dec_pending(struct dm_crypt_io *io, int error)
* Needed because it would be very unwise to do decryption in an
* interrupt context.
*/
static struct workqueue_struct *_kcryptd_workqueue;
static void kcryptd_do_work(struct work_struct *work);

static void kcryptd_queue_io(struct dm_crypt_io *io)
{
struct crypt_config *cc = io->target->private;

INIT_WORK(&io->work, kcryptd_do_work);
queue_work(_kcryptd_workqueue, &io->work);
queue_work(cc->queue, &io->work);
}

static void crypt_endio(struct bio *clone, int error)
Expand Down Expand Up @@ -868,9 +870,17 @@ static int crypt_ctr(struct dm_target *ti, unsigned int argc, char **argv)
} else
cc->iv_mode = NULL;

cc->queue = create_singlethread_workqueue("kcryptd");
if (!cc->queue) {
ti->error = "Couldn't create kcryptd queue";
goto bad_queue;
}

ti->private = cc;
return 0;

bad_queue:
kfree(cc->iv_mode);
bad_iv_mode:
dm_put_device(ti, cc->dev);
bad5:
Expand All @@ -895,7 +905,7 @@ static void crypt_dtr(struct dm_target *ti)
{
struct crypt_config *cc = (struct crypt_config *) ti->private;

flush_workqueue(_kcryptd_workqueue);
destroy_workqueue(cc->queue);

bioset_free(cc->bs);
mempool_destroy(cc->page_pool);
Expand Down Expand Up @@ -1040,25 +1050,12 @@ static int __init dm_crypt_init(void)
if (!_crypt_io_pool)
return -ENOMEM;

_kcryptd_workqueue = create_workqueue("kcryptd");
if (!_kcryptd_workqueue) {
r = -ENOMEM;
DMERR("couldn't create kcryptd");
goto bad1;
}

r = dm_register_target(&crypt_target);
if (r < 0) {
DMERR("register failed %d", r);
goto bad2;
kmem_cache_destroy(_crypt_io_pool);
}

return 0;

bad2:
destroy_workqueue(_kcryptd_workqueue);
bad1:
kmem_cache_destroy(_crypt_io_pool);
return r;
}

Expand All @@ -1069,7 +1066,6 @@ static void __exit dm_crypt_exit(void)
if (r < 0)
DMERR("unregister failed %d", r);

destroy_workqueue(_kcryptd_workqueue);
kmem_cache_destroy(_crypt_io_pool);
}

Expand Down

0 comments on commit 643a9d1

Please sign in to comment.