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 <zab@versity.com>
This commit is contained in:
Zach Brown
2016-04-02 20:30:45 -04:00
parent 544fd1ba9a
commit c4fcf40097
3 changed files with 17 additions and 16 deletions
+2 -4
View File
@@ -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
+1 -1
View File
@@ -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;
+14 -11
View File
@@ -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;
}