From: <gregkh@linuxfoundation.org>
To: catherine.hoang@oracle.com,chandan.babu@oracle.com,chandanbabu@kernel.org,djwong@kernel.org,gregkh@linuxfoundation.org,hch@lst.de,leah.rumancik@gmail.com,xfs-stable@lists.linux.dev,yi.zhang@huawei.com
Cc: <stable-commits@vger.kernel.org>
Subject: Patch "xfs: make xfs_bmapi_convert_delalloc() to allocate the target offset" has been added to the 6.1-stable tree
Date: Mon, 05 May 2025 11:18:24 +0200 [thread overview]
Message-ID: <2025050524-pushy-traction-a5bd@gregkh> (raw)
In-Reply-To: <20250430212704.2905795-11-leah.rumancik@gmail.com>
This is a note to let you know that I've just added the patch titled
xfs: make xfs_bmapi_convert_delalloc() to allocate the target offset
to the 6.1-stable tree which can be found at:
http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary
The filename of the patch is:
xfs-make-xfs_bmapi_convert_delalloc-to-allocate-the-target-offset.patch
and it can be found in the queue-6.1 subdirectory.
If you, or anyone else, feels it should not be added to the stable tree,
please let <stable@vger.kernel.org> know about it.
From stable+bounces-139237-greg=kroah.com@vger.kernel.org Wed Apr 30 23:31:55 2025
From: Leah Rumancik <leah.rumancik@gmail.com>
Date: Wed, 30 Apr 2025 14:26:57 -0700
Subject: xfs: make xfs_bmapi_convert_delalloc() to allocate the target offset
To: stable@vger.kernel.org
Cc: xfs-stable@lists.linux.dev, chandan.babu@oracle.com, catherine.hoang@oracle.com, djwong@kernel.org, Zhang Yi <yi.zhang@huawei.com>, Christoph Hellwig <hch@lst.de>, Chandan Babu R <chandanbabu@kernel.org>, Leah Rumancik <leah.rumancik@gmail.com>
Message-ID: <20250430212704.2905795-11-leah.rumancik@gmail.com>
From: Zhang Yi <yi.zhang@huawei.com>
[ Upstream commit 2e08371a83f1c06fd85eea8cd37c87a224cc4cc4 ]
Since xfs_bmapi_convert_delalloc() only attempts to allocate the entire
delalloc extent and require multiple invocations to allocate the target
offset. So xfs_convert_blocks() add a loop to do this job and we call it
in the write back path, but xfs_convert_blocks() isn't a common helper.
Let's do it in xfs_bmapi_convert_delalloc() and drop
xfs_convert_blocks(), preparing for the post EOF delalloc blocks
converting in the buffered write begin path.
Signed-off-by: Zhang Yi <yi.zhang@huawei.com>
Reviewed-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: "Darrick J. Wong" <djwong@kernel.org>
Signed-off-by: Chandan Babu R <chandanbabu@kernel.org>
Signed-off-by: Leah Rumancik <leah.rumancik@gmail.com>
Acked-by: "Darrick J. Wong" <djwong@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
fs/xfs/libxfs/xfs_bmap.c | 34 +++++++++++++++++++++++++++--
fs/xfs/xfs_aops.c | 54 ++++++++++++-----------------------------------
2 files changed, 46 insertions(+), 42 deletions(-)
--- a/fs/xfs/libxfs/xfs_bmap.c
+++ b/fs/xfs/libxfs/xfs_bmap.c
@@ -4522,8 +4522,8 @@ error0:
* invocations to allocate the target offset if a large enough physical extent
* is not available.
*/
-int
-xfs_bmapi_convert_delalloc(
+static int
+xfs_bmapi_convert_one_delalloc(
struct xfs_inode *ip,
int whichfork,
xfs_off_t offset,
@@ -4651,6 +4651,36 @@ out_trans_cancel:
return error;
}
+/*
+ * Pass in a dellalloc extent and convert it to real extents, return the real
+ * extent that maps offset_fsb in iomap.
+ */
+int
+xfs_bmapi_convert_delalloc(
+ struct xfs_inode *ip,
+ int whichfork,
+ loff_t offset,
+ struct iomap *iomap,
+ unsigned int *seq)
+{
+ int error;
+
+ /*
+ * Attempt to allocate whatever delalloc extent currently backs offset
+ * and put the result into iomap. Allocate in a loop because it may
+ * take several attempts to allocate real blocks for a contiguous
+ * delalloc extent if free space is sufficiently fragmented.
+ */
+ do {
+ error = xfs_bmapi_convert_one_delalloc(ip, whichfork, offset,
+ iomap, seq);
+ if (error)
+ return error;
+ } while (iomap->offset + iomap->length <= offset);
+
+ return 0;
+}
+
int
xfs_bmapi_remap(
struct xfs_trans *tp,
--- a/fs/xfs/xfs_aops.c
+++ b/fs/xfs/xfs_aops.c
@@ -225,45 +225,6 @@ xfs_imap_valid(
return true;
}
-/*
- * Pass in a dellalloc extent and convert it to real extents, return the real
- * extent that maps offset_fsb in wpc->iomap.
- *
- * The current page is held locked so nothing could have removed the block
- * backing offset_fsb, although it could have moved from the COW to the data
- * fork by another thread.
- */
-static int
-xfs_convert_blocks(
- struct iomap_writepage_ctx *wpc,
- struct xfs_inode *ip,
- int whichfork,
- loff_t offset)
-{
- int error;
- unsigned *seq;
-
- if (whichfork == XFS_COW_FORK)
- seq = &XFS_WPC(wpc)->cow_seq;
- else
- seq = &XFS_WPC(wpc)->data_seq;
-
- /*
- * Attempt to allocate whatever delalloc extent currently backs offset
- * and put the result into wpc->iomap. Allocate in a loop because it
- * may take several attempts to allocate real blocks for a contiguous
- * delalloc extent if free space is sufficiently fragmented.
- */
- do {
- error = xfs_bmapi_convert_delalloc(ip, whichfork, offset,
- &wpc->iomap, seq);
- if (error)
- return error;
- } while (wpc->iomap.offset + wpc->iomap.length <= offset);
-
- return 0;
-}
-
static int
xfs_map_blocks(
struct iomap_writepage_ctx *wpc,
@@ -281,6 +242,7 @@ xfs_map_blocks(
struct xfs_iext_cursor icur;
int retries = 0;
int error = 0;
+ unsigned int *seq;
if (xfs_is_shutdown(mp))
return -EIO;
@@ -376,7 +338,19 @@ retry:
trace_xfs_map_blocks_found(ip, offset, count, whichfork, &imap);
return 0;
allocate_blocks:
- error = xfs_convert_blocks(wpc, ip, whichfork, offset);
+ /*
+ * Convert a dellalloc extent to a real one. The current page is held
+ * locked so nothing could have removed the block backing offset_fsb,
+ * although it could have moved from the COW to the data fork by another
+ * thread.
+ */
+ if (whichfork == XFS_COW_FORK)
+ seq = &XFS_WPC(wpc)->cow_seq;
+ else
+ seq = &XFS_WPC(wpc)->data_seq;
+
+ error = xfs_bmapi_convert_delalloc(ip, whichfork, offset,
+ &wpc->iomap, seq);
if (error) {
/*
* If we failed to find the extent in the COW fork we might have
Patches currently in stable-queue which might be from leah.rumancik@gmail.com are
queue-6.1/xfs-revert-commit-44af6c7e59b12.patch
queue-6.1/xfs-make-the-seq-argument-to-xfs_bmapi_convert_delalloc-optional.patch
queue-6.1/xfs-check-opcode-and-iovec-count-match-in-xlog_recover_attri_commit_pass2.patch
queue-6.1/xfs-allow-symlinks-with-short-remote-targets.patch
queue-6.1/xfs-match-lock-mode-in-xfs_buffered_write_iomap_begin.patch
queue-6.1/xfs-require-xfs_sb_feat_incompat_log_xattrs-for-attr-log-intent-item-recovery.patch
queue-6.1/xfs-allow-unlinked-symlinks-and-dirs-with-zero-size.patch
queue-6.1/xfs-restrict-when-we-try-to-align-cow-fork-delalloc-to-cowextsz-hints.patch
queue-6.1/xfs-fix-xfs_bmap_add_extent_delay_real-for-partial-conversions.patch
queue-6.1/xfs-validate-recovered-name-buffers-when-recovering-xattr-items.patch
queue-6.1/xfs-make-xfs_bmapi_convert_delalloc-to-allocate-the-target-offset.patch
queue-6.1/xfs-convert-delayed-extents-to-unwritten-when-zeroing-post-eof-blocks.patch
queue-6.1/xfs-fix-freeing-speculative-preallocations-for-preallocated-files.patch
queue-6.1/xfs-make-sure-sb_fdblocks-is-non-negative.patch
queue-6.1/xfs-remove-a-racy-if_bytes-check-in-xfs_reflink_end_cow_extent.patch
queue-6.1/xfs-fix-error-returns-from-xfs_bmapi_write.patch
next prev parent reply other threads:[~2025-05-05 9:18 UTC|newest]
Thread overview: 33+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-04-30 21:26 [PATCH 6.1 00/16] xfs backports for 6.1.y from 6.10 Leah Rumancik
2025-04-30 21:26 ` [PATCH 6.1 01/16] xfs: fix error returns from xfs_bmapi_write Leah Rumancik
2025-05-05 9:18 ` Patch "xfs: fix error returns from xfs_bmapi_write" has been added to the 6.1-stable tree gregkh
2025-04-30 21:26 ` [PATCH 6.1 02/16] xfs: fix xfs_bmap_add_extent_delay_real for partial conversions Leah Rumancik
2025-05-05 9:18 ` Patch "xfs: fix xfs_bmap_add_extent_delay_real for partial conversions" has been added to the 6.1-stable tree gregkh
2025-04-30 21:26 ` [PATCH 6.1 03/16] xfs: remove a racy if_bytes check in xfs_reflink_end_cow_extent Leah Rumancik
2025-05-05 9:18 ` Patch "xfs: remove a racy if_bytes check in xfs_reflink_end_cow_extent" has been added to the 6.1-stable tree gregkh
2025-04-30 21:26 ` [PATCH 6.1 04/16] xfs: require XFS_SB_FEAT_INCOMPAT_LOG_XATTRS for attr log intent item recovery Leah Rumancik
2025-05-05 9:18 ` Patch "xfs: require XFS_SB_FEAT_INCOMPAT_LOG_XATTRS for attr log intent item recovery" has been added to the 6.1-stable tree gregkh
2025-04-30 21:26 ` [PATCH 6.1 05/16] xfs: check opcode and iovec count match in xlog_recover_attri_commit_pass2 Leah Rumancik
2025-05-05 9:18 ` Patch "xfs: check opcode and iovec count match in xlog_recover_attri_commit_pass2" has been added to the 6.1-stable tree gregkh
2025-04-30 21:26 ` [PATCH 6.1 06/16] xfs: validate recovered name buffers when recovering xattr items Leah Rumancik
2025-05-05 9:18 ` Patch "xfs: validate recovered name buffers when recovering xattr items" has been added to the 6.1-stable tree gregkh
2025-04-30 21:26 ` [PATCH 6.1 07/16] xfs: revert commit 44af6c7e59b12 Leah Rumancik
2025-05-05 9:18 ` Patch "xfs: revert commit 44af6c7e59b12" has been added to the 6.1-stable tree gregkh
2025-04-30 21:26 ` [PATCH 6.1 08/16] xfs: match lock mode in xfs_buffered_write_iomap_begin() Leah Rumancik
2025-05-05 9:18 ` Patch "xfs: match lock mode in xfs_buffered_write_iomap_begin()" has been added to the 6.1-stable tree gregkh
2025-04-30 21:26 ` [PATCH 6.1 09/16] xfs: make the seq argument to xfs_bmapi_convert_delalloc() optional Leah Rumancik
2025-05-05 9:18 ` Patch "xfs: make the seq argument to xfs_bmapi_convert_delalloc() optional" has been added to the 6.1-stable tree gregkh
2025-04-30 21:26 ` [PATCH 6.1 10/16] xfs: make xfs_bmapi_convert_delalloc() to allocate the target offset Leah Rumancik
2025-05-05 9:18 ` gregkh [this message]
2025-04-30 21:26 ` [PATCH 6.1 11/16] xfs: convert delayed extents to unwritten when zeroing post eof blocks Leah Rumancik
2025-05-05 9:18 ` Patch "xfs: convert delayed extents to unwritten when zeroing post eof blocks" has been added to the 6.1-stable tree gregkh
2025-04-30 21:26 ` [PATCH 6.1 12/16] xfs: allow symlinks with short remote targets Leah Rumancik
2025-05-05 9:18 ` Patch "xfs: allow symlinks with short remote targets" has been added to the 6.1-stable tree gregkh
2025-04-30 21:27 ` [PATCH 6.1 13/16] xfs: make sure sb_fdblocks is non-negative Leah Rumancik
2025-05-05 9:18 ` Patch "xfs: make sure sb_fdblocks is non-negative" has been added to the 6.1-stable tree gregkh
2025-04-30 21:27 ` [PATCH 6.1 14/16] xfs: fix freeing speculative preallocations for preallocated files Leah Rumancik
2025-05-05 9:18 ` Patch "xfs: fix freeing speculative preallocations for preallocated files" has been added to the 6.1-stable tree gregkh
2025-04-30 21:27 ` [PATCH 6.1 15/16] xfs: allow unlinked symlinks and dirs with zero size Leah Rumancik
2025-05-05 9:18 ` Patch "xfs: allow unlinked symlinks and dirs with zero size" has been added to the 6.1-stable tree gregkh
2025-04-30 21:27 ` [PATCH 6.1 16/16] xfs: restrict when we try to align cow fork delalloc to cowextsz hints Leah Rumancik
2025-05-05 9:18 ` Patch "xfs: restrict when we try to align cow fork delalloc to cowextsz hints" has been added to the 6.1-stable tree gregkh
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=2025050524-pushy-traction-a5bd@gregkh \
--to=gregkh@linuxfoundation.org \
--cc=catherine.hoang@oracle.com \
--cc=chandan.babu@oracle.com \
--cc=chandanbabu@kernel.org \
--cc=djwong@kernel.org \
--cc=hch@lst.de \
--cc=leah.rumancik@gmail.com \
--cc=stable-commits@vger.kernel.org \
--cc=xfs-stable@lists.linux.dev \
--cc=yi.zhang@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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox