Re: [PATCH 8/8] blk-map: reimplement blk_rq_map_user() usingblk_rq_map_user_iov()

From: FUJITA Tomonori
Date: Wed Apr 01 2009 - 08:45:31 EST


On Wed, 1 Apr 2009 20:04:44 +0900
Tejun Heo <tj@xxxxxxxxxx> wrote:

> Impact: subtle bugs fixed, cleanup
>
> blk_rq_map_user() supported multi-bio mapping by calling
> bio_map/copy_user() multiple times and linking the resulting bios into
> rq; however, this had subtle bugs.
>
> * Because each call to bio_map/copy_user() is independent, segment
> limit check was done only per each bio, so it was possible to create
> requests which are larger than the driver and hardware limits, which
> could lead to disastrous outcome.

What do you mean? blk_rq_append_bio properly checks the segment and
limit, I think.


> * Layers under FS may call blk_rq_map*() functions during request
> processing. Under severe memory pressure and with enough bad luck,
> this can lead to deadlock. As fs bvec pool is quite small, the
> possibility isn't completely theoretical.
>
> This patch reimplement blk_rq_map_user() in terms of
> blk_rq_map_user_iov() which doesn't support multi-bio mappping and
> drop multi bio handling from blk_rq_unmap_user(). Note that with the
> previous patch to remove bio max size limit and to add null mapping
> support to blk_rq_map_user_iov(), this change doesn't remove any
> functionality.

I don't think that we can drop multi bio handling from
blk_rq_unmap_user(). It may make some users angry. Mike Christie added
it because it was necessary.
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/