Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

dm-integrity: introduce integrity_kmap and integrity_kunmap

This abstraction will be used later, for the asynchronous hash interface.

Signed-off-by: Mikulas Patocka <mpatocka@redhat.com>

+17 -20
+17 -20
drivers/md/dm-integrity.c
··· 1688 1688 get_random_bytes(result, ic->tag_size); 1689 1689 } 1690 1690 1691 + static void *integrity_kmap(struct dm_integrity_c *ic, struct page *p) 1692 + { 1693 + return kmap_local_page(p); 1694 + } 1695 + 1696 + static void integrity_kunmap(struct dm_integrity_c *ic, const void *ptr) 1697 + { 1698 + kunmap_local(ptr); 1699 + } 1700 + 1691 1701 static noinline void integrity_recheck(struct dm_integrity_io *dio, char *checksum) 1692 1702 { 1693 1703 struct bio *bio = dm_bio_from_per_bio_data(dio, sizeof(struct dm_integrity_io)); ··· 1848 1838 char *mem, *checksums_ptr; 1849 1839 1850 1840 again: 1851 - mem = kmap_local_page(bv_copy.bv_page); 1841 + mem = integrity_kmap(ic, bv_copy.bv_page); 1852 1842 pos = 0; 1853 1843 checksums_ptr = checksums; 1854 1844 do { ··· 1858 1848 pos += ic->sectors_per_block << SECTOR_SHIFT; 1859 1849 sector += ic->sectors_per_block; 1860 1850 } while (pos < bv_copy.bv_len && sectors_to_process && checksums != checksums_onstack); 1861 - kunmap_local(mem); 1851 + integrity_kunmap(ic, mem); 1862 1852 1863 1853 r = dm_integrity_rw_tag(ic, checksums, &dio->metadata_block, &dio->metadata_offset, 1864 1854 checksums_ptr - checksums, dio->op == REQ_OP_READ ? TAG_CMP : TAG_WRITE); ··· 2082 2072 js++; 2083 2073 mem_ptr += 1 << SECTOR_SHIFT; 2084 2074 } while (++s < ic->sectors_per_block); 2085 - #ifdef INTERNAL_VERIFY 2086 - if (ic->internal_hash) { 2087 - char checksums_onstack[MAX_T(size_t, HASH_MAX_DIGESTSIZE, MAX_TAG_SIZE)]; 2088 - 2089 - integrity_sector_checksum(ic, logical_sector, mem + bv.bv_offset, checksums_onstack); 2090 - if (unlikely(crypto_memneq(checksums_onstack, journal_entry_tag(ic, je), ic->tag_size))) { 2091 - DMERR_LIMIT("Checksum failed when reading from journal, at sector 0x%llx", 2092 - logical_sector); 2093 - dm_audit_log_bio(DM_MSG_PREFIX, "journal-checksum", 2094 - bio, logical_sector, 0); 2095 - } 2096 - } 2097 - #endif 2098 2075 } 2099 2076 2100 2077 if (!ic->internal_hash) { ··· 2503 2506 unsigned pos = 0; 2504 2507 while (dio->bio_details.bi_iter.bi_size) { 2505 2508 struct bio_vec bv = bio_iter_iovec(bio, dio->bio_details.bi_iter); 2506 - const char *mem = kmap_local_page(bv.bv_page); 2509 + const char *mem = integrity_kmap(ic, bv.bv_page); 2507 2510 if (ic->tag_size < ic->tuple_size) 2508 2511 memset(dio->integrity_payload + pos + ic->tag_size, 0, ic->tuple_size - ic->tuple_size); 2509 2512 integrity_sector_checksum(ic, dio->bio_details.bi_iter.bi_sector, mem + bv.bv_offset, dio->integrity_payload + pos); 2510 - kunmap_local(mem); 2513 + integrity_kunmap(ic, mem); 2511 2514 pos += ic->tuple_size; 2512 2515 bio_advance_iter_single(bio, &dio->bio_details.bi_iter, ic->sectors_per_block << SECTOR_SHIFT); 2513 2516 } ··· 2623 2626 while (dio->bio_details.bi_iter.bi_size) { 2624 2627 char digest[HASH_MAX_DIGESTSIZE]; 2625 2628 struct bio_vec bv = bio_iter_iovec(bio, dio->bio_details.bi_iter); 2626 - char *mem = kmap_local_page(bv.bv_page); 2629 + char *mem = integrity_kmap(ic, bv.bv_page); 2627 2630 integrity_sector_checksum(ic, dio->bio_details.bi_iter.bi_sector, mem + bv.bv_offset, digest); 2628 2631 if (unlikely(crypto_memneq(digest, dio->integrity_payload + pos, 2629 2632 min(ic->internal_hash_digestsize, ic->tag_size)))) { 2630 - kunmap_local(mem); 2633 + integrity_kunmap(ic, mem); 2631 2634 dm_integrity_free_payload(dio); 2632 2635 INIT_WORK(&dio->work, dm_integrity_inline_recheck); 2633 2636 queue_work(ic->offload_wq, &dio->work); 2634 2637 return DM_ENDIO_INCOMPLETE; 2635 2638 } 2636 - kunmap_local(mem); 2639 + integrity_kunmap(ic, mem); 2637 2640 pos += ic->tuple_size; 2638 2641 bio_advance_iter_single(bio, &dio->bio_details.bi_iter, ic->sectors_per_block << SECTOR_SHIFT); 2639 2642 }