From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S941337AbcJXQWz (ORCPT ); Mon, 24 Oct 2016 12:22:55 -0400 Received: from mail-wm0-f66.google.com ([74.125.82.66]:36398 "EHLO mail-wm0-f66.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S965407AbcJXQWr (ORCPT ); Mon, 24 Oct 2016 12:22:47 -0400 Date: Mon, 24 Oct 2016 18:22:44 +0200 From: Michal Hocko To: Arnd Bergmann Cc: Hugh Dickins , Andrew Morton , Al Viro , "Kirill A. Shutemov" , Andreas Gruenbacher , Vlastimil Babka , linux-mm@kvack.org, linux-kernel@vger.kernel.org Subject: Re: [PATCH] shmem: avoid maybe-uninitialized warning Message-ID: <20161024162243.GA13148@dhcp22.suse.cz> References: <20161024152511.2597880-1-arnd@arndb.de> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: <20161024152511.2597880-1-arnd@arndb.de> User-Agent: Mutt/1.6.0 (2016-04-01) Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Mon 24-10-16 17:25:03, Arnd Bergmann wrote: > After enabling -Wmaybe-uninitialized warnings, we get a false-postive > warning for shmem: > > mm/shmem.c: In function ‘shmem_getpage_gfp’: > include/linux/spinlock.h:332:21: error: ‘info’ may be used uninitialized in this function [-Werror=maybe-uninitialized] Is this really a false positive? If we goto clear and then if (sgp <= SGP_CACHE && ((loff_t)index << PAGE_SHIFT) >= i_size_read(inode)) { if (alloced) { we could really take a spinlock on an unitialized variable. But maybe there is something that prevents from that... Anyway the whole shmem_getpage_gfp is really hard to follow due to gotos and labels proliferation. > This can be easily avoided, since the correct 'info' pointer is known > at the time we first enter the function, so we can simply move the > initialization up. Moving it before the first label avoids the > warning. > > Signed-off-by: Arnd Bergmann Looks good to me. Acked-by: Michal Hocko > --- > mm/shmem.c | 3 +-- > 1 file changed, 1 insertion(+), 2 deletions(-) > > diff --git a/mm/shmem.c b/mm/shmem.c > index ad7813d73ea7..69e6777096a3 100644 > --- a/mm/shmem.c > +++ b/mm/shmem.c > @@ -1537,7 +1537,7 @@ static int shmem_getpage_gfp(struct inode *inode, pgoff_t index, > struct mm_struct *fault_mm, int *fault_type) > { > struct address_space *mapping = inode->i_mapping; > - struct shmem_inode_info *info; > + struct shmem_inode_info *info = SHMEM_I(inode); > struct shmem_sb_info *sbinfo; > struct mm_struct *charge_mm; > struct mem_cgroup *memcg; > @@ -1587,7 +1587,6 @@ static int shmem_getpage_gfp(struct inode *inode, pgoff_t index, > * Fast cache lookup did not find it: > * bring it back from swap or allocate. > */ > - info = SHMEM_I(inode); > sbinfo = SHMEM_SB(inode->i_sb); > charge_mm = fault_mm ? : current->mm; > > -- > 2.9.0 > -- Michal Hocko SUSE Labs