On Tue, Oct 31, 2023 at 09:46:40AM -0700, Darrick J. Wong wrote: > On Mon, Jul 24, 2023 at 10:05:04AM +0530, Chandan Babu R wrote: > > Hi all, > > > > This patch series extends metadump/mdrestore tools to be able to dump > > and restore contents of an external log device. It also adds the > > ability to copy larger blocks (e.g. 4096 bytes instead of 512 bytes) > > into the metadump file. These objectives are accomplished by > > introducing a new metadump file format. > > Gentle maintainer ping: Carlos, do you have any thoughts about this > series? The only unaddressed review comment was <cough> me asking for > code golf around patch 18 or so. Do you (or anyone else) see any > problems that I've not spotted? Hi, it's been a while, but I looked into this series before, and I was mostly ok with it, I was actually waiting for a follow-up patch addressing your comments on patch 19, regarding mdrestore ops definition. My emails have been a bit funky recently, did I miss a new version of this series? Carlos > > --D > > > > > I have tested the patchset by extending metadump/mdrestore tests in > > fstests to cover the newly introduced metadump v2 format. The tests > > can be found at > > https://github.com/chandanr/xfstests/commits/metadump-v2. > > > > The patch series can also be obtained from > > https://github.com/chandanr/xfsprogs-dev/commits/metadump-v2. > > > > Darrick, Please note that I have removed your RVB from "metadump: Add > > support for passing version option" patch. copy_log() and metadump_f() > > were invoking set_log_cur() for both "internal log" and "external > > log". In the V3 patchset, I have modified the copy_log() function to, > > 1. Invoke set_log_cur() when the filesystem has an external log. > > 2. Invoke set_cur() when the filesystem has an internal log. > > > > Changelog: > > V2 -> V3: > > 1. Document the meanings of metadump v2's ondisk flags. > > 2. Rename metadump_ops->end_write() to metadump_ops->finish_dump(). > > 3. Pass a pointer to the newly introduced "union mdrestore_headers" > > to callbacks in "struct mdrestore_ops" instead of a pointer to > > "void". > > 4. Use set_log_cur() only when metadump has to be read from an > > external log device. > > 5. Verify that primary superblock read from metadump file was indeed > > read from the data device. > > 6. Fix indentation issues. > > > > V1 -> V2: > > 1. Introduce the new incompat flag XFS_MD2_INCOMPAT_EXTERNALLOG to > > indicate that the metadump file contains data obtained from an > > external log. > > 2. Interpret bits 54 and 55 of xfs_meta_extent.xme_addr as a counter > > such that 00 maps to the data device and 01 maps to the log > > device. > > 3. Define the new function set_log_cur() to read from > > internal/external log device. This allows us to continue using > > TYP_LOG to read from both internal and external log. > > 4. In order to support reading metadump from a pipe, mdrestore now > > reads the first four bytes of the header to determine the > > metadump version rather than reading the entire header in a > > single call to fread(). > > 5. Add an ASCII diagram to describe metadump v2's ondisk layout in > > xfs_metadump.h. > > 6. Update metadump's man page to indicate that metadump in v2 format > > is generated by default if the filesystem has an external log and > > the metadump version to use is not explicitly mentioned on the > > command line. > > 7. Remove '_metadump' suffix from function pointer names in "struct > > metadump_ops". > > 8. Use xfs_daddr_t type for declaring variables containing disk > > offset value. > > 9. Use bool type rather than int for variables holding a boolean > > value. > > 11. Remove unnecessary whitespace. > > > > > > Chandan Babu R (23): > > metadump: Use boolean values true/false instead of 1/0 > > mdrestore: Fix logic used to check if target device is large enough > > metadump: Declare boolean variables with bool type > > metadump: Define and use struct metadump > > metadump: Add initialization and release functions > > metadump: Postpone invocation of init_metadump() > > metadump: Introduce struct metadump_ops > > metadump: Introduce metadump v1 operations > > metadump: Rename XFS_MD_MAGIC to XFS_MD_MAGIC_V1 > > metadump: Define metadump v2 ondisk format structures and macros > > metadump: Define metadump ops for v2 format > > xfs_db: Add support to read from external log device > > metadump: Add support for passing version option > > mdrestore: Declare boolean variables with bool type > > mdrestore: Define and use struct mdrestore > > mdrestore: Detect metadump v1 magic before reading the header > > mdrestore: Add open_device(), read_header() and show_info() functions > > mdrestore: Introduce struct mdrestore_ops > > mdrestore: Replace metadump header pointer argument with a union > > pointer > > mdrestore: Introduce mdrestore v1 operations > > mdrestore: Extract target device size verification into a function > > mdrestore: Define mdrestore ops for v2 format > > mdrestore: Add support for passing log device as an argument > > > > db/io.c | 56 ++- > > db/io.h | 2 + > > db/metadump.c | 777 ++++++++++++++++++++++++-------------- > > db/xfs_metadump.sh | 3 +- > > include/xfs_metadump.h | 70 +++- > > man/man8/xfs_mdrestore.8 | 8 + > > man/man8/xfs_metadump.8 | 14 + > > mdrestore/xfs_mdrestore.c | 497 ++++++++++++++++++------ > > 8 files changed, 1014 insertions(+), 413 deletions(-) > > > > -- > > 2.39.1 > >