On Thu, 7 Nov 2024 12:05:39 -0800, Darrick J. Wong wrote: > On Thu, Nov 07, 2024 at 04:40:44PM +0800, Jinliang Zheng wrote: > > In xfs_alloc_compute_diff(), ensure that the remaining length of extent > > still meets the wantlen requirements after newbno1 is rounded. > > What problem are you observing? > > --D Thank you for your reply. :) In fact, I haven't encountered any issues with this in production. My starting point is I was wondering what will happen if xfs_alloc_compute_diff()'s changes to bnew cause the extent's remaining length to be less than args->len? I wonder if this will happen? Am I missing some code to ensure this doesn't happen? If it will happen, I think we'd better check it out here; if it doesn't, please ignore this patch. Thank you again. Jinliang Zheng :) > > > Signed-off-by: Jinliang Zheng <alexjlzheng@xxxxxxxxxxx> > > --- > > Changelog: > > > > V2: Fix the error logic > > > > V1: https://lore.kernel.org/linux-xfs/20241107070300.13535-1-alexjlzheng@xxxxxxxxxxx/#R > > --- > > fs/xfs/libxfs/xfs_alloc.c | 5 ++++- > > 1 file changed, 4 insertions(+), 1 deletion(-) > > > > diff --git a/fs/xfs/libxfs/xfs_alloc.c b/fs/xfs/libxfs/xfs_alloc.c > > index 22bdbb3e9980..1d4cc75b7318 100644 > > --- a/fs/xfs/libxfs/xfs_alloc.c > > +++ b/fs/xfs/libxfs/xfs_alloc.c > > @@ -393,7 +393,8 @@ xfs_alloc_compute_diff( > > * grows in the short term. > > */ > > if (freebno >= wantbno || (userdata && freeend < wantend)) { > > - if ((newbno1 = roundup(freebno, alignment)) >= freeend) > > + newbno1 = roundup(freebno, alignment); > > + if (newbno1 >= freeend || newbno1 > freeend - wantlen) > > newbno1 = NULLAGBLOCK; > > } else if (freeend >= wantend && alignment > 1) { > > newbno1 = roundup(wantbno, alignment); > > @@ -414,6 +415,8 @@ xfs_alloc_compute_diff( > > newbno1 = newbno2; > > } else if (newbno2 != NULLAGBLOCK) > > newbno1 = newbno2; > > + if (newbno1 > freeend - wantlen) > > + newbno1 = NULLAGBLOCK; > > } else if (freeend >= wantend) { > > newbno1 = wantbno; > > } else if (alignment > 1) { > > -- > > 2.41.1 > > > >