From: "Darrick J. Wong" <djwong@kernel.org>
To: liuh <liuhuan01@kylinos.cn>
Cc: linux-xfs@vger.kernel.org
Subject: Re: [PATCH v3] mkfs: simplify setup_proto file status checks
Date: Mon, 29 Jun 2026 16:47:39 -0700 [thread overview]
Message-ID: <20260629234739.GE6078@frogsfrogsfrogs> (raw)
In-Reply-To: <20260629100847.20392-2-liuhuan01@kylinos.cn>
On Mon, Jun 29, 2026 at 06:08:48PM +0800, liuh wrote:
> setup_proto() calls filesize() before validating the source type with
> fstat(), even though both operations ultimately require the same file
> status information.
>
> Perform a single fstat() immediately after opening the source path and
> reuse the resulting metadata for both source type validation and file
> size retrieval. This simplifies the setup logic and eliminates a
> redundant metadata lookup.
>
> Add O_NONBLOCK to open() to avoid blocking on special file types
> (e.g. FIFOs or device nodes). Descriptor is only used for fstat(),
> so semantics are unchanged.
Are you sure?? The openat manpage says this about regular files:
"Note that this flag has no effect for regular files and block devices;
that is, I/O operations will (briefly) block when device activity is
required, regardless of whether O_NONBLOCK is set. Since O_NONBLOCK
semantics might eventually be implemented, applications should not
depend upon blocking behavior when specifying this flag for regular
files and block devices."
So while the behavior might not be different *today*, that's no
guarantee that O_NONBLOCK won't ever get turned into RWF_NOWAIT
tomorrow. If people want to pass in FIFOs and sockets as "protofiles"
that then hang, that's their problem.
Please just leave the open flags alone; if you want to explore
O_NONBLOCK then do it in a separate patch.
--D
> Signed-off-by: liuh <liuhuan01@kylinos.cn>
> ---
> mkfs/proto.c | 17 ++++++++++++++---
> 1 file changed, 14 insertions(+), 3 deletions(-)
>
> diff --git a/mkfs/proto.c b/mkfs/proto.c
> index a460aebd..c14e035f 100644
> --- a/mkfs/proto.c
> +++ b/mkfs/proto.c
> @@ -82,14 +82,17 @@ setup_proto(
> return result;
> }
>
> - if ((fd = open(fname, O_RDONLY)) < 0 || (size = filesize(fd)) < 0) {
> + if ((fd = open(fname, O_RDONLY|O_NONBLOCK)) < 0) {
> fprintf(stderr, _("%s: failed to open %s: %s\n"),
> progname, fname, strerror(errno));
> goto out_fail;
> }
>
> - if (fstat(fd, &statbuf) < 0)
> - fail(_("invalid or unreadable source path"), errno);
> + if (fstat(fd, &statbuf) < 0) {
> + fprintf(stderr, _("%s: failed to fstat %s: %s\n"),
> + progname, fname, strerror(errno));
> + goto out_fail;
> + }
>
> /*
> * Handle directory inputs.
> @@ -101,6 +104,14 @@ setup_proto(
> return result;
> }
>
> + if (!S_ISREG(statbuf.st_mode)) {
> + fprintf(stderr, _("%s: %s not a regular file\n"),
> + progname, fname);
> + goto out_fail;
> + }
> +
> + size = statbuf.st_size;
> +
> /*
> * Else this is a protofile, let's handle traditionally.
> */
> --
> 2.43.0
>
>
prev parent reply other threads:[~2026-06-29 23:47 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-06-29 10:08 [PATCH v3] mkfs: simplify setup_proto file status checks liuh
2026-06-29 23:47 ` Darrick J. Wong [this message]
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=20260629234739.GE6078@frogsfrogsfrogs \
--to=djwong@kernel.org \
--cc=linux-xfs@vger.kernel.org \
--cc=liuhuan01@kylinos.cn \
/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