From: JeffleXu <[email protected]>
To: [email protected]
Cc: [email protected], [email protected],
[email protected]
Subject: Re: [PATCH] io_uring: use blk_queue_nowait() to check if NOWAIT supported
Date: Mon, 19 Oct 2020 17:01:56 +0800 [thread overview]
Message-ID: <[email protected]> (raw)
In-Reply-To: <[email protected]>
On 10/19/20 4:47 PM, Jeffle Xu wrote:
> 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
Sorry for getting the checkpatch.pl stuff involved. I've sent the clean
v2 patch.
> 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");
> }
> }
>
prev parent reply other threads:[~2020-10-19 9:02 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-10-19 8:47 [PATCH] io_uring: use blk_queue_nowait() to check if NOWAIT supported Jeffle Xu
2020-10-19 8:59 ` [PATCH v2] " Jeffle Xu
2020-10-19 13:32 ` Jens Axboe
2020-10-19 9:01 ` JeffleXu [this message]
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 \
--in-reply-to=85121e10-74b3-924b-0de9-b36cbf6c642c@linux.alibaba.com \
[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