From ea632367e991a94fc4de3071c5917ad23058c800 Mon Sep 17 00:00:00 2001 From: Vitaliy Filippov Date: Fri, 1 Jul 2022 11:43:28 +0300 Subject: [PATCH] Do not alter dsk.meta_offset/len to skip superblock --- src/blockstore_flush.cpp | 6 +++--- src/blockstore_init.cpp | 9 ++++----- src/blockstore_init.h | 2 +- 3 files changed, 8 insertions(+), 9 deletions(-) diff --git a/src/blockstore_flush.cpp b/src/blockstore_flush.cpp index 36aff9ab..5781c1ca 100644 --- a/src/blockstore_flush.cpp +++ b/src/blockstore_flush.cpp @@ -541,7 +541,7 @@ resume_1: data->iov = (struct iovec){ meta_old.buf, bs->dsk.meta_block_size }; data->callback = simple_callback_w; my_uring_prep_writev( - sqe, bs->dsk.meta_fd, &data->iov, 1, bs->dsk.meta_offset + meta_old.sector + sqe, bs->dsk.meta_fd, &data->iov, 1, bs->dsk.meta_offset + bs->dsk.meta_block_size + meta_old.sector ); wait_count++; } @@ -585,7 +585,7 @@ resume_1: data->iov = (struct iovec){ meta_new.buf, bs->dsk.meta_block_size }; data->callback = simple_callback_w; my_uring_prep_writev( - sqe, bs->dsk.meta_fd, &data->iov, 1, bs->dsk.meta_offset + meta_new.sector + sqe, bs->dsk.meta_fd, &data->iov, 1, bs->dsk.meta_offset + bs->dsk.meta_block_size + meta_new.sector ); wait_count++; resume_7: @@ -849,7 +849,7 @@ bool journal_flusher_co::modify_meta_read(uint64_t meta_loc, flusher_meta_write_ data->callback = simple_callback_r; wr.submitted = true; my_uring_prep_readv( - sqe, bs->dsk.meta_fd, &data->iov, 1, bs->dsk.meta_offset + wr.sector + sqe, bs->dsk.meta_fd, &data->iov, 1, bs->dsk.meta_offset + bs->dsk.meta_block_size + wr.sector ); wait_count++; } diff --git a/src/blockstore_init.cpp b/src/blockstore_init.cpp index 2dad747a..12e53e43 100644 --- a/src/blockstore_init.cpp +++ b/src/blockstore_init.cpp @@ -130,12 +130,11 @@ resume_1: } } // Skip superblock - bs->dsk.meta_offset += bs->dsk.meta_block_size; - bs->dsk.meta_len -= bs->dsk.meta_block_size; + md_offset = bs->dsk.meta_block_size; + metadata_read = bs->dsk.meta_block_size; prev_done = 0; done_len = 0; done_pos = 0; - metadata_read = 0; // Read the rest of the metadata while (1) { @@ -150,7 +149,7 @@ resume_1: GET_SQE(); data->iov = { (uint8_t*)metadata_buffer + (bs->inmemory_meta - ? metadata_read + ? metadata_read-md_offset : (prev == 1 ? bs->metadata_buf_size : 0)), bs->dsk.meta_len - metadata_read > bs->metadata_buf_size ? bs->metadata_buf_size : bs->dsk.meta_len - metadata_read, }; @@ -170,7 +169,7 @@ resume_1: if (prev_done) { void *done_buf = bs->inmemory_meta - ? ((uint8_t*)metadata_buffer + done_pos) + ? ((uint8_t*)metadata_buffer + done_pos-md_offset) : ((uint8_t*)metadata_buffer + (prev_done == 2 ? bs->metadata_buf_size : 0)); unsigned count = bs->dsk.meta_block_size / bs->dsk.clean_entry_size; for (int sector = 0; sector < done_len; sector += bs->dsk.meta_block_size) diff --git a/src/blockstore_init.h b/src/blockstore_init.h index 8b315565..8c66dfee 100644 --- a/src/blockstore_init.h +++ b/src/blockstore_init.h @@ -9,7 +9,7 @@ class blockstore_init_meta int wait_state = 0; bool zero_on_init = false; void *metadata_buffer = NULL; - uint64_t metadata_read = 0; + uint64_t metadata_read = 0, md_offset = 0; int prev = 0, prev_done = 0, done_len = 0, submitted = 0; uint64_t done_cnt = 0, done_pos = 0; uint64_t entries_loaded = 0;