Rename some stuff and limit LBLK_SHIFT_MAX
This commit is contained in:
parent
2e18584af3
commit
0ca9fc789f
|
@ -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;
|
||||
|
|
|
@ -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]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue