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;
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 unlock 'spin_lock:mylock'
34 sm_locking2.c:26 func() warn: inconsistent returns 'spin_lock:mylock3'.
35   Locked on:   line 26
36   Unlocked on: line 14
37                line 25
38  * check-output-end
39  */
40