Linux 4.16.11
[linux/fpc-iii.git] / scripts / coccinelle / api / d_find_alias.cocci
blob47e050166f206b387b7b4db9e3c06153ab301652
1 // SPDX-License-Identifier: GPL-2.0
2 /// Make sure calls to d_find_alias() have a corresponding call to dput().
3 //
4 // Keywords: d_find_alias, dput
5 //
6 // Confidence: Moderate
7 // URL: http://coccinelle.lip6.fr/
8 // Options: --include-headers
10 virtual context
11 virtual org
12 virtual patch
13 virtual report
15 @r exists@
16 local idexpression struct dentry *dent;
17 expression E, E1;
18 statement S1, S2;
19 position p1, p2;
22         if (!(dent@p1 = d_find_alias(...))) S1
24         dent@p1 = d_find_alias(...)
27 <...when != dput(dent)
28     when != if (...) { <+... dput(dent) ...+> }
29     when != true !dent || ...
30     when != dent = E
31     when != E = dent
32 if (!dent || ...) S2
33 ...>
35         return <+...dent...+>;
37         return @p2 ...;
39         dent@p2 = E1;
41         E1 = dent;
44 @depends on context@
45 local idexpression struct dentry *r.dent;
46 position r.p1,r.p2;
48 * dent@p1 = ...
49   ...
51 * return@p2 ...;
53 * dent@p2
57 @script:python depends on org@
58 p1 << r.p1;
59 p2 << r.p2;
61 cocci.print_main("Missing call to dput()",p1)
62 cocci.print_secs("",p2)
64 @depends on patch@
65 local idexpression struct dentry *r.dent;
66 position r.p2;
69 + dput(dent);
70   return @p2 ...;
72 + dput(dent);
73   dent@p2 = ...;
76 @script:python depends on report@
77 p1 << r.p1;
78 p2 << r.p2;
80 msg = "Missing call to dput() at line %s."
81 coccilib.report.print_report(p1[0], msg % (p2[0].line))