diff mbox

thread-pool: clean up thread_pool_completion_bh()

Message ID 1427992762-10126-1-git-send-email-stefanha@redhat.com
State New
Headers show

Commit Message

Stefan Hajnoczi April 2, 2015, 4:39 p.m. UTC
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(-)

Comments

Paolo Bonzini April 2, 2015, 5:12 p.m. UTC | #1
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>
Stefan Hajnoczi April 7, 2015, 1:45 p.m. UTC | #2
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 mbox

Patch

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);
         }
     }