Andrew, please drop these

        wait-introduce-wait_event_commonwq-condition-state-timeout.patch
        wait-introduce-prepare_to_wait_event.patch

patches again. I'll send v3 although it really looks like I should
never try to touch wait.h.

On 06/29, Sedat Dilek wrote:
>
> As this all did not show me what caused the problem I started a
> git-bisect session.
>
> This revealed the following culprit commit:
>
>      commit bb1f30cb7d3ba21098f0ee7e0382160ba2599a43
>      "wait: introduce wait_event_common(wq, condition, state, timeout)"

Heh. First of all, I am really sorry.

Not only "__wait_no_timeout(tout) ?:" was wrong, I didn't bother
to recheck this logic even after I got the "warning: the omitted
middle operand in ?:" reports.

Sedat, thanks you very much! Any chance you can try the patch below?

Oleg.


--- a/include/linux/wait.h
+++ b/include/linux/wait.h
@@ -191,12 +191,8 @@ wait_queue_head_t *bit_waitqueue(void *, int);
        for (;;) {                                                      \
                __ret = prepare_to_wait_event(&wq, &__wait, state);     \
                if (condition) {                                        \
-                       __ret = __wait_no_timeout(tout);                \
-                       if (!__ret) {                                   \
-                               __ret = __tout;                         \
-                               if (!__ret)                             \
-                                       __ret = 1;                      \
-                       }                                               \
+                       __ret = __wait_no_timeout(tout) ? 0 :           \
+                                                       (__tout ?: 1);  \
                        break;                                          \
                }                                                       \
                                                                        \
@@ -217,16 +213,10 @@ wait_queue_head_t *bit_waitqueue(void *, int);
 #define wait_event_common(wq, condition, state, tout)                  \
 ({                                                                     \
        long __ret;                                                     \
-       if (condition) {                                                \
-               __ret = __wait_no_timeout(tout);                        \
-               if (!__ret) {                                           \
-                       __ret = tout;                                   \
-                       if (!__ret)                                     \
-                               __ret = 1;                              \
-               }                                                       \
-       } else {                                                        \
+       if (condition)                                                  \
+               __ret = __wait_no_timeout(tout) ? 0 : ((tout) ?: 1);    \
+       else                                                            \
                __ret = __wait_event_common(wq, condition, state, tout);\
-       }                                                               \
        __ret;                                                          \
 })
 

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Reply via email to