diff options
Diffstat (limited to 'drivers/md/dm-kcopyd.c')
-rw-r--r-- | drivers/md/dm-kcopyd.c | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/drivers/md/dm-kcopyd.c b/drivers/md/dm-kcopyd.c index 0a225da21272..9d379070918b 100644 --- a/drivers/md/dm-kcopyd.c +++ b/drivers/md/dm-kcopyd.c | |||
@@ -297,7 +297,8 @@ static int run_complete_job(struct kcopyd_job *job) | |||
297 | dm_kcopyd_notify_fn fn = job->fn; | 297 | dm_kcopyd_notify_fn fn = job->fn; |
298 | struct dm_kcopyd_client *kc = job->kc; | 298 | struct dm_kcopyd_client *kc = job->kc; |
299 | 299 | ||
300 | kcopyd_put_pages(kc, job->pages); | 300 | if (job->pages) |
301 | kcopyd_put_pages(kc, job->pages); | ||
301 | mempool_free(job, kc->job_pool); | 302 | mempool_free(job, kc->job_pool); |
302 | fn(read_err, write_err, context); | 303 | fn(read_err, write_err, context); |
303 | 304 | ||
@@ -461,6 +462,7 @@ static void segment_complete(int read_err, unsigned long write_err, | |||
461 | sector_t progress = 0; | 462 | sector_t progress = 0; |
462 | sector_t count = 0; | 463 | sector_t count = 0; |
463 | struct kcopyd_job *job = (struct kcopyd_job *) context; | 464 | struct kcopyd_job *job = (struct kcopyd_job *) context; |
465 | struct dm_kcopyd_client *kc = job->kc; | ||
464 | 466 | ||
465 | mutex_lock(&job->lock); | 467 | mutex_lock(&job->lock); |
466 | 468 | ||
@@ -490,7 +492,7 @@ static void segment_complete(int read_err, unsigned long write_err, | |||
490 | 492 | ||
491 | if (count) { | 493 | if (count) { |
492 | int i; | 494 | int i; |
493 | struct kcopyd_job *sub_job = mempool_alloc(job->kc->job_pool, | 495 | struct kcopyd_job *sub_job = mempool_alloc(kc->job_pool, |
494 | GFP_NOIO); | 496 | GFP_NOIO); |
495 | 497 | ||
496 | *sub_job = *job; | 498 | *sub_job = *job; |