2010-02-27 17:35:23

by Dmitry Monakhov

[permalink] [raw]
Subject: [PATCH 1/2] blkdev: fix merge_bvec_fn return value checks

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 <[email protected]>
---
fs/bio.c | 4 ++--
1 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/fs/bio.c b/fs/bio.c
index 88094af..c28e5fb 100644
--- a/fs/bio.c
+++ b/fs/bio.c
@@ -557,7 +557,7 @@ static int __bio_add_page(struct request_queue *q, struct bio *bio, struct page
.bi_rw = bio->bi_rw,
};

- if (q->merge_bvec_fn(q, &bvm, prev) < len) {
+ if (q->merge_bvec_fn(q, &bvm, prev) != prev->bv_len) {
prev->bv_len -= len;
return 0;
}
@@ -611,7 +611,7 @@ static int __bio_add_page(struct request_queue *q, struct bio *bio, struct page
* merge_bvec_fn() returns number of bytes it can accept
* at this offset
*/
- if (q->merge_bvec_fn(q, &bvm, bvec) < len) {
+ if (q->merge_bvec_fn(q, &bvm, bvec) != bvec->bv_len) {
bvec->bv_page = NULL;
bvec->bv_len = 0;
bvec->bv_offset = 0;
--
1.6.6


2010-02-27 17:35:27

by Dmitry Monakhov

[permalink] [raw]
Subject: [PATCH 2/2] blktrace: perform cleanup after setup error

Currently even if BLKTRACESETUP ioctl has failed user must call
BLKTRACETEARDOWN to be shure what all staff was cleaned, which
is contr-intuitive.
Let's setup ioctl make necessery cleanup by it self.

Signed-off-by: Dmitry Monakhov <[email protected]>
---
kernel/trace/blktrace.c | 5 +++--
1 files changed, 3 insertions(+), 2 deletions(-)

diff --git a/kernel/trace/blktrace.c b/kernel/trace/blktrace.c
index d9d6206..07f945a 100644
--- a/kernel/trace/blktrace.c
+++ b/kernel/trace/blktrace.c
@@ -540,9 +540,10 @@ int blk_trace_setup(struct request_queue *q, char *name, dev_t dev,
if (ret)
return ret;

- if (copy_to_user(arg, &buts, sizeof(buts)))
+ if (copy_to_user(arg, &buts, sizeof(buts))) {
+ blk_trace_remove(q);
return -EFAULT;
-
+ }
return 0;
}
EXPORT_SYMBOL_GPL(blk_trace_setup);
--
1.6.6

2010-02-28 18:46:37

by Jens Axboe

[permalink] [raw]
Subject: Re: [PATCH 1/2] blkdev: fix merge_bvec_fn return value checks

On Sat, Feb 27 2010, Dmitry Monakhov wrote:
> 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.

Agree, applied.

--
Jens Axboe

2010-02-28 18:47:01

by Jens Axboe

[permalink] [raw]
Subject: Re: [PATCH 2/2] blktrace: perform cleanup after setup error

On Sat, Feb 27 2010, Dmitry Monakhov wrote:
> Currently even if BLKTRACESETUP ioctl has failed user must call
> BLKTRACETEARDOWN to be shure what all staff was cleaned, which
> is contr-intuitive.
> Let's setup ioctl make necessery cleanup by it self.

This makes more sense, we should return in with a known state (enabled
or not). Applied.

--
Jens Axboe