Re: [PATCH 30/33] block, aio: batch completion for bios/kiocbs

From: Kent Overstreet
Date: Wed Apr 10 2013 - 18:09:34 EST


On Tue, Apr 02, 2013 at 03:53:03PM -0400, Theodore Ts'o wrote:
> On Thu, Mar 21, 2013 at 09:35:51AM -0700, Kent Overstreet wrote:
> > + if (unlikely(req->ki_eventfd != eventfd)) {
> > + if (eventfd) {
> > + /* Make event visible */
> > + kioctx_ring_unlock(ctx, tail);
> > + ctx = NULL;
> > +
> > + eventfd_signal(eventfd, 1);
> > + eventfd_ctx_put(eventfd);
> > + }
>
> I just noticed something else. There's a ring unlock here().... but
> there isn't a matching ring_lock(), or an exit from the function.
> Since you've set the ctx to be NULL, then subsequently, aren't we
> going to crash at the subseqent kioctx_ring_unlock() below....

No, kioctx_ring_unlock() checks for ctx == NULL - it would be more
readable I suppose to have the check outside of kioctx_ring_unlock() but
that's how it ended up... the check is needed multiple places.

>
> > +
> > + eventfd = req->ki_eventfd;
> > + req->ki_eventfd = NULL;
> > + }
> > +
> > + if (unlikely(req->ki_ctx != ctx)) {
> > + kioctx_ring_unlock(ctx, tail);
> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>
> (Or the kioctx_ring_unlock() at the end of this function after the
> while loop terminates.)
>
> - Ted
>
--
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/