Message ID | 1427992762-10126-1-git-send-email-stefanha@redhat.com |
---|---|
State | New |
Headers | show |
On 02/04/2015 18:39, Stefan Hajnoczi wrote: > This patch simplifies thread_pool_completion_bh(). > > The function first checks elem->state: > > if (elem->state != THREAD_DONE) { > continue; > } > > It then goes on to check elem->state == THREAD_DONE although we already > know this must be the case. And not once, twice. :) This was the outcome of removing THREAD_CANCELED. > Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com> > --- > thread-pool.c | 14 ++++++-------- > 1 file changed, 6 insertions(+), 8 deletions(-) > > diff --git a/thread-pool.c b/thread-pool.c > index e2cac8e..ac909f4 100644 > --- a/thread-pool.c > +++ b/thread-pool.c > @@ -170,12 +170,12 @@ restart: > if (elem->state != THREAD_DONE) { > continue; > } > - if (elem->state == THREAD_DONE) { > - trace_thread_pool_complete(pool, elem, elem->common.opaque, > - elem->ret); > - } > - if (elem->state == THREAD_DONE && elem->common.cb) { > - QLIST_REMOVE(elem, all); > + > + trace_thread_pool_complete(pool, elem, elem->common.opaque, > + elem->ret); > + QLIST_REMOVE(elem, all); > + > + if (elem->common.cb) { > /* Read state before ret. */ > smp_rmb(); > > @@ -188,8 +188,6 @@ restart: > qemu_aio_unref(elem); > goto restart; > } else { > - /* remove the request */ > - QLIST_REMOVE(elem, all); > qemu_aio_unref(elem); > } > } > Reviewed-by: Paolo Bonzini <pbonzini@redhat.com>
On Thu, Apr 02, 2015 at 05:39:22PM +0100, Stefan Hajnoczi wrote: > This patch simplifies thread_pool_completion_bh(). > > The function first checks elem->state: > > if (elem->state != THREAD_DONE) { > continue; > } > > It then goes on to check elem->state == THREAD_DONE although we already > know this must be the case. > > The QLIST_REMOVE() is duplicated down both branches of an if-else > statement so that can be lifted out as well. > > Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com> > --- > thread-pool.c | 14 ++++++-------- > 1 file changed, 6 insertions(+), 8 deletions(-) Thanks, applied to my block-next tree: https://github.com/stefanha/qemu/commits/block-next Stefan
diff --git a/thread-pool.c b/thread-pool.c index e2cac8e..ac909f4 100644 --- a/thread-pool.c +++ b/thread-pool.c @@ -170,12 +170,12 @@ restart: if (elem->state != THREAD_DONE) { continue; } - if (elem->state == THREAD_DONE) { - trace_thread_pool_complete(pool, elem, elem->common.opaque, - elem->ret); - } - if (elem->state == THREAD_DONE && elem->common.cb) { - QLIST_REMOVE(elem, all); + + trace_thread_pool_complete(pool, elem, elem->common.opaque, + elem->ret); + QLIST_REMOVE(elem, all); + + if (elem->common.cb) { /* Read state before ret. */ smp_rmb(); @@ -188,8 +188,6 @@ restart: qemu_aio_unref(elem); goto restart; } else { - /* remove the request */ - QLIST_REMOVE(elem, all); qemu_aio_unref(elem); } }
This patch simplifies thread_pool_completion_bh(). The function first checks elem->state: if (elem->state != THREAD_DONE) { continue; } It then goes on to check elem->state == THREAD_DONE although we already know this must be the case. The QLIST_REMOVE() is duplicated down both branches of an if-else statement so that can be lifted out as well. Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com> --- thread-pool.c | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-)