From: Lars Ellenberg <lars.ellenberg@linbit.com>
To: Jens Axboe <jens.axboe@oracle.com>
Cc: Dmitry Monakhov <dmonakhov@openvz.org>,
dm-devel@redhat.com, linux-kernel@vger.kernel.org,
Mike Snitzer <snitzer@redhat.com>
Subject: Re: [dm-devel] [PATCH 1/2] blkdev: fix merge_bvec_fn return value checks
Date: Thu, 4 Mar 2010 18:59:21 +0100 [thread overview]
Message-ID: <20100304175921.GD3670@soda.linbit> (raw)
In-Reply-To: <20100303200734.GW5768@kernel.dk>
On Wed, Mar 03, 2010 at 09:07:34PM +0100, Jens Axboe wrote:
> > 2) What statement "bio_add_page() must accept at least one page"
> > exactly means?
> > IMHO this means that bio_add_page() must accept at least
> > one page with len (PAGE_SIZE - offset). Or more restricted
> > statemnt that first bio_add_page() must be always successfull.
>
> It's really 'first add must succeed', the restriction being that you
> cannot rely on that first add being more than a single page. So the rule
> is that you must accept at least a page at any offset if the bio is
> currently empty, since we know that a page is typically our IO
> granularity.
Speaking of...
dm_set_device_limits is still doing things wrong here, I think.
I posted this about two years ago, but somehow it got lost
and I lost it from my focus as well.
Reading this post reminded me ... there was something:
diff --git a/drivers/md/dm-table.c b/drivers/md/dm-table.c
index 4b22feb..bc34901 100644
--- a/drivers/md/dm-table.c
+++ b/drivers/md/dm-table.c
@@ -519,10 +519,22 @@ int dm_set_device_limits(struct dm_target *ti, struct dm_dev *dev,
* smaller I/O, just to be safe.
*/
- if (q->merge_bvec_fn && !ti->type->merge)
+ if (q->merge_bvec_fn && !ti->type->merge) {
limits->max_sectors =
min_not_zero(limits->max_sectors,
(unsigned int) (PAGE_SIZE >> 9));
+
+ /* Restricting max_sectors is not enough.
+ * If someone uses bio_add_page to add 8 disjunct 512 byte
+ * partial pages to a bio, it would succeed,
+ * but could still cross a border of whatever restrictions
+ * are below us (raid0 stripe boundary). An attempted
+ * bio_split would not succeed, because bi_vcnt is 8.
+ * E.g. the xen io layer is known to trigger this.
+ */
+ limits->max_segments = 1;
+ }
+
return 0;
}
EXPORT_SYMBOL_GPL(dm_set_device_limits);
Thanks,
Lars
next prev parent reply other threads:[~2010-03-04 17:59 UTC|newest]
Thread overview: 28+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-02-27 17:35 [PATCH 1/2] blkdev: fix merge_bvec_fn return value checks Dmitry Monakhov
2010-02-27 17:35 ` [PATCH 2/2] blktrace: perform cleanup after setup error Dmitry Monakhov
2010-02-28 18:46 ` Jens Axboe
2010-02-28 18:46 ` [PATCH 1/2] blkdev: fix merge_bvec_fn return value checks Jens Axboe
2010-03-03 3:49 ` Dmitry Monakhov
2010-03-03 7:30 ` Jens Axboe
2010-03-03 8:39 ` Dmitry Monakhov
2010-03-03 12:21 ` Jens Axboe
2010-03-03 18:20 ` Mike Snitzer
2010-03-03 18:45 ` Dmitry Monakhov
2010-03-03 19:16 ` Mike Snitzer
2010-03-03 19:42 ` Dmitry Monakhov
2010-03-03 20:07 ` Jens Axboe
2010-03-04 11:47 ` [dm-devel] " Mikulas Patocka
2010-03-04 12:19 ` Jens Axboe
2010-03-04 21:55 ` Mikulas Patocka
2010-03-05 7:30 ` Jens Axboe
2010-03-05 7:30 ` [dm-devel] " Jens Axboe
2010-03-05 21:56 ` Neil Brown
2010-03-05 22:27 ` Alasdair G Kergon
2010-03-05 22:27 ` Alasdair G Kergon
2010-03-05 23:52 ` Neil Brown
2010-03-06 2:20 ` Alasdair G Kergon
2010-03-08 9:01 ` Mikulas Patocka
2010-03-04 17:59 ` Lars Ellenberg [this message]
2010-03-05 17:37 ` Alasdair G Kergon
2010-03-05 19:20 ` Lars Ellenberg
2010-03-08 5:43 ` Neil Brown
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20100304175921.GD3670@soda.linbit \
--to=lars.ellenberg@linbit.com \
--cc=dm-devel@redhat.com \
--cc=dmonakhov@openvz.org \
--cc=jens.axboe@oracle.com \
--cc=linux-kernel@vger.kernel.org \
--cc=snitzer@redhat.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.