mirror of
https://github.com/versity/scoutfs.git
synced 2026-07-30 03:53:13 +00:00
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:
+2
-4
@@ -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
@@ -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
@@ -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;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user