On Wed, Jul 16, 2014 at 08:08:41PM +0300, Boaz Harrosh wrote: > On 07/13/2014 02:50 PM, Christoph Hellwig wrote: > > pramod.gurav.etc@xxxxxxxxx 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 <hch@xxxxxx> > > > > Al, can you pick this up? It's the only warnings in many of my usual > > kernel builds at the moment. > > > <> > > Paul Bolle <pebolle@xxxxxxxxxx> 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. Actually, that was me. > The minimal fix must use uninitialized_var() in this case. See patch below I didn't know about uninitialized_var() when I wrote the patch. As the comment for it states: /* * A trick to suppress uninitialized variable warning without generating * any code */ So, > But I think the proper fix Is the one Paul Bolle <pebolle@xxxxxxxxxx> sent (above) > > > ---- > From: Boaz Harrosh <boaz@xxxxxxxxxxxxx> > 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 <boaz@xxxxxxxxxxxxx> Acked-by: Jason Cooper <jason@xxxxxxxxxxxxxx> thx, Jason. > --- > 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-fsdevel" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html