header.alignment = block_size;
else
header.alignment = 16; // at least stay word aligned on 64bit machines...
+
header.start = get_top();
+ /* FileStore::mkfs initializes the fs op sequence file at 1. Therefore,
+ * the first entry written must be at sequence 2.*/
+ header.start_seq = 2;
+
print_header();
// static zeroed buffer for alignment padding
// find next entry
read_pos = header.start;
- uint64_t seq = 0;
+ uint64_t seq = header.start_seq;
while (1) {
bufferlist bl;
off64_t old_pos = read_pos;
}
if (!journalq.empty()) {
header.start = journalq.front().second;
+ header.start_seq = journalq.front().first + 1;
} else {
header.start = write_pos;
+ header.start_seq = journaled_seq + 1;
}
must_write_header = true;
print_header();
int64_t max_size; // max size of journal ring buffer
int64_t start; // offset of first entry
uint64_t committed_up_to; // committed up to
+ uint64_t start_seq; // entry at header.start
header_t() :
flags(0), block_size(0), alignment(0), max_size(0), start(0),
- committed_up_to(0) {}
+ committed_up_to(0), start_seq(0) {}
void clear() {
start = block_size;
}
void encode(bufferlist& bl) const {
- __u32 v = 3;
+ __u32 v = 4;
::encode(v, bl);
bufferlist em;
{
::encode(max_size, em);
::encode(start, em);
::encode(committed_up_to, em);
+ ::encode(start_seq, em);
}
::encode(em, bl);
}
::decode(max_size, bl);
::decode(start, bl);
committed_up_to = 0;
+ start_seq = 0;
return;
}
bufferlist em;
::decode(alignment, t);
::decode(max_size, t);
::decode(start, t);
+
if (v > 2)
::decode(committed_up_to, t);
else
committed_up_to = 0;
+
+ if (v > 3)
+ ::decode(start_seq, t);
+ else
+ start_seq = 0;
}
} header;