Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit d41e26b9 authored by Milan Broz's avatar Milan Broz Committed by Alasdair G Kergon
Browse files

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: default avatarMilan Broz <mbroz@redhat.com>
Signed-off-by: default avatarAlasdair G Kergon <agk@redhat.com>
parent 9980c638
Loading
Loading
Loading
Loading
+17 −1
Original line number Original line Diff line number Diff line
@@ -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)