From: "Darrick J. Wong" <djwong@kernel.org>
To: Christoph Hellwig <hch@lst.de>
Cc: Chandan Babu R <chandan.babu@oracle.com>,
Christian Brauner <brauner@kernel.org>,
linux-xfs@vger.kernel.org, linux-fsdevel@vger.kernel.org
Subject: Re: [PATCH 05/10] iomap: pass the iomap to the punch callback
Date: Tue, 27 Aug 2024 09:28:26 -0700 [thread overview]
Message-ID: <20240827162826.GZ865349@frogsfrogsfrogs> (raw)
In-Reply-To: <20240827051028.1751933-6-hch@lst.de>
On Tue, Aug 27, 2024 at 07:09:52AM +0200, Christoph Hellwig wrote:
> XFS will need to look at the flags in the iomap structure, so pass it
> down all the way to the callback.
>
> Signed-off-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: Darrick J. Wong <djwong@kernel.org>
--D
> ---
> fs/iomap/buffered-io.c | 25 +++++++++++++------------
> fs/xfs/xfs_iomap.c | 3 ++-
> include/linux/iomap.h | 3 ++-
> 3 files changed, 17 insertions(+), 14 deletions(-)
>
> diff --git a/fs/iomap/buffered-io.c b/fs/iomap/buffered-io.c
> index 574ca413516443..7950cbecb78c22 100644
> --- a/fs/iomap/buffered-io.c
> +++ b/fs/iomap/buffered-io.c
> @@ -1047,7 +1047,7 @@ EXPORT_SYMBOL_GPL(iomap_file_buffered_write);
>
> static int iomap_write_delalloc_ifs_punch(struct inode *inode,
> struct folio *folio, loff_t start_byte, loff_t end_byte,
> - iomap_punch_t punch)
> + struct iomap *iomap, iomap_punch_t punch)
> {
> unsigned int first_blk, last_blk, i;
> loff_t last_byte;
> @@ -1072,7 +1072,7 @@ static int iomap_write_delalloc_ifs_punch(struct inode *inode,
> for (i = first_blk; i <= last_blk; i++) {
> if (!ifs_block_is_dirty(folio, ifs, i)) {
> ret = punch(inode, folio_pos(folio) + (i << blkbits),
> - 1 << blkbits);
> + 1 << blkbits, iomap);
> if (ret)
> return ret;
> }
> @@ -1084,7 +1084,7 @@ static int iomap_write_delalloc_ifs_punch(struct inode *inode,
>
> static int iomap_write_delalloc_punch(struct inode *inode, struct folio *folio,
> loff_t *punch_start_byte, loff_t start_byte, loff_t end_byte,
> - iomap_punch_t punch)
> + struct iomap *iomap, iomap_punch_t punch)
> {
> int ret = 0;
>
> @@ -1094,14 +1094,14 @@ static int iomap_write_delalloc_punch(struct inode *inode, struct folio *folio,
> /* if dirty, punch up to offset */
> if (start_byte > *punch_start_byte) {
> ret = punch(inode, *punch_start_byte,
> - start_byte - *punch_start_byte);
> + start_byte - *punch_start_byte, iomap);
> if (ret)
> return ret;
> }
>
> /* Punch non-dirty blocks within folio */
> - ret = iomap_write_delalloc_ifs_punch(inode, folio, start_byte,
> - end_byte, punch);
> + ret = iomap_write_delalloc_ifs_punch(inode, folio, start_byte, end_byte,
> + iomap, punch);
> if (ret)
> return ret;
>
> @@ -1134,7 +1134,7 @@ static int iomap_write_delalloc_punch(struct inode *inode, struct folio *folio,
> */
> static int iomap_write_delalloc_scan(struct inode *inode,
> loff_t *punch_start_byte, loff_t start_byte, loff_t end_byte,
> - iomap_punch_t punch)
> + struct iomap *iomap, iomap_punch_t punch)
> {
> while (start_byte < end_byte) {
> struct folio *folio;
> @@ -1150,7 +1150,7 @@ static int iomap_write_delalloc_scan(struct inode *inode,
> }
>
> ret = iomap_write_delalloc_punch(inode, folio, punch_start_byte,
> - start_byte, end_byte, punch);
> + start_byte, end_byte, iomap, punch);
> if (ret) {
> folio_unlock(folio);
> folio_put(folio);
> @@ -1199,7 +1199,8 @@ static int iomap_write_delalloc_scan(struct inode *inode,
> * the code to subtle off-by-one bugs....
> */
> static int iomap_write_delalloc_release(struct inode *inode, loff_t start_byte,
> - loff_t end_byte, unsigned flags, iomap_punch_t punch)
> + loff_t end_byte, unsigned flags, struct iomap *iomap,
> + iomap_punch_t punch)
> {
> loff_t punch_start_byte = start_byte;
> loff_t scan_end_byte = min(i_size_read(inode), end_byte);
> @@ -1257,7 +1258,7 @@ static int iomap_write_delalloc_release(struct inode *inode, loff_t start_byte,
> WARN_ON_ONCE(data_end > scan_end_byte);
>
> error = iomap_write_delalloc_scan(inode, &punch_start_byte,
> - start_byte, data_end, punch);
> + start_byte, data_end, iomap, punch);
> if (error)
> goto out_unlock;
>
> @@ -1267,7 +1268,7 @@ static int iomap_write_delalloc_release(struct inode *inode, loff_t start_byte,
>
> if (punch_start_byte < end_byte)
> error = punch(inode, punch_start_byte,
> - end_byte - punch_start_byte);
> + end_byte - punch_start_byte, iomap);
> out_unlock:
> if (!(flags & IOMAP_ZERO))
> filemap_invalidate_unlock(inode->i_mapping);
> @@ -1335,7 +1336,7 @@ int iomap_file_buffered_write_punch_delalloc(struct inode *inode,
> return 0;
>
> return iomap_write_delalloc_release(inode, start_byte, end_byte, flags,
> - punch);
> + iomap, punch);
> }
> EXPORT_SYMBOL_GPL(iomap_file_buffered_write_punch_delalloc);
>
> diff --git a/fs/xfs/xfs_iomap.c b/fs/xfs/xfs_iomap.c
> index 47b5c83588259e..695e5bee776f94 100644
> --- a/fs/xfs/xfs_iomap.c
> +++ b/fs/xfs/xfs_iomap.c
> @@ -1212,7 +1212,8 @@ static int
> xfs_buffered_write_delalloc_punch(
> struct inode *inode,
> loff_t offset,
> - loff_t length)
> + loff_t length,
> + struct iomap *iomap)
> {
> xfs_bmap_punch_delalloc_range(XFS_I(inode), offset, offset + length);
> return 0;
> diff --git a/include/linux/iomap.h b/include/linux/iomap.h
> index 83da37d64d1144..a931190f6d858b 100644
> --- a/include/linux/iomap.h
> +++ b/include/linux/iomap.h
> @@ -274,7 +274,8 @@ int iomap_truncate_page(struct inode *inode, loff_t pos, bool *did_zero,
> vm_fault_t iomap_page_mkwrite(struct vm_fault *vmf,
> const struct iomap_ops *ops);
>
> -typedef int (*iomap_punch_t)(struct inode *inode, loff_t offset, loff_t length);
> +typedef int (*iomap_punch_t)(struct inode *inode, loff_t offset, loff_t length,
> + struct iomap *iomap);
> int iomap_file_buffered_write_punch_delalloc(struct inode *inode, loff_t pos,
> loff_t length, ssize_t written, unsigned flag,
> struct iomap *iomap, iomap_punch_t punch);
> --
> 2.43.0
>
>
next prev parent reply other threads:[~2024-08-27 16:28 UTC|newest]
Thread overview: 33+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-08-27 5:09 fix stale delalloc punching for COW I/O Christoph Hellwig
2024-08-27 5:09 ` [PATCH 01/10] iomap: handle a post-direct I/O invalidate race in iomap_write_delalloc_release Christoph Hellwig
2024-08-27 16:14 ` Darrick J. Wong
2024-08-28 4:48 ` Christoph Hellwig
2024-08-28 16:13 ` Darrick J. Wong
2024-08-29 3:46 ` Christoph Hellwig
2024-08-29 14:22 ` Darrick J. Wong
2024-08-30 3:42 ` Christoph Hellwig
2024-08-27 5:09 ` [PATCH 02/10] iomap: improve shared block detection in iomap_unshare_iter Christoph Hellwig
2024-08-27 5:44 ` Darrick J. Wong
2024-08-27 5:47 ` Christoph Hellwig
2024-08-27 16:21 ` Darrick J. Wong
2024-08-28 4:49 ` Christoph Hellwig
2024-08-28 16:17 ` Darrick J. Wong
2024-08-27 5:09 ` [PATCH 03/10] iomap: pass flags to iomap_file_buffered_write_punch_delalloc Christoph Hellwig
2024-08-27 16:22 ` Darrick J. Wong
2024-08-27 5:09 ` [PATCH 04/10] iomap: zeroing already holds invalidate_lock in iomap_file_buffered_write_punch_delalloc Christoph Hellwig
2024-08-27 16:28 ` Darrick J. Wong
2024-08-28 4:51 ` Christoph Hellwig
2024-08-27 5:09 ` [PATCH 05/10] iomap: pass the iomap to the punch callback Christoph Hellwig
2024-08-27 16:28 ` Darrick J. Wong [this message]
2024-08-27 5:09 ` [PATCH 06/10] iomap: remove the iomap_file_buffered_write_punch_delalloc return value Christoph Hellwig
2024-08-27 16:36 ` Darrick J. Wong
2024-08-28 4:52 ` Christoph Hellwig
2024-08-28 16:18 ` Darrick J. Wong
2024-08-27 5:09 ` [PATCH 07/10] xfs: support the COW fork in xfs_bmap_punch_delalloc_range Christoph Hellwig
2024-08-27 16:37 ` Darrick J. Wong
2024-08-27 5:09 ` [PATCH 08/10] xfs: share a bit more code in xfs_buffered_write_iomap_begin Christoph Hellwig
2024-08-27 16:38 ` Darrick J. Wong
2024-08-27 5:09 ` [PATCH 09/10] xfs: set IOMAP_F_SHARED for all COW fork allocations Christoph Hellwig
2024-08-27 16:44 ` Darrick J. Wong
2024-08-27 5:09 ` [PATCH 10/10] xfs: punch delalloc extents from the COW fork for COW writes Christoph Hellwig
2024-08-27 16:44 ` Darrick J. Wong
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=20240827162826.GZ865349@frogsfrogsfrogs \
--to=djwong@kernel.org \
--cc=brauner@kernel.org \
--cc=chandan.babu@oracle.com \
--cc=hch@lst.de \
--cc=linux-fsdevel@vger.kernel.org \
--cc=linux-xfs@vger.kernel.org \
/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.