Commit a511e3f968c462a55ef58697257f5347c73d306e

Authored by Andrew Morton
Committed by Ingo Molnar
1 parent 23b94b967f

mutex: add atomic_dec_and_mutex_lock(), fix

include/linux/mutex.h:136: warning: 'mutex_lock' declared inline after being called
 include/linux/mutex.h:136: warning: previous declaration of 'mutex_lock' was here

uninline it.

[ Impact: clean up and uninline, address compiler warning ]

Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Cc: Al Viro <viro@zeniv.linux.org.uk>
Cc: Christoph Hellwig <hch@lst.de>
Cc: Eric Paris <eparis@redhat.com>
Cc: Paul Mackerras <paulus@samba.org>
Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
LKML-Reference: <200904292318.n3TNIsi6028340@imap1.linux-foundation.org>
Signed-off-by: Ingo Molnar <mingo@elte.hu>

Showing 2 changed files with 25 additions and 24 deletions Side-by-side Diff

include/linux/mutex.h
... ... @@ -150,29 +150,7 @@
150 150 */
151 151 extern int mutex_trylock(struct mutex *lock);
152 152 extern void mutex_unlock(struct mutex *lock);
153   -
154   -/**
155   - * atomic_dec_and_mutex_lock - return holding mutex if we dec to 0
156   - * @cnt: the atomic which we are to dec
157   - * @lock: the mutex to return holding if we dec to 0
158   - *
159   - * return true and hold lock if we dec to 0, return false otherwise
160   - */
161   -static inline int atomic_dec_and_mutex_lock(atomic_t *cnt, struct mutex *lock)
162   -{
163   - /* dec if we can't possibly hit 0 */
164   - if (atomic_add_unless(cnt, -1, 1))
165   - return 0;
166   - /* we might hit 0, so take the lock */
167   - mutex_lock(lock);
168   - if (!atomic_dec_and_test(cnt)) {
169   - /* when we actually did the dec, we didn't hit 0 */
170   - mutex_unlock(lock);
171   - return 0;
172   - }
173   - /* we hit 0, and we hold the lock */
174   - return 1;
175   -}
  153 +extern int atomic_dec_and_mutex_lock(atomic_t *cnt, struct mutex *lock);
176 154  
177 155 #endif
... ... @@ -471,6 +471,29 @@
471 471  
472 472 return ret;
473 473 }
474   -
475 474 EXPORT_SYMBOL(mutex_trylock);
  475 +
  476 +/**
  477 + * atomic_dec_and_mutex_lock - return holding mutex if we dec to 0
  478 + * @cnt: the atomic which we are to dec
  479 + * @lock: the mutex to return holding if we dec to 0
  480 + *
  481 + * return true and hold lock if we dec to 0, return false otherwise
  482 + */
  483 +int atomic_dec_and_mutex_lock(atomic_t *cnt, struct mutex *lock)
  484 +{
  485 + /* dec if we can't possibly hit 0 */
  486 + if (atomic_add_unless(cnt, -1, 1))
  487 + return 0;
  488 + /* we might hit 0, so take the lock */
  489 + mutex_lock(lock);
  490 + if (!atomic_dec_and_test(cnt)) {
  491 + /* when we actually did the dec, we didn't hit 0 */
  492 + mutex_unlock(lock);
  493 + return 0;
  494 + }
  495 + /* we hit 0, and we hold the lock */
  496 + return 1;
  497 +}
  498 +EXPORT_SYMBOL(atomic_dec_and_mutex_lock);