Hi Dan, On Mon, Jul 18, 2022 at 02:20:08PM +0300, Dan Carpenter wrote: > It's easier to see what this loop is doing when the decrement is in > the normal place. > > Signed-off-by: Dan Carpenter <dan.carpenter@xxxxxxxxxx> > --- > fs/erofs/zdata.c | 4 ++-- > 1 file changed, 2 insertions(+), 2 deletions(-) > > diff --git a/fs/erofs/zdata.c b/fs/erofs/zdata.c > index 601cfcb07c50..2691100eb231 100644 > --- a/fs/erofs/zdata.c > +++ b/fs/erofs/zdata.c > @@ -419,8 +419,8 @@ static bool z_erofs_try_inplace_io(struct z_erofs_decompress_frontend *fe, > { > struct z_erofs_pcluster *const pcl = fe->pcl; > > - while (fe->icur > 0) { > - if (!cmpxchg(&pcl->compressed_bvecs[--fe->icur].page, > + while (fe->icur--) { Thanks for your patch! Yet at a quick glance, on my side, that doesn't equal to be honest... .. What we're trying to do here is to find a free slot for inplace i/o, but also need to leave fe->icur as 0 when going out the loop since z_erofs_try_inplace_io() can be called again the next time when attaching another page but it will overflow then... Thanks, Gao Xiang > + if (!cmpxchg(&pcl->compressed_bvecs[fe->icur].page, > NULL, bvec->page)) { > pcl->compressed_bvecs[fe->icur] = *bvec; > return true; > -- > 2.35.1