[lkml]   [2002]   [Jun]   [15]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
Messages in this thread
    SubjectRe: bio_chain: proposed solution for bio_alloc failure and large IO simplification
    On Fri, Jun 14 2002, Adam J. Richter wrote:
    > On Fri, 14 Jun 2002 Jens Axboe wrote:
    > >On Thu, Jun 13 2002, Adam J. Richter wrote:
    > [...]
    > >> newbio = bio_chain(oldbio);
    > [...]
    > >> I realize there may be locking issues in implementing this.
    > >but I think that statement is very naive :-)
    > >Essentially you are keeping a cookie to the old bio submitted, so that
    > >you can merge new bio with it fairly cheaply (it's still not very cheap,
    > >although you do eliminate the biggest offender, the list merge scan).
    > >The first problem is that once you submit the bio, there are some things
    > >that are not yours to touch anymore. You cannot change bi_next for
    > >instance, you have no idea what state the bio is in wrt I/O completion.
    > >Sure you can hold a reference to the bio, but all that really gets you
    > >in this situation is a handle to it, nothing more. How do you decide
    > >when to invalidate this cookie that you have?
    > At any time, there could be only one "hinted" bio in a
    > request: the last bio in the request. So you only have to
    > clear the hint when:
    > 1. you merge bio's,
    > 2. elv_next_request is called,
    > 3. newbio is submitted.
    > In all three cases q->queue_lock gets taken, so we should
    > not need to add any additional spin_lock_irq's, and the two lines
    > to clear the hint pointers should be trivial.

    This logic is flawed. As I said, once you pass the bio to submit_bio,
    you can't maintain a pointer to it for these purposes. Grabbing the
    queue_lock guarentees absolutely nothing in this regard. Consider loop,
    for instance. I/O could be completed by the time bio_submit returns.
    Sure you can grab a reference to the bio with bio_get(), but what would
    that buy you? Just that the bio at least won't be freed by the time
    bio_submit returns, but that's it.

    Jens Axboe

    To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
    the body of a message to
    More majordomo info at
    Please read the FAQ at

     \ /
      Last update: 2005-03-22 13:22    [W:0.029 / U:3.624 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site