Rename some stuff and limit LBLK_SHIFT_MAX

This commit is contained in:
Tom Marshall 2019-10-09 11:32:36 -07:00
parent 2e18584af3
commit 0ca9fc789f
3 changed files with 58 additions and 58 deletions

View File

@ -75,7 +75,7 @@ struct dm_compress
/* Currently cached lblk data (if any) */
u64 lblk_num;
bool lblk_dirty;
struct lblk_alloc* lblk_alloc;
struct lblk_alloc_elem* lblk_alloc;
void* lblk;
@ -197,8 +197,8 @@ zone_pblk_alloc_write(struct dm_compress* dc)
u32 count;
BUG_ON(dc->zone_pblk_alloc_idx == ZONE_NONE);
pblk = zone_pblk_alloc_off(&dc->params, dc->zone_pblk_alloc_idx);
count = zone_pblk_alloc_len(&dc->params);
pblk = pblk_alloc_off(&dc->params, dc->zone_pblk_alloc_idx);
count = pblk_alloc_len(&dc->params);
ret = blkdev_pblk_write(dc->dev->bdev, pblk, count, dc->zone_pblk_alloc);
if (ret != 0) {
@ -241,8 +241,8 @@ zone_pblk_alloc_read(struct dm_compress* dc, u32 idx)
return ret;
}
pblk = zone_pblk_alloc_off(&dc->params, idx);
count = zone_pblk_alloc_len(&dc->params);
pblk = pblk_alloc_off(&dc->params, idx);
count = pblk_alloc_len(&dc->params);
ret = blkdev_pblk_read(dc->dev->bdev, pblk, count, dc->zone_pblk_alloc);
if (ret) {
@ -261,7 +261,7 @@ zone_pblk_alloc_read(struct dm_compress* dc, u32 idx)
static u64
zone_pblk_alloc_get(struct dm_compress* dc, u32 zone_hint)
{
u32 zone_pblk_count = zone_pblk_alloc_len(&dc->params) * PBLK_SIZE_BITS;
u32 zone_pblk_count = pblk_alloc_len(&dc->params) * PBLK_SIZE_BITS;
u32 zone;
u32 idx;
@ -295,7 +295,7 @@ zone_pblk_alloc_get(struct dm_compress* dc, u32 zone_hint)
static int
zone_pblk_alloc_put(struct dm_compress* dc, u64 pblk)
{
u32 zone_pblk_count = zone_pblk_alloc_len(&dc->params) * PBLK_SIZE_BITS;
u32 zone_pblk_count = pblk_alloc_len(&dc->params) * PBLK_SIZE_BITS;
u32 zone;
u32 idx;
int ret;
@ -345,8 +345,8 @@ zone_lblk_alloc_write(struct dm_compress* dc)
}
BUG_ON(dc->zone_lblk_alloc_idx == ZONE_NONE);
pblk = zone_lblk_alloc_off(&dc->params, dc->zone_lblk_alloc_idx);
count = zone_lblk_alloc_len(&dc->params);
pblk = lblk_alloc_off(&dc->params, dc->zone_lblk_alloc_idx);
count = lblk_alloc_len(&dc->params);
ret = blkdev_pblk_write(dc->dev->bdev, pblk, count, dc->zone_lblk_alloc);
if (ret != 0) {
@ -371,8 +371,8 @@ zone_lblk_alloc_read(struct dm_compress* dc, u32 idx)
return 0;
}
pblk = zone_lblk_alloc_off(&dc->params, idx);
count = zone_lblk_alloc_len(&dc->params);
pblk = lblk_alloc_off(&dc->params, idx);
count = lblk_alloc_len(&dc->params);
ret = blkdev_pblk_read(dc->dev->bdev, pblk, count, dc->zone_lblk_alloc);
if (ret == 0) {
dc->zone_lblk_alloc_idx = idx;
@ -504,7 +504,7 @@ lblk_write(struct dm_compress* dc)
}
}
cbd_lblk_alloc_put(&dc->params,
lblk_alloc_elem_put(&dc->params,
dc->zone_lblk_alloc, zone_lblk, dc->lblk_alloc);
ret = zone_lblk_alloc_write(dc);
if (ret != 0) {
@ -562,7 +562,7 @@ lblk_read(struct dm_compress* dc, u64 idx)
printk(KERN_ERR " zone_lblk_alloc_read failed\n");
return ret;
}
cbd_lblk_alloc_get(&dc->params,
lblk_alloc_elem_get(&dc->params,
dc->zone_lblk_alloc, zone_lblk, dc->lblk_alloc);
c_len = dc->lblk_alloc->len;
@ -663,10 +663,10 @@ compress_free_buffers(struct dm_compress* dc)
kfree(dc->lblk_alloc);
dc->lblk_alloc = NULL;
compress_free_pages(dc->zone_lblk_alloc, PBLK_SIZE * zone_lblk_alloc_len(&dc->params));
compress_free_pages(dc->zone_lblk_alloc, PBLK_SIZE * lblk_alloc_len(&dc->params));
dc->zone_lblk_alloc = NULL;
compress_free_pages(dc->zone_pblk_alloc, PBLK_SIZE * zone_pblk_alloc_len(&dc->params));
compress_free_pages(dc->zone_pblk_alloc, PBLK_SIZE * pblk_alloc_len(&dc->params));
dc->zone_pblk_alloc = NULL;
compress_free_pages(dc->lz4_cbuf, PBLK_SIZE * lblk_per_pblk(&dc->params));
@ -696,20 +696,20 @@ compress_alloc_buffers(struct dm_compress* dc)
}
dc->zone_pblk_alloc_idx = ZONE_NONE;
dc->zone_pblk_alloc_dirty = false;
dc->zone_pblk_alloc = compress_alloc_pages(PBLK_SIZE * zone_pblk_alloc_len(&dc->params));
dc->zone_pblk_alloc = compress_alloc_pages(PBLK_SIZE * pblk_alloc_len(&dc->params));
if (!dc->zone_pblk_alloc) {
printk(KERN_ERR "%s: Failed to alloc zone_pblk_alloc\n", __func__);
goto out_nomem;
}
dc->zone_lblk_alloc_idx = ZONE_NONE;
dc->zone_lblk_alloc = compress_alloc_pages(PBLK_SIZE * zone_lblk_alloc_len(&dc->params));
dc->zone_lblk_alloc = compress_alloc_pages(PBLK_SIZE * lblk_alloc_len(&dc->params));
if (!dc->zone_lblk_alloc) {
printk(KERN_ERR "%s: Failed to alloc zone_lblk_alloc\n", __func__);
goto out_nomem;
}
dc->lblk_num = LBLK_NONE;
dc->lblk_dirty = false;
dc->lblk_alloc = kmalloc(offsetof(struct lblk_alloc, pblk[lblk_per_pblk(&dc->params)]), GFP_KERNEL);
dc->lblk_alloc = kmalloc(offsetof(struct lblk_alloc_elem, pblk[lblk_per_pblk(&dc->params)]), GFP_KERNEL);
if (!dc->lblk_alloc) {
printk(KERN_ERR "%s: Failed to alloc lblk_alloc\n", __func__);
goto out_nomem;

View File

@ -11,7 +11,7 @@
#define PBLK_PER_SECTOR (1 << (PBLK_SHIFT - SECTOR_SHIFT))
#define LBLK_SHIFT_MIN 1
#define LBLK_SHIFT_MAX (30 - PBLK_SHIFT)
#define LBLK_SHIFT_MAX (20 - PBLK_SHIFT)
#define CBD_HEADER_BLOCKS 1
@ -45,7 +45,7 @@ struct cbd_header {
struct cbd_params params;
};
struct lblk_alloc
struct lblk_alloc_elem
{
u32 len; /* Compressed length */
u64 pblk[1]; /* Vector of physical blocks */
@ -157,13 +157,13 @@ lblk_per_pblk(const struct cbd_params* params)
}
static inline u32
zone_pblk_alloc_len(const struct cbd_params* params)
pblk_alloc_len(const struct cbd_params* params)
{
return 1;
}
static inline u32
zone_lblk_alloc_elem_len(const struct cbd_params* params)
lblk_alloc_elem_len(const struct cbd_params* params)
{
u32 elem_len_bytes = (params->lblk_shift + PBLK_SHIFT > 16) ? 4 : 2;
u32 elem_pblk_bytes = (params->nr_pblk <= 0xffff ? 2 :
@ -172,22 +172,22 @@ zone_lblk_alloc_elem_len(const struct cbd_params* params)
}
static inline u32
zone_lblk_alloc_len(const struct cbd_params* params)
lblk_alloc_len(const struct cbd_params* params)
{
return DIV_ROUND_UP(params->lblk_per_zone * zone_lblk_alloc_elem_len(params), PBLK_SIZE);
return DIV_ROUND_UP(params->lblk_per_zone * lblk_alloc_elem_len(params), PBLK_SIZE);
}
static inline u32
zone_metadata_len(const struct cbd_params* params)
{
return zone_pblk_alloc_len(params) +
zone_lblk_alloc_len(params);
return pblk_alloc_len(params) +
lblk_alloc_len(params);
}
static inline u32
zone_data_len(const struct cbd_params* params)
{
return zone_pblk_alloc_len(params) * PBLK_SIZE * BITS_PER_BYTE;
return pblk_alloc_len(params) * PBLK_SIZE * BITS_PER_BYTE;
}
static inline u32
@ -204,24 +204,24 @@ zone_off(const struct cbd_params* params, u32 idx)
}
static inline u64
zone_pblk_alloc_off(const struct cbd_params* params, u32 idx)
pblk_alloc_off(const struct cbd_params* params, u32 idx)
{
return zone_off(params, idx) + 0;
}
static inline u64
zone_lblk_alloc_off(const struct cbd_params* params, u32 idx)
lblk_alloc_off(const struct cbd_params* params, u32 idx)
{
return zone_off(params, idx) +
zone_pblk_alloc_len(params);
pblk_alloc_len(params);
}
static inline u64
zone_data_off(const struct cbd_params* params, u32 idx)
{
return zone_off(params, idx) +
zone_pblk_alloc_len(params) +
zone_lblk_alloc_len(params);
pblk_alloc_len(params) +
lblk_alloc_len(params);
}
static inline void
@ -254,7 +254,7 @@ cbd_header_put(u8* buf, const struct cbd_header* header)
/*
* XXX:
* nr_bits = zone_pblk_alloc_len(params) * PBLK_SIZE;
* nr_bits = pblk_alloc_len(params) * PBLK_SIZE;
* bit = find_next_zero_bit_le(buf, nr_bits);
* if (bit < nr_bits) {
* set_bit_le(bit, buf);
@ -294,61 +294,61 @@ cbd_bitmap_free(u8* buf, u32 idx)
}
static inline void
cbd_lblk_alloc_get(const struct cbd_params* params,
const u8* buf, u32 idx, struct lblk_alloc* alloc)
lblk_alloc_elem_get(const struct cbd_params* params,
const u8* buf, u32 idx, struct lblk_alloc_elem* elem)
{
const u8* raw = buf + idx * zone_lblk_alloc_elem_len(params);
const u8* raw = buf + idx * lblk_alloc_elem_len(params);
u32 n;
if (params->lblk_shift + PBLK_SHIFT > 16) {
alloc->len = get32_le(&raw);
elem->len = get32_le(&raw);
}
else {
alloc->len = get16_le(&raw);
elem->len = get16_le(&raw);
}
if (params->nr_pblk <= 0xffff) {
for (n = 0; n < lblk_per_pblk(params); ++n) {
alloc->pblk[n] = get16_le(&raw);
elem->pblk[n] = get16_le(&raw);
}
}
else if (params->nr_pblk <= 0xffffffff) {
for (n = 0; n < lblk_per_pblk(params); ++n) {
alloc->pblk[n] = get32_le(&raw);
elem->pblk[n] = get32_le(&raw);
}
}
else {
for (n = 0; n < lblk_per_pblk(params); ++n) {
alloc->pblk[n] = get48_le(&raw);
elem->pblk[n] = get48_le(&raw);
}
}
}
static inline void
cbd_lblk_alloc_put(const struct cbd_params* params,
void* buf, u32 idx, const struct lblk_alloc* alloc)
lblk_alloc_elem_put(const struct cbd_params* params,
void* buf, u32 idx, const struct lblk_alloc_elem* elem)
{
u8* raw = buf + idx * zone_lblk_alloc_elem_len(params);
u8* raw = buf + idx * lblk_alloc_elem_len(params);
u32 n;
if (params->lblk_shift + PBLK_SHIFT > 16) {
put32_le(&raw, alloc->len);
put32_le(&raw, elem->len);
}
else {
put16_le(&raw, alloc->len);
put16_le(&raw, elem->len);
}
if (params->nr_pblk <= 0xffff) {
for (n = 0; n < lblk_per_pblk(params); ++n) {
put16_le(&raw, alloc->pblk[n]);
put16_le(&raw, elem->pblk[n]);
}
}
else if (params->nr_pblk <= 0xffffffff) {
for (n = 0; n < lblk_per_pblk(params); ++n) {
put32_le(&raw, alloc->pblk[n]);
put32_le(&raw, elem->pblk[n]);
}
}
else {
for (n = 0; n < lblk_per_pblk(params); ++n) {
put48_le(&raw, alloc->pblk[n]);
put48_le(&raw, elem->pblk[n]);
}
}
}

View File

@ -63,13 +63,13 @@ check_one_lblk(const struct cbd_params* params,
const struct zone_metadata* zm,
u8** pblk_used)
{
struct lblk_alloc* alloc;
struct lblk_alloc_elem* alloc;
u32 n;
u64 pblk;
u32 rel_pblk;
alloc = calloc(1, offsetof(struct lblk_alloc, pblk[lblk_per_pblk(params)]));
cbd_lblk_alloc_get(params, zm->lblk_alloc, lblk, alloc);
alloc = calloc(1, offsetof(struct lblk_alloc_elem, pblk[lblk_per_pblk(params)]));
lblk_alloc_elem_get(params, zm->lblk_alloc, lblk, alloc);
printf(" lblk[%u]: len=%u\n", lblk, alloc->len);
for (n = 0; n < lblk_per_pblk(params); ++n) {
pblk = alloc->pblk[n];
@ -128,7 +128,7 @@ check_zone_metadata(const struct cbd_params* params,
pblk_used = calloc(params->nr_zones, sizeof(void*));
for (zone = 0; zone < params->nr_zones; ++zone) {
pblk_used[zone] = calloc(1, zone_pblk_alloc_len(params));
pblk_used[zone] = calloc(1, pblk_alloc_len(params));
}
for (zone = 0; zone < params->nr_zones; ++zone) {
@ -164,13 +164,13 @@ cbd_check(const char* dev,
for (zone = 0; zone < header.params.nr_zones; ++zone) {
zmvec[zone].pblk_alloc = calloc(1, PBLK_SIZE);
pblk_read(devfd,
zone_pblk_alloc_off(&header.params, zone),
zone_pblk_alloc_len(&header.params),
pblk_alloc_off(&header.params, zone),
pblk_alloc_len(&header.params),
zmvec[zone].pblk_alloc);
zmvec[zone].lblk_alloc = calloc(zone_lblk_alloc_len(&header.params), PBLK_SIZE);
zmvec[zone].lblk_alloc = calloc(lblk_alloc_len(&header.params), PBLK_SIZE);
pblk_read(devfd,
zone_lblk_alloc_off(&header.params, zone),
zone_lblk_alloc_len(&header.params),
lblk_alloc_off(&header.params, zone),
lblk_alloc_len(&header.params),
zmvec[zone].lblk_alloc);
}