diff options
Diffstat (limited to 'lib/lockref.c')
| -rw-r--r-- | lib/lockref.c | 3 | 
1 files changed, 3 insertions, 0 deletions
| diff --git a/lib/lockref.c b/lib/lockref.c index 3d468b53d4c9..5b34bbd3eba8 100644 --- a/lib/lockref.c +++ b/lib/lockref.c @@ -9,6 +9,7 @@   * failure case.   */  #define CMPXCHG_LOOP(CODE, SUCCESS) do {					\ +	int retry = 100;							\  	struct lockref old;							\  	BUILD_BUG_ON(sizeof(old) != 8);						\  	old.lock_count = READ_ONCE(lockref->lock_count);			\ @@ -21,6 +22,8 @@  		if (likely(old.lock_count == prev.lock_count)) {		\  			SUCCESS;						\  		}								\ +		if (!--retry)							\ +			break;							\  		cpu_relax();							\  	}									\  } while (0) | 
