All of lore.kernel.org
 help / color / mirror / Atom feed
From: Zhang Yi <yi.zhang@huaweicloud.com>
To: linux-ext4@vger.kernel.org
Cc: linux-fsdevel@vger.kernel.org, tytso@mit.edu,
	adilger.kernel@dilger.ca, jack@suse.cz, ritesh.list@gmail.com,
	hch@infradead.org, djwong@kernel.org, willy@infradead.org,
	yi.zhang@huawei.com, yi.zhang@huaweicloud.com,
	chengzhihao1@huawei.com, yukuai3@huawei.com,
	wangkefeng.wang@huawei.com
Subject: [RFC PATCH v2 15/25] ext4: add a new iomap aops for regular file's buffered IO path
Date: Tue,  2 Jan 2024 20:39:08 +0800	[thread overview]
Message-ID: <20240102123918.799062-16-yi.zhang@huaweicloud.com> (raw)
In-Reply-To: <20240102123918.799062-1-yi.zhang@huaweicloud.com>

From: Zhang Yi <yi.zhang@huawei.com>

Introduce a new iomap address space operations ext4_iomap_aops to
support regular file's buffered IO path and add an inode state flag
EXT4_STATE_BUFFERED_IOMAP to indicate that one inode use the iomap
path. Most of their callbacks should be able to use general
implementation, the left over read_folio, readahead and writepages
should be implemented later.

Signed-off-by: Zhang Yi <yi.zhang@huawei.com>
---
 fs/ext4/ext4.h  |  1 +
 fs/ext4/inode.c | 33 +++++++++++++++++++++++++++++++++
 2 files changed, 34 insertions(+)

diff --git a/fs/ext4/ext4.h b/fs/ext4/ext4.h
index 287284a3f128..3461cb3ff524 100644
--- a/fs/ext4/ext4.h
+++ b/fs/ext4/ext4.h
@@ -1913,6 +1913,7 @@ enum {
 	EXT4_STATE_VERITY_IN_PROGRESS,	/* building fs-verity Merkle tree */
 	EXT4_STATE_FC_COMMITTING,	/* Fast commit ongoing */
 	EXT4_STATE_ORPHAN_FILE,		/* Inode orphaned in orphan file */
+	EXT4_STATE_BUFFERED_IOMAP,	/* Inode use iomap for buffered IO */
 };
 
 #define EXT4_INODE_BIT_FNS(name, field, offset)				\
diff --git a/fs/ext4/inode.c b/fs/ext4/inode.c
index 9f9b1fce8da8..6b5cd0dab1ad 100644
--- a/fs/ext4/inode.c
+++ b/fs/ext4/inode.c
@@ -3492,6 +3492,22 @@ const struct iomap_ops ext4_iomap_report_ops = {
 	.iomap_begin = ext4_iomap_begin_report,
 };
 
+static int ext4_iomap_read_folio(struct file *file, struct folio *folio)
+{
+	return 0;
+}
+
+static void ext4_iomap_readahead(struct readahead_control *rac)
+{
+
+}
+
+static int ext4_iomap_writepages(struct address_space *mapping,
+				 struct writeback_control *wbc)
+{
+	return 0;
+}
+
 /*
  * For data=journal mode, folio should be marked dirty only when it was
  * writeably mapped. When that happens, it was already attached to the
@@ -3581,6 +3597,21 @@ static const struct address_space_operations ext4_da_aops = {
 	.swap_activate		= ext4_iomap_swap_activate,
 };
 
+static const struct address_space_operations ext4_iomap_aops = {
+	.read_folio		= ext4_iomap_read_folio,
+	.readahead		= ext4_iomap_readahead,
+	.writepages		= ext4_iomap_writepages,
+	.dirty_folio		= iomap_dirty_folio,
+	.bmap			= ext4_bmap,
+	.invalidate_folio	= iomap_invalidate_folio,
+	.release_folio		= iomap_release_folio,
+	.direct_IO		= noop_direct_IO,
+	.migrate_folio		= filemap_migrate_folio,
+	.is_partially_uptodate  = iomap_is_partially_uptodate,
+	.error_remove_page	= generic_error_remove_page,
+	.swap_activate		= ext4_iomap_swap_activate,
+};
+
 static const struct address_space_operations ext4_dax_aops = {
 	.writepages		= ext4_dax_writepages,
 	.direct_IO		= noop_direct_IO,
@@ -3603,6 +3634,8 @@ void ext4_set_aops(struct inode *inode)
 	}
 	if (IS_DAX(inode))
 		inode->i_mapping->a_ops = &ext4_dax_aops;
+	else if (ext4_test_inode_state(inode, EXT4_STATE_BUFFERED_IOMAP))
+		inode->i_mapping->a_ops = &ext4_iomap_aops;
 	else if (test_opt(inode->i_sb, DELALLOC))
 		inode->i_mapping->a_ops = &ext4_da_aops;
 	else
-- 
2.39.2


  parent reply	other threads:[~2024-01-02 12:42 UTC|newest]

Thread overview: 33+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-01-02 12:38 [RFC PATCH v2 00/25] ext4: use iomap for regular file's buffered IO path and enable large foilo Zhang Yi
2024-01-02 12:38 ` [RFC PATCH v2 01/25] ext4: refactor ext4_da_map_blocks() Zhang Yi
2024-01-03  9:56   ` Jan Kara
2024-01-02 12:38 ` [RFC PATCH v2 02/25] ext4: convert to exclusive lock while inserting delalloc extents Zhang Yi
2024-01-03 10:03   ` Jan Kara
2024-01-02 12:38 ` [RFC PATCH v2 03/25] ext4: correct the hole length returned by ext4_map_blocks() Zhang Yi
2024-01-03 11:02   ` Jan Kara
2024-01-02 12:38 ` [RFC PATCH v2 04/25] ext4: add a hole extent entry in cache after punch Zhang Yi
2024-01-03 11:04   ` Jan Kara
2024-01-02 12:38 ` [RFC PATCH v2 05/25] ext4: make ext4_map_blocks() distinguish delalloc only extent Zhang Yi
2024-01-03 11:31   ` Jan Kara
2024-01-03 13:20     ` Zhang Yi
2024-01-02 12:38 ` [RFC PATCH v2 06/25] ext4: make ext4_set_iomap() recognize IOMAP_DELALLOC map type Zhang Yi
2024-01-03 11:35   ` Jan Kara
2024-01-02 12:39 ` [RFC PATCH v2 07/25] iomap: don't increase i_size if it's not a write operation Zhang Yi
2024-01-02 12:39 ` [RFC PATCH v2 08/25] iomap: add pos and dirty_len into trace_iomap_writepage_map Zhang Yi
2024-01-02 12:39 ` [RFC PATCH v2 09/25] ext4: allow inserting delalloc extents with multi-blocks Zhang Yi
2024-01-02 12:39 ` [RFC PATCH v2 10/25] ext4: correct delalloc extent length Zhang Yi
2024-01-02 12:39 ` [RFC PATCH v2 11/25] ext4: also mark extent as delalloc if it's been unwritten Zhang Yi
2024-01-02 12:39 ` [RFC PATCH v2 12/25] ext4: factor out bh handles to ext4_da_get_block_prep() Zhang Yi
2024-01-02 12:39 ` [RFC PATCH v2 13/25] ext4: use reserved metadata blocks when splitting extent in endio Zhang Yi
2024-01-02 12:39 ` [RFC PATCH v2 14/25] ext4: introduce seq counter for extent entry Zhang Yi
2024-01-02 12:39 ` Zhang Yi [this message]
2024-01-02 12:39 ` [RFC PATCH v2 16/25] ext4: implement buffered read iomap path Zhang Yi
2024-01-02 12:39 ` [RFC PATCH v2 17/25] ext4: implement buffered write " Zhang Yi
2024-01-02 12:39 ` [RFC PATCH v2 18/25] ext4: implement writeback " Zhang Yi
2024-01-02 12:39 ` [RFC PATCH v2 19/25] ext4: implement mmap " Zhang Yi
2024-01-02 12:39 ` [RFC PATCH v2 20/25] ext4: implement zero_range " Zhang Yi
2024-01-02 12:39 ` [RFC PATCH v2 21/25] ext4: writeback partial blocks before zero range Zhang Yi
2024-01-02 12:39 ` [RFC PATCH v2 22/25] ext4: fall back to buffer_head path for defrag Zhang Yi
2024-01-02 12:39 ` [RFC PATCH v2 23/25] ext4: partially enable iomap for regular file's buffered IO path Zhang Yi
2024-01-02 12:39 ` [RFC PATCH v2 24/25] filemap: support disable large folios on active inode Zhang Yi
2024-01-02 12:39 ` [RFC PATCH v2 25/25] ext4: enable large folio for regular file with iomap buffered IO path Zhang Yi

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=20240102123918.799062-16-yi.zhang@huaweicloud.com \
    --to=yi.zhang@huaweicloud.com \
    --cc=adilger.kernel@dilger.ca \
    --cc=chengzhihao1@huawei.com \
    --cc=djwong@kernel.org \
    --cc=hch@infradead.org \
    --cc=jack@suse.cz \
    --cc=linux-ext4@vger.kernel.org \
    --cc=linux-fsdevel@vger.kernel.org \
    --cc=ritesh.list@gmail.com \
    --cc=tytso@mit.edu \
    --cc=wangkefeng.wang@huawei.com \
    --cc=willy@infradead.org \
    --cc=yi.zhang@huawei.com \
    --cc=yukuai3@huawei.com \
    /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.