From: Luca Di Maio <luca.dimaio1@gmail.com>
To: linux-xfs@vger.kernel.org
Cc: Luca Di Maio <luca.dimaio1@gmail.com>,
dimitri.ledkov@chainguard.dev, smoser@chainguard.dev,
djwong@kernel.org, hch@infradead.org
Subject: [PATCH v8 0/2] mkfs: add ability to populate filesystem from directory
Date: Thu, 1 May 2025 10:15:50 +0200 [thread overview]
Message-ID: <20250501081552.1328703-1-luca.dimaio1@gmail.com> (raw)
Currently the only way to pre populate an XFS partition is via the
prototype file. While it works it has some limitations like:
- not allowed spaces in file names
- not preserving timestamps of original inodes
This series adds a new -P option to mkfs.xfs that allows users to
populate a newly created filesystem directly from an existing directory.
While similar to the prototype functionality, this doesn't require
writing a prototype file.
The implementation preserves file and directory attributes (ownership,
permissions, timestamps) from the source directory when copying content
to the new filesystem.
[v1] -> [v2]
remove changes to protofile spec
ensure backward compatibility
[v2] -> [v3]
use inode_set_[acm]time() as suggested
avoid copying atime and ctime
they are often problematic for reproducibility, and
mtime is the important information to preserve anyway
[v3] -> [v4]
rewrite functionality to populate directly from an input directory
this is similar to mkfs.ext4 option.
[v4] -> [v5]
reorder patch to make it easier to review
reflow to keep code below 80 chars
use _() macro in prints
add SPDX headers to new files
fix comment styling
move from typedef to structs
move direntry handling to own function
[v5] -> [v6]
rebase on 6.14
[v6] -> [v7]
move functionality to common -p flag
add noatime flag to skip atime copy and set to current time
set ctime/crtime to current time
preserve hardlinks
preserve extended attributes for all file/dir types
add fsxattr to copied files/dirs
[v7] -> [v8]
changed directory source validation to use stat() instead of open()
changed hardlink tracker to store inode numbers instead of inode pointers
fixed path buffer handling for directory traversal
handle blocking FIFOs filetypes
handle hardlinks of symlinks
improve setup_proto and parse proto using structured xfs_proto_source type
renamed noatime to preserve_atime with inverted logic
specify EBADF fgetxattr() and flistxattr() fallback for O_PATH fds
switch to calloc() to initialize hardlinks_tracker
switch to reallocarray() for hardlinks_tracker resize
Luca Di Maio (2):
proto: add ability to populate a filesystem from a directory
mkfs: modify -p flag to populate a filesystem from a directory
man/man8/mkfs.xfs.8.in | 41 ++-
mkfs/proto.c | 754 ++++++++++++++++++++++++++++++++++++++++-
mkfs/proto.h | 18 +-
mkfs/xfs_mkfs.c | 23 +-
4 files changed, 804 insertions(+), 32 deletions(-)
--
2.49.0
next reply other threads:[~2025-05-01 8:16 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-05-01 8:15 Luca Di Maio [this message]
2025-05-01 8:15 ` [PATCH v8 1/2] proto: add ability to populate a filesystem from a directory Luca Di Maio
2025-05-01 22:17 ` Darrick J. Wong
2025-05-01 8:15 ` [PATCH v8 2/2] mkfs: modify -p flag " Luca Di Maio
2025-05-01 22:18 ` Darrick J. Wong
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=20250501081552.1328703-1-luca.dimaio1@gmail.com \
--to=luca.dimaio1@gmail.com \
--cc=dimitri.ledkov@chainguard.dev \
--cc=djwong@kernel.org \
--cc=hch@infradead.org \
--cc=linux-xfs@vger.kernel.org \
--cc=smoser@chainguard.dev \
/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