purge struct page usage
The only users of struct page treat it like a straight 4k buffer,
so inline the logic so it is just a 4k buffer.
BUG=chromium:878440
TEST=build works
Change-Id: I3e1695f2509b003d31ac70d1d3783f5cee1941c2
Reviewed-on: https://chromium-review.googlesource.com/1215183
Commit-Ready: Mike Frysinger <vapier@chromium.org>
Tested-by: Mike Frysinger <vapier@chromium.org>
Reviewed-by: Jorge Lucangeli Obes <jorgelo@chromium.org>
diff --git a/dm-bht-userspace.c b/dm-bht-userspace.c
index 8ded77f..677eab5 100644
--- a/dm-bht-userspace.c
+++ b/dm-bht-userspace.c
@@ -19,7 +19,7 @@
/**
* dm_bht_compute_hash: hashes a page of data
*/
-static int dm_bht_compute_hash(struct dm_bht *bht, struct page *pg, u8 *digest)
+static int dm_bht_compute_hash(struct dm_bht *bht, const u8 *buffer, u8 *digest)
{
struct hash_desc *hash_desc = &bht->hash_desc[0];
@@ -28,7 +28,7 @@
DMCRIT("failed to reinitialize crypto hash");
return -EINVAL;
}
- if (crypto_hash_update(hash_desc, (const u8 *)pg, PAGE_SIZE)) {
+ if (crypto_hash_update(hash_desc, buffer, PAGE_SIZE)) {
DMCRIT("crypto_hash_update failed");
return -EINVAL;
}
@@ -94,10 +94,9 @@
if (count == 0)
count = bht->node_count;
for (j = 0; j < count; j++, child++) {
- struct page *pg = virt_to_page(child->nodes);
u8 *digest = dm_bht_node(bht, entry, j);
- r = dm_bht_compute_hash(bht, pg, digest);
+ r = dm_bht_compute_hash(bht, child->nodes, digest);
if (r) {
DMERR("Failed to update (d=%d,i=%u)",
depth, i);
@@ -107,7 +106,7 @@
}
}
r = dm_bht_compute_hash(bht,
- virt_to_page(bht->levels[0].entries->nodes),
+ bht->levels[0].entries->nodes,
bht->root_digest);
if (r)
DMERR("Failed to update root hash");
@@ -137,5 +136,5 @@
struct dm_bht_entry *entry = dm_bht_get_entry(bht, depth - 1, block);
u8 *node = dm_bht_get_node(bht, entry, depth, block);
- return dm_bht_compute_hash(bht, virt_to_page(block_data), node);
+ return dm_bht_compute_hash(bht, block_data, node);
}
diff --git a/dm-bht.c b/dm-bht.c
index 3c19f7f..d77a465 100644
--- a/dm-bht.c
+++ b/dm-bht.c
@@ -37,13 +37,11 @@
#define nr_cpu_ids 1
#define smp_processor_id(_x) 0
-static inline struct page *alloc_page(void)
+static inline void *alloc_page(void)
{
- struct page *memptr;
+ void *memptr;
- if (posix_memalign((void **)&memptr,
- sizeof(struct page),
- sizeof(struct page)))
+ if (posix_memalign((void **)&memptr, PAGE_SIZE, PAGE_SIZE))
return NULL;
return memptr;
}
@@ -105,7 +103,7 @@
/**
* dm_bht_compute_hash: hashes a page of data
*/
-static int dm_bht_compute_hash(struct dm_bht *bht, struct page *pg, u8 *digest)
+static int dm_bht_compute_hash(struct dm_bht *bht, const u8 *buffer, u8 *digest)
{
struct hash_desc *hash_desc = &bht->hash_desc[smp_processor_id()];
@@ -115,7 +113,7 @@
smp_processor_id());
return -EINVAL;
}
- if (crypto_hash_update(hash_desc, (const u8 *)pg, PAGE_SIZE)) {
+ if (crypto_hash_update(hash_desc, buffer, PAGE_SIZE)) {
DMCRIT("crypto_hash_update failed");
return -EINVAL;
}
@@ -362,7 +360,7 @@
* Verifies the path. Returns 0 on ok.
*/
static int dm_bht_verify_path(struct dm_bht *bht, unsigned int block,
- struct page *pg)
+ const u8 *buffer)
{
int depth = bht->depth;
u8 digest[DM_BHT_MAX_DIGEST_SIZE];
@@ -382,18 +380,18 @@
BUG_ON(state < DM_BHT_ENTRY_READY);
node = dm_bht_get_node(bht, entry, depth, block);
- if (dm_bht_compute_hash(bht, pg, digest) ||
+ if (dm_bht_compute_hash(bht, buffer, digest) ||
memcmp(digest, node, bht->digest_size))
goto mismatch;
/* Keep the containing block of hashes to be verified in the
* next pass.
*/
- pg = virt_to_page(entry->nodes);
+ buffer = entry->nodes;
} while (--depth > 0 && state != DM_BHT_ENTRY_VERIFIED);
if (depth == 0 && state != DM_BHT_ENTRY_VERIFIED) {
- if (dm_bht_compute_hash(bht, pg, digest) ||
+ if (dm_bht_compute_hash(bht, buffer, digest) ||
memcmp(digest, bht->root_digest, bht->digest_size))
goto mismatch;
entry->state = DM_BHT_ENTRY_VERIFIED;
@@ -484,7 +482,7 @@
struct dm_bht_level *level;
struct dm_bht_entry *entry;
unsigned int index;
- struct page *pg;
+ u8 *buffer;
entry = dm_bht_get_entry(bht, depth, block);
state = entry->state;
@@ -499,12 +497,12 @@
continue;
/* Current entry is claimed for allocation and loading */
- pg = alloc_page();
- if (!pg)
+ buffer = (u8 *)alloc_page();
+ if (!buffer)
goto nomem;
/* dm-bht guarantees page-aligned memory for callbacks. */
- entry->nodes = page_address(pg);
+ entry->nodes = buffer;
/* TODO(wad) error check callback here too */
@@ -530,7 +528,7 @@
* dm_bht_verify_block - checks that all nodes in the path for @block are valid
* @bht: pointer to a dm_bht_create()d bht
* @block: specific block data is expected from
- * @pg: page holding the block data
+ * @buffer: page holding the block data
* @offset: offset into the page
*
* Returns 0 on success, 1 on missing data, and a negative error
@@ -538,11 +536,11 @@
* should return similarly.
*/
int dm_bht_verify_block(struct dm_bht *bht, unsigned int block,
- struct page *pg, unsigned int offset)
+ const u8 *buffer, unsigned int offset)
{
BUG_ON(offset != 0);
- return dm_bht_verify_path(bht, block, pg);
+ return dm_bht_verify_path(bht, block, buffer);
}
/**
@@ -572,7 +570,7 @@
continue;
default:
BUG_ON(!entry->nodes);
- free(virt_to_page(entry->nodes));
+ free(entry->nodes);
break;
}
}
diff --git a/dm-bht.h b/dm-bht.h
index 0612e11..1e3fa16 100644
--- a/dm-bht.h
+++ b/dm-bht.h
@@ -35,9 +35,6 @@
/* Additional possible return codes */
#define DM_BHT_ENTRY_ERROR_MISMATCH -3 /* Digest mismatch */
-/* Forward declaration */
-struct page;
-
/* dm_bht_entry
* Contains dm_bht->node_count tree nodes at a given tree depth.
* state is used to transactionally assure that data is paged in
@@ -134,7 +131,7 @@
int dm_bht_populate(struct dm_bht *bht, void *read_cb_ctx,
unsigned int block);
int dm_bht_verify_block(struct dm_bht *bht, unsigned int block,
- struct page *pg, unsigned int offset);
+ const u8 *buffer, unsigned int offset);
int dm_bht_zeroread_callback(void *ctx, sector_t start, u8 *dst, sector_t count,
struct dm_bht_entry *entry);
void dm_bht_read_completed(struct dm_bht_entry *entry, int status);
diff --git a/dm-bht_unittest.cc b/dm-bht_unittest.cc
index bca905c..10b9c2e 100644
--- a/dm-bht_unittest.cc
+++ b/dm-bht_unittest.cc
@@ -180,8 +180,7 @@
for (unsigned int blocks = 0; blocks < total_blocks; ++blocks) {
DLOG(INFO) << "verifying block: " << blocks;
- EXPECT_EQ(0, dm_bht_verify_block(bht_, blocks,
- virt_to_page(zero_page), 0));
+ EXPECT_EQ(0, dm_bht_verify_block(bht_, blocks, zero_page, 0));
}
EXPECT_EQ(0, dm_bht_destroy(bht_));
@@ -204,8 +203,7 @@
for (unsigned int blocks = 0; blocks < total_blocks; ++blocks) {
DLOG(INFO) << "verifying block: " << blocks;
- EXPECT_EQ(0, dm_bht_verify_block(bht_, blocks,
- virt_to_page(zero_page), 0));
+ EXPECT_EQ(0, dm_bht_verify_block(bht_, blocks, zero_page, 0));
}
EXPECT_EQ(0, dm_bht_destroy(bht_));
@@ -228,8 +226,7 @@
for (unsigned int blocks = 0; blocks < total_blocks; ++blocks) {
DLOG(INFO) << "verifying block: " << blocks;
- EXPECT_EQ(0, dm_bht_verify_block(bht_, blocks,
- virt_to_page(zero_page), 0));
+ EXPECT_EQ(0, dm_bht_verify_block(bht_, blocks, zero_page, 0));
}
EXPECT_EQ(0, dm_bht_destroy(bht_));
@@ -252,8 +249,7 @@
for (unsigned int blocks = 0; blocks < total_blocks; ++blocks) {
DLOG(INFO) << "verifying block: " << blocks;
- EXPECT_EQ(0, dm_bht_verify_block(bht_, blocks,
- virt_to_page(zero_page), 0));
+ EXPECT_EQ(0, dm_bht_verify_block(bht_, blocks, zero_page, 0));
}
EXPECT_EQ(0, dm_bht_destroy(bht_));
@@ -276,8 +272,7 @@
for (unsigned int blocks = 0; blocks < total_blocks; ++blocks) {
DLOG(INFO) << "verifying block: " << blocks;
- EXPECT_EQ(0, dm_bht_verify_block(bht_, blocks,
- virt_to_page(zero_page), 0));
+ EXPECT_EQ(0, dm_bht_verify_block(bht_, blocks, zero_page, 0));
}
EXPECT_EQ(0, dm_bht_destroy(bht_));
@@ -308,25 +303,18 @@
EXPECT_EQ(dm_bht_store_block(bht_, kBadBlock, bad_hash_block), 0);
// Attempt to verify both the bad block and all the neighbors.
- EXPECT_LT(dm_bht_verify_block(bht_, kBadBlock + 1,
- virt_to_page(zero_page), 0), 0);
-
- EXPECT_LT(dm_bht_verify_block(bht_, kBadBlock + 2,
- virt_to_page(zero_page), 0), 0);
-
+ EXPECT_LT(dm_bht_verify_block(bht_, kBadBlock + 1, zero_page, 0), 0);
+ EXPECT_LT(dm_bht_verify_block(bht_, kBadBlock + 2, zero_page, 0), 0);
EXPECT_LT(dm_bht_verify_block(bht_, kBadBlock + (bht_->node_count / 2),
- virt_to_page(zero_page), 0), 0);
-
- EXPECT_LT(dm_bht_verify_block(bht_, kBadBlock,
- virt_to_page(zero_page), 0), 0);
+ zero_page, 0), 0);
+ EXPECT_LT(dm_bht_verify_block(bht_, kBadBlock, zero_page, 0), 0);
// Verify that the prior entry is untouched and still safe
- EXPECT_EQ(dm_bht_verify_block(bht_, kBadBlock - 1,
- virt_to_page(zero_page), 0), 0);
+ EXPECT_EQ(dm_bht_verify_block(bht_, kBadBlock - 1, zero_page, 0), 0);
// Same for the next entry
EXPECT_EQ(dm_bht_verify_block(bht_, kBadBlock + bht_->node_count,
- virt_to_page(zero_page), 0), 0);
+ zero_page, 0), 0);
EXPECT_EQ(0, dm_bht_destroy(bht_));
free(bad_hash_block);
@@ -346,13 +334,12 @@
memset(bad_page, 'A', PAGE_SIZE);
-
- EXPECT_LT(dm_bht_verify_block(bht_, 0, virt_to_page(bad_page), 0), 0);
- EXPECT_LT(dm_bht_verify_block(bht_, 127, virt_to_page(bad_page), 0), 0);
- EXPECT_LT(dm_bht_verify_block(bht_, 128, virt_to_page(bad_page), 0), 0);
- EXPECT_LT(dm_bht_verify_block(bht_, 255, virt_to_page(bad_page), 0), 0);
- EXPECT_LT(dm_bht_verify_block(bht_, 256, virt_to_page(bad_page), 0), 0);
- EXPECT_LT(dm_bht_verify_block(bht_, 383, virt_to_page(bad_page), 0), 0);
+ EXPECT_LT(dm_bht_verify_block(bht_, 0, bad_page, 0), 0);
+ EXPECT_LT(dm_bht_verify_block(bht_, 127, bad_page, 0), 0);
+ EXPECT_LT(dm_bht_verify_block(bht_, 128, bad_page, 0), 0);
+ EXPECT_LT(dm_bht_verify_block(bht_, 255, bad_page, 0), 0);
+ EXPECT_LT(dm_bht_verify_block(bht_, 256, bad_page, 0), 0);
+ EXPECT_LT(dm_bht_verify_block(bht_, 383, bad_page, 0), 0);
EXPECT_EQ(0, dm_bht_destroy(bht_));
free(bad_page);
@@ -376,8 +363,7 @@
for (unsigned int blocks = 0; blocks < total_blocks; ++blocks) {
DLOG(INFO) << "verifying block: " << blocks;
- EXPECT_EQ(0, dm_bht_verify_block(bht_, blocks,
- virt_to_page(zero_page), 0));
+ EXPECT_EQ(0, dm_bht_verify_block(bht_, blocks, zero_page, 0));
}
EXPECT_EQ(0, dm_bht_destroy(bht_));
@@ -402,8 +388,7 @@
for (unsigned int blocks = 0; blocks < total_blocks; ++blocks) {
DLOG(INFO) << "verifying block: " << blocks;
- EXPECT_EQ(0, dm_bht_verify_block(bht_, blocks,
- virt_to_page(zero_page), 0));
+ EXPECT_EQ(0, dm_bht_verify_block(bht_, blocks, zero_page, 0));
}
EXPECT_EQ(0, dm_bht_destroy(bht_));
diff --git a/include/asm/page.h b/include/asm/page.h
index fb18ab3..8883b33 100644
--- a/include/asm/page.h
+++ b/include/asm/page.h
@@ -8,17 +8,7 @@
#ifndef VERITY_INCLUDE_ASM_PAGE_H_
#define VERITY_INCLUDE_ASM_PAGE_H_
-#include <linux/types.h>
-
#define PAGE_SIZE 4096
#define PAGE_SHIFT 12
-/* A, uh, simple page dummy. */
-struct page {
- u8 data[PAGE_SIZE];
-};
-
-#define page_address(p) ((p)->data)
-#define virt_to_page(x) ((struct page *)(x))
-
#endif /* VERITY_INCLUDE_ASM_PAGE_H_ */