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>pull/1354/merge
parent
c752c21c90
commit
12eef14bcb
|
|
@ -50,6 +50,8 @@ void lockref_get(struct lockref *lockref);
|
||||||
int lockref_put_return(struct lockref *lockref);
|
int lockref_put_return(struct lockref *lockref);
|
||||||
bool lockref_get_not_zero(struct lockref *lockref);
|
bool lockref_get_not_zero(struct lockref *lockref);
|
||||||
bool lockref_put_or_lock(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);
|
void lockref_mark_dead(struct lockref *lockref);
|
||||||
bool lockref_get_not_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
|
* @lockref: pointer to lockref structure
|
||||||
* Return: 1 if count updated successfully or 0 if count <= 1 and lock taken
|
* 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)
|
bool lockref_put_or_lock(struct lockref *lockref)
|
||||||
{
|
{
|
||||||
CMPXCHG_LOOP(
|
CMPXCHG_LOOP(
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue