1 void _spin_lock(int name);
2 void _spin_unlock(int name);
3 int _spin_trylock(int name);
4 
5 int a;
6 int b;
func(void)7 int func (void)
8 {
9 	int mylock = 1;
10 	int mylock2 = 1;
11 	int mylock3 = 1;
12 
13 	if (!_spin_trylock(mylock)) {
14 		return;
15 	}
16 
17 	_spin_unlock(mylock);
18 	_spin_unlock(mylock2);
19 
20 	if (a)
21 		_spin_unlock(mylock);
22 	_spin_lock(mylock2);
23 
24 	if (!_spin_trylock(mylock3))
25 		return;
26 	return;
27 }
28 /*
29  * check-name: Smatch locking #2
30  * check-command: smatch --project=kernel sm_locking2.c
31  *
32  * check-output-start
33 sm_locking2.c:21 func() error: double unlocked 'mylock' (orig line 17)
34 sm_locking2.c:26 func() warn: inconsistent returns 'mylock3'.
35   Locked on  : 26
36   Unlocked on: 25
37  * check-output-end
38  */
39