| From: Linus Torvalds <torvalds@linux-foundation.org> |
| Date: Wed, 27 May 2015 15:32:15 -0700 |
| Subject: blk: rq_data_dir() should not return a boolean |
| MIME-Version: 1.0 |
| Content-Type: text/plain; charset=UTF-8 |
| Content-Transfer-Encoding: 8bit |
| |
| commit 10fbd36e362a0f367e34a7cd876a81295d8fc5ca upstream. |
| |
| rq_data_dir() returns either READ or WRITE (0 == READ, 1 == WRITE), not |
| a boolean value. |
| |
| Now, admittedly the "!= 0" doesn't really change the value (0 stays as |
| zero, 1 stays as one), but it's not only redundant, it confuses gcc, and |
| causes gcc to warn about the construct |
| |
| switch (rq_data_dir(req)) { |
| case READ: |
| ... |
| case WRITE: |
| ... |
| |
| that we have in a few drivers. |
| |
| Now, the gcc warning is silly and stupid (it seems to warn not about the |
| switch value having a different type from the case statements, but about |
| _any_ boolean switch value), but in this case the code itself is silly |
| and stupid too, so let's just change it, and get rid of warnings like |
| this: |
| |
| drivers/block/hd.c: In function ‘hd_request’: |
| drivers/block/hd.c:630:11: warning: switch condition has boolean value [-Wswitch-bool] |
| switch (rq_data_dir(req)) { |
| |
| The odd '!= 0' came in when "cmd_flags" got turned into a "u64" in |
| commit 5953316dbf90 ("block: make rq->cmd_flags be 64-bit") and is |
| presumably because the old code (that just did a logical 'and' with 1) |
| would then end up making the type of rq_data_dir() be u64 too. |
| |
| But if we want to retain the old regular integer type, let's just cast |
| the result to 'int' rather than use that rather odd '!= 0'. |
| |
| Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org> |
| Signed-off-by: Ben Hutchings <ben@decadent.org.uk> |
| Cc: Arnd Bergmann <arnd@arndb.de> |
| --- |
| include/linux/blkdev.h | 2 +- |
| 1 file changed, 1 insertion(+), 1 deletion(-) |
| |
| --- a/include/linux/blkdev.h |
| +++ b/include/linux/blkdev.h |
| @@ -620,7 +620,7 @@ static inline void queue_flag_clear(unsi |
| |
| #define list_entry_rq(ptr) list_entry((ptr), struct request, queuelist) |
| |
| -#define rq_data_dir(rq) (((rq)->cmd_flags & 1) != 0) |
| +#define rq_data_dir(rq) ((int)((rq)->cmd_flags & 1)) |
| |
| /* |
| * Driver can handle struct request, if it either has an old style |