--- linux-2.5.2-pre8/drivers/block/ll_rw_blk.c Sat Jan 5 15:33:53 2002 +++ linux/drivers/block/ll_rw_blk.c Mon Jan 7 00:28:17 2002 @@ -474,18 +474,13 @@ bio_for_each_segment(bvec, bio, i) { int nbytes = bvec->bv_len; - if (bvprv && cluster) { - if (sg[nsegs - 1].length + nbytes > q->max_segment_size) - goto new_segment; - - if (!BIOVEC_PHYS_MERGEABLE(bvprv, bvec)) - goto new_segment; - if (!BIOVEC_SEG_BOUNDARY(q, bvprv, bvec)) - goto new_segment; - + if (bvprv && cluster && + (sg[nsegs - 1].length + nbytes <= + q->max_segment_size) && + BIOVEC_PHYS_MERGEABLE(bvprv, bvec) && + BIOVEC_SEG_BOUNDARY(q, bvprv, bvec)) { sg[nsegs - 1].length += nbytes; } else { -new_segment: memset(&sg[nsegs],0,sizeof(struct scatterlist)); sg[nsegs].page = bvec->bv_page; sg[nsegs].length = nbytes;