dm crypt: add merge
This patch implements biovec merge function for crypt target. If the underlying device has merge function defined, call it. If not, keep precomputed value. Signed-off-by: Milan Broz <mbroz@redhat.com> Signed-off-by: Alasdair G Kergon <agk@redhat.com>
This commit is contained in:
parent
9980c638a6
commit
d41e26b901
1 changed files with 17 additions and 1 deletions
|
@ -1216,9 +1216,24 @@ static int crypt_message(struct dm_target *ti, unsigned argc, char **argv)
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int crypt_merge(struct dm_target *ti, struct bvec_merge_data *bvm,
|
||||||
|
struct bio_vec *biovec, int max_size)
|
||||||
|
{
|
||||||
|
struct crypt_config *cc = ti->private;
|
||||||
|
struct request_queue *q = bdev_get_queue(cc->dev->bdev);
|
||||||
|
|
||||||
|
if (!q->merge_bvec_fn)
|
||||||
|
return max_size;
|
||||||
|
|
||||||
|
bvm->bi_bdev = cc->dev->bdev;
|
||||||
|
bvm->bi_sector = cc->start + bvm->bi_sector - ti->begin;
|
||||||
|
|
||||||
|
return min(max_size, q->merge_bvec_fn(q, bvm, biovec));
|
||||||
|
}
|
||||||
|
|
||||||
static struct target_type crypt_target = {
|
static struct target_type crypt_target = {
|
||||||
.name = "crypt",
|
.name = "crypt",
|
||||||
.version= {1, 5, 0},
|
.version= {1, 6, 0},
|
||||||
.module = THIS_MODULE,
|
.module = THIS_MODULE,
|
||||||
.ctr = crypt_ctr,
|
.ctr = crypt_ctr,
|
||||||
.dtr = crypt_dtr,
|
.dtr = crypt_dtr,
|
||||||
|
@ -1228,6 +1243,7 @@ static struct target_type crypt_target = {
|
||||||
.preresume = crypt_preresume,
|
.preresume = crypt_preresume,
|
||||||
.resume = crypt_resume,
|
.resume = crypt_resume,
|
||||||
.message = crypt_message,
|
.message = crypt_message,
|
||||||
|
.merge = crypt_merge,
|
||||||
};
|
};
|
||||||
|
|
||||||
static int __init dm_crypt_init(void)
|
static int __init dm_crypt_init(void)
|
||||||
|
|
Loading…
Reference in a new issue