From: Chandan Babu R <chandan.babu@oracle.com>
To: "Darrick J. Wong" <djwong@kernel.org>
Cc: linux-xfs@vger.kernel.org, cem@kernel.org
Subject: Re: [PATCH V2 08/23] metadump: Introduce metadump v1 operations
Date: Thu, 13 Jul 2023 10:06:05 +0530 [thread overview]
Message-ID: <87mt00joww.fsf@debian-BULLSEYE-live-builder-AMD64> (raw)
In-Reply-To: <20230712171009.GH108251@frogsfrogsfrogs>
On Wed, Jul 12, 2023 at 10:10:09 AM -0700, Darrick J. Wong wrote:
> On Tue, Jun 06, 2023 at 02:57:51PM +0530, Chandan Babu R wrote:
>> This commit moves functionality associated with writing metadump to disk into
>> a new function. It also renames metadump initialization, write and release
>> functions to reflect the fact that they work with v1 metadump files.
>>
>> The metadump initialization, write and release functions are now invoked via
>> metadump_ops->init(), metadump_ops->write() and metadump_ops->release()
>> respectively.
>>
>> Signed-off-by: Chandan Babu R <chandan.babu@oracle.com>
>> ---
>> db/metadump.c | 123 +++++++++++++++++++++++++-------------------------
>> 1 file changed, 61 insertions(+), 62 deletions(-)
>>
>> diff --git a/db/metadump.c b/db/metadump.c
>> index 266d3413..287e8f91 100644
>> --- a/db/metadump.c
>> +++ b/db/metadump.c
>> @@ -151,59 +151,6 @@ print_progress(const char *fmt, ...)
>> metadump.progress_since_warning = true;
>> }
>>
>> -/*
>> - * A complete dump file will have a "zero" entry in the last index block,
>> - * even if the dump is exactly aligned, the last index will be full of
>> - * zeros. If the last index entry is non-zero, the dump is incomplete.
>> - * Correspondingly, the last chunk will have a count < num_indices.
>> - *
>> - * Return 0 for success, -1 for failure.
>> - */
>> -
>> -static int
>> -write_index(void)
>> -{
>> - struct xfs_metablock *metablock = metadump.metablock;
>> - /*
>> - * write index block and following data blocks (streaming)
>> - */
>> - metablock->mb_count = cpu_to_be16(metadump.cur_index);
>> - if (fwrite(metablock, (metadump.cur_index + 1) << BBSHIFT, 1,
>> - metadump.outf) != 1) {
>> - print_warning("error writing to target file");
>> - return -1;
>> - }
>> -
>> - memset(metadump.block_index, 0, metadump.num_indices * sizeof(__be64));
>> - metadump.cur_index = 0;
>> - return 0;
>> -}
>> -
>> -/*
>> - * Return 0 for success, -errno for failure.
>> - */
>> -static int
>> -write_buf_segment(
>> - char *data,
>> - int64_t off,
>> - int len)
>> -{
>> - int i;
>> - int ret;
>> -
>> - for (i = 0; i < len; i++, off++, data += BBSIZE) {
>> - metadump.block_index[metadump.cur_index] = cpu_to_be64(off);
>> - memcpy(&metadump.block_buffer[metadump.cur_index << BBSHIFT],
>> - data, BBSIZE);
>> - if (++metadump.cur_index == metadump.num_indices) {
>> - ret = write_index();
>> - if (ret)
>> - return -EIO;
>> - }
>> - }
>> - return 0;
>> -}
>> -
>> /*
>> * we want to preserve the state of the metadata in the dump - whether it is
>> * intact or corrupt, so even if the buffer has a verifier attached to it we
>> @@ -240,15 +187,16 @@ write_buf(
>>
>> /* handle discontiguous buffers */
>> if (!buf->bbmap) {
>> - ret = write_buf_segment(buf->data, buf->bb, buf->blen);
>> + ret = metadump.mdops->write(buf->typ->typnm, buf->data, buf->bb,
>> + buf->blen);
>> if (ret)
>> return ret;
>> } else {
>> int len = 0;
>> for (i = 0; i < buf->bbmap->nmaps; i++) {
>> - ret = write_buf_segment(buf->data + BBTOB(len),
>> - buf->bbmap->b[i].bm_bn,
>> - buf->bbmap->b[i].bm_len);
>> + ret = metadump.mdops->write(buf->typ->typnm,
>> + buf->data + BBTOB(len), buf->bbmap->b[i].bm_bn,
>> + buf->bbmap->b[i].bm_len);
>> if (ret)
>> return ret;
>> len += buf->bbmap->b[i].bm_len;
>> @@ -3010,7 +2958,7 @@ done:
>> }
>>
>> static int
>> -init_metadump(void)
>> +init_metadump_v1(void)
>> {
>> metadump.metablock = (xfs_metablock_t *)calloc(BBSIZE + 1, BBSIZE);
>> if (metadump.metablock == NULL) {
>> @@ -3051,12 +2999,61 @@ init_metadump(void)
>> return 0;
>> }
>>
>> +static int
>> +end_write_metadump_v1(void)
>> +{
>> + /*
>> + * write index block and following data blocks (streaming)
>> + */
>> + metadump.metablock->mb_count = cpu_to_be16(metadump.cur_index);
>> + if (fwrite(metadump.metablock, (metadump.cur_index + 1) << BBSHIFT, 1,
>> + metadump.outf) != 1) {
>> + print_warning("error writing to target file");
>> + return -1;
>> + }
>> +
>> + memset(metadump.block_index, 0, metadump.num_indices * sizeof(__be64));
>> + metadump.cur_index = 0;
>> + return 0;
>> +}
>> +
>> +static int
>> +write_metadump_v1(
>> + enum typnm type,
>> + char *data,
>> + xfs_daddr_t off,
>> + int len)
>> +{
>> + int i;
>> + int ret;
>> +
>> + for (i = 0; i < len; i++, off++, data += BBSIZE) {
>> + metadump.block_index[metadump.cur_index] = cpu_to_be64(off);
>> + memcpy(&metadump.block_buffer[metadump.cur_index << BBSHIFT],
>> + data, BBSIZE);
>> + if (++metadump.cur_index == metadump.num_indices) {
>> + ret = end_write_metadump_v1();
>> + if (ret)
>> + return -EIO;
>> + }
>> + }
>> +
>> + return 0;
>> +}
>> +
>> static void
>> -release_metadump(void)
>> +release_metadump_v1(void)
>> {
>> free(metadump.metablock);
>> }
>>
>> +static struct metadump_ops metadump1_ops = {
>> + .init = init_metadump_v1,
>> + .write = write_metadump_v1,
>> + .end_write = end_write_metadump_v1,
>> + .release = release_metadump_v1,
>> +};
>> +
>> static int
>> metadump_f(
>> int argc,
>> @@ -3193,7 +3190,9 @@ metadump_f(
>> }
>> }
>>
>> - ret = init_metadump();
>> + metadump.mdops = &metadump1_ops;
>> +
>> + ret = metadump.mdops->init();
>> if (ret)
>> goto out;
>>
>> @@ -3216,7 +3215,7 @@ metadump_f(
>>
>> /* write the remaining index */
>> if (!exitcode)
>> - exitcode = write_index() < 0;
>> + exitcode = metadump.mdops->end_write() < 0;
>
> Now that I see ->end_write in usage, I think it would be better named
> ->finish_dump or something like that. It's only called once, right?
>
finish_dump() is a much better name for the callback. I will make the change
before posting the next version of the patchset.
--
chandan
next prev parent reply other threads:[~2023-07-13 6:39 UTC|newest]
Thread overview: 54+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <2ExBvYxYPnyiGvOJzODNvNXx_bfn5RWAck_7UcV7OvxkF6fgAy6UZtI6d2-FdmxoIeBLPPX0vwW9uaJxBa5Rmg==@protonmail.internalid>
2023-06-06 9:27 ` [PATCH V2 00/23] Metadump v2 Chandan Babu R
2023-06-06 9:27 ` [PATCH V2 01/23] metadump: Use boolean values true/false instead of 1/0 Chandan Babu R
2023-06-06 9:27 ` [PATCH V2 02/23] mdrestore: Fix logic used to check if target device is large enough Chandan Babu R
2023-06-06 9:27 ` [PATCH V2 03/23] metadump: Declare boolean variables with bool type Chandan Babu R
2023-06-06 15:17 ` Darrick J. Wong
2023-06-06 9:27 ` [PATCH V2 04/23] metadump: Define and use struct metadump Chandan Babu R
2023-07-12 18:12 ` Darrick J. Wong
2023-07-20 13:13 ` Carlos Maiolino
2023-07-20 17:22 ` Darrick J. Wong
2023-06-06 9:27 ` [PATCH V2 05/23] metadump: Add initialization and release functions Chandan Babu R
2023-06-06 9:27 ` [PATCH V2 06/23] metadump: Postpone invocation of init_metadump() Chandan Babu R
2023-07-12 17:00 ` Darrick J. Wong
2023-06-06 9:27 ` [PATCH V2 07/23] metadump: Introduce struct metadump_ops Chandan Babu R
2023-07-12 17:06 ` Darrick J. Wong
2023-06-06 9:27 ` [PATCH V2 08/23] metadump: Introduce metadump v1 operations Chandan Babu R
2023-07-12 17:10 ` Darrick J. Wong
2023-07-13 4:36 ` Chandan Babu R [this message]
2023-06-06 9:27 ` [PATCH V2 09/23] metadump: Rename XFS_MD_MAGIC to XFS_MD_MAGIC_V1 Chandan Babu R
2023-06-06 9:27 ` [PATCH V2 10/23] metadump: Define metadump v2 ondisk format structures and macros Chandan Babu R
2023-07-12 17:18 ` Darrick J. Wong
2023-07-13 4:37 ` Chandan Babu R
2023-06-06 9:27 ` [PATCH V2 11/23] metadump: Define metadump ops for v2 format Chandan Babu R
2023-07-12 17:22 ` Darrick J. Wong
2023-07-13 4:45 ` Chandan Babu R
2023-06-06 9:27 ` [PATCH V2 12/23] xfs_db: Add support to read from external log device Chandan Babu R
2023-07-12 17:35 ` Darrick J. Wong
2023-07-13 5:24 ` Chandan Babu R
2023-06-06 9:27 ` [PATCH V2 13/23] metadump: Add support for passing version option Chandan Babu R
2023-06-06 9:27 ` [PATCH V2 14/23] mdrestore: Declare boolean variables with bool type Chandan Babu R
2023-07-12 17:35 ` Darrick J. Wong
2023-06-06 9:27 ` [PATCH V2 15/23] mdrestore: Define and use struct mdrestore Chandan Babu R
2023-07-12 18:12 ` Darrick J. Wong
2023-06-06 9:27 ` [PATCH V2 16/23] mdrestore: Detect metadump v1 magic before reading the header Chandan Babu R
2023-07-12 17:38 ` Darrick J. Wong
2023-06-06 9:28 ` [PATCH V2 17/23] mdrestore: Add open_device(), read_header() and show_info() functions Chandan Babu R
2023-07-12 17:46 ` Darrick J. Wong
2023-07-13 5:27 ` Chandan Babu R
2023-06-06 9:28 ` [PATCH V2 18/23] mdrestore: Introduce struct mdrestore_ops Chandan Babu R
2023-06-06 9:28 ` [PATCH V2 19/23] mdrestore: Replace metadump header pointer argument with generic pointer type Chandan Babu R
2023-07-12 17:55 ` Darrick J. Wong
2023-07-13 6:08 ` Chandan Babu R
2023-06-06 9:28 ` [PATCH V2 20/23] mdrestore: Introduce mdrestore v1 operations Chandan Babu R
2023-07-12 17:57 ` Darrick J. Wong
2023-06-06 9:28 ` [PATCH V2 21/23] mdrestore: Extract target device size verification into a function Chandan Babu R
2023-06-06 9:28 ` [PATCH V2 22/23] mdrestore: Define mdrestore ops for v2 format Chandan Babu R
2023-07-12 18:10 ` Darrick J. Wong
2023-07-13 6:27 ` Chandan Babu R
2023-07-13 14:22 ` Darrick J. Wong
2023-06-06 9:28 ` [PATCH V2 23/23] mdrestore: Add support for passing log device as an argument Chandan Babu R
2023-07-12 18:10 ` Darrick J. Wong
[not found] ` <181e7cbefa39e2dc59f2564c25966ac0d05aa6530483b7eb5d649de9a3d1cf7f@mu.id>
2023-07-13 6:48 ` Chandan Babu R
2023-06-06 12:10 ` [PATCH V2 00/23] Metadump v2 Carlos Maiolino
2023-06-06 12:38 ` Chandan Babu R
2023-06-06 16:04 ` Carlos Maiolino
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=87mt00joww.fsf@debian-BULLSEYE-live-builder-AMD64 \
--to=chandan.babu@oracle.com \
--cc=cem@kernel.org \
--cc=djwong@kernel.org \
--cc=linux-xfs@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox