From 3333d89f82b0ae54a9738dc2a9a73886afa8cd99 Mon Sep 17 00:00:00 2001 From: Zach Brown Date: Mon, 2 Jan 2017 09:03:19 -0800 Subject: [PATCH] Assign next seg seq from super We hadn't yet assigned real sequence numbers to the segments. Let's track the next sequence in the super block and assign it to segments as we write the first new item in each. Signed-off-by: Zach Brown --- kmod/src/format.h | 3 ++- kmod/src/seg.c | 7 +++++-- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/kmod/src/format.h b/kmod/src/format.h index c611ea32..6495d457 100644 --- a/kmod/src/format.h +++ b/kmod/src/format.h @@ -151,7 +151,7 @@ struct scoutfs_segment_block { __le32 crc; __le32 _padding; __le64 segno; - __le64 max_seq; + __le64 seq; __le32 nr_items; __le32 _moar_pads; struct scoutfs_segment_item items[0]; @@ -342,6 +342,7 @@ struct scoutfs_super_block { __le64 ring_blocks; __le64 ring_tail_block; __le64 ring_gen; + __le64 next_seg_seq; __le64 buddy_blocks; struct scoutfs_buddy_root buddy_root; struct scoutfs_btree_root btree_root; diff --git a/kmod/src/seg.c b/kmod/src/seg.c index c16c2e2d..520ed9e3 100644 --- a/kmod/src/seg.c +++ b/kmod/src/seg.c @@ -466,6 +466,8 @@ void scoutfs_seg_first_item(struct super_block *sb, struct scoutfs_segment *seg, struct kvec *key, struct kvec *val, unsigned int nr_items, unsigned int key_bytes) { + struct scoutfs_sb_info *sbi = SCOUTFS_SB(sb); + struct scoutfs_super_block *super = &sbi->super; struct scoutfs_segment_block *sblk = off_ptr(seg, 0); struct native_item item; SCOUTFS_DECLARE_KVEC(item_key); @@ -475,7 +477,8 @@ void scoutfs_seg_first_item(struct super_block *sb, struct scoutfs_segment *seg, /* XXX the segment block header is a mess, be better */ sblk->segno = cpu_to_le64(seg->segno); - sblk->max_seq = cpu_to_le64(1); + sblk->seq = super->next_seg_seq; + le64_add_cpu(&super->next_seg_seq, 1); key_off = pos_off(seg, nr_items); val_off = key_off + key_bytes; @@ -540,7 +543,7 @@ int scoutfs_seg_manifest_add(struct super_block *sb, kvec_from_pages(seg, last, item.key_off, item.key_len); return scoutfs_manifest_add(sb, first, last, le64_to_cpu(sblk->segno), - le64_to_cpu(sblk->max_seq), level); + le64_to_cpu(sblk->seq), level); } int scoutfs_seg_setup(struct super_block *sb)