lockevent_cond_inc(rwsem_opt_fail, !taken);
        return taken;
 }
-
-/*
- * Return true if the rwsem has active spinner
- */
-static inline bool rwsem_has_spinner(struct rw_semaphore *sem)
-{
-       return osq_is_locked(&sem->osq);
-}
-
 #else
 static bool rwsem_optimistic_spin(struct rw_semaphore *sem)
 {
        return false;
 }
-
-static inline bool rwsem_has_spinner(struct rw_semaphore *sem)
-{
-       return false;
-}
 #endif
 
 /*
        unsigned long flags;
        DEFINE_WAKE_Q(wake_q);
 
-       /*
-       * __rwsem_down_write_failed_common(sem)
-       *   rwsem_optimistic_spin(sem)
-       *     osq_unlock(sem->osq)
-       *   ...
-       *   atomic_long_add_return(&sem->count)
-       *
-       *      - VS -
-       *
-       *              __up_write()
-       *                if (atomic_long_sub_return_release(&sem->count) < 0)
-       *                  rwsem_wake(sem)
-       *                    osq_is_locked(&sem->osq)
-       *
-       * And __up_write() must observe !osq_is_locked() when it observes the
-       * atomic_long_add_return() in order to not miss a wakeup.
-       *
-       * This boils down to:
-       *
-       * [S.rel] X = 1                [RmW] r0 = (Y += 0)
-       *         MB                         RMB
-       * [RmW]   Y += 1               [L]   r1 = X
-       *
-       * exists (r0=1 /\ r1=0)
-       */
-       smp_rmb();
-
-       /*
-        * If a spinner is present, it is not necessary to do the wakeup.
-        * Try to do wakeup only if the trylock succeeds to minimize
-        * spinlock contention which may introduce too much delay in the
-        * unlock operation.
-        *
-        *    spinning writer           up_write/up_read caller
-        *    ---------------           -----------------------
-        * [S]   osq_unlock()           [L]   osq
-        *       MB                           RMB
-        * [RmW] rwsem_try_write_lock() [RmW] spin_trylock(wait_lock)
-        *
-        * Here, it is important to make sure that there won't be a missed
-        * wakeup while the rwsem is free and the only spinning writer goes
-        * to sleep without taking the rwsem. Even when the spinning writer
-        * is just going to break out of the waiting loop, it will still do
-        * a trylock in rwsem_down_write_failed() before sleeping. IOW, if
-        * rwsem_has_spinner() is true, it will guarantee at least one
-        * trylock attempt on the rwsem later on.
-        */
-       if (rwsem_has_spinner(sem)) {
-               /*
-                * The smp_rmb() here is to make sure that the spinner
-                * state is consulted before reading the wait_lock.
-                */
-               smp_rmb();
-               if (!raw_spin_trylock_irqsave(&sem->wait_lock, flags))
-                       return sem;
-               goto locked;
-       }
        raw_spin_lock_irqsave(&sem->wait_lock, flags);
-locked:
 
        if (!list_empty(&sem->wait_list))
                __rwsem_mark_wake(sem, RWSEM_WAKE_ANY, &wake_q);