{"id":2230306,"url":"http://patchwork.ozlabs.org/api/1.1/patches/2230306/?format=json","web_url":"http://patchwork.ozlabs.org/project/linux-ext4/patch/177747214769.4107473.15899167683141272915.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":"<177747214769.4107473.15899167683141272915.stgit@frogsfrogsfrogs>","date":"2026-04-29T14:56:01","name":"[13/19] fuse2fs: set iomap-related inode flags","commit_ref":null,"pull_url":null,"state":"new","archived":false,"hash":"bc988df0e535c2f581f925aade72e8f705929312","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/177747214769.4107473.15899167683141272915.stgit@frogsfrogsfrogs/mbox/","series":[{"id":502087,"url":"http://patchwork.ozlabs.org/api/1.1/series/502087/?format=json","web_url":"http://patchwork.ozlabs.org/project/linux-ext4/list/?series=502087","date":"2026-04-29T14:53:09","name":"[01/19] fuse2fs: implement bare minimum iomap for file mapping reporting","version":1,"mbox":"http://patchwork.ozlabs.org/series/502087/mbox/"}],"comments":"http://patchwork.ozlabs.org/api/patches/2230306/comments/","check":"pending","checks":"http://patchwork.ozlabs.org/api/patches/2230306/checks/","tags":{},"headers":{"Return-Path":"\n <SRS0=VNwN=C4=vger.kernel.org=linux-ext4+bounces-16202-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=RXjvgmdE;\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=vnwn=c4=vger.kernel.org=linux-ext4+bounces-16202-patchwork-incoming=ozlabs.org@ozlabs.org;\n receiver=patchwork.ozlabs.org)","gandalf.ozlabs.org;\n arc=pass smtp.remote-ip=172.232.135.74 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=RXjvgmdE;\n\tdkim-atps=neutral","gandalf.ozlabs.org;\n spf=pass (sender SPF authorized) smtp.mailfrom=vger.kernel.org\n (client-ip=172.232.135.74; helo=sto.lore.kernel.org;\n envelope-from=linux-ext4+bounces-16202-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=\"RXjvgmdE\"","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 4g5L3K0SGcz1yK5\n\tfor <incoming@patchwork.ozlabs.org>; Thu, 30 Apr 2026 00:56:13 +1000 (AEST)","from mail.ozlabs.org (mail.ozlabs.org [IPv6:2404:9400:2221:ea00::3])\n\tby gandalf.ozlabs.org (Postfix) with ESMTP id 4g5L3J73LMz4wLR\n\tfor <incoming@patchwork.ozlabs.org>; Thu, 30 Apr 2026 00:56:12 +1000 (AEST)","by gandalf.ozlabs.org (Postfix)\n\tid 4g5L3J70VLz4wSX; Thu, 30 Apr 2026 00:56:12 +1000 (AEST)","from sto.lore.kernel.org (sto.lore.kernel.org [172.232.135.74])\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 4g5L3F2ksvz4wLR\n\tfor <patchwork-incoming@ozlabs.org>; Thu, 30 Apr 2026 00:56:09 +1000 (AEST)","from smtp.subspace.kernel.org (conduit.subspace.kernel.org\n [100.90.174.1])\n\tby sto.lore.kernel.org (Postfix) with ESMTP id 3F29F3008C09\n\tfor <patchwork-incoming@ozlabs.org>; Wed, 29 Apr 2026 14:56:04 +0000 (UTC)","from localhost.localdomain (localhost.localdomain [127.0.0.1])\n\tby smtp.subspace.kernel.org (Postfix) with ESMTP id 0A2B63254B8;\n\tWed, 29 Apr 2026 14:56:02 +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 C03342C237C;\n\tWed, 29 Apr 2026 14:56:01 +0000 (UTC)","by smtp.kernel.org (Postfix) with ESMTPSA id 99FE7C19425;\n\tWed, 29 Apr 2026 14:56:01 +0000 (UTC)"],"ARC-Seal":["i=2; a=rsa-sha256; d=ozlabs.org; s=201707; t=1777474572; cv=pass;\n\tb=AwDH7uLRxYbBr+Xs7pk5XM1IqgkIv6pT1GNTCKNLL89lh+zp6+DZNc6sheV/HVkHu5IAhpCfjxdgvqJDmaN63vgpVwaz3MVTxuaI4Xc1DIUdzfIvIL4AvhlarInAEzFKkYBz2nzvT1OTimbpiTL+GYUcldCTJABbuwMo9lCx1r/h3vEmcD4l0itQw1Wrij5GyL40tZsRavlUUlvW5EpI/ruZ0sDNuVMIEMGa6UKbrHTnJ7EK+9I+7JnNonTxq9FlE/xPsklZgxkRJAsUkJ7zzMXIEEsjKHE/+vxBwQ6SWOCfvHWAZcq/1/5K/KImsSlxI+0bFqqZJw3/1tYCKa+bCg==","i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;\n\tt=1777474561; cv=none;\n b=Soz6vefQdyBQskfOIfAHdZ/rXk1IMu81xg1jk5qpeYYqtooktsbxa7yJfdXT7ryHEO+82vwS6mNO6MNHwaj+ihArroAofzb0dyxyqcw2Uhb6Mg5Wrvr+Zn+HMIqdCEVHozlFW9ySmxLP5W3lQb8qy1yFPz6HvF/WJuXp3lZ4KZM="],"ARC-Message-Signature":["i=2; a=rsa-sha256; d=ozlabs.org; s=201707;\n\tt=1777474572; c=relaxed/relaxed;\n\tbh=K+sx8RRPkPaTIhC638/lHn86PKTVKdpn0xdms4T2V5s=;\n\th=Date:Subject:From:To:Cc:Message-ID:In-Reply-To:References:\n\t MIME-Version:Content-Type;\n b=k5SbLQYeexoSW7C355dJp/ljXARdMVUPSbs/ldESrbO8jIRq1AsJP02OJOevIgD3OHBuKIeZubZtiYuPuCbyI/lSwV5Z/Q7TkTCAd7JvL8I+PT/UhD4u9+ozV18SPxu/lqxnZCq7OCccYDYaLmyHZvwdvXxN8/iDGsBkW6uFSXSRUp7pIX2oxVn7hxC7P0z3fqjGb+7Ohd6bsBlPuCziIsqajkRlBQOrDXWrKgQMHeEQWHoljtQMtbqkR2uwPgyTA+oIGb/K3/pQh9yINKCIVoNiDmcvEKwBDhhU27d+ZOks9L0ESd7mpk3R90/zDPz1IDSps1+2Z9CcCMlWeqNMxg==","i=1; a=rsa-sha256; d=subspace.kernel.org;\n\ts=arc-20240116; t=1777474561; c=relaxed/simple;\n\tbh=d/T4p0+OsQNu4eVKVFuTeFaI4fz9ha1M/AlDZshZf2k=;\n\th=Date:Subject:From:To:Cc:Message-ID:In-Reply-To:References:\n\t MIME-Version:Content-Type;\n b=TCDfIFW2w5yPRJITjlOkJUL4SQus+GBSGWfj39N9g5G31DFM9s969FgPq0nuL++7Qeuca4VvohHerunilGB9pG7Q2PGjcu4lO5sHaLIvkXF5Mht5P6HNEbNpajgByliXwWLHJC8spi5kEQlxx3S4EacqqlPYWNaGWJIl2J3ufOY="],"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=RXjvgmdE; dkim-atps=neutral;\n spf=pass (client-ip=172.232.135.74; helo=sto.lore.kernel.org;\n envelope-from=linux-ext4+bounces-16202-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=RXjvgmdE; 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=1777474561;\n\tbh=d/T4p0+OsQNu4eVKVFuTeFaI4fz9ha1M/AlDZshZf2k=;\n\th=Date:Subject:From:To:Cc:In-Reply-To:References:From;\n\tb=RXjvgmdElRWbVOUaDdh9XMF5VXAV2dwY9vNSH8c2871HfrvHoo2y61bo9OZqQl7hH\n\t uBCxwpWmEz4UxynNLQ+0kAf4pdHgjk3+0u9nmEsXfTYMGOM6KCibLpEjTEK64V/jMt\n\t VTaVuxRVKyN3b2XcNm1o4VrzZGFPkQLeoIubbdvo2Ep+6UNyfu7cWiE4kuDuLpsyC4\n\t tyRSwqPeXGbM5/j0XhTjgR9bUwRiyoX2KvXwYxh+zaR+y0hGoF/6cQBHs9messhTZQ\n\t f7eAI7L9otE1qVgCIsl+F5Sw4jajV7ioJOCQNq9fe/YXdXW6aXtH6g6ou9mFRpp81K\n\t tThZXd7uNN3mQ==","Date":"Wed, 29 Apr 2026 07:56:01 -0700","Subject":"[PATCH 13/19] fuse2fs: set iomap-related inode flags","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":"<177747214769.4107473.15899167683141272915.stgit@frogsfrogsfrogs>","In-Reply-To":"<177747214459.4107473.9520724883867588970.stgit@frogsfrogsfrogs>","References":"<177747214459.4107473.9520724883867588970.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\nSet FUSE_IFLAG_* when we do a getattr, so that all files will have iomap\nenabled.\n\nSigned-off-by: \"Darrick J. Wong\" <djwong@kernel.org>\n---\n fuse4fs/fuse4fs.c |   46 +++++++++++++++++++++++++++++++++++-----------\n misc/fuse2fs.c    |   20 ++++++++++++++++++++\n 2 files changed, 55 insertions(+), 11 deletions(-)","diff":"diff --git a/fuse4fs/fuse4fs.c b/fuse4fs/fuse4fs.c\nindex e2421dda75475a..f9c905c0805d9e 100644\n--- a/fuse4fs/fuse4fs.c\n+++ b/fuse4fs/fuse4fs.c\n@@ -2265,6 +2265,7 @@ static void op_init(void *userdata, struct fuse_conn_info *conn)\n \n struct fuse4fs_stat {\n \tstruct fuse_entry_param\tentry;\n+\tunsigned int iflags;\n };\n \n static int fuse4fs_stat_inode(struct fuse4fs *ff, ext2_ino_t ino,\n@@ -2330,9 +2331,29 @@ static int fuse4fs_stat_inode(struct fuse4fs *ff, ext2_ino_t ino,\n \tentry->attr_timeout = FUSE4FS_ATTR_TIMEOUT;\n \tentry->entry_timeout = FUSE4FS_ATTR_TIMEOUT;\n \n+\tfstat->iflags = 0;\n+#ifdef HAVE_FUSE_IOMAP\n+\tif (fuse4fs_iomap_enabled(ff))\n+\t\tfstat->iflags |= FUSE_IFLAG_IOMAP | FUSE_IFLAG_EXCLUSIVE;\n+#endif\n+\n \treturn 0;\n }\n \n+#if FUSE_VERSION < FUSE_MAKE_VERSION(3, 99)\n+#define fuse_reply_entry_iflags(req, entry, iflags) \\\n+\tfuse_reply_entry((req), (entry))\n+\n+#define fuse_reply_attr_iflags(req, entry, iflags, timeout) \\\n+\tfuse_reply_attr((req), (entry), (timeout))\n+\n+#define fuse_add_direntry_plus_iflags(req, buf, sz, name, iflags, entry, dirpos) \\\n+\tfuse_add_direntry_plus((req), (buf), (sz), (name), (entry), (dirpos))\n+\n+#define fuse_reply_create_iflags(req, entry, iflags, fp) \\\n+\tfuse_reply_create((req), (entry), (fp))\n+#endif\n+\n static void op_lookup(fuse_req_t req, fuse_ino_t fino, const char *name)\n {\n \tstruct fuse4fs_stat fstat;\n@@ -2363,7 +2384,7 @@ static void op_lookup(fuse_req_t req, fuse_ino_t fino, const char *name)\n \tif (ret)\n \t\tfuse_reply_err(req, -ret);\n \telse\n-\t\tfuse_reply_entry(req, &fstat.entry);\n+\t\tfuse_reply_entry_iflags(req, &fstat.entry, fstat.iflags);\n }\n \n static void op_getattr(fuse_req_t req, fuse_ino_t fino,\n@@ -2383,8 +2404,8 @@ static void op_getattr(fuse_req_t req, fuse_ino_t fino,\n \tif (ret)\n \t\tfuse_reply_err(req, -ret);\n \telse\n-\t\tfuse_reply_attr(req, &fstat.entry.attr,\n-\t\t\t\tfstat.entry.attr_timeout);\n+\t\tfuse_reply_attr_iflags(req, &fstat.entry.attr, fstat.iflags,\n+\t\t\t\t       fstat.entry.attr_timeout);\n }\n \n static void op_readlink(fuse_req_t req, fuse_ino_t fino)\n@@ -2662,7 +2683,7 @@ static void fuse4fs_reply_entry(fuse_req_t req, ext2_ino_t ino,\n \t\treturn;\n \t}\n \n-\tfuse_reply_entry(req, &fstat.entry);\n+\tfuse_reply_entry_iflags(req, &fstat.entry, fstat.iflags);\n }\n \n static void op_mknod(fuse_req_t req, fuse_ino_t fino, const char *name,\n@@ -4990,10 +5011,13 @@ static int op_readdir_iter(ext2_ino_t dir EXT2FS_ATTR((unused)),\n \tnamebuf[dirent->name_len & 0xFF] = 0;\n \n \tif (i->readdirplus) {\n-\t\tentrysize = fuse_add_direntry_plus(i->req, i->buf + i->bufused,\n-\t\t\t\t\t\t   i->bufsz - i->bufused,\n-\t\t\t\t\t\t   namebuf, &fstat.entry,\n-\t\t\t\t\t\t   i->dirpos);\n+\t\tentrysize = fuse_add_direntry_plus_iflags(i->req,\n+\t\t\t\t\t\t\t  i->buf + i->bufused,\n+\t\t\t\t\t\t\t  i->bufsz - i->bufused,\n+\t\t\t\t\t\t\t  namebuf,\n+\t\t\t\t\t\t\t  fstat.iflags,\n+\t\t\t\t\t\t\t  &fstat.entry,\n+\t\t\t\t\t\t\t  i->dirpos);\n \t} else {\n \t\tentrysize = fuse_add_direntry(i->req, i->buf + i->bufused,\n \t\t\t\t\t      i->bufsz - i->bufused, namebuf,\n@@ -5218,7 +5242,7 @@ static void op_create(fuse_req_t req, fuse_ino_t fino, const char *name,\n \tif (ret)\n \t\tfuse_reply_err(req, -ret);\n \telse\n-\t\tfuse_reply_create(req, &fstat.entry, fp);\n+\t\tfuse_reply_create_iflags(req, &fstat.entry, fstat.iflags, fp);\n }\n \n #if FUSE_VERSION >= FUSE_MAKE_VERSION(3, 17)\n@@ -5417,8 +5441,8 @@ static void op_setattr(fuse_req_t req, fuse_ino_t fino, struct stat *attr,\n \tif (ret)\n \t\tfuse_reply_err(req, -ret);\n \telse\n-\t\tfuse_reply_attr(req, &fstat.entry.attr,\n-\t\t\t\tfstat.entry.attr_timeout);\n+\t\tfuse_reply_attr_iflags(req, &fstat.entry.attr, fstat.iflags,\n+\t\t\t\t       fstat.entry.attr_timeout);\n }\n \n #define FUSE4FS_MODIFIABLE_IFLAGS \\\ndiff --git a/misc/fuse2fs.c b/misc/fuse2fs.c\nindex eecbf60a3360c6..c6472a1c45506f 100644\n--- a/misc/fuse2fs.c\n+++ b/misc/fuse2fs.c\n@@ -1987,6 +1987,23 @@ static int op_getattr(const char *path, struct stat *statbuf,\n \treturn ret;\n }\n \n+#if FUSE_VERSION >= FUSE_MAKE_VERSION(3, 99)\n+static int op_getattr_iflags(const char *path, struct stat *statbuf,\n+\t\t\t     unsigned int *iflags, struct fuse_file_info *fi)\n+{\n+\tint ret = op_getattr(path, statbuf, fi);\n+\n+\tif (ret)\n+\t\treturn ret;\n+\n+\tif (fuse_fs_can_enable_iomap(statbuf))\n+\t\t*iflags |= FUSE_IFLAG_IOMAP | FUSE_IFLAG_EXCLUSIVE;\n+\n+\treturn 0;\n+}\n+#endif\n+\n+\n static int op_readlink(const char *path, char *buf, size_t len)\n {\n \tstruct fuse2fs *ff = fuse2fs_get();\n@@ -6673,6 +6690,9 @@ static struct fuse_operations fs_ops = {\n #ifdef SUPPORT_FALLOCATE\n \t.fallocate = op_fallocate,\n #endif\n+#if FUSE_VERSION >= FUSE_MAKE_VERSION(3, 99)\n+\t.getattr_iflags = op_getattr_iflags,\n+#endif\n #ifdef HAVE_FUSE_IOMAP\n \t.iomap_begin = op_iomap_begin,\n \t.iomap_end = op_iomap_end,\n","prefixes":["13/19"]}