{"id":2226959,"url":"http://patchwork.ozlabs.org/api/patches/2226959/?format=json","web_url":"http://patchwork.ozlabs.org/project/linux-ext4/patch/177689989558.3821326.5811207681918955860.stgit@frogsfrogsfrogs/","project":{"id":8,"url":"http://patchwork.ozlabs.org/api/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,"list_archive_url":"","list_archive_url_format":"","commit_url_format":""},"msgid":"<177689989558.3821326.5811207681918955860.stgit@frogsfrogsfrogs>","list_archive_url":null,"date":"2026-04-22T23:23:47","name":"[01/10] libext2fs: make it possible to extract the fd from an IO manager","commit_ref":null,"pull_url":null,"state":"new","archived":false,"hash":"4e9bd280ba75f09abdd4ee670be9c7cac4dad21d","submitter":{"id":77032,"url":"http://patchwork.ozlabs.org/api/people/77032/?format=json","name":"Darrick J. Wong","email":"djwong@kernel.org"},"delegate":null,"mbox":"http://patchwork.ozlabs.org/project/linux-ext4/patch/177689989558.3821326.5811207681918955860.stgit@frogsfrogsfrogs/mbox/","series":[{"id":501127,"url":"http://patchwork.ozlabs.org/api/series/501127/?format=json","web_url":"http://patchwork.ozlabs.org/project/linux-ext4/list/?series=501127","date":"2026-04-22T23:23:47","name":"[01/10] libext2fs: make it possible to extract the fd from an IO manager","version":1,"mbox":"http://patchwork.ozlabs.org/series/501127/mbox/"}],"comments":"http://patchwork.ozlabs.org/api/patches/2226959/comments/","check":"pending","checks":"http://patchwork.ozlabs.org/api/patches/2226959/checks/","tags":{},"related":[],"headers":{"Return-Path":"\n <SRS0=l5fb=CV=vger.kernel.org=linux-ext4+bounces-16005-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=rAOSrP1G;\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=l5fb=cv=vger.kernel.org=linux-ext4+bounces-16005-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=rAOSrP1G;\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-16005-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=\"rAOSrP1G\"","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 4g1FfN03JPz1y2d\n\tfor <incoming@patchwork.ozlabs.org>; Thu, 23 Apr 2026 09:23:56 +1000 (AEST)","from mail.ozlabs.org (mail.ozlabs.org [IPv6:2404:9400:2221:ea00::3])\n\tby gandalf.ozlabs.org (Postfix) with ESMTP id 4g1FfM6fwGz4wKB\n\tfor <incoming@patchwork.ozlabs.org>; Thu, 23 Apr 2026 09:23:55 +1000 (AEST)","by gandalf.ozlabs.org (Postfix)\n\tid 4g1FfM6WVKz4wKP; Thu, 23 Apr 2026 09:23:55 +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 server-signature RSA-PSS (4096 bits) server-digest\n SHA256)\n\t(No client certificate requested)\n\tby gandalf.ozlabs.org (Postfix) with ESMTPS id 4g1FfJ0nGvz4wKB\n\tfor <patchwork-incoming@ozlabs.org>; Thu, 23 Apr 2026 09:23:52 +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 DB6F73004D89\n\tfor <patchwork-incoming@ozlabs.org>; Wed, 22 Apr 2026 23:23:49 +0000 (UTC)","from localhost.localdomain (localhost.localdomain [127.0.0.1])\n\tby smtp.subspace.kernel.org (Postfix) with ESMTP id 0221236E473;\n\tWed, 22 Apr 2026 23:23:48 +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 B93FA1D6DA9;\n\tWed, 22 Apr 2026 23:23:47 +0000 (UTC)","by smtp.kernel.org (Postfix) with ESMTPSA id 9561BC2BCAF;\n\tWed, 22 Apr 2026 23:23:47 +0000 (UTC)"],"ARC-Seal":["i=2; a=rsa-sha256; d=ozlabs.org; s=201707; t=1776900235; cv=pass;\n\tb=bvpNrzkQKZ15W9fQEl+10Xh21SKYafCDMzot2NAjF3BamtsAx+CYYfuWshd5VIPDuljTFcRLs6Ale8QFhYm0jMp7Cg2uFtgG1Jxi1YqYIsO3RhgmYY60qqCSXVBf1ZNs7yJnlf0PNzGWJ/ChJDLp/sO0pI0C5O4P6+3ARbXc2kFaKTNrgSvo97Nt1BB/zEouFln6q2lYddzX7I8219lOaPsS5tRacS62s/FWOu4MR33QswGnEzbtEwiOj5EJElnR2qQ5c2xFceQ1CR4QNnIOXqfeHD2bvMr0hZ6h9xBtc6Tl0Fo3SjXIDVUoQZMu+KI8w+AWe6JgDOY6QYuREk1tLQ==","i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;\n\tt=1776900227; cv=none;\n b=dzQnURHTigZH7Clvc2G5T6XNeM7mapQdAr4Emx9KBg8bCVMiOVPm0NesG2BpiPR4W6fRLhbrtSrJqLKasutQLTAClX6x09TQVR2FXhf8wtncr56LxVEsyE4ghj1mNxzA4GfmjdnbqdUjx5DgRVWuE6xy5aKGNAZgTjqe2cL/Q1Y="],"ARC-Message-Signature":["i=2; a=rsa-sha256; d=ozlabs.org; s=201707;\n\tt=1776900235; c=relaxed/relaxed;\n\tbh=rNazFuvgn+L1r5GoJaEqpe1bFOVEy9jSNV3KizZLyvk=;\n\th=Date:Subject:From:To:Cc:Message-ID:In-Reply-To:References:\n\t MIME-Version:Content-Type;\n b=j4z5gGnqHxj7z6QFiXhDt6RbkPt4SDEC95HJ+6oiu/g0RMQtJe6lOMq6QjzOm7Wu4D+83Ec2Pf2fZMGCN+o4pfHqqq2wXqSWlhDp3jOKy7YSkRHQlWqhVUfW+af7qDeyhDfZLLz1sVORJLKTiJZdidlKTkSgjiRJV9xw3YosuSx5fN9DhKCYrgBiL1RMn/kPVBTBCG9sh9qqVlY32G5h/Mx7C3/Ox6wPjP26qdoHGa+S5CVtCQc5zjyL7FWGqzPRdSFg4VaLXr7mtEQ1pnxvd4zq7lJ2TsGOgimK2llYAE+z8NkvtLp2rWc1tUC7X4Ookgb3UiIapY+AMnJCTL1lBQ==","i=1; a=rsa-sha256; d=subspace.kernel.org;\n\ts=arc-20240116; t=1776900227; c=relaxed/simple;\n\tbh=A1DRXP6WgoRkW+uXzPhMWN8lF2qZ/i34lqWXZGtaFLY=;\n\th=Date:Subject:From:To:Cc:Message-ID:In-Reply-To:References:\n\t MIME-Version:Content-Type;\n b=nNRdAowRx7ZcbNArHLRi0rR88V6PY9F1of4Wp/EAgSVZvNkzc1pyn7YtRCaq8qEVcMDwLMCY36vO63aUEm0cqGt09CBdxB23bQao5RngNwEzIIXGxPHV052YjanLoUOGcrG/V9DqxpRnGZu9OsN0O7TXY57MR0wvfqXgdnFad24="],"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=rAOSrP1G; 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-16005-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=rAOSrP1G; 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=1776900227;\n\tbh=A1DRXP6WgoRkW+uXzPhMWN8lF2qZ/i34lqWXZGtaFLY=;\n\th=Date:Subject:From:To:Cc:In-Reply-To:References:From;\n\tb=rAOSrP1G4TpH1vYOoMFYlAw5kJzlDFL2ZneWF1J8AR5qU2K1VuTu1qmIB02wNj70c\n\t nouLuD33e7TB34se6SLYATZ+ZQ/avRfdCYyV/GO+aYhy0sR98tDQ6JnPX/Oogbe31C\n\t LpdvwBHjtq5/3CPuvlmpKvnlC4OidXPDGf3UWgUT4ojrzc/J+EW/FlcCgxdSW6Jux6\n\t hYazt9c0qhNguLF034TC+GdsMMzTELCcpSSRuLjKJoO/rGVOZDnP4eCXRZN9zuH/zr\n\t SHLi+tN1CFCCiJAP1WMN0oTw9b/uag7hek+9ESkLXZNzIjsyjFcez/wWt8sKjlDfMJ\n\t y3PTETCsgPdnA==","Date":"Wed, 22 Apr 2026 16:23:47 -0700","Subject":"[PATCH 01/10] libext2fs: make it possible to extract the fd from an\n IO manager","From":"\"Darrick J. Wong\" <djwong@kernel.org>","To":"tytso@mit.edu","Cc":"linux-fsdevel@vger.kernel.org, fuse-devel@lists.linux.dev,\n linux-ext4@vger.kernel.org, neal@gompa.dev, joannelkoong@gmail.com,\n miklos@szeredi.hu, bernd@bsbernd.com","Message-ID":"<177689989558.3821326.5811207681918955860.stgit@frogsfrogsfrogs>","In-Reply-To":"<177689989498.3821326.15497525132012299039.stgit@frogsfrogsfrogs>","References":"<177689989498.3821326.15497525132012299039.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\nMake it so that we can extract the fd from an open IO manager.  This\nwill be used in subsequent patches to register the open block device\nwith the fuse iomap kernel driver.\n\nSigned-off-by: \"Darrick J. Wong\" <djwong@kernel.org>\n---\n lib/ext2fs/ext2_io.h         |    4 +++-\n debian/libext2fs2t64.symbols |    1 +\n lib/ext2fs/io_manager.c      |    8 ++++++++\n lib/ext2fs/unix_io.c         |   20 ++++++++++++++++++++\n 4 files changed, 32 insertions(+), 1 deletion(-)","diff":"diff --git a/lib/ext2fs/ext2_io.h b/lib/ext2fs/ext2_io.h\nindex 61865d54d82490..c880ea2524f248 100644\n--- a/lib/ext2fs/ext2_io.h\n+++ b/lib/ext2fs/ext2_io.h\n@@ -103,7 +103,8 @@ struct struct_io_manager {\n \terrcode_t (*zeroout)(io_channel channel, unsigned long long block,\n \t\t\t     unsigned long long count);\n \terrcode_t (*flock)(io_channel channel, unsigned int flock_flags);\n-\tlong\treserved[13];\n+\terrcode_t (*get_fd)(io_channel channel, int *fd);\n+\tlong\treserved[12];\n };\n \n #define IO_FLAG_RW\t\t0x0001\n@@ -155,6 +156,7 @@ extern errcode_t io_channel_cache_readahead(io_channel io,\n \t\t\t\t\t    unsigned long long count);\n extern errcode_t io_channel_flock(io_channel io, unsigned int flock_flags);\n extern errcode_t io_channel_funlock(io_channel io);\n+extern errcode_t io_channel_get_fd(io_channel io, int *fd);\n \n #ifdef _WIN32\n /* windows_io.c */\ndiff --git a/debian/libext2fs2t64.symbols b/debian/libext2fs2t64.symbols\nindex affe4c27d4e791..555fbbb0c98878 100644\n--- a/debian/libext2fs2t64.symbols\n+++ b/debian/libext2fs2t64.symbols\n@@ -701,6 +701,7 @@ libext2fs.so.2 libext2fs2t64 #MINVER#\n  io_channel_discard@Base 1.42\n  io_channel_flock@Base 1.47.99\n  io_channel_funlock@Base 1.47.99\n+ io_channel_get_fd@Base 1.47.99\n  io_channel_read_blk64@Base 1.41.1\n  io_channel_set_options@Base 1.37\n  io_channel_write_blk64@Base 1.41.1\ndiff --git a/lib/ext2fs/io_manager.c b/lib/ext2fs/io_manager.c\nindex 791ec7d14adbba..dff3d73552827f 100644\n--- a/lib/ext2fs/io_manager.c\n+++ b/lib/ext2fs/io_manager.c\n@@ -166,3 +166,11 @@ errcode_t io_channel_funlock(io_channel io)\n \n \treturn io->manager->flock(io, 0);\n }\n+\n+errcode_t io_channel_get_fd(io_channel io, int *fd)\n+{\n+\tif (!io->manager->get_fd)\n+\t\treturn EXT2_ET_OP_NOT_SUPPORTED;\n+\n+\treturn io->manager->get_fd(io, fd);\n+}\ndiff --git a/lib/ext2fs/unix_io.c b/lib/ext2fs/unix_io.c\nindex f4307db0fb2b05..79bc9219f9515b 100644\n--- a/lib/ext2fs/unix_io.c\n+++ b/lib/ext2fs/unix_io.c\n@@ -1786,6 +1786,24 @@ static errcode_t unix_zeroout(io_channel channel, unsigned long long block,\n unimplemented:\n \treturn EXT2_ET_UNIMPLEMENTED;\n }\n+\n+static errcode_t unix_get_fd(io_channel channel, int *fd)\n+{\n+\tstruct unix_private_data *data;\n+\n+\tEXT2_CHECK_MAGIC(channel, EXT2_ET_MAGIC_IO_CHANNEL);\n+\tdata = (struct unix_private_data *) channel->private_data;\n+\tEXT2_CHECK_MAGIC(data, EXT2_ET_MAGIC_UNIX_IO_CHANNEL);\n+\n+\tif (data->offset) {\n+\t\t*fd = -1;\n+\t\treturn EINVAL;\n+\t}\n+\n+\t*fd = data->dev;\n+\treturn 0;\n+}\n+\n #if __GNUC_PREREQ (4, 6)\n #pragma GCC diagnostic pop\n #endif\n@@ -1808,6 +1826,7 @@ static struct struct_io_manager struct_unix_manager = {\n \t.cache_readahead\t= unix_cache_readahead,\n \t.zeroout\t= unix_zeroout,\n \t.flock\t\t= unix_flock,\n+\t.get_fd\t\t= unix_get_fd,\n };\n \n io_manager unix_io_manager = &struct_unix_manager;\n@@ -1830,6 +1849,7 @@ static struct struct_io_manager struct_unixfd_manager = {\n \t.cache_readahead\t= unix_cache_readahead,\n \t.zeroout\t= unix_zeroout,\n \t.flock\t\t= unix_flock,\n+\t.get_fd\t\t= unix_get_fd,\n };\n \n io_manager unixfd_io_manager = &struct_unixfd_manager;\n","prefixes":["01/10"]}