> > > > >+ /* > > > > >+ * If the region state is active, mctx must be allocated. > > > > >+ * In this case, check whether the region is evicted or > > > > >+ * mctx allcation fail. > > > > >+ */ > > > > >+ if (unlikely(!srgn->mctx)) { > > > > >+ dev_err(&hpb->sdev_ufs_lu->sdev_dev, > > > > >+ "no mctx in region %d subregion %d.\n", > > > > >+ srgn->rgn_idx, srgn->srgn_idx); > > > > >+ return true; > > > > >+ } > > > > >+ > > > > >+ if ((srgn_offset + cnt) > bitmap_len) > > > > >+ bit_len = bitmap_len - srgn_offset; > > > > >+ else > > > > >+ bit_len = cnt; > > > > >+ > > > > >+ if (find_next_bit(srgn->mctx->ppn_dirty, bitmap_len, > > > > >+ srgn_offset) < bit_len + srgn_offset) > > > > >+ return true; > > > > >+ > > > > > > > > It seems unnecessary to search through bitmap_len > > > > How about searching by transfer size? > > > > > > > > if (find_next_bit(srgn->mctx->ppn_dirty, > > > > bit_len + srgn_offset, srgn_offset) < bit_len + srgn_offset) > > > Isn't bit_len should be used for size, and not bit_len + srgn_offset ? > > > > then find_next_bit checks from start to bit_len. > > find_next_bit stops checking if start is greater than bit_len. > > it does not check for dirty as transfer_size. > Right. Size (nbits in _find_next_bit) practically means @end - Confusing... > Either way, Is this tad optimization worth another spin in your opinion? Worst case, we have to search every time up to the bitmap_len size. Even though, when bit_len is 1, only 1 bit needs to be checked it can increase the effect, depending on the subregion size. Thanks Yohan > > Thanks, > Avri > > > > > Thanks > > Yohan > > > > > > > > Thanks, > > > Avri > > > > > > > > > > > Thanks > > > > Yohan