Merge tag 'block-6.1-2022-10-13' of git://git.kernel.dk/linux
[linux-block.git] / scripts / checkpatch.pl
index c8a616a9d0344a34d3801bf7d823a52a5bf22f6e..1e5e66ae5a52202f99c3d93f71ad81b239056217 100755 (executable)
@@ -576,10 +576,14 @@ our $typeKernelTypedefs = qr{(?x:
        (?:__)?(?:u|s|be|le)(?:8|16|32|64)|
        atomic_t
 )};
+our $typeStdioTypedefs = qr{(?x:
+       FILE
+)};
 our $typeTypedefs = qr{(?x:
        $typeC99Typedefs\b|
        $typeOtherOSTypedefs\b|
-       $typeKernelTypedefs\b
+       $typeKernelTypedefs\b|
+       $typeStdioTypedefs\b
 )};
 
 our $zero_initializer = qr{(?:(?:0[xX])?0+$Int_type?|NULL|false)\b};
@@ -807,6 +811,8 @@ our %deprecated_apis = (
        "rcu_barrier_sched"                     => "rcu_barrier",
        "get_state_synchronize_sched"           => "get_state_synchronize_rcu",
        "cond_synchronize_sched"                => "cond_synchronize_rcu",
+       "kmap"                                  => "kmap_local_page",
+       "kmap_atomic"                           => "kmap_local_page",
 );
 
 #Create a search pattern for all these strings to speed up a loop below
@@ -3140,6 +3146,50 @@ sub process {
                        }
                }
 
+# Check Fixes: styles is correct
+               if (!$in_header_lines &&
+                   $line =~ /^\s*fixes:?\s*(?:commit\s*)?[0-9a-f]{5,}\b/i) {
+                       my $orig_commit = "";
+                       my $id = "0123456789ab";
+                       my $title = "commit title";
+                       my $tag_case = 1;
+                       my $tag_space = 1;
+                       my $id_length = 1;
+                       my $id_case = 1;
+                       my $title_has_quotes = 0;
+
+                       if ($line =~ /(\s*fixes:?)\s+([0-9a-f]{5,})\s+($balanced_parens)/i) {
+                               my $tag = $1;
+                               $orig_commit = $2;
+                               $title = $3;
+
+                               $tag_case = 0 if $tag eq "Fixes:";
+                               $tag_space = 0 if ($line =~ /^fixes:? [0-9a-f]{5,} ($balanced_parens)/i);
+
+                               $id_length = 0 if ($orig_commit =~ /^[0-9a-f]{12}$/i);
+                               $id_case = 0 if ($orig_commit !~ /[A-F]/);
+
+                               # Always strip leading/trailing parens then double quotes if existing
+                               $title = substr($title, 1, -1);
+                               if ($title =~ /^".*"$/) {
+                                       $title = substr($title, 1, -1);
+                                       $title_has_quotes = 1;
+                               }
+                       }
+
+                       my ($cid, $ctitle) = git_commit_info($orig_commit, $id,
+                                                            $title);
+
+                       if ($ctitle ne $title || $tag_case || $tag_space ||
+                           $id_length || $id_case || !$title_has_quotes) {
+                               if (WARN("BAD_FIXES_TAG",
+                                    "Please use correct Fixes: style 'Fixes: <12 chars of sha1> (\"<title line>\")' - ie: 'Fixes: $cid (\"$ctitle\")'\n" . $herecurr) &&
+                                   $fix) {
+                                       $fixed[$fixlinenr] = "Fixes: $cid (\"$ctitle\")";
+                               }
+                       }
+               }
+
 # Check email subject for common tools that don't need to be mentioned
                if ($in_header_lines &&
                    $line =~ /^Subject:.*\b(?:checkpatch|sparse|smatch)\b[^:]/i) {