Re: drivers/scsi/st.c:2967: warning: suggest parentheses around operand of '!' or change '|' to '||' or '!' to '~'

From: Mikael Pettersson
Date: Tue May 05 2009 - 04:38:38 EST


Geert Uytterhoeven writes:
> drivers/scsi/st.c:2967: warning: suggest parentheses around operand of
> '!' or change '|' to '||' or '!' to '~'
>
> if (cmdstatp->sense_hdr.sense_key == ILLEGAL_REQUEST &&
> !(STp->use_pf & PF_TESTED)) {
> /* Try the other possible state of Page Format if not
> already tried */
> STp->use_pf = !STp->use_pf | PF_TESTED;
> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
> st_release_request(SRpnt);
> SRpnt = NULL;
> return st_int_ioctl(STp, cmd_in, arg);
> }
>
> Looks indeed incorrect to me...

I noticed that too yesterday. I believe the intention is

STp->use_pf = (!STp->use_pf) | PF_TESTED;

which in this case (PF_TESTED is clear) is the same as

STp->use_pf = (STp->use_pf ^ USE_PF) | PF_TESTED;

which matches the comment, or

STp->use_pf ^= (USE_PF | PF_TESTED);

if you want to micro-optimize.
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/