Skip to contentSkip to conversation

scsi: qla2xxx: Simplify conditional check

PATCH Superseded Nathan Chancellor 3 participants 5 messages Mar 20, 2019 – Mar 28, 2019

Subsystems (2)
lore
Share & tools
lore
#0 lore raw

PATCH 1/1 scsi: qla2xxx: Simplify conditional check

Clang generates a warning when it sees a logical not followed by a conditional operator like ==, >, or < because it thinks that the logical not should be applied to the whole statement:

drivers/scsi/qla2xxx/qla_nx.c:3702:7: warning: logical not is only applied to the left hand side of this comparison [-Wlogical-not-parentheses]

                if (!qla2x00_eh_wait_for_pending_commands(vha, 0, 0,
                    ^
drivers/scsi/qla2xxx/qla_nx.c:3702:7: note: add parentheses after the
'!' to evaluate the comparison first
                if (!qla2x00_eh_wait_for_pending_commands(vha, 0, 0,
                    ^
                     (
drivers/scsi/qla2xxx/qla_nx.c:3702:7: note: add parentheses around left
hand side expression to silence this warning
                if (!qla2x00_eh_wait_for_pending_commands(vha, 0, 0,
                    ^
                    (

1 warning generated.

It assumes the author might have made a mistake in their logic:

if (!a == b) -> if (!(a == b))

Sometimes that is the case; other times, it's just a super convoluted way of saying 'if (a)' when b = 0:

if (!1 == 0) -> if (0 == 0) -> if (true)

Alternatively:

if (!1 == 0) -> if (!!1) -> if (1)

Simplify this comparison so that Clang doesn't complain.

---

This is commit 0bfe7d3cae58 ("scsi: qla2xxx: Simplify conditional check") upstream but commit 3695310e37b4 ("scsi: qla2xxx: Update flash read/write routine") in the 5.2/scsi-queue branch silently reverted it. I don't care if it is squashed or not, I just want the warning to stay fixed.

Thanks,
Nathan

 drivers/scsi/qla2xxx/qla_nx.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)
drivers/scsi/qla2xxx/qla_nx.c +2 -2
index de2bc78449e7..121e18b3b9f8 100644
@@ -3699,8 +3699,8 @@ qla82xx_chip_reset_cleanup(scsi_qla_host_t *vha)
 		spin_unlock_irqrestore(&ha->hardware_lock, flags);
 
 		/* Wait for pending cmds (physical and virtual) to complete */
-		if (!qla2x00_eh_wait_for_pending_commands(vha, 0, 0,
-		    WAIT_HOST) == QLA_SUCCESS) {
+		if (qla2x00_eh_wait_for_pending_commands(vha, 0, 0,
+		    WAIT_HOST)) {
 			ql_dbg(ql_dbg_init, vha, 0x00b3,
 			    "Done wait for "
 			    "pending commands.\n");
Signature · 1 line
2.21.0
#1 lore raw
Quoted 39 lines · Nathan Chancellor

Clang generates a warning when it sees a logical not followed by a conditional operator like ==, >, or < because it thinks that the logical not should be applied to the whole statement:

drivers/scsi/qla2xxx/qla_nx.c:3702:7: warning: logical not is only applied to the left hand side of this comparison [-Wlogical-not-parentheses]

                if (!qla2x00_eh_wait_for_pending_commands(vha, 0, 0,
                    ^
drivers/scsi/qla2xxx/qla_nx.c:3702:7: note: add parentheses after the
'!' to evaluate the comparison first
                if (!qla2x00_eh_wait_for_pending_commands(vha, 0, 0,
                    ^
                     (
drivers/scsi/qla2xxx/qla_nx.c:3702:7: note: add parentheses around left
hand side expression to silence this warning
                if (!qla2x00_eh_wait_for_pending_commands(vha, 0, 0,
                    ^
                    (

1 warning generated.

It assumes the author might have made a mistake in their logic:

if (!a == b) -> if (!(a == b))

Sometimes that is the case; other times, it's just a super convoluted way of saying 'if (a)' when b = 0:

if (!1 == 0) -> if (0 == 0) -> if (true)

Alternatively:

if (!1 == 0) -> if (!!1) -> if (1)

Simplify this comparison so that Clang doesn't complain.

Quoted 7 lines

---

This is commit 0bfe7d3cae58 ("scsi: qla2xxx: Simplify conditional check") upstream but commit 3695310e37b4 ("scsi: qla2xxx: Update flash read/write routine") in the 5.2/scsi-queue branch silently reverted it. I don't care if it is squashed or not, I just want the warning to stay fixed.

This is probably a simpler commit message. A "Fixes:" tag is a simple enough addition, too.
Thanks for catching this and resending the fix.

Quoted 31 lines

Thanks,
Nathan

 drivers/scsi/qla2xxx/qla_nx.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)
drivers/scsi/qla2xxx/qla_nx.c +2 -3
index de2bc78449e7..121e18b3b9f8 100644
@@ -3699,8 +3699,8 @@ qla82xx_chip_reset_cleanup(scsi_qla_host_t *vha)
                spin_unlock_irqrestore(&ha->hardware_lock, flags);
 
                /* Wait for pending cmds (physical and virtual) to complete */
-               if (!qla2x00_eh_wait_for_pending_commands(vha, 0, 0,
-                   WAIT_HOST) == QLA_SUCCESS) {
+               if (qla2x00_eh_wait_for_pending_commands(vha, 0, 0,
+                   WAIT_HOST)) {
                        ql_dbg(ql_dbg_init, vha, 0x00b3,
                            "Done wait for "
                            "pending commands.\n");
--

2.21.0

--
You received this message because you are subscribed to the Google Groups "Clang Built Linux" group.
To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To post to this group, send email to [email protected].
To view this discussion on the web visit https://groups.google.com/d/msgid/clang-built-linux/20190320163315.12740-1-natechancellor%40gmail.com.
For more options, visit https://groups.google.com/d/optout.

Signature · 2 lines
Thanks,
~Nick Desaulniers
#2 lore raw

PATCH v2 1/1 scsi: qla2xxx: Simplify conditional check again

In reply to Nathan Chancellor

Clang warns when it sees a logical not on the left side of a conditional statement because it thinks the logical not should be applied to the whole statement, not just the left side:

drivers/scsi/qla2xxx/qla_nx.c:3703:7: warning: logical not is only applied to the left hand side of this comparison [-Wlogical-not-parentheses]

This particular instance was already fixed by commit 0bfe7d3cae58 ("scsi:
qla2xxx: Simplify conditional check") upstream but it was reintroduced by commit 3695310e37b4 ("scsi: qla2xxx: Update flash read/write routine") in the 5.2/scsi-queue.

Fixes 3695310e37b4 ("scsi: qla2xxx: Update flash read/write routine")

---

v1 -> v2:

* Reword commit message so make it clear this is just a reapplication of a commit that is already in mainline, as suggested by Nick.

* Include the authors who reintroduced this warning.

 drivers/scsi/qla2xxx/qla_nx.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)
drivers/scsi/qla2xxx/qla_nx.c +2 -2
index e0b4387fd6ba..359ebb634d96 100644
@@ -3700,8 +3700,8 @@ qla82xx_chip_reset_cleanup(scsi_qla_host_t *vha)
 		spin_unlock_irqrestore(&ha->hardware_lock, flags);
 
 		/* Wait for pending cmds (physical and virtual) to complete */
-		if (!qla2x00_eh_wait_for_pending_commands(vha, 0, 0,
-		    WAIT_HOST) == QLA_SUCCESS) {
+		if (qla2x00_eh_wait_for_pending_commands(vha, 0, 0,
+		    WAIT_HOST)) {
 			ql_dbg(ql_dbg_init, vha, 0x00b3,
 			    "Done wait for "
 			    "pending commands.\n");
Signature · 1 line
2.21.0
Reviewed-by on v2 1/1
#3 lore raw

Re: [PATCH v2] scsi: qla2xxx: Simplify conditional check again

Quoted 5 lines · Nathan Chancellor

Clang warns when it sees a logical not on the left side of a conditional statement because it thinks the logical not should be applied to the whole statement, not just the left side:

Quoted 8 lines

drivers/scsi/qla2xxx/qla_nx.c:3703:7: warning: logical not is only applied to the left hand side of this comparison [-Wlogical-not-parentheses]

This particular instance was already fixed by commit 0bfe7d3cae58 ("scsi:
qla2xxx: Simplify conditional check") upstream but it was reintroduced by commit 3695310e37b4 ("scsi: qla2xxx: Update flash read/write routine") in the 5.2/scsi-queue.

Nathan, thanks for following up and rewording the commit message to clearly state how we got here.

Quoted 34 lines
Fixes 3695310e37b4 ("scsi: qla2xxx: Update flash read/write routine")

---

v1 -> v2:

* Reword commit message so make it clear this is just a reapplication of a commit that is already in mainline, as suggested by Nick.

* Include the authors who reintroduced this warning.

 drivers/scsi/qla2xxx/qla_nx.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)
drivers/scsi/qla2xxx/qla_nx.c +2 -3
index e0b4387fd6ba..359ebb634d96 100644
@@ -3700,8 +3700,8 @@ qla82xx_chip_reset_cleanup(scsi_qla_host_t *vha)
                spin_unlock_irqrestore(&ha->hardware_lock, flags);
 
                /* Wait for pending cmds (physical and virtual) to complete */
-               if (!qla2x00_eh_wait_for_pending_commands(vha, 0, 0,
-                   WAIT_HOST) == QLA_SUCCESS) {
+               if (qla2x00_eh_wait_for_pending_commands(vha, 0, 0,
+                   WAIT_HOST)) {
                        ql_dbg(ql_dbg_init, vha, 0x00b3,
                            "Done wait for "
                            "pending commands.\n");
--

2.21.0

Signature · 2 lines
Thanks,
~Nick Desaulniers
#4 lore raw

Re: [PATCH v2] scsi: qla2xxx: Simplify conditional check again

In reply to Nathan Chancellor

Nathan,

Quoted 3 lines

Clang warns when it sees a logical not on the left side of a conditional statement because it thinks the logical not should be applied to the whole statement, not just the left side:

Applied to 5.2/scsi-queue, thanks.

Signature · 1 line
Martin K. Petersen	Oracle Linux Engineering