mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-12-27 07:35:36 -05:00
lockref: add a __cond_lock annotation for lockref_put_or_lock
Add a cond_lock annotation for lockref_put_or_lock to make sparse happy with using it. Note that for this the return value has to be double-inverted as the return value convention of lockref_put_or_lock is inverted compared to _trylock conventions expected by __cond_lock, as lockref_put_or_lock returns true when it did not need to take the lock. Signed-off-by: Christoph Hellwig <hch@lst.de> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
committed by
Linus Torvalds
parent
c752c21c90
commit
12eef14bcb
@@ -50,6 +50,8 @@ void lockref_get(struct lockref *lockref);
|
||||
int lockref_put_return(struct lockref *lockref);
|
||||
bool lockref_get_not_zero(struct lockref *lockref);
|
||||
bool lockref_put_or_lock(struct lockref *lockref);
|
||||
#define lockref_put_or_lock(_lockref) \
|
||||
(!__cond_lock((_lockref)->lock, !lockref_put_or_lock(_lockref)))
|
||||
|
||||
void lockref_mark_dead(struct lockref *lockref);
|
||||
bool lockref_get_not_dead(struct lockref *lockref);
|
||||
|
||||
@@ -105,6 +105,7 @@ EXPORT_SYMBOL(lockref_put_return);
|
||||
* @lockref: pointer to lockref structure
|
||||
* Return: 1 if count updated successfully or 0 if count <= 1 and lock taken
|
||||
*/
|
||||
#undef lockref_put_or_lock
|
||||
bool lockref_put_or_lock(struct lockref *lockref)
|
||||
{
|
||||
CMPXCHG_LOOP(
|
||||
|
||||
Reference in New Issue
Block a user