On 07/13/2014 02:50 PM, Christoph Hellwig wrote:
> [email protected] wrote ...
>> diff --git a/fs/direct-io.c b/fs/direct-io.c
>> index 98040ba388ac..c0a9854d2bc7 100644
>> --- a/fs/direct-io.c
>> +++ b/fs/direct-io.c
>> @@ -910,7 +910,8 @@ static int do_direct_IO(struct dio *dio, struct 
>> dio_submit *sdio,
>>  
>>      while (sdio->block_in_file < sdio->final_block_in_request) {
>>              struct page *page;
>> -            size_t from, to;
>> +            size_t from = 0;
>> +            size_t to = 0;
>>              page = dio_get_page(dio, sdio, &from, &to);
>>              if (IS_ERR(page)) {
>>                      ret = PTR_ERR(page);
> Looks good to me,
> 
> Reviewed-by: Christoph Hellwig <[email protected]>
> 
> Al, can you pick this up?  It's the only warnings in many of my usual
> kernel builds at the moment.
> 
<>

Paul Bolle <[email protected]> wrote ...
<>
> @@ -911,11 +907,15 @@ static int do_direct_IO(struct dio *dio, struct 
> dio_submit *sdio,
>       while (sdio->block_in_file < sdio->final_block_in_request) {
>               struct page *page;
>               size_t from, to;
> -             page = dio_get_page(dio, sdio, &from, &to);
> +
> +             page = dio_get_page(dio, sdio);
>               if (IS_ERR(page)) {
>                       ret = PTR_ERR(page);
>                       goto out;
>               }
> +             from = sdio->head ? 0 : sdio->from;
> +             to = (sdio->head == sdio->tail - 1) ? sdio->to : PAGE_SIZE;
> +             sdio->head++;
>  
>               while (from < to) {
>                       unsigned this_chunk_bytes;      /* # of bytes mapped */
<>

This is the wrong fix. GCC is wrong here. As shown by Paul Bolle if
you move the from / to set from dio_get_page() to here the warning goes away.

The minimal fix must use uninitialized_var() in this case. See patch below

But I think the proper fix Is the one Paul Bolle <[email protected]> sent 
(above)


----
From: Boaz Harrosh <[email protected]>
Date: Wed, 16 Jul 2014 20:02:29 +0300
Subject: [PATCH] do_direct_IO: Fix compiler warning
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

This fixes
../fs/direct-io.c: In function ‘do_blockdev_direct_IO’:
../fs/direct-io.c:1011:12: warning: ‘from’ may be used uninitialized in this 
function [-Wmaybe-uninitialized]
    u = (to - from) >> blkbits;
            ^
../fs/direct-io.c:1011:12: warning: ‘to’ may be used uninitialized in this 
function [-Wmaybe-uninitialized]
    u = (to - from) >> blkbits;

I use: gcc version 4.8.3 20140624 (Red Hat 4.8.3-1)

GCC is wrong here so we should use the uninitialized_var() macro
and not silence it with = 0;

Signed-off-by: Boaz Harrosh <[email protected]>
---
 fs/direct-io.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/fs/direct-io.c b/fs/direct-io.c
index 98040ba..156e6f0 100644
--- a/fs/direct-io.c
+++ b/fs/direct-io.c
@@ -910,7 +910,8 @@ static int do_direct_IO(struct dio *dio, struct dio_submit 
*sdio,
 
        while (sdio->block_in_file < sdio->final_block_in_request) {
                struct page *page;
-               size_t from, to;
+               size_t uninitialized_var(from), uninitialized_var(to);
+
                page = dio_get_page(dio, sdio, &from, &to);
                if (IS_ERR(page)) {
                        ret = PTR_ERR(page);
-- 
1.9.3

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Reply via email to