mirror of
https://github.com/versity/scoutfs.git
synced 2025-12-23 05:25:18 +00:00
Minor ring manifest format updates
Update to the format changes that were made while implementing ring replay in the kernel.
This commit is contained in:
@@ -24,6 +24,7 @@
|
||||
#define SCOUTFS_CHUNK_SHIFT 22
|
||||
#define SCOUTFS_CHUNK_SIZE (1 << SCOUTFS_CHUNK_SHIFT)
|
||||
#define SCOUTFS_CHUNK_BLOCK_SHIFT (SCOUTFS_CHUNK_SHIFT - SCOUTFS_BLOCK_SHIFT)
|
||||
#define SCOUTFS_CHUNK_BLOCK_MASK ((1 << SCOUTFS_CHUNK_BLOCK_SHIFT) - 1)
|
||||
#define SCOUTFS_BLOCKS_PER_CHUNK (1 << SCOUTFS_CHUNK_BLOCK_SHIFT)
|
||||
|
||||
/*
|
||||
@@ -93,6 +94,10 @@ struct scoutfs_ring_map_block {
|
||||
__le64 blknos[0];
|
||||
} __packed;
|
||||
|
||||
#define SCOUTFS_RING_MAP_BLOCKS \
|
||||
((SCOUTFS_BLOCK_SIZE - sizeof(struct scoutfs_ring_map_block)) / \
|
||||
sizeof(__le64))
|
||||
|
||||
struct scoutfs_ring_entry {
|
||||
u8 type;
|
||||
__le16 len;
|
||||
@@ -112,15 +117,11 @@ struct scoutfs_ring_block {
|
||||
} __packed;
|
||||
|
||||
enum {
|
||||
SCOUTFS_RING_REMOVE_MANIFEST = 0,
|
||||
SCOUTFS_RING_ADD_MANIFEST,
|
||||
SCOUTFS_RING_ADD_MANIFEST = 0,
|
||||
SCOUTFS_RING_DEL_MANIFEST,
|
||||
SCOUTFS_RING_BITMAP,
|
||||
};
|
||||
|
||||
struct scoutfs_ring_remove_manifest {
|
||||
__le64 blkno;
|
||||
} __packed;
|
||||
|
||||
/*
|
||||
* Including both keys might make the manifest too large. It might be
|
||||
* better to only include one key and infer a block's range from the
|
||||
@@ -128,7 +129,7 @@ struct scoutfs_ring_remove_manifest {
|
||||
* isn't unused key space between blocks in a level. We might search
|
||||
* blocks when we didn't need to.
|
||||
*/
|
||||
struct scoutfs_ring_add_manifest {
|
||||
struct scoutfs_ring_manifest_entry {
|
||||
__le64 blkno;
|
||||
__le64 seq;
|
||||
__u8 level;
|
||||
@@ -136,6 +137,13 @@ struct scoutfs_ring_add_manifest {
|
||||
struct scoutfs_key last;
|
||||
} __packed;
|
||||
|
||||
struct scoutfs_ring_del_manifest {
|
||||
__le64 blkno;
|
||||
} __packed;
|
||||
|
||||
/* 2^22 * 10^13 > 2^64 */
|
||||
#define SCOUTFS_MAX_LEVEL 13
|
||||
|
||||
struct scoutfs_ring_bitmap {
|
||||
__le32 offset;
|
||||
__le64 bits[2];
|
||||
|
||||
@@ -46,7 +46,7 @@ static int write_new_fs(char *path, int fd)
|
||||
struct scoutfs_ring_map_block *map;
|
||||
struct scoutfs_ring_block *ring;
|
||||
struct scoutfs_ring_entry *ent;
|
||||
struct scoutfs_ring_add_manifest *mani;
|
||||
struct scoutfs_ring_manifest_entry *mani;
|
||||
struct scoutfs_ring_bitmap *bm;
|
||||
struct scoutfs_item_block *iblk;
|
||||
struct scoutfs_item_header *ihdr;
|
||||
|
||||
@@ -154,10 +154,10 @@ static int print_log_segments(int fd, __le64 *log_segs, u64 total_chunks)
|
||||
static char *ent_type_str(u8 type)
|
||||
{
|
||||
switch (type) {
|
||||
case SCOUTFS_RING_REMOVE_MANIFEST:
|
||||
return "REMOVE_MANIFEST";
|
||||
case SCOUTFS_RING_ADD_MANIFEST:
|
||||
return "ADD_MANIFEST";
|
||||
case SCOUTFS_RING_DEL_MANIFEST:
|
||||
return "DEL_MANIFEST";
|
||||
case SCOUTFS_RING_BITMAP:
|
||||
return "BITMAP";
|
||||
default:
|
||||
@@ -167,8 +167,8 @@ static char *ent_type_str(u8 type)
|
||||
|
||||
static void print_ring_entry(int fd, struct scoutfs_ring_entry *ent)
|
||||
{
|
||||
struct scoutfs_ring_remove_manifest *rem;
|
||||
struct scoutfs_ring_add_manifest *add;
|
||||
struct scoutfs_ring_manifest_entry *ment;
|
||||
struct scoutfs_ring_del_manifest *del;
|
||||
struct scoutfs_ring_bitmap *bm;
|
||||
|
||||
printf(" entry:\n"
|
||||
@@ -177,20 +177,20 @@ static void print_ring_entry(int fd, struct scoutfs_ring_entry *ent)
|
||||
ent->type, ent_type_str(ent->type), le16_to_cpu(ent->len));
|
||||
|
||||
switch(ent->type) {
|
||||
case SCOUTFS_RING_REMOVE_MANIFEST:
|
||||
rem = (void *)(ent + 1);
|
||||
printf(" blkno: %llu\n",
|
||||
le64_to_cpu(rem->blkno));
|
||||
break;
|
||||
case SCOUTFS_RING_ADD_MANIFEST:
|
||||
add = (void *)(ent + 1);
|
||||
ment = (void *)(ent + 1);
|
||||
printf(" blkno: %llu\n"
|
||||
" seq: %llu\n"
|
||||
" level: %u\n"
|
||||
" first: "SKF"\n"
|
||||
" last: "SKF"\n",
|
||||
le64_to_cpu(add->blkno), le64_to_cpu(add->seq),
|
||||
add->level, SKA(&add->first), SKA(&add->last));
|
||||
le64_to_cpu(ment->blkno), le64_to_cpu(ment->seq),
|
||||
ment->level, SKA(&ment->first), SKA(&ment->last));
|
||||
break;
|
||||
case SCOUTFS_RING_DEL_MANIFEST:
|
||||
del = (void *)(ent + 1);
|
||||
printf(" blkno: %llu\n",
|
||||
le64_to_cpu(del->blkno));
|
||||
break;
|
||||
case SCOUTFS_RING_BITMAP:
|
||||
bm = (void *)(ent + 1);
|
||||
@@ -205,21 +205,21 @@ static void print_ring_entry(int fd, struct scoutfs_ring_entry *ent)
|
||||
static void update_log_segs(struct scoutfs_ring_entry *ent,
|
||||
__le64 *log_segs)
|
||||
{
|
||||
struct scoutfs_ring_remove_manifest *rem;
|
||||
struct scoutfs_ring_add_manifest *add;
|
||||
struct scoutfs_ring_manifest_entry *add;
|
||||
struct scoutfs_ring_del_manifest *del;
|
||||
u64 bit;
|
||||
|
||||
switch(ent->type) {
|
||||
case SCOUTFS_RING_REMOVE_MANIFEST:
|
||||
rem = (void *)(ent + 1);
|
||||
bit = le64_to_cpu(rem->blkno) >> SCOUTFS_CHUNK_BLOCK_SHIFT;
|
||||
clear_le_bit(log_segs, bit);
|
||||
break;
|
||||
case SCOUTFS_RING_ADD_MANIFEST:
|
||||
add = (void *)(ent + 1);
|
||||
bit = le64_to_cpu(add->blkno) >> SCOUTFS_CHUNK_BLOCK_SHIFT;
|
||||
set_le_bit(log_segs, bit);
|
||||
break;
|
||||
case SCOUTFS_RING_DEL_MANIFEST:
|
||||
del = (void *)(ent + 1);
|
||||
bit = le64_to_cpu(del->blkno) >> SCOUTFS_CHUNK_BLOCK_SHIFT;
|
||||
clear_le_bit(log_segs, bit);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user