1void _spin_lock(int name);
2void _spin_unlock(int name);
3int _spin_trylock(int name);
4
5int a;
6int b;
7int 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
33sm_locking2.c:21 func() error: double unlocked 'mylock' (orig line 17)
34sm_locking2.c:26 func() warn: inconsistent returns 'mylock3'.
35  Locked on  : 26
36  Unlocked on: 25
37 * check-output-end
38 */
39