mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-30 03:27:44 -04:00
BACKPORT: FROMLIST: Update Inline Encryption from v5 to v6 of patch series
Changes v5 => v6: - Blk-crypto's kernel crypto API fallback is no longer restricted to 8-byte DUNs. It's also now separately configurable from blk-crypto, and can be disabled entirely, while still allowing the kernel to use inline encryption hardware. Further, struct bio_crypt_ctx takes up less space, and no longer contains the information needed by the crypto API fallback - the fallback allocates the required memory when necessary. - Blk-crypto now supports all file content encryption modes supported by fscrypt. - Fixed bio merging logic in blk-merge.c - Fscrypt now supports inline encryption with the direct key policy, since blk-crypto now has support for larger DUNs. - Keyslot manager now uses a hashtable to lookup which keyslot contains any particular key (thanks Eric!) - Fscrypt support for inline encryption now handles filesystems with multiple underlying block devices (thanks Eric!) - Numerous cleanups Bug: 137270441 Test: refer to I26376479ee38259b8c35732cb3a1d7e15f9b05a3 Change-Id: I13e2e327e0b4784b394cb1e7cf32a04856d95f01 Link: https://lore.kernel.org/linux-block/[email protected]/ Signed-off-by: Satya Tangirala <[email protected]>
This commit is contained in:
parent
a32426e234
commit
b7b3af9614
35 changed files with 10735 additions and 10918 deletions
|
|
@ -557,9 +557,6 @@ static inline int ll_new_hw_segment(struct request *req, struct bio *bio,
|
|||
if (blk_integrity_merge_bio(req->q, req, bio) == false)
|
||||
goto no_merge;
|
||||
|
||||
if (WARN_ON_ONCE(!bio_crypt_ctx_compatible(bio, req->bio)))
|
||||
goto no_merge;
|
||||
|
||||
/*
|
||||
* This will form the start of a new hw segment. Bump both
|
||||
* counters.
|
||||
|
|
@ -584,6 +581,8 @@ int ll_back_merge_fn(struct request *req, struct bio *bio, unsigned int nr_segs)
|
|||
req_set_nomerge(req->q, req);
|
||||
return 0;
|
||||
}
|
||||
if (!bio_crypt_ctx_mergeable(req->bio, blk_rq_bytes(req), bio))
|
||||
return 0;
|
||||
|
||||
return ll_new_hw_segment(req, bio, nr_segs);
|
||||
}
|
||||
|
|
@ -600,6 +599,8 @@ int ll_front_merge_fn(struct request *req, struct bio *bio, unsigned int nr_segs
|
|||
req_set_nomerge(req->q, req);
|
||||
return 0;
|
||||
}
|
||||
if (!bio_crypt_ctx_mergeable(bio, bio->bi_iter.bi_size, req->bio))
|
||||
return 0;
|
||||
|
||||
return ll_new_hw_segment(req, bio, nr_segs);
|
||||
}
|
||||
|
|
@ -644,6 +645,9 @@ static int ll_merge_requests_fn(struct request_queue *q, struct request *req,
|
|||
if (blk_integrity_merge_rq(q, req, next) == false)
|
||||
return 0;
|
||||
|
||||
if (!bio_crypt_ctx_mergeable(req->bio, blk_rq_bytes(req), next->bio))
|
||||
return 0;
|
||||
|
||||
/* Merge is OK... */
|
||||
req->nr_phys_segments = total_phys_segments;
|
||||
return 1;
|
||||
|
|
@ -714,14 +718,8 @@ static enum elv_merge blk_try_req_merge(struct request *req,
|
|||
{
|
||||
if (blk_discard_mergable(req))
|
||||
return ELEVATOR_DISCARD_MERGE;
|
||||
else if (blk_rq_pos(req) + blk_rq_sectors(req) == blk_rq_pos(next)) {
|
||||
if (!bio_crypt_ctx_back_mergeable(req->bio,
|
||||
blk_rq_sectors(req),
|
||||
next->bio)) {
|
||||
return ELEVATOR_NO_MERGE;
|
||||
}
|
||||
else if (blk_rq_pos(req) + blk_rq_sectors(req) == blk_rq_pos(next))
|
||||
return ELEVATOR_BACK_MERGE;
|
||||
}
|
||||
|
||||
return ELEVATOR_NO_MERGE;
|
||||
}
|
||||
|
|
@ -757,9 +755,6 @@ static struct request *attempt_merge(struct request_queue *q,
|
|||
if (req->ioprio != next->ioprio)
|
||||
return NULL;
|
||||
|
||||
if (!bio_crypt_ctx_compatible(req->bio, next->bio))
|
||||
return NULL;
|
||||
|
||||
/*
|
||||
* If we are allowed to merge, then append bio list
|
||||
* from next to rq and release next. merge_requests_fn
|
||||
|
|
@ -901,22 +896,11 @@ bool blk_rq_merge_ok(struct request *rq, struct bio *bio)
|
|||
|
||||
enum elv_merge blk_try_merge(struct request *rq, struct bio *bio)
|
||||
{
|
||||
if (blk_discard_mergable(rq)) {
|
||||
if (blk_discard_mergable(rq))
|
||||
return ELEVATOR_DISCARD_MERGE;
|
||||
} else if (blk_rq_pos(rq) + blk_rq_sectors(rq) ==
|
||||
bio->bi_iter.bi_sector) {
|
||||
if (!bio_crypt_ctx_back_mergeable(rq->bio,
|
||||
blk_rq_sectors(rq), bio)) {
|
||||
return ELEVATOR_NO_MERGE;
|
||||
}
|
||||
else if (blk_rq_pos(rq) + blk_rq_sectors(rq) == bio->bi_iter.bi_sector)
|
||||
return ELEVATOR_BACK_MERGE;
|
||||
} else if (blk_rq_pos(rq) - bio_sectors(bio) ==
|
||||
bio->bi_iter.bi_sector) {
|
||||
if (!bio_crypt_ctx_back_mergeable(bio,
|
||||
bio_sectors(bio), rq->bio)) {
|
||||
return ELEVATOR_NO_MERGE;
|
||||
}
|
||||
else if (blk_rq_pos(rq) - bio_sectors(bio) == bio->bi_iter.bi_sector)
|
||||
return ELEVATOR_FRONT_MERGE;
|
||||
}
|
||||
return ELEVATOR_NO_MERGE;
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue