From c4fcf40097266b275c1e8936c493fe04b3ccdf16 Mon Sep 17 00:00:00 2001 From: Zach Brown Date: Sat, 2 Apr 2016 20:30:45 -0400 Subject: [PATCH] Update ring manifest deletion entries The ring now contains stores full manifest entries that are deleted rather than just their block number. Signed-off-by: Zach Brown --- utils/src/format.h | 6 ++---- utils/src/mkfs.c | 2 +- utils/src/print.c | 25 ++++++++++++++----------- 3 files changed, 17 insertions(+), 16 deletions(-) diff --git a/utils/src/format.h b/utils/src/format.h index d5e69bcd..c097d0c4 100644 --- a/utils/src/format.h +++ b/utils/src/format.h @@ -153,7 +153,7 @@ enum { * isn't unused key space between blocks in a level. We might search * blocks when we didn't need to. */ -struct scoutfs_ring_manifest_entry { +struct scoutfs_manifest_entry { __le64 blkno; __le64 seq; __u8 level; @@ -161,9 +161,7 @@ struct scoutfs_ring_manifest_entry { struct scoutfs_key last; } __packed; -struct scoutfs_ring_del_manifest { - __le64 blkno; -} __packed; +#define SCOUTFS_MANIFESTS_PER_LEVEL 10 /* 2^22 * 10^13 > 2^64 */ #define SCOUTFS_MAX_LEVEL 13 diff --git a/utils/src/mkfs.c b/utils/src/mkfs.c index c48de7f9..5658d3d9 100644 --- a/utils/src/mkfs.c +++ b/utils/src/mkfs.c @@ -47,7 +47,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_manifest_entry *mani; + struct scoutfs_manifest_entry *mani; struct scoutfs_ring_bitmap *bm; struct scoutfs_item_block *iblk; struct scoutfs_bloom_bits bits; diff --git a/utils/src/print.c b/utils/src/print.c index 4bfd2244..9dc322ac 100644 --- a/utils/src/print.c +++ b/utils/src/print.c @@ -260,8 +260,7 @@ static char *ent_type_str(u8 type) static void print_ring_entry(int fd, struct scoutfs_ring_entry *ent) { - struct scoutfs_ring_manifest_entry *ment; - struct scoutfs_ring_del_manifest *del; + struct scoutfs_manifest_entry *ment; struct scoutfs_ring_bitmap *bm; printf(" entry:\n" @@ -281,9 +280,14 @@ static void print_ring_entry(int fd, struct scoutfs_ring_entry *ent) 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)); + ment = (void *)(ent + 1); + printf(" blkno: %llu\n" + " seq: %llu\n" + " level: %u\n" + " first: "SKF"\n" + " last: "SKF"\n", + le64_to_cpu(ment->blkno), le64_to_cpu(ment->seq), + ment->level, SKA(&ment->first), SKA(&ment->last)); break; case SCOUTFS_RING_BITMAP: bm = (void *)(ent + 1); @@ -298,19 +302,18 @@ 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_manifest_entry *add; - struct scoutfs_ring_del_manifest *del; + struct scoutfs_manifest_entry *ment; u64 bit; switch(ent->type) { case SCOUTFS_RING_ADD_MANIFEST: - add = (void *)(ent + 1); - bit = le64_to_cpu(add->blkno) >> SCOUTFS_CHUNK_BLOCK_SHIFT; + ment = (void *)(ent + 1); + bit = le64_to_cpu(ment->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; + ment = (void *)(ent + 1); + bit = le64_to_cpu(ment->blkno) >> SCOUTFS_CHUNK_BLOCK_SHIFT; clear_le_bit(log_segs, bit); break; }