{"id":2230340,"url":"http://patchwork.ozlabs.org/api/1.1/patches/2230340/?format=json","web_url":"http://patchwork.ozlabs.org/project/linux-ext4/patch/177747215400.4110156.4867561188193623409.stgit@frogsfrogsfrogs/","project":{"id":8,"url":"http://patchwork.ozlabs.org/api/1.1/projects/8/?format=json","name":"Linux ext4 filesystem development","link_name":"linux-ext4","list_id":"linux-ext4.vger.kernel.org","list_email":"linux-ext4@vger.kernel.org","web_url":null,"scm_url":null,"webscm_url":null},"msgid":"<177747215400.4110156.4867561188193623409.stgit@frogsfrogsfrogs>","date":"2026-04-29T14:58:53","name":"[01/10] fuse2fs: add strictatime/lazytime mount options","commit_ref":null,"pull_url":null,"state":"new","archived":false,"hash":"60f700aa627989ba0b893948eb29f352eeca4ef3","submitter":{"id":77032,"url":"http://patchwork.ozlabs.org/api/1.1/people/77032/?format=json","name":"Darrick J. Wong","email":"djwong@kernel.org"},"delegate":null,"mbox":"http://patchwork.ozlabs.org/project/linux-ext4/patch/177747215400.4110156.4867561188193623409.stgit@frogsfrogsfrogs/mbox/","series":[{"id":502091,"url":"http://patchwork.ozlabs.org/api/1.1/series/502091/?format=json","web_url":"http://patchwork.ozlabs.org/project/linux-ext4/list/?series=502091","date":"2026-04-29T14:59:24","name":"[01/10] fuse2fs: add strictatime/lazytime mount options","version":1,"mbox":"http://patchwork.ozlabs.org/series/502091/mbox/"}],"comments":"http://patchwork.ozlabs.org/api/patches/2230340/comments/","check":"pending","checks":"http://patchwork.ozlabs.org/api/patches/2230340/checks/","tags":{},"headers":{"Return-Path":"\n <SRS0=34jF=C4=vger.kernel.org=linux-ext4+bounces-16213-patchwork-incoming=ozlabs.org@ozlabs.org>","X-Original-To":["incoming@patchwork.ozlabs.org","linux-ext4@vger.kernel.org"],"Delivered-To":["patchwork-incoming@legolas.ozlabs.org","patchwork-incoming@ozlabs.org"],"Authentication-Results":["legolas.ozlabs.org;\n\tdkim=pass (2048-bit key;\n unprotected) header.d=kernel.org header.i=@kernel.org header.a=rsa-sha256\n header.s=k20201202 header.b=UUSjrNC5;\n\tdkim-atps=neutral","legolas.ozlabs.org;\n spf=pass (sender SPF authorized) smtp.mailfrom=ozlabs.org\n (client-ip=2404:9400:2221:ea00::3; helo=mail.ozlabs.org;\n envelope-from=srs0=34jf=c4=vger.kernel.org=linux-ext4+bounces-16213-patchwork-incoming=ozlabs.org@ozlabs.org;\n receiver=patchwork.ozlabs.org)","gandalf.ozlabs.org;\n arc=pass smtp.remote-ip=\"2600:3c15:e001:75::12fc:5321\"\n arc.chain=subspace.kernel.org","gandalf.ozlabs.org;\n dmarc=pass (p=quarantine dis=none) header.from=kernel.org","gandalf.ozlabs.org;\n\tdkim=pass (2048-bit key;\n unprotected) header.d=kernel.org header.i=@kernel.org header.a=rsa-sha256\n header.s=k20201202 header.b=UUSjrNC5;\n\tdkim-atps=neutral","gandalf.ozlabs.org;\n spf=pass (sender SPF authorized) smtp.mailfrom=vger.kernel.org\n (client-ip=2600:3c15:e001:75::12fc:5321; helo=sin.lore.kernel.org;\n envelope-from=linux-ext4+bounces-16213-patchwork-incoming=ozlabs.org@vger.kernel.org;\n receiver=ozlabs.org)","smtp.subspace.kernel.org;\n\tdkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org\n header.b=\"UUSjrNC5\"","smtp.subspace.kernel.org;\n arc=none smtp.client-ip=10.30.226.201"],"Received":["from mail.ozlabs.org (mail.ozlabs.org [IPv6:2404:9400:2221:ea00::3])\n\t(using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)\n\t key-exchange x25519)\n\t(No client certificate requested)\n\tby legolas.ozlabs.org (Postfix) with ESMTPS id 4g5LRB6K6Lz1yHZ\n\tfor <incoming@patchwork.ozlabs.org>; Thu, 30 Apr 2026 01:13:26 +1000 (AEST)","from mail.ozlabs.org (mail.ozlabs.org [IPv6:2404:9400:2221:ea00::3])\n\tby gandalf.ozlabs.org (Postfix) with ESMTP id 4g5LRB5s2Bz4w2D\n\tfor <incoming@patchwork.ozlabs.org>; Thu, 30 Apr 2026 01:13:26 +1000 (AEST)","by gandalf.ozlabs.org (Postfix)\n\tid 4g5LRB5nsfz4w91; Thu, 30 Apr 2026 01:13:26 +1000 (AEST)","from sin.lore.kernel.org (sin.lore.kernel.org\n [IPv6:2600:3c15:e001:75::12fc:5321])\n\t(using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)\n\t key-exchange x25519)\n\t(No client certificate requested)\n\tby gandalf.ozlabs.org (Postfix) with ESMTPS id 4g5LR70xC9z4w2D\n\tfor <patchwork-incoming@ozlabs.org>; Thu, 30 Apr 2026 01:13:23 +1000 (AEST)","from smtp.subspace.kernel.org (conduit.subspace.kernel.org\n [100.90.174.1])\n\tby sin.lore.kernel.org (Postfix) with ESMTP id B6158300BE10\n\tfor <patchwork-incoming@ozlabs.org>; Wed, 29 Apr 2026 14:58:56 +0000 (UTC)","from localhost.localdomain (localhost.localdomain [127.0.0.1])\n\tby smtp.subspace.kernel.org (Postfix) with ESMTP id 0D25E34D926;\n\tWed, 29 Apr 2026 14:58:54 +0000 (UTC)","from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org\n [10.30.226.201])\n\t(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))\n\t(No client certificate requested)\n\tby smtp.subspace.kernel.org (Postfix) with ESMTPS id C32CC342CB0;\n\tWed, 29 Apr 2026 14:58:53 +0000 (UTC)","by smtp.kernel.org (Postfix) with ESMTPSA id 65FA2C19425;\n\tWed, 29 Apr 2026 14:58:53 +0000 (UTC)"],"ARC-Seal":["i=2; a=rsa-sha256; d=ozlabs.org; s=201707; t=1777475606; cv=pass;\n\tb=ywiAEP1r4Oi2LiSJIWQtDY+hJzvgvKY58vEHsiIyQhYR+4i1ZBJOblXSjF+0OzK1XV/CUhEIrIguDN8F9A/D7iedeJphw95Wl8wLkgLTx6av65SEsS5pAB8jOonVMMLIH5Lr9yQYfB9+J7c+saRp+hVcHSp59nZsKCWhC5gmByEzWUHZUrv9aE4VXfsT9wswmx8U1HTDxlEdALzBOxSY/o0ZO7hmtHmWwTnPtAuKjyrvBcjffiY62MTMnksiarJSa8QHJ3PSYjWZX5wsfpYraIx3Q++u9nXKEakdSZoanoFsOAoGqmcOXiyohIz+BgOB4utnNKRScf0k1JnDVEvIJA==","i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;\n\tt=1777474733; cv=none;\n b=NBguQ1dKIEe/S0vOx5b7xCxXT8Rk4pNw6KMG0Xi7F/LmrJqq+qp2Kmrss/WEDsnBW0dXHKO11fyjSbvTulr+1ReMQ14aYvrdlSmWxUo0Y5gDz3yYuci2r6cJoztVCFQN2tnQBvpqQYUJ5LNSCxOh3fiN2ddiFQmm6eCu3jRc/pA="],"ARC-Message-Signature":["i=2; a=rsa-sha256; d=ozlabs.org; s=201707;\n\tt=1777475606; c=relaxed/relaxed;\n\tbh=2P5Z67dej8/neqoF6N+fjTxWyrQcE2MLmJEwsic3MYA=;\n\th=Date:Subject:From:To:Cc:Message-ID:In-Reply-To:References:\n\t MIME-Version:Content-Type;\n b=juX7OlEy4FGSLaljTfPpLpYKT+yjIyZLbXsK5CjZBhf5XZkdpjkBIH1FduJ2HnWPSyUUVVS2tLtoXFtItAi5xCdhHsOKTKrBeOgIwdwk7Qg7cLonRB+dfDosxGWlcyKm9TCkZ4tcCWeH9qCo6l2R3fQAFPVr1Ur2jbvP0+f8+oNLYAdPVDStJUqvQngwcQovleDU+z+1zXcd+/eraxz2IQz9XyOwgH63Y24vrfAxRcFnh8N418yyrrzr+4W6Xh6VHRKhR9PBCSAsGLV9GnmtMwv1NIVD1+n5qUCok7BhXyaZ6wveedfD/RUk0z5YHVt6OtgBuf4L5tCprhr9JVltUQ==","i=1; a=rsa-sha256; d=subspace.kernel.org;\n\ts=arc-20240116; t=1777474733; c=relaxed/simple;\n\tbh=7IdPHswuFagMSXFAwgbmpG7K5HG/P22PA/MvvqR96DU=;\n\th=Date:Subject:From:To:Cc:Message-ID:In-Reply-To:References:\n\t MIME-Version:Content-Type;\n b=Qv+3iF/EqxAXcOKjJzhyiB0OMLR+prMkd2RVGI5f0RJ53nYR1vetDAAfgJ5SxiJPeOMRaOspqWP9d7w3AW4tfcCrD+wH1uuPWfzrXztWAZa1ri90XcfoFcGq2wqUR21OhCvME50/tcTTmPnQvdceuqv6Al/2A1cNOoLmAQHPkXA="],"ARC-Authentication-Results":["i=2; gandalf.ozlabs.org;\n dmarc=pass (p=quarantine dis=none) header.from=kernel.org;\n dkim=pass (2048-bit key;\n unprotected) header.d=kernel.org header.i=@kernel.org header.a=rsa-sha256\n header.s=k20201202 header.b=UUSjrNC5; dkim-atps=neutral;\n spf=pass (client-ip=2600:3c15:e001:75::12fc:5321; helo=sin.lore.kernel.org;\n envelope-from=linux-ext4+bounces-16213-patchwork-incoming=ozlabs.org@vger.kernel.org;\n receiver=ozlabs.org) smtp.mailfrom=vger.kernel.org","i=1; smtp.subspace.kernel.org;\n dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org\n header.b=UUSjrNC5; arc=none smtp.client-ip=10.30.226.201"],"DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org;\n\ts=k20201202; t=1777474733;\n\tbh=7IdPHswuFagMSXFAwgbmpG7K5HG/P22PA/MvvqR96DU=;\n\th=Date:Subject:From:To:Cc:In-Reply-To:References:From;\n\tb=UUSjrNC5hfG0naTcATBKQrujZuITIijrd+a6om3nJR+xmbeHAky4nS9+pHUvBzDtW\n\t W2sxK7z3rl2kvybksHqdyvp9+ZfE8SrCtC/6rcx8ZcRE4VgxnD4CA990CUKNVerHSZ\n\t XPRpfPiCy5tUfppaS0XJpCDgKxm4wfzQac/KAqZQkCqQK1yUzHnxFiQFyDSK28u90b\n\t 1NlIbPB+yIpyBVzJmI/QAO/hQK8qg79594CmUuBVmj7WkIzmNfIDTsQdcvInJvo+8M\n\t OS4V2kFS8ffM6k321/bgr7I/5tke/X3rNZnWa7uCx5bUxG4vGH5SCdgxJ1CJEyp32A\n\t xJHXebqoIkg0Q==","Date":"Wed, 29 Apr 2026 07:58:53 -0700","Subject":"[PATCH 01/10] fuse2fs: add strictatime/lazytime mount options","From":"\"Darrick J. Wong\" <djwong@kernel.org>","To":"tytso@mit.edu","Cc":"bernd@bsbernd.com, miklos@szeredi.hu, linux-ext4@vger.kernel.org,\n neal@gompa.dev, linux-fsdevel@vger.kernel.org, fuse-devel@lists.linux.dev,\n joannelkoong@gmail.com","Message-ID":"<177747215400.4110156.4867561188193623409.stgit@frogsfrogsfrogs>","In-Reply-To":"<177747215344.4110156.17216553139316774040.stgit@frogsfrogsfrogs>","References":"<177747215344.4110156.17216553139316774040.stgit@frogsfrogsfrogs>","Precedence":"bulk","X-Mailing-List":"linux-ext4@vger.kernel.org","List-Id":"<linux-ext4.vger.kernel.org>","List-Subscribe":"<mailto:linux-ext4+subscribe@vger.kernel.org>","List-Unsubscribe":"<mailto:linux-ext4+unsubscribe@vger.kernel.org>","MIME-Version":"1.0","Content-Type":"text/plain; charset=\"utf-8\"","Content-Transfer-Encoding":"7bit","X-Spam-Status":"No, score=-1.2 required=5.0 tests=ARC_SIGNED,ARC_VALID,\n\tDKIMWL_WL_HIGH,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DMARC_PASS,\n\tMAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS autolearn=disabled\n\tversion=4.0.1","X-Spam-Checker-Version":"SpamAssassin 4.0.1 (2024-03-25) on gandalf.ozlabs.org"},"content":"From: Darrick J. Wong <djwong@kernel.org>\n\nIn iomap mode, we can support the strictatime/lazytime mount options.\nAdd them to fuse2fs.\n\nSigned-off-by: \"Darrick J. Wong\" <djwong@kernel.org>\n---\n fuse4fs/fuse4fs.1.in |    6 ++++++\n fuse4fs/fuse4fs.c    |   28 +++++++++++++++++++++++++++-\n misc/fuse2fs.1.in    |    6 ++++++\n misc/fuse2fs.c       |   27 +++++++++++++++++++++++++++\n 4 files changed, 66 insertions(+), 1 deletion(-)","diff":"diff --git a/fuse4fs/fuse4fs.1.in b/fuse4fs/fuse4fs.1.in\nindex 8855867d27101d..119cbcc903d8af 100644\n--- a/fuse4fs/fuse4fs.1.in\n+++ b/fuse4fs/fuse4fs.1.in\n@@ -90,6 +90,9 @@ .SS \"fuse4fs options:\"\n .I nosuid\n ) later.\n .TP\n+\\fB-o\\fR lazytime\n+if iomap is enabled, enable lazy updates of timestamps\n+.TP\n \\fB-o\\fR lockfile=path\n use this file to control access to the filesystem\n .TP\n@@ -98,6 +101,9 @@ .SS \"fuse4fs options:\"\n .TP\n \\fB-o\\fR norecovery\n do not replay the journal and mount the file system read-only\n+.TP\n+\\fB-o\\fR strictatime\n+if iomap is enabled, update atime on every access\n .SS \"FUSE options:\"\n .TP\n \\fB-d -o\\fR debug\ndiff --git a/fuse4fs/fuse4fs.c b/fuse4fs/fuse4fs.c\nindex ec6af3813a661a..6e5683dba4c918 100644\n--- a/fuse4fs/fuse4fs.c\n+++ b/fuse4fs/fuse4fs.c\n@@ -286,6 +286,7 @@ struct fuse4fs {\n \tint acl;\n \tint dirsync;\n \tint translate_inums;\n+\tint iomap_passthrough_options;\n \n \tenum fuse4fs_opstate opstate;\n \tint logfd;\n@@ -1415,6 +1416,12 @@ static errcode_t fuse4fs_check_support(struct fuse4fs *ff)\n \t\treturn EXT2_ET_FILESYSTEM_CORRUPTED;\n \t}\n \n+\tif (ff->iomap_passthrough_options && !fuse4fs_can_iomap(ff)) {\n+\t\terr_printf(ff, \"%s\\n\",\n+\t\t\t   _(\"Some mount options require iomap.\"));\n+\t\treturn EINVAL;\n+\t}\n+\n \treturn 0;\n }\n \n@@ -2284,6 +2291,8 @@ static void fuse4fs_iomap_enable(struct fuse_conn_info *conn,\n \tif (!fuse4fs_iomap_enabled(ff)) {\n \t\tif (ff->iomap_want == FT_ENABLE)\n \t\t\terr_printf(ff, \"%s\\n\", _(\"Could not enable iomap.\"));\n+\t\tif (ff->iomap_passthrough_options)\n+\t\t\terr_printf(ff, \"%s\\n\", _(\"Some mount options require iomap.\"));\n \t\treturn;\n \t}\n }\n@@ -7876,6 +7885,7 @@ enum {\n \tFUSE4FS_ERRORS_BEHAVIOR,\n #ifdef HAVE_FUSE_IOMAP\n \tFUSE4FS_IOMAP,\n+\tFUSE4FS_IOMAP_PASSTHROUGH,\n #endif\n };\n \n@@ -7902,6 +7912,17 @@ static struct fuse_opt fuse4fs_opts[] = {\n \tFUSE4FS_OPT(\"timing\",\t\ttiming,\t\t\t1),\n #endif\n \n+#ifdef HAVE_FUSE_IOMAP\n+#ifdef MS_LAZYTIME\n+\tFUSE_OPT_KEY(\"lazytime\",\tFUSE4FS_IOMAP_PASSTHROUGH),\n+\tFUSE_OPT_KEY(\"nolazytime\",\tFUSE4FS_IOMAP_PASSTHROUGH),\n+#endif\n+#ifdef MS_STRICTATIME\n+\tFUSE_OPT_KEY(\"strictatime\",\tFUSE4FS_IOMAP_PASSTHROUGH),\n+\tFUSE_OPT_KEY(\"nostrictatime\",\tFUSE4FS_IOMAP_PASSTHROUGH),\n+#endif\n+#endif\n+\n \tFUSE_OPT_KEY(\"user_xattr\",\tFUSE4FS_IGNORED),\n \tFUSE_OPT_KEY(\"noblock_validity\", FUSE4FS_IGNORED),\n \tFUSE_OPT_KEY(\"nodelalloc\",\tFUSE4FS_IGNORED),\n@@ -7928,6 +7949,12 @@ static int fuse4fs_opt_proc(void *data, const char *arg,\n \tstruct fuse4fs *ff = data;\n \n \tswitch (key) {\n+#ifdef HAVE_FUSE_IOMAP\n+\tcase FUSE4FS_IOMAP_PASSTHROUGH:\n+\t\tff->iomap_passthrough_options = 1;\n+\t\t/* pass through to libfuse */\n+\t\treturn 1;\n+#endif\n \tcase FUSE4FS_DIRSYNC:\n \t\tff->dirsync = 1;\n \t\t/* pass through to libfuse */\n@@ -8103,7 +8130,6 @@ static void fuse4fs_compute_libfuse_args(struct fuse4fs *ff,\n \t\tff->translate_inums = 0;\n \t}\n \n-\n \tif (ff->debug) {\n \t\tint\ti;\n \ndiff --git a/misc/fuse2fs.1.in b/misc/fuse2fs.1.in\nindex 2b55fa0e723966..0c0934f03c9543 100644\n--- a/misc/fuse2fs.1.in\n+++ b/misc/fuse2fs.1.in\n@@ -90,6 +90,9 @@ .SS \"fuse2fs options:\"\n .I nosuid\n ) later.\n .TP\n+\\fB-o\\fR lazytime\n+if iomap is enabled, enable lazy updates of timestamps\n+.TP\n \\fB-o\\fR lockfile=path\n use this file to control access to the filesystem\n .TP\n@@ -98,6 +101,9 @@ .SS \"fuse2fs options:\"\n .TP\n \\fB-o\\fR norecovery\n do not replay the journal and mount the file system read-only\n+.TP\n+\\fB-o\\fR strictatime\n+if iomap is enabled, update atime on every access\n .SS \"FUSE options:\"\n .TP\n \\fB-d -o\\fR debug\ndiff --git a/misc/fuse2fs.c b/misc/fuse2fs.c\nindex 16b010fd28d4b5..02ca7ade4aaad6 100644\n--- a/misc/fuse2fs.c\n+++ b/misc/fuse2fs.c\n@@ -268,6 +268,7 @@ struct fuse2fs {\n \tint directio;\n \tint acl;\n \tint dirsync;\n+\tint iomap_passthrough_options;\n \n \tenum fuse2fs_opstate opstate;\n \tint logfd;\n@@ -1192,6 +1193,12 @@ static errcode_t fuse2fs_check_support(struct fuse2fs *ff)\n \t\treturn EXT2_ET_FILESYSTEM_CORRUPTED;\n \t}\n \n+\tif (ff->iomap_passthrough_options && !fuse2fs_can_iomap(ff)) {\n+\t\terr_printf(ff, \"%s\\n\",\n+\t\t\t   _(\"Some mount options require iomap.\"));\n+\t\treturn EINVAL;\n+\t}\n+\n \treturn 0;\n }\n \n@@ -1820,6 +1827,8 @@ static void fuse2fs_iomap_enable(struct fuse_conn_info *conn,\n \tif (!fuse2fs_iomap_enabled(ff)) {\n \t\tif (ff->iomap_want == FT_ENABLE)\n \t\t\terr_printf(ff, \"%s\\n\", _(\"Could not enable iomap.\"));\n+\t\tif (ff->iomap_passthrough_options)\n+\t\t\terr_printf(ff, \"%s\\n\", _(\"Some mount options require iomap.\"));\n \t\treturn;\n \t}\n }\n@@ -7113,6 +7122,7 @@ enum {\n \tFUSE2FS_ERRORS_BEHAVIOR,\n #ifdef HAVE_FUSE_IOMAP\n \tFUSE2FS_IOMAP,\n+\tFUSE2FS_IOMAP_PASSTHROUGH,\n #endif\n };\n \n@@ -7139,6 +7149,17 @@ static struct fuse_opt fuse2fs_opts[] = {\n \tFUSE2FS_OPT(\"timing\",\t\ttiming,\t\t\t1),\n #endif\n \n+#ifdef HAVE_FUSE_IOMAP\n+#ifdef MS_LAZYTIME\n+\tFUSE_OPT_KEY(\"lazytime\",\tFUSE2FS_IOMAP_PASSTHROUGH),\n+\tFUSE_OPT_KEY(\"nolazytime\",\tFUSE2FS_IOMAP_PASSTHROUGH),\n+#endif\n+#ifdef MS_STRICTATIME\n+\tFUSE_OPT_KEY(\"strictatime\",\tFUSE2FS_IOMAP_PASSTHROUGH),\n+\tFUSE_OPT_KEY(\"nostrictatime\",\tFUSE2FS_IOMAP_PASSTHROUGH),\n+#endif\n+#endif\n+\n \tFUSE_OPT_KEY(\"user_xattr\",\tFUSE2FS_IGNORED),\n \tFUSE_OPT_KEY(\"noblock_validity\", FUSE2FS_IGNORED),\n \tFUSE_OPT_KEY(\"nodelalloc\",\tFUSE2FS_IGNORED),\n@@ -7165,6 +7186,12 @@ static int fuse2fs_opt_proc(void *data, const char *arg,\n \tstruct fuse2fs *ff = data;\n \n \tswitch (key) {\n+#ifdef HAVE_FUSE_IOMAP\n+\tcase FUSE2FS_IOMAP_PASSTHROUGH:\n+\t\tff->iomap_passthrough_options = 1;\n+\t\t/* pass through to libfuse */\n+\t\treturn 1;\n+#endif\n \tcase FUSE2FS_DIRSYNC:\n \t\tff->dirsync = 1;\n \t\t/* pass through to libfuse */\n","prefixes":["01/10"]}