On Mon, Jun 26, 2017 at 08:09:59PM +0800, Ming Lei wrote:
>       bio_for_each_segment_all(bvec, bio, i) {
> -             org_vec = bio_orig->bi_io_vec + i + start;
> -
> -             if (bvec->bv_page == org_vec->bv_page)
> -                     continue;
> +             orig_vec = bio_iter_iovec(bio_orig, orig_iter);
> +             if (bvec->bv_page == orig_vec.bv_page)
> +                     goto next;
>  
>               dec_zone_page_state(bvec->bv_page, NR_BOUNCE);
>               mempool_free(bvec->bv_page, pool);
> + next:
> +             bio_advance_iter(bio_orig, &orig_iter, orig_vec.bv_len);
>       }
>  

I think this might be written more clearly as:

        bio_for_each_segment_all(bvec, bio, i) {
                orig_vec = bio_iter_iovec(bio_orig, orig_iter);
                if (bvec->bv_page != orig_vec.bv_page) {
                        dec_zone_page_state(bvec->bv_page, NR_BOUNCE);
                        mempool_free(bvec->bv_page, pool);
                }
                bio_advance_iter(bio_orig, &orig_iter, orig_vec.bv_len);
        }

What do you think?

Reply via email to