From: Jeffle Xu <[email protected]>
To: [email protected]
Cc: [email protected], [email protected],
[email protected]
Subject: [PATCH] io_uring: use blk_queue_nowait() to check if NOWAIT supported
Date: Mon, 19 Oct 2020 16:47:37 +0800 [thread overview]
Message-ID: <[email protected]> (raw)
commit 021a24460dc2 ("block: add QUEUE_FLAG_NOWAIT") add a new helper
function blk_queue_nowait() to check if the bdev supports handling of
REQ_NOWAIT or not. Since then bio-based dm device can also support
REQ_NOWAIT, and currently only dm-linear supports that since
commit 6abc49468eea ("dm: add support for REQ_NOWAIT and enable it for
linear target").
Fixes: 4503b7676a2e ("io_uring: catch -EIO from buffered issue request failure")
Signed-off-by: Jeffle Xu <[email protected]>
---
fs/io_uring.c | 2 +-
scripts/checkpatch.pl | 313 ++++++++++++------------------------------
2 files changed, 85 insertions(+), 230 deletions(-)
diff --git a/fs/io_uring.c b/fs/io_uring.c
index 2e1dc354cd08..7d8615df3c01 100644
--- a/fs/io_uring.c
+++ b/fs/io_uring.c
@@ -2601,7 +2601,7 @@ static struct file *__io_file_get(struct io_submit_state *state, int fd)
static bool io_bdev_nowait(struct block_device *bdev)
{
#ifdef CONFIG_BLOCK
- return !bdev || queue_is_mq(bdev_get_queue(bdev));
+ return !bdev || blk_queue_nowait(bdev_get_queue(bdev));
#else
return true;
#endif
diff --git a/scripts/checkpatch.pl b/scripts/checkpatch.pl
index 4223a9ac7059..4c820607540b 100755
--- a/scripts/checkpatch.pl
+++ b/scripts/checkpatch.pl
@@ -59,13 +59,12 @@ my $spelling_file = "$D/spelling.txt";
my $codespell = 0;
my $codespellfile = "/usr/share/codespell/dictionary.txt";
my $conststructsfile = "$D/const_structs.checkpatch";
-my $typedefsfile;
+my $typedefsfile = "";
my $color = "auto";
my $allow_c99_comments = 1; # Can be overridden by --ignore C99_COMMENT_TOLERANCE
# git output parsing needs US English output, so first set backtick child process LANGUAGE
my $git_command ='export LANGUAGE=en_US.UTF-8; git';
my $tabsize = 8;
-my ${CONFIG_} = "CONFIG_";
sub help {
my ($exitcode) = @_;
@@ -128,8 +127,6 @@ Options:
--typedefsfile Read additional types from this file
--color[=WHEN] Use colors 'always', 'never', or only when output
is a terminal ('auto'). Default is 'auto'.
- --kconfig-prefix=WORD use WORD as a prefix for Kconfig symbols (default
- ${CONFIG_})
-h, --help, --version display this help and exit
When FILE is - read standard input.
@@ -238,7 +235,6 @@ GetOptions(
'color=s' => \$color,
'no-color' => \$color, #keep old behaviors of -nocolor
'nocolor' => \$color, #keep old behaviors of -nocolor
- 'kconfig-prefix=s' => \${CONFIG_},
'h|help' => \$help,
'version' => \$help
) or help(1);
@@ -592,8 +588,6 @@ our @mode_permission_funcs = (
["__ATTR", 2],
);
-my $word_pattern = '\b[A-Z]?[a-z]{2,}\b';
-
#Create a search pattern for all these functions to speed up a loop below
our $mode_perms_search = "";
foreach my $entry (@mode_permission_funcs) {
@@ -762,7 +756,7 @@ sub read_words {
next;
}
- $$wordsRef .= '|' if (defined $$wordsRef);
+ $$wordsRef .= '|' if ($$wordsRef ne "");
$$wordsRef .= $line;
}
close($file);
@@ -772,18 +766,16 @@ sub read_words {
return 0;
}
-my $const_structs;
-if (show_type("CONST_STRUCT")) {
- read_words(\$const_structs, $conststructsfile)
- or warn "No structs that should be const will be found - file '$conststructsfile': $!\n";
-}
+my $const_structs = "";
+read_words(\$const_structs, $conststructsfile)
+ or warn "No structs that should be const will be found - file '$conststructsfile': $!\n";
-if (defined($typedefsfile)) {
- my $typeOtherTypedefs;
+my $typeOtherTypedefs = "";
+if (length($typedefsfile)) {
read_words(\$typeOtherTypedefs, $typedefsfile)
or warn "No additional types will be considered - file '$typedefsfile': $!\n";
- $typeTypedefs .= '|' . $typeOtherTypedefs if (defined $typeOtherTypedefs);
}
+$typeTypedefs .= '|' . $typeOtherTypedefs if ($typeOtherTypedefs ne "");
sub build_types {
my $mods = "(?x: \n" . join("|\n ", (@modifierList, @modifierListFile)) . "\n)";
@@ -848,6 +840,7 @@ our $FuncArg = qr{$Typecast{0,1}($LvalOrFunc|$Constant|$String)};
our $declaration_macros = qr{(?x:
(?:$Storage\s+)?(?:[A-Z_][A-Z0-9]*_){0,2}(?:DEFINE|DECLARE)(?:_[A-Z0-9]+){1,6}\s*\(|
(?:$Storage\s+)?[HLP]?LIST_HEAD\s*\(|
+ (?:$Storage\s+)?${Type}\s+uninitialized_var\s*\(|
(?:SKCIPHER_REQUEST|SHASH_DESC|AHASH_REQUEST)_ON_STACK\s*\(
)};
@@ -974,16 +967,6 @@ sub seed_camelcase_includes {
}
}
-sub git_is_single_file {
- my ($filename) = @_;
-
- return 0 if ((which("git") eq "") || !(-e "$gitroot"));
-
- my $output = `${git_command} ls-files -- $filename 2>/dev/null`;
- my $count = $output =~ tr/\n//;
- return $count eq 1 && $output =~ m{^${filename}$};
-}
-
sub git_commit_info {
my ($commit, $id, $desc) = @_;
@@ -1057,9 +1040,6 @@ my $vname;
$allow_c99_comments = !defined $ignore_type{"C99_COMMENT_TOLERANCE"};
for my $filename (@ARGV) {
my $FILE;
- my $is_git_file = git_is_single_file($filename);
- my $oldfile = $file;
- $file = 1 if ($is_git_file);
if ($git) {
open($FILE, '-|', "git format-patch -M --stdout -1 $filename") ||
die "$P: $filename: git format-patch failed - $!\n";
@@ -1104,7 +1084,6 @@ for my $filename (@ARGV) {
@modifierListFile = ();
@typeListFile = ();
build_types();
- $file = $oldfile if ($is_git_file);
}
if (!$quiet) {
@@ -1181,10 +1160,10 @@ sub parse_email {
}
}
- $comment = trim($comment);
$name = trim($name);
$name =~ s/^\"|\"$//g;
- if ($name =~ s/(\s*\([^\)]+\))\s*//) {
+ $name =~ s/(\s*\([^\)]+\))\s*//;
+ if (defined($1)) {
$name_comment = trim($1);
}
$address = trim($address);
@@ -1199,12 +1178,10 @@ sub parse_email {
}
sub format_email {
- my ($name, $name_comment, $address, $comment) = @_;
+ my ($name, $address) = @_;
my $formatted_email;
- $name_comment = trim($name_comment);
- $comment = trim($comment);
$name = trim($name);
$name =~ s/^\"|\"$//g;
$address = trim($address);
@@ -1217,9 +1194,9 @@ sub format_email {
if ("$name" eq "") {
$formatted_email = "$address";
} else {
- $formatted_email = "$name$name_comment <$address>";
+ $formatted_email = "$name <$address>";
}
- $formatted_email .= "$comment";
+
return $formatted_email;
}
@@ -1227,23 +1204,17 @@ sub reformat_email {
my ($email) = @_;
my ($email_name, $name_comment, $email_address, $comment) = parse_email($email);
- return format_email($email_name, $name_comment, $email_address, $comment);
+ return format_email($email_name, $email_address);
}
sub same_email_addresses {
- my ($email1, $email2, $match_comment) = @_;
+ my ($email1, $email2) = @_;
my ($email1_name, $name1_comment, $email1_address, $comment1) = parse_email($email1);
my ($email2_name, $name2_comment, $email2_address, $comment2) = parse_email($email2);
- if ($match_comment != 1) {
- return $email1_name eq $email2_name &&
- $email1_address eq $email2_address;
- }
return $email1_name eq $email2_name &&
- $email1_address eq $email2_address &&
- $name1_comment eq $name2_comment &&
- $comment1 eq $comment2;
+ $email1_address eq $email2_address;
}
sub which {
@@ -2373,7 +2344,6 @@ sub process {
my $signoff = 0;
my $author = '';
my $authorsignoff = 0;
- my $author_sob = '';
my $is_patch = 0;
my $is_binding_patch = -1;
my $in_header_lines = $file ? 0 : 1;
@@ -2666,8 +2636,8 @@ sub process {
# Check if the commit log has what seems like a diff which can confuse patch
if ($in_commit_log && !$commit_log_has_diff &&
- (($line =~ m@^\s+diff\b.*a/([\w/]+)@ &&
- $line =~ m@^\s+diff\b.*a/[\w/]+\s+b/$1\b@) ||
+ (($line =~ m@^\s+diff\b.*a/[\w/]+@ &&
+ $line =~ m@^\s+diff\b.*a/([\w/]+)\s+b/$1\b@) ||
$line =~ m@^\s*(?:\-\-\-\s+a/|\+\+\+\s+b/)@ ||
$line =~ m/^\s*\@\@ \-\d+,\d+ \+\d+,\d+ \@\@/)) {
ERROR("DIFF_IN_COMMIT_MSG",
@@ -2688,10 +2658,6 @@ sub process {
# Check the patch for a From:
if (decode("MIME-Header", $line) =~ /^From:\s*(.*)/) {
$author = $1;
- my $curline = $linenr;
- while(defined($rawlines[$curline]) && ($rawlines[$curline++] =~ /^[ \t]\s*(.*)/)) {
- $author .= $1;
- }
$author = encode("utf8", $author) if ($line =~ /=\?utf-8\?/i);
$author =~ s/"//g;
$author = reformat_email($author);
@@ -2701,37 +2667,9 @@ sub process {
if ($line =~ /^\s*signed-off-by:\s*(.*)/i) {
$signoff++;
$in_commit_log = 0;
- if ($author ne '' && $authorsignoff != 1) {
- if (same_email_addresses($1, $author, 1)) {
+ if ($author ne '') {
+ if (same_email_addresses($1, $author)) {
$authorsignoff = 1;
- } else {
- my $ctx = $1;
- my ($email_name, $email_comment, $email_address, $comment1) = parse_email($ctx);
- my ($author_name, $author_comment, $author_address, $comment2) = parse_email($author);
-
- if ($email_address eq $author_address && $email_name eq $author_name) {
- $author_sob = $ctx;
- $authorsignoff = 2;
- } elsif ($email_address eq $author_address) {
- $author_sob = $ctx;
- $authorsignoff = 3;
- } elsif ($email_name eq $author_name) {
- $author_sob = $ctx;
- $authorsignoff = 4;
-
- my $address1 = $email_address;
- my $address2 = $author_address;
-
- if ($address1 =~ /(\S+)\+\S+(\@.*)/) {
- $address1 = "$1$2";
- }
- if ($address2 =~ /(\S+)\+\S+(\@.*)/) {
- $address2 = "$1$2";
- }
- if ($address1 eq $address2) {
- $authorsignoff = 5;
- }
- }
}
}
}
@@ -2788,7 +2726,7 @@ sub process {
}
my ($email_name, $name_comment, $email_address, $comment) = parse_email($email);
- my $suggested_email = format_email(($email_name, $name_comment, $email_address, $comment));
+ my $suggested_email = format_email(($email_name, $email_address));
if ($suggested_email eq "") {
ERROR("BAD_SIGN_OFF",
"Unrecognized email address: '$email'\n" . $herecurr);
@@ -2798,9 +2736,9 @@ sub process {
$dequoted =~ s/" </ </;
# Don't force email to have quotes
# Allow just an angle bracketed address
- if (!same_email_addresses($email, $suggested_email, 0)) {
+ if (!same_email_addresses($email, $suggested_email)) {
WARN("BAD_SIGN_OFF",
- "email address '$email' might be better as '$suggested_email'\n" . $herecurr);
+ "email address '$email' might be better as '$suggested_email$comment'\n" . $herecurr);
}
}
@@ -3046,42 +2984,6 @@ sub process {
}
}
-# check for repeated words separated by a single space
- if ($rawline =~ /^\+/ || $in_commit_log) {
- while ($rawline =~ /\b($word_pattern) (?=($word_pattern))/g) {
-
- my $first = $1;
- my $second = $2;
-
- if ($first =~ /(?:struct|union|enum)/) {
- pos($rawline) += length($first) + length($second) + 1;
- next;
- }
-
- next if ($first ne $second);
- next if ($first eq 'long');
-
- if (WARN("REPEATED_WORD",
- "Possible repeated word: '$first'\n" . $herecurr) &&
- $fix) {
- $fixed[$fixlinenr] =~ s/\b$first $second\b/$first/;
- }
- }
-
- # if it's a repeated word on consecutive lines in a comment block
- if ($prevline =~ /$;+\s*$/ &&
- $prevrawline =~ /($word_pattern)\s*$/) {
- my $last_word = $1;
- if ($rawline =~ /^\+\s*\*\s*$last_word /) {
- if (WARN("REPEATED_WORD",
- "Possible repeated word: '$last_word'\n" . $hereprev) &&
- $fix) {
- $fixed[$fixlinenr] =~ s/(\+\s*\*\s*)$last_word /$1/;
- }
- }
- }
- }
-
# ignore non-hunk lines and lines being removed
next if (!$hunk_line || $line =~ /^-/);
@@ -3140,7 +3042,11 @@ sub process {
if ($lines[$ln - 1] =~ /^\+\s*(?:bool|tristate|prompt)\s*["']/) {
$is_start = 1;
- } elsif ($lines[$ln - 1] =~ /^\+\s*(?:---)?help(?:---)?$/) {
+ } elsif ($lines[$ln - 1] =~ /^\+\s*(?:help|---help---)\s*$/) {
+ if ($lines[$ln - 1] =~ "---help---") {
+ WARN("CONFIG_DESCRIPTION",
+ "prefer 'help' over '---help---' for new help texts\n" . $herecurr);
+ }
$length = -1;
}
@@ -3308,12 +3214,6 @@ sub process {
}
}
-# check for embedded filenames
- if ($rawline =~ /^\+.*\Q$realfile\E/) {
- WARN("EMBEDDED_FILENAME",
- "It's generally not useful to have the filename in the file\n" . $herecurr);
- }
-
# check we are in a valid source file if not then ignore this hunk
next if ($realfile !~ /\.(h|c|s|S|sh|dtsi|dts)$/);
@@ -3501,7 +3401,7 @@ sub process {
if ($realfile =~ m@^(drivers/net/|net/)@ &&
$prevrawline =~ /^\+[ \t]*\/\*[ \t]*$/ &&
$rawline =~ /^\+[ \t]*\*/ &&
- $realline > 3) { # Do not warn about the initial copyright comment block after SPDX-License-Identifier
+ $realline > 2) {
WARN("NETWORKING_BLOCK_COMMENT_STYLE",
"networking block comments don't use an empty /* line, use /* Comment...\n" . $hereprev);
}
@@ -3960,17 +3860,6 @@ sub process {
#ignore lines not being added
next if ($line =~ /^[^\+]/);
-# check for self assignments used to avoid compiler warnings
-# e.g.: int foo = foo, *bar = NULL;
-# struct foo bar = *(&(bar));
- if ($line =~ /^\+\s*(?:$Declare)?([A-Za-z_][A-Za-z\d_]*)\s*=/) {
- my $var = $1;
- if ($line =~ /^\+\s*(?:$Declare)?$var\s*=\s*(?:$var|\*\s*\(?\s*&\s*\(?\s*$var\s*\)?\s*\)?)\s*[;,]/) {
- WARN("SELF_ASSIGNMENT",
- "Do not use self-assignments to avoid compiler warnings\n" . $herecurr);
- }
- }
-
# check for dereferences that span multiple lines
if ($prevline =~ /^\+.*$Lval\s*(?:\.|->)\s*$/ &&
$line =~ /^\+\s*(?!\#\s*(?!define\s+|if))\s*$Lval/) {
@@ -4346,12 +4235,6 @@ sub process {
"Prefer dev_$level(... to dev_printk(KERN_$orig, ...\n" . $herecurr);
}
-# trace_printk should not be used in production code.
- if ($line =~ /\b(trace_printk|trace_puts|ftrace_vprintk)\s*\(/) {
- WARN("TRACE_PRINTK",
- "Do not use $1() in production code (this can be ignored if built only with a debug config option)\n" . $herecurr);
- }
-
# ENOSYS means "bad syscall nr" and nothing else. This will have a small
# number of false positives, but assembly files are not checked, so at
# least the arch entry code will not trigger this warning.
@@ -5018,17 +4901,6 @@ sub process {
}
}
-# check if a statement with a comma should be two statements like:
-# foo = bar(), /* comma should be semicolon */
-# bar = baz();
- if (defined($stat) &&
- $stat =~ /^\+\s*(?:$Lval\s*$Assignment\s*)?$FuncArg\s*,\s*(?:$Lval\s*$Assignment\s*)?$FuncArg\s*;\s*$/) {
- my $cnt = statement_rawlines($stat);
- my $herectx = get_stat_here($linenr, $cnt, $here);
- WARN("SUSPECT_COMMA_SEMICOLON",
- "Possible comma where semicolon could be used\n" . $herectx);
- }
-
# return is not a function
if (defined($stat) && $stat =~ /^.\s*return(\s*)\(/s) {
my $spacing = $1;
@@ -5149,30 +5021,8 @@ sub process {
my ($s, $c) = ($stat, $cond);
if ($c =~ /\bif\s*\(.*[^<>!=]=[^=].*/s) {
- if (ERROR("ASSIGN_IN_IF",
- "do not use assignment in if condition\n" . $herecurr) &&
- $fix && $perl_version_ok) {
- if ($rawline =~ /^\+(\s+)if\s*\(\s*(\!)?\s*\(\s*(($Lval)\s*=\s*$LvalOrFunc)\s*\)\s*(?:($Compare)\s*($FuncArg))?\s*\)\s*(\{)?\s*$/) {
- my $space = $1;
- my $not = $2;
- my $statement = $3;
- my $assigned = $4;
- my $test = $8;
- my $against = $9;
- my $brace = $15;
- fix_delete_line($fixlinenr, $rawline);
- fix_insert_line($fixlinenr, "$space$statement;");
- my $newline = "${space}if (";
- $newline .= '!' if defined($not);
- $newline .= '(' if (defined $not && defined($test) && defined($against));
- $newline .= "$assigned";
- $newline .= " $test $against" if (defined($test) && defined($against));
- $newline .= ')' if (defined $not && defined($test) && defined($against));
- $newline .= ')';
- $newline .= " {" if (defined($brace));
- fix_insert_line($fixlinenr + 1, $newline);
- }
- }
+ ERROR("ASSIGN_IN_IF",
+ "do not use assignment in if condition\n" . $herecurr);
}
# Find out what is on the end of the line after the
@@ -5388,9 +5238,9 @@ sub process {
$dstat =~ s/\s*$//s;
# Flatten any parentheses and braces
- while ($dstat =~ s/\([^\(\)]*\)/1u/ ||
- $dstat =~ s/\{[^\{\}]*\}/1u/ ||
- $dstat =~ s/.\[[^\[\]]*\]/1u/)
+ while ($dstat =~ s/\([^\(\)]*\)/1/ ||
+ $dstat =~ s/\{[^\{\}]*\}/1/ ||
+ $dstat =~ s/.\[[^\[\]]*\]/1/)
{
}
@@ -5431,7 +5281,6 @@ sub process {
$dstat !~ /^\.$Ident\s*=/ && # .foo =
$dstat !~ /^(?:\#\s*$Ident|\#\s*$Constant)\s*$/ && # stringification #foo
$dstat !~ /^do\s*$Constant\s*while\s*$Constant;?$/ && # do {...} while (...); // do {...} while (...)
- $dstat !~ /^while\s*$Constant\s*$Constant\s*$/ && # while (...) {...}
$dstat !~ /^for\s*$Constant$/ && # for (...)
$dstat !~ /^for\s*$Constant\s+(?:$Ident|-?$Constant)$/ && # for (...) bar()
$dstat !~ /^do\s*{/ && # do {...
@@ -6054,7 +5903,8 @@ sub process {
my $barriers = qr{
mb|
rmb|
- wmb
+ wmb|
+ read_barrier_depends
}x;
my $barrier_stems = qr{
mb__before_atomic|
@@ -6103,6 +5953,12 @@ sub process {
}
}
+# check for smp_read_barrier_depends and read_barrier_depends
+ if (!$file && $line =~ /\b(smp_|)read_barrier_depends\s*\(/) {
+ WARN("READ_BARRIER_DEPENDS",
+ "$1read_barrier_depends should only be used in READ_ONCE or DEC Alpha code\n" . $herecurr);
+ }
+
# check of hardware specific defines
if ($line =~ m@^.\s*\#\s*if.*\b(__i386__|__powerpc64__|__sun__|__s390x__)\b@ && $realfile !~ m@include/asm-@) {
CHK("ARCH_DEFINES",
@@ -6474,7 +6330,8 @@ sub process {
if (defined $cond) {
substr($s, 0, length($cond), '');
}
- if ($s =~ /^\s*;/)
+ if ($s =~ /^\s*;/ &&
+ $function_name ne 'uninitialized_var')
{
WARN("AVOID_EXTERNS",
"externs should be avoided in .c files\n" . $herecurr);
@@ -6493,13 +6350,17 @@ sub process {
}
# check for function declarations that have arguments without identifier names
+# while avoiding uninitialized_var(x)
if (defined $stat &&
- $stat =~ /^.\s*(?:extern\s+)?$Type\s*(?:$Ident|\(\s*\*\s*$Ident\s*\))\s*\(\s*([^{]+)\s*\)\s*;/s &&
- $1 ne "void") {
- my $args = trim($1);
+ $stat =~ /^.\s*(?:extern\s+)?$Type\s*(?:($Ident)|\(\s*\*\s*$Ident\s*\))\s*\(\s*([^{]+)\s*\)\s*;/s &&
+ (!defined($1) ||
+ (defined($1) && $1 ne "uninitialized_var")) &&
+ $2 ne "void") {
+ my $args = trim($2);
while ($args =~ m/\s*($Type\s*(?:$Ident|\(\s*\*\s*$Ident?\s*\)\s*$balanced_parens)?)/g) {
my $arg = trim($1);
- if ($arg =~ /^$Type$/ && $arg !~ /enum\s+$Ident$/) {
+ if ($arg =~ /^$Type$/ &&
+ $arg !~ /enum\s+$Ident$/) {
WARN("FUNCTION_ARGUMENTS",
"function definition argument '$arg' should also have an identifier name\n" . $herecurr);
}
@@ -6617,22 +6478,41 @@ sub process {
}
}
-# check for IS_ENABLED() without CONFIG_<FOO> ($rawline for comments too)
- if ($rawline =~ /\bIS_ENABLED\s*\(\s*(\w+)\s*\)/ && $1 !~ /^${CONFIG_}/) {
- WARN("IS_ENABLED_CONFIG",
- "IS_ENABLED($1) is normally used as IS_ENABLED(${CONFIG_}$1)\n" . $herecurr);
- }
-
# check for #if defined CONFIG_<FOO> || defined CONFIG_<FOO>_MODULE
- if ($line =~ /^\+\s*#\s*if\s+defined(?:\s*\(?\s*|\s+)(${CONFIG_}[A-Z_]+)\s*\)?\s*\|\|\s*defined(?:\s*\(?\s*|\s+)\1_MODULE\s*\)?\s*$/) {
+ if ($line =~ /^\+\s*#\s*if\s+defined(?:\s*\(?\s*|\s+)(CONFIG_[A-Z_]+)\s*\)?\s*\|\|\s*defined(?:\s*\(?\s*|\s+)\1_MODULE\s*\)?\s*$/) {
my $config = $1;
if (WARN("PREFER_IS_ENABLED",
- "Prefer IS_ENABLED(<FOO>) to ${CONFIG_}<FOO> || ${CONFIG_}<FOO>_MODULE\n" . $herecurr) &&
+ "Prefer IS_ENABLED(<FOO>) to CONFIG_<FOO> || CONFIG_<FOO>_MODULE\n" . $herecurr) &&
$fix) {
$fixed[$fixlinenr] = "\+#if IS_ENABLED($config)";
}
}
+# check for case / default statements not preceded by break/fallthrough/switch
+ if ($line =~ /^.\s*(?:case\s+(?:$Ident|$Constant)\s*|default):/) {
+ my $has_break = 0;
+ my $has_statement = 0;
+ my $count = 0;
+ my $prevline = $linenr;
+ while ($prevline > 1 && ($file || $count < 3) && !$has_break) {
+ $prevline--;
+ my $rline = $rawlines[$prevline - 1];
+ my $fline = $lines[$prevline - 1];
+ last if ($fline =~ /^\@\@/);
+ next if ($fline =~ /^\-/);
+ next if ($fline =~ /^.(?:\s*(?:case\s+(?:$Ident|$Constant)[\s$;]*|default):[\s$;]*)*$/);
+ $has_break = 1 if ($rline =~ /fall[\s_-]*(through|thru)/i);
+ next if ($fline =~ /^.[\s$;]*$/);
+ $has_statement = 1;
+ $count++;
+ $has_break = 1 if ($fline =~ /\bswitch\b|\b(?:break\s*;[\s$;]*$|exit\s*\(\b|return\b|goto\b|continue\b)/);
+ }
+ if (!$has_break && $has_statement) {
+ WARN("MISSING_BREAK",
+ "Possible switch case/default not preceded by break or fallthrough comment\n" . $herecurr);
+ }
+ }
+
# check for /* fallthrough */ like comment, prefer fallthrough;
my @fallthroughs = (
'fallthrough',
@@ -6748,8 +6628,7 @@ sub process {
# check for various structs that are normally const (ops, kgdb, device_tree)
# and avoid what seem like struct definitions 'struct foo {'
- if (defined($const_structs) &&
- $line !~ /\bconst\b/ &&
+ if ($line !~ /\bconst\b/ &&
$line =~ /\bstruct\s+($const_structs)\b(?!\s*\{)/) {
WARN("CONST_STRUCT",
"struct $1 should normally be const\n" . $herecurr);
@@ -6980,33 +6859,9 @@ sub process {
if ($signoff == 0) {
ERROR("MISSING_SIGN_OFF",
"Missing Signed-off-by: line(s)\n");
- } elsif ($authorsignoff != 1) {
- # authorsignoff values:
- # 0 -> missing sign off
- # 1 -> sign off identical
- # 2 -> names and addresses match, comments mismatch
- # 3 -> addresses match, names different
- # 4 -> names match, addresses different
- # 5 -> names match, addresses excluding subaddress details (refer RFC 5233) match
-
- my $sob_msg = "'From: $author' != 'Signed-off-by: $author_sob'";
-
- if ($authorsignoff == 0) {
- ERROR("NO_AUTHOR_SIGN_OFF",
- "Missing Signed-off-by: line by nominal patch author '$author'\n");
- } elsif ($authorsignoff == 2) {
- CHK("FROM_SIGN_OFF_MISMATCH",
- "From:/Signed-off-by: email comments mismatch: $sob_msg\n");
- } elsif ($authorsignoff == 3) {
- WARN("FROM_SIGN_OFF_MISMATCH",
- "From:/Signed-off-by: email name mismatch: $sob_msg\n");
- } elsif ($authorsignoff == 4) {
- WARN("FROM_SIGN_OFF_MISMATCH",
- "From:/Signed-off-by: email address mismatch: $sob_msg\n");
- } elsif ($authorsignoff == 5) {
- WARN("FROM_SIGN_OFF_MISMATCH",
- "From:/Signed-off-by: email subaddress mismatch: $sob_msg\n");
- }
+ } elsif (!$authorsignoff) {
+ WARN("NO_AUTHOR_SIGN_OFF",
+ "Missing Signed-off-by: line by nominal patch author '$author'\n");
}
}
--
2.27.0
next reply other threads:[~2020-10-19 8:47 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-10-19 8:47 Jeffle Xu [this message]
2020-10-19 8:59 ` [PATCH v2] io_uring: use blk_queue_nowait() to check if NOWAIT supported Jeffle Xu
2020-10-19 13:32 ` Jens Axboe
2020-10-19 9:01 ` [PATCH] " JeffleXu
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
[email protected] \
[email protected] \
[email protected] \
[email protected] \
[email protected] \
[email protected] \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox