Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

blkdev: fix merge_bvec_fn return value checks v2

merge_bvec_fn() returns bvec->bv_len on success. So we have to check
against this value. But in case of fs_optimization merge we compare
with wrong value. This patch must be included in
b428cd6da7e6559aca69aa2e3a526037d3f20403
But accidentally i've forgot to add this in the initial patch.
To make things straight let's replace all such checks.
In fact this makes code easy to understand.

Signed-off-by: Dmitry Monakhov <dmonakhov@openvz.org>
Signed-off-by: Jens Axboe <jens.axboe@oracle.com>

authored by

Dmitry Monakhov and committed by
Jens Axboe
8bf8c376 25cf84cf

+2 -2
+2 -2
fs/bio.c
··· 555 555 .bi_rw = bio->bi_rw, 556 556 }; 557 557 558 - if (q->merge_bvec_fn(q, &bvm, prev) < len) { 558 + if (q->merge_bvec_fn(q, &bvm, prev) < prev->bv_len) { 559 559 prev->bv_len -= len; 560 560 return 0; 561 561 } ··· 608 608 * merge_bvec_fn() returns number of bytes it can accept 609 609 * at this offset 610 610 */ 611 - if (q->merge_bvec_fn(q, &bvm, bvec) < len) { 611 + if (q->merge_bvec_fn(q, &bvm, bvec) < bvec->bv_len) { 612 612 bvec->bv_page = NULL; 613 613 bvec->bv_len = 0; 614 614 bvec->bv_offset = 0;