From: "Darrick J. Wong" <djwong@kernel.org>
To: Dave Dykstra <dave.dykstra@cern.ch>, Theodore Ts'o <tytso@mit.edu>
Cc: linux-ext4@vger.kernel.org,
Dave Dykstra <2129743+DrDaveD@users.noreply.github.com>
Subject: Re: [PATCH] fuse2fs: open read-only when image is not writable
Date: Fri, 17 Oct 2025 16:32:55 -0700 [thread overview]
Message-ID: <20251017233255.GL6170@frogsfrogsfrogs> (raw)
In-Reply-To: <20251017211130.8507-1-dave.dykstra@cern.ch>
On Fri, Oct 17, 2025 at 04:11:30PM -0500, Dave Dykstra wrote:
> This opens the image read-only when the image is not writable. If it is then found that a journal recovery is needed, an error is returned then.
>
> The ret value is set to 2 after the option checks so that if there's an error resulting in "goto out" it won't print an error about unrecognized options.
>
> Also submitted as PR https://github.com/tytso/e2fsprogs/pull/250
> for the issue https://github.com/tytso/e2fsprogs/issues/244.
>
> Replaces
> https://lore.kernel.org/linux-ext4/20251016200206.3035-1-dave.dykstra@cern.ch/
> https://lore.kernel.org/linux-ext4/175798064776.350013.6744611652039454651.stgit@frogsfrogsfrogs/
>
> Signed-off-by: Dave Dykstra <2129743+DrDaveD@users.noreply.github.com>
Please slow down and give me a chance to reshuffle and QA my existing
fixes for the problems you've complained about.
--D
> ---
> misc/fuse2fs.c | 32 ++++++++++++++++++++++++++++----
> 1 file changed, 28 insertions(+), 4 deletions(-)
>
> diff --git a/misc/fuse2fs.c b/misc/fuse2fs.c
> index cb5620c7..6a107d2b 100644
> --- a/misc/fuse2fs.c
> +++ b/misc/fuse2fs.c
> @@ -4696,9 +4696,24 @@ int main(int argc, char *argv[])
> err = ext2fs_open2(fctx.device, options, flags, 0, 0, unix_io_manager,
> &global_fs);
> if (err) {
> - err_printf(&fctx, "%s.\n", error_message(err));
> - err_printf(&fctx, "%s\n", _("Please run e2fsck -fy."));
> - goto out;
> + if ((err == EACCES) || (err == EPERM)) {
> + if (fctx.ro) {
> + dbg_printf(&fctx, "%s: %s\n", __func__,
> + _("Permission denied with writable, trying without.\n"));
> + } else {
> + dbg_printf(&fctx, "%s: %s\n", __func__,
> + _("No write access, opening read-only.\n"));
> + fctx.ro = 1;
> + }
> + flags &= ~EXT2_FLAG_RW;
> + err = ext2fs_open2(fctx.device, options, flags, 0, 0,
> + unix_io_manager, &global_fs);
> + }
> + if (err) {
> + err_printf(&fctx, "%s.\n", error_message(err));
> + err_printf(&fctx, "%s\n", _("Please run e2fsck -fy."));
> + goto out;
> + }
> }
> fctx.fs = global_fs;
> global_fs->priv_data = &fctx;
> @@ -4741,6 +4756,8 @@ int main(int argc, char *argv[])
> goto out;
> }
>
> + ret = 2;
> +
> if (global_fs->super->s_state & EXT2_ERROR_FS) {
> err_printf(&fctx, "%s\n",
> _("Errors detected; running e2fsck is required."));
> @@ -4760,6 +4777,11 @@ int main(int argc, char *argv[])
> _("Mounting read-only without recovering journal."));
> fctx.ro = 1;
> global_fs->flags &= ~EXT2_FLAG_RW;
> + } else if (fctx.ro && !(flags & EXT2_FLAG_RW)) {
> + err_printf(&fctx, "%s\n",
> + _("Journal needs recovery but filesystem could not be opened read-write."));
> + err_printf(&fctx, "%s\n", _("Please run e2fsck -fy."));
> + goto out;
> } else {
> log_printf(&fctx, "%s\n", _("Recovering journal."));
> err = ext2fs_run_ext3_journal(&global_fs);
> @@ -4833,8 +4855,10 @@ int main(int argc, char *argv[])
> if (fctx.no_default_opts == 0)
> fuse_opt_add_arg(&args, extra_args);
>
> - if (fctx.ro)
> + if (fctx.ro) {
> + /* This is in case ro was implied above and not passed in */
> fuse_opt_add_arg(&args, "-oro");
> + }
>
> if (fctx.fakeroot) {
> #ifdef HAVE_MOUNT_NODEV
> --
> 2.43.5
>
>
prev parent reply other threads:[~2025-10-17 23:32 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-10-17 21:11 [PATCH] fuse2fs: open read-only when image is not writable Dave Dykstra
2025-10-17 23:32 ` 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=20251017233255.GL6170@frogsfrogsfrogs \
--to=djwong@kernel.org \
--cc=2129743+DrDaveD@users.noreply.github.com \
--cc=dave.dykstra@cern.ch \
--cc=linux-ext4@vger.kernel.org \
--cc=tytso@mit.edu \
/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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.