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>
+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 = {
.name = "crypt",
static struct target_type crypt_target = {
.name = "crypt",
.module = THIS_MODULE,
.ctr = crypt_ctr,
.dtr = crypt_dtr,
.module = THIS_MODULE,
.ctr = crypt_ctr,
.dtr = crypt_dtr,
.preresume = crypt_preresume,
.resume = crypt_resume,
.message = crypt_message,
.preresume = crypt_preresume,
.resume = crypt_resume,
.message = crypt_message,
};
static int __init dm_crypt_init(void)
};
static int __init dm_crypt_init(void)