Merge tag 'nfs-for-6.4-1' of git://git.linux-nfs.org/projects/anna/linux-nfs
[linux-block.git] / scripts / checkpatch.pl
index 4bfbe3c9fa15fa0828ca33b282d9c169d37aab80..b30114d637c40fed8bb4e2db74af55bc71b34acd 100755 (executable)
@@ -620,6 +620,22 @@ our $signature_tags = qr{(?xi:
        Cc:
 )};
 
+our @link_tags = qw(Link Closes);
+
+#Create a search and print patterns for all these strings to be used directly below
+our $link_tags_search = "";
+our $link_tags_print = "";
+foreach my $entry (@link_tags) {
+       if ($link_tags_search ne "") {
+               $link_tags_search .= '|';
+               $link_tags_print .= ' or ';
+       }
+       $entry .= ':';
+       $link_tags_search .= $entry;
+       $link_tags_print .= "'$entry'";
+}
+$link_tags_search = "(?:${link_tags_search})";
+
 our $tracing_logging_tags = qr{(?xi:
        [=-]*> |
        <[=-]* |
@@ -3158,14 +3174,14 @@ sub process {
                                }
                        }
 
-# check if Reported-by: is followed by a Link:
+# check if Reported-by: is followed by a Closes: tag
                        if ($sign_off =~ /^reported(?:|-and-tested)-by:$/i) {
                                if (!defined $lines[$linenr]) {
                                        WARN("BAD_REPORTED_BY_LINK",
-                                            "Reported-by: should be immediately followed by Link: to the report\n" . $herecurr . $rawlines[$linenr] . "\n");
-                               } elsif ($rawlines[$linenr] !~ m{^link:\s*https?://}i) {
+                                            "Reported-by: should be immediately followed by Closes: with a URL to the report\n" . $herecurr . "\n");
+                               } elsif ($rawlines[$linenr] !~ /^closes:\s*/i) {
                                        WARN("BAD_REPORTED_BY_LINK",
-                                            "Reported-by: should be immediately followed by Link: with a URL to the report\n" . $herecurr . $rawlines[$linenr] . "\n");
+                                            "Reported-by: should be immediately followed by Closes: with a URL to the report\n" . $herecurr . $rawlines[$linenr] . "\n");
                                }
                        }
                }
@@ -3250,8 +3266,8 @@ sub process {
                                        # file delta changes
                      $line =~ /^\s*(?:[\w\.\-\+]*\/)++[\w\.\-\+]+:/ ||
                                        # filename then :
-                     $line =~ /^\s*(?:Fixes:|Link:|$signature_tags)/i ||
-                                       # A Fixes: or Link: line or signature tag line
+                     $line =~ /^\s*(?:Fixes:|$link_tags_search|$signature_tags)/i ||
+                                       # A Fixes:, link or signature tag line
                      $commit_log_possible_stack_dump)) {
                        WARN("COMMIT_LOG_LONG_LINE",
                             "Possible unwrapped commit description (prefer a maximum 75 chars per line)\n" . $herecurr);
@@ -3266,13 +3282,24 @@ sub process {
 
 # Check for odd tags before a URI/URL
                if ($in_commit_log &&
-                   $line =~ /^\s*(\w+):\s*http/ && $1 ne 'Link') {
+                   $line =~ /^\s*(\w+:)\s*http/ && $1 !~ /^$link_tags_search$/) {
                        if ($1 =~ /^v(?:ersion)?\d+/i) {
                                WARN("COMMIT_LOG_VERSIONING",
                                     "Patch version information should be after the --- line\n" . $herecurr);
                        } else {
                                WARN("COMMIT_LOG_USE_LINK",
-                                    "Unknown link reference '$1:', use 'Link:' instead\n" . $herecurr);
+                                    "Unknown link reference '$1', use $link_tags_print instead\n" . $herecurr);
+                       }
+               }
+
+# Check for misuse of the link tags
+               if ($in_commit_log &&
+                   $line =~ /^\s*(\w+:)\s*(\S+)/) {
+                       my $tag = $1;
+                       my $value = $2;
+                       if ($tag =~ /^$link_tags_search$/ && $value !~ m{^https?://}) {
+                               WARN("COMMIT_LOG_WRONG_LINK",
+                                    "'$tag' should be followed by a public http(s) link\n" . $herecurr);
                        }
                }
 
@@ -3736,7 +3763,7 @@ sub process {
                                                     "'$spdx_license' is not supported in LICENSES/...\n" . $herecurr);
                                        }
                                        if ($realfile =~ m@^Documentation/devicetree/bindings/@ &&
-                                           not $spdx_license =~ /GPL-2\.0.*BSD-2-Clause/) {
+                                           $spdx_license !~ /GPL-2\.0(?:-only)? OR BSD-2-Clause/) {
                                                my $msg_level = \&WARN;
                                                $msg_level = \&CHK if ($file);
                                                if (&{$msg_level}("SPDX_LICENSE_TAG",
@@ -3746,6 +3773,11 @@ sub process {
                                                        $fixed[$fixlinenr] =~ s/SPDX-License-Identifier: .*/SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)/;
                                                }
                                        }
+                                       if ($realfile =~ m@^include/dt-bindings/@ &&
+                                           $spdx_license !~ /GPL-2\.0(?:-only)? OR \S+/) {
+                                               WARN("SPDX_LICENSE_TAG",
+                                                    "DT binding headers should be licensed (GPL-2.0-only OR .*)\n" . $herecurr);
+                                       }
                                }
                        }
                }
@@ -5809,6 +5841,8 @@ sub process {
                            $var !~ /^(?:[A-Z]+_){1,5}[A-Z]{1,3}[a-z]/ &&
 #Ignore Page<foo> variants
                            $var !~ /^(?:Clear|Set|TestClear|TestSet|)Page[A-Z]/ &&
+#Ignore ETHTOOL_LINK_MODE_<foo> variants
+                           $var !~ /^ETHTOOL_LINK_MODE_/ &&
 #Ignore SI style variants like nS, mV and dB
 #(ie: max_uV, regulator_min_uA_show, RANGE_mA_VALUE)
                            $var !~ /^(?:[a-z0-9_]*|[A-Z0-9_]*)?_?[a-z][A-Z](?:_[a-z0-9_]+|_[A-Z0-9_]+)?$/ &&