54 lines
1.7 KiB
Diff
54 lines
1.7 KiB
Diff
From 04d4c27afa3f2c0088e381102e68cfb6a96b3306 Mon Sep 17 00:00:00 2001
|
|
From: Shida Zhang <zhangshida@kylinos.cn>
|
|
Date: Fri, 18 Nov 2022 10:46:33 +0100
|
|
Subject: [PATCH] xfs: trim the mapp array accordingly in xfs_da_grow_inode_int
|
|
|
|
Source kernel commit: 44159659df8ca381b84261e11058b2176fa03ba0
|
|
|
|
Take a look at the for-loop in xfs_da_grow_inode_int:
|
|
======
|
|
for(){
|
|
nmap = min(XFS_BMAP_MAX_NMAP, count);
|
|
...
|
|
error = xfs_bmapi_write(...,&mapp[mapi], &nmap);//(..., $1, $2)
|
|
...
|
|
mapi += nmap;
|
|
}
|
|
=====
|
|
where $1 stands for the start address of the array,
|
|
while $2 is used to indicate the size of the array.
|
|
|
|
The array $1 will advance by $nmap in each iteration after
|
|
the allocation of extents.
|
|
But the size $2 still remains unchanged, which is determined by
|
|
min(XFS_BMAP_MAX_NMAP, count).
|
|
|
|
It seems that it has forgotten to trim the mapp array after each
|
|
iteration, so change it.
|
|
|
|
Signed-off-by: Shida Zhang <zhangshida@kylinos.cn>
|
|
Reviewed-by: Darrick J. Wong <djwong@kernel.org>
|
|
Signed-off-by: Dave Chinner <david@fromorbit.com>
|
|
Signed-off-by: Carlos Maiolino <cem@kernel.org>
|
|
---
|
|
libxfs/xfs_da_btree.c | 2 +-
|
|
1 file changed, 1 insertion(+), 1 deletion(-)
|
|
|
|
diff --git a/libxfs/xfs_da_btree.c b/libxfs/xfs_da_btree.c
|
|
index 9dc22f2..a068a01 100644
|
|
--- a/libxfs/xfs_da_btree.c
|
|
+++ b/libxfs/xfs_da_btree.c
|
|
@@ -2188,8 +2188,8 @@ xfs_da_grow_inode_int(
|
|
*/
|
|
mapp = kmem_alloc(sizeof(*mapp) * count, 0);
|
|
for (b = *bno, mapi = 0; b < *bno + count; ) {
|
|
- nmap = min(XFS_BMAP_MAX_NMAP, count);
|
|
c = (int)(*bno + count - b);
|
|
+ nmap = min(XFS_BMAP_MAX_NMAP, c);
|
|
error = xfs_bmapi_write(tp, dp, b, c,
|
|
xfs_bmapi_aflag(w)|XFS_BMAPI_METADATA,
|
|
args->total, &mapp[mapi], &nmap);
|
|
--
|
|
1.8.3.1
|
|
|