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

Commit 80e04190 authored by Dinesh K Garg's avatar Dinesh K Garg
Browse files

dm: Add snapshot of dm-crypt support



This snapshot is taken as of msm-3.10 commit:
bcb5b3f6f2(Merge "msm: mdss: remove notify update ioctl
implementation in driver"). Support of PFT was removed as
it not used anymore.

Change-Id: Iee085f1d6236e97884105e1f228babb77c54d470
Signed-off-by: default avatarDinesh K Garg <dineshg@codeaurora.org>
parent 30b24a3d
Loading
Loading
Loading
Loading
+11 −2
Original line number Diff line number Diff line
@@ -1350,8 +1350,8 @@ void __blk_put_request(struct request_queue *q, struct request *req)

	elv_completed_request(q, req);

	/* this is a bio leak */
	WARN_ON(req->bio != NULL);
	/* this is a bio leak if the bio is not tagged with BIO_DONTFREE */
	WARN_ON(req->bio && !bio_flagged(req->bio, BIO_DONTFREE));

	/*
	 * Request may not have originated from ll_rw_blk. if not,
@@ -2453,6 +2453,15 @@ bool blk_update_request(struct request *req, int error, unsigned int nr_bytes)
	blk_account_io_completion(req, nr_bytes);

	total_bytes = 0;

	/*
	 * Check for this if flagged, Req based dm needs to perform
	 * post processing, hence dont end bios or request.DM
	 * layer takes care.
	 */
	if (bio_flagged(req->bio, BIO_DONTFREE))
		return false;

	while (req->bio) {
		struct bio *bio = req->bio;
		unsigned bio_bytes = min(bio->bi_iter.bi_size, nr_bytes);
+58 −0
Original line number Diff line number Diff line
@@ -283,6 +283,64 @@ int blk_rq_map_sg(struct request_queue *q, struct request *rq,
}
EXPORT_SYMBOL(blk_rq_map_sg);


/*
 * map a request to scatterlist without combining PHY CONT
 * blocks, return number of sg entries setup. Caller
 * must make sure sg can hold rq->nr_phys_segments entries
 */
int blk_rq_map_sg_no_cluster(struct request_queue *q, struct request *rq,
		  struct scatterlist *sglist)
{
	struct bio_vec bvec, bvprv = { NULL };
	struct req_iterator iter;
	struct scatterlist *sg;
	int nsegs, cluster = 0;

	nsegs = 0;

	/*
	 * for each bio in rq
	 */
	sg = NULL;
	rq_for_each_segment(bvec, rq, iter) {
		__blk_segment_map_sg(q, &bvec, sglist, &bvprv, &sg,
				     &nsegs, &cluster);
	} /* segments in rq */


	if (!sg)
		return nsegs;

	if (unlikely(rq->cmd_flags & REQ_COPY_USER) &&
	    (blk_rq_bytes(rq) & q->dma_pad_mask)) {
		unsigned int pad_len =
			(q->dma_pad_mask & ~blk_rq_bytes(rq)) + 1;

		sg->length += pad_len;
		rq->extra_len += pad_len;
	}

	if (q->dma_drain_size && q->dma_drain_needed(rq)) {
		if (rq->cmd_flags & REQ_WRITE)
			memset(q->dma_drain_buffer, 0, q->dma_drain_size);

		sg->page_link &= ~0x02;
		sg = sg_next(sg);
		sg_set_page(sg, virt_to_page(q->dma_drain_buffer),
			    q->dma_drain_size,
			    ((unsigned long)q->dma_drain_buffer) &
			    (PAGE_SIZE - 1));
		nsegs++;
		rq->extra_len += q->dma_drain_size;
	}

	if (sg)
		sg_mark_end(sg);

	return nsegs;
}
EXPORT_SYMBOL(blk_rq_map_sg_no_cluster);
/**
 * blk_bio_map_sg - map a bio to a scatterlist
 * @q: request_queue in question
+0 −1
Original line number Diff line number Diff line
@@ -186,7 +186,6 @@ int attempt_back_merge(struct request_queue *q, struct request *rq);
int attempt_front_merge(struct request_queue *q, struct request *rq);
int blk_attempt_req_merge(struct request_queue *q, struct request *rq,
				struct request *next);
void blk_recalc_rq_segments(struct request *rq);
void blk_rq_set_mixed_merge(struct request *rq);
bool blk_rq_merge_ok(struct request *rq, struct bio *bio);
int blk_try_merge(struct request *rq, struct bio *bio);
+17 −0
Original line number Diff line number Diff line
@@ -239,6 +239,23 @@ config DM_CRYPT

	  If unsure, say N.

config DM_REQ_CRYPT
	tristate "Crypt target support"
	depends on BLK_DEV_DM
	select XTS
	select CRYPTO_XTS
	---help---
	  This request based device-mapper target allows you to create a device that
	  transparently encrypts the data on it. You'll need to activate
	  the ciphers you're going to use in the cryptoapi configuration.
	  The DM REQ CRYPT operates on requests (bigger payloads) to utilize
	  crypto hardware better.

	  To compile this code as a module, choose M here: the module will
	  be called dm-req-crypt.

	  If unsure, say N.

config DM_SNAPSHOT
       tristate "Snapshot target"
       depends on BLK_DEV_DM
+1 −0
Original line number Diff line number Diff line
@@ -55,6 +55,7 @@ obj-$(CONFIG_DM_CACHE) += dm-cache.o
obj-$(CONFIG_DM_CACHE_MQ)	+= dm-cache-mq.o
obj-$(CONFIG_DM_CACHE_CLEANER)	+= dm-cache-cleaner.o
obj-$(CONFIG_DM_ERA)		+= dm-era.o
obj-$(CONFIG_DM_REQ_CRYPT)	+= dm-req-crypt.o

ifeq ($(CONFIG_DM_UEVENT),y)
dm-mod-objs			+= dm-uevent.o
Loading