*               starting from the last allocated bit. This is less efficient
  *               than the default behavior (false).
  *
+ * This operation provides acquire barrier semantics if it succeeds.
+ *
  * Return: Non-negative allocated bit number if successful, -1 otherwise.
  */
 int sbitmap_get(struct sbitmap *sb, unsigned int alloc_hint, bool round_robin);
        clear_bit(SB_NR_TO_BIT(sb, bitnr), __sbitmap_word(sb, bitnr));
 }
 
+static inline void sbitmap_clear_bit_unlock(struct sbitmap *sb,
+                                           unsigned int bitnr)
+{
+       clear_bit_unlock(SB_NR_TO_BIT(sb, bitnr), __sbitmap_word(sb, bitnr));
+}
+
 static inline int sbitmap_test_bit(struct sbitmap *sb, unsigned int bitnr)
 {
        return test_bit(SB_NR_TO_BIT(sb, bitnr), __sbitmap_word(sb, bitnr));
 
                        return -1;
                }
 
-               if (!test_and_set_bit(nr, word))
+               if (!test_and_set_bit_lock(nr, word))
                        break;
 
                hint = nr + 1;
        /*
         * Pairs with the memory barrier in set_current_state() to ensure the
         * proper ordering of clear_bit()/waitqueue_active() in the waker and
-        * test_and_set_bit()/prepare_to_wait()/finish_wait() in the waiter. See
-        * the comment on waitqueue_active(). This is __after_atomic because we
-        * just did clear_bit() in the caller.
+        * test_and_set_bit_lock()/prepare_to_wait()/finish_wait() in the
+        * waiter. See the comment on waitqueue_active(). This is __after_atomic
+        * because we just did clear_bit_unlock() in the caller.
         */
        smp_mb__after_atomic();
 
 void sbitmap_queue_clear(struct sbitmap_queue *sbq, unsigned int nr,
                         unsigned int cpu)
 {
-       sbitmap_clear_bit(&sbq->sb, nr);
+       sbitmap_clear_bit_unlock(&sbq->sb, nr);
        sbq_wake_up(sbq);
        if (likely(!sbq->round_robin && nr < sbq->sb.depth))
                *per_cpu_ptr(sbq->alloc_hint, cpu) = nr;