*/
                        if (first->handoff_set && (waiter != first))
                                return false;
-
-                       /*
-                        * First waiter can inherit a previously set handoff
-                        * bit and spin on rwsem if lock acquisition fails.
-                        */
-                       if (waiter == first)
-                               waiter->handoff_set = true;
                }
 
                new = count;
 
                if (count & RWSEM_LOCK_MASK) {
+                       /*
+                        * A waiter (first or not) can set the handoff bit
+                        * if it is an RT task or wait in the wait queue
+                        * for too long.
+                        */
                        if (has_handoff || (!rt_task(waiter->task) &&
                                            !time_after(jiffies, waiter->timeout)))
                                return false;
        } while (!atomic_long_try_cmpxchg_acquire(&sem->count, &count, new));
 
        /*
-        * We have either acquired the lock with handoff bit cleared or
-        * set the handoff bit.
+        * We have either acquired the lock with handoff bit cleared or set
+        * the handoff bit. Only the first waiter can have its handoff_set
+        * set here to enable optimistic spinning in slowpath loop.
         */
        if (new & RWSEM_FLAG_HANDOFF) {
-               waiter->handoff_set = true;
+               first->handoff_set = true;
                lockevent_inc(rwsem_wlock_handoff);
                return false;
        }