if (bio_try_merge_hw_seg(q, bio, page, len, offset, same_page))
                        return len;
 
+               if (bio->bi_vcnt >=
+                   min(bio->bi_max_vecs, queue_max_segments(q)))
+                       return 0;
+
                /*
                 * If the queue doesn't support SG gaps and adding this segment
                 * would create a gap, disallow it.
                        return 0;
        }
 
-       if (bio_full(bio, len))
-               return 0;
-
-       if (bio->bi_vcnt >= queue_max_segments(q))
-               return 0;
-
        bvec_set_page(&bio->bi_io_vec[bio->bi_vcnt], page, len, offset);
        bio->bi_vcnt++;
        bio->bi_iter.bi_size += len;