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

From: FUJITA Tomonori
Date: Wed Apr 01 2009 - 09:00:57 EST


On Wed, 01 Apr 2009 21:50:49 +0900
Tejun Heo <tj@xxxxxxxxxx> wrote:

> FUJITA Tomonori wrote:
> >> * 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.
>
> Right, ll_back_merge_fn() does that. Sorry about that.
>
> >> * 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.
>
> The only user of blk_rq_append_bio() is scsi_lib.c. Is Mike
> Christie's code chaining bio's directly into rq?

No, we are not talking about blk_rq_append_bio().

We are talking about the multiple bio handling in blk_rq_map_user,
which is the feature that Mike added long time ago. The feature is
surely necessary for some users. So you can't remote it.
--
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/