Re: [PATCH] fuse: check attributes staleness on fuse_iget()

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi Zhang,

kernel test robot noticed the following build warnings:

[auto build test WARNING on v6.12-rc7]
[also build test WARNING on linus/master]
[cannot apply to mszeredi-fuse/for-next next-20241115]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch#_base_tree_information]

url:    https://github.com/intel-lab-lkp/linux/commits/Zhang-Tianci/fuse-check-attributes-staleness-on-fuse_iget/20241114-151838
base:   v6.12-rc7
patch link:    https://lore.kernel.org/r/20241114070905.48901-1-zhangtianci.1997%40bytedance.com
patch subject: [PATCH] fuse: check attributes staleness on fuse_iget()
config: x86_64-kexec (https://download.01.org/0day-ci/archive/20241117/202411170856.SfrPdEy1-lkp@xxxxxxxxx/config)
compiler: clang version 19.1.3 (https://github.com/llvm/llvm-project ab51eccf88f5321e7c60591c5546b254b6afab99)
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20241117/202411170856.SfrPdEy1-lkp@xxxxxxxxx/reproduce)

If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@xxxxxxxxx>
| Closes: https://lore.kernel.org/oe-kbuild-all/202411170856.SfrPdEy1-lkp@xxxxxxxxx/

All warnings (new ones prefixed by >>):

   In file included from fs/fuse/inode.c:9:
   In file included from fs/fuse/fuse_i.h:22:
   In file included from include/linux/mm.h:2213:
   include/linux/vmstat.h:504:43: warning: arithmetic between different enumeration types ('enum zone_stat_item' and 'enum numa_stat_item') [-Wenum-enum-conversion]
     504 |         return vmstat_text[NR_VM_ZONE_STAT_ITEMS +
         |                            ~~~~~~~~~~~~~~~~~~~~~ ^
     505 |                            item];
         |                            ~~~~
   include/linux/vmstat.h:511:43: warning: arithmetic between different enumeration types ('enum zone_stat_item' and 'enum numa_stat_item') [-Wenum-enum-conversion]
     511 |         return vmstat_text[NR_VM_ZONE_STAT_ITEMS +
         |                            ~~~~~~~~~~~~~~~~~~~~~ ^
     512 |                            NR_VM_NUMA_EVENT_ITEMS +
         |                            ~~~~~~~~~~~~~~~~~~~~~~
   include/linux/vmstat.h:518:36: warning: arithmetic between different enumeration types ('enum node_stat_item' and 'enum lru_list') [-Wenum-enum-conversion]
     518 |         return node_stat_name(NR_LRU_BASE + lru) + 3; // skip "nr_"
         |                               ~~~~~~~~~~~ ^ ~~~
   include/linux/vmstat.h:524:43: warning: arithmetic between different enumeration types ('enum zone_stat_item' and 'enum numa_stat_item') [-Wenum-enum-conversion]
     524 |         return vmstat_text[NR_VM_ZONE_STAT_ITEMS +
         |                            ~~~~~~~~~~~~~~~~~~~~~ ^
     525 |                            NR_VM_NUMA_EVENT_ITEMS +
         |                            ~~~~~~~~~~~~~~~~~~~~~~
>> fs/fuse/inode.c:456:7: warning: variable 'fi' is used uninitialized whenever 'if' condition is false [-Wsometimes-uninitialized]
     456 |                 if (!fi->submount_lookup) {
         |                     ^~~~~~~~~~~~~~~~~~~~
   fs/fuse/inode.c:493:13: note: uninitialized use occurs here
     493 |         spin_lock(&fi->lock);
         |                    ^~
   fs/fuse/inode.c:456:3: note: remove the 'if' if its condition is always true
     456 |                 if (!fi->submount_lookup) {
         |                 ^~~~~~~~~~~~~~~~~~~~~~~~~
   fs/fuse/inode.c:434:23: note: initialize the variable 'fi' to silence this warning
     434 |         struct fuse_inode *fi;
         |                              ^
         |                               = NULL
   5 warnings generated.


vim +456 fs/fuse/inode.c

d8a5ba45457e4a Miklos Szeredi    2005-09-09  427  
b48badf013018e Miklos Szeredi    2008-04-30  428  struct inode *fuse_iget(struct super_block *sb, u64 nodeid,
1fb69e7817296d Miklos Szeredi    2007-10-18  429  			int generation, struct fuse_attr *attr,
243f2d46af8e04 Zhang Tianci      2024-11-14  430  			u64 attr_valid, u64 attr_version,
243f2d46af8e04 Zhang Tianci      2024-11-14  431  			u64 evict_ctr)
d8a5ba45457e4a Miklos Szeredi    2005-09-09  432  {
d8a5ba45457e4a Miklos Szeredi    2005-09-09  433  	struct inode *inode;
9e6268db496a25 Miklos Szeredi    2005-09-09  434  	struct fuse_inode *fi;
d8a5ba45457e4a Miklos Szeredi    2005-09-09  435  	struct fuse_conn *fc = get_fuse_conn_super(sb);
d8a5ba45457e4a Miklos Szeredi    2005-09-09  436  
bf109c64040f5b Max Reitz         2020-04-21  437  	/*
bf109c64040f5b Max Reitz         2020-04-21  438  	 * Auto mount points get their node id from the submount root, which is
bf109c64040f5b Max Reitz         2020-04-21  439  	 * not a unique identifier within this filesystem.
bf109c64040f5b Max Reitz         2020-04-21  440  	 *
bf109c64040f5b Max Reitz         2020-04-21  441  	 * To avoid conflicts, do not place submount points into the inode hash
bf109c64040f5b Max Reitz         2020-04-21  442  	 * table.
bf109c64040f5b Max Reitz         2020-04-21  443  	 */
bf109c64040f5b Max Reitz         2020-04-21  444  	if (fc->auto_submounts && (attr->flags & FUSE_ATTR_SUBMOUNT) &&
bf109c64040f5b Max Reitz         2020-04-21  445  	    S_ISDIR(attr->mode)) {
c4d361f66ac91d Krister Johansen  2023-11-03  446  		struct fuse_inode *fi;
c4d361f66ac91d Krister Johansen  2023-11-03  447  
bf109c64040f5b Max Reitz         2020-04-21  448  		inode = new_inode(sb);
bf109c64040f5b Max Reitz         2020-04-21  449  		if (!inode)
bf109c64040f5b Max Reitz         2020-04-21  450  			return NULL;
bf109c64040f5b Max Reitz         2020-04-21  451  
facd61053cff10 Christian Brauner 2023-01-20  452  		fuse_init_inode(inode, attr, fc);
c4d361f66ac91d Krister Johansen  2023-11-03  453  		fi = get_fuse_inode(inode);
c4d361f66ac91d Krister Johansen  2023-11-03  454  		fi->nodeid = nodeid;
c4d361f66ac91d Krister Johansen  2023-11-03  455  		fi->submount_lookup = fuse_alloc_submount_lookup();
c4d361f66ac91d Krister Johansen  2023-11-03 @456  		if (!fi->submount_lookup) {
c4d361f66ac91d Krister Johansen  2023-11-03  457  			iput(inode);
c4d361f66ac91d Krister Johansen  2023-11-03  458  			return NULL;
c4d361f66ac91d Krister Johansen  2023-11-03  459  		}
c4d361f66ac91d Krister Johansen  2023-11-03  460  		/* Sets nlookup = 1 on fi->submount_lookup->nlookup */
c4d361f66ac91d Krister Johansen  2023-11-03  461  		fuse_init_submount_lookup(fi->submount_lookup, nodeid);
bf109c64040f5b Max Reitz         2020-04-21  462  		inode->i_flags |= S_AUTOMOUNT;
bf109c64040f5b Max Reitz         2020-04-21  463  		goto done;
bf109c64040f5b Max Reitz         2020-04-21  464  	}
bf109c64040f5b Max Reitz         2020-04-21  465  
d8a5ba45457e4a Miklos Szeredi    2005-09-09  466  retry:
d8a5ba45457e4a Miklos Szeredi    2005-09-09  467  	inode = iget5_locked(sb, nodeid, fuse_inode_eq, fuse_inode_set, &nodeid);
d8a5ba45457e4a Miklos Szeredi    2005-09-09  468  	if (!inode)
d8a5ba45457e4a Miklos Szeredi    2005-09-09  469  		return NULL;
d8a5ba45457e4a Miklos Szeredi    2005-09-09  470  
d8a5ba45457e4a Miklos Szeredi    2005-09-09  471  	if ((inode->i_state & I_NEW)) {
b0aa7606521790 Maxim Patlasov    2013-12-26  472  		inode->i_flags |= S_NOATIME;
d31433c8b06d44 Maxim Patlasov    2014-04-28  473  		if (!fc->writeback_cache || !S_ISREG(attr->mode))
b0aa7606521790 Maxim Patlasov    2013-12-26  474  			inode->i_flags |= S_NOCMTIME;
d8a5ba45457e4a Miklos Szeredi    2005-09-09  475  		inode->i_generation = generation;
facd61053cff10 Christian Brauner 2023-01-20  476  		fuse_init_inode(inode, attr, fc);
d8a5ba45457e4a Miklos Szeredi    2005-09-09  477  		unlock_new_inode(inode);
15db16837a35d8 Amir Goldstein    2021-06-21  478  	} else if (fuse_stale_inode(inode, generation, attr)) {
15db16837a35d8 Amir Goldstein    2021-06-21  479  		/* nodeid was reused, any I/O on the old inode should fail */
5d069dbe8aaf2a Miklos Szeredi    2020-12-10  480  		fuse_make_bad(inode);
b1fe686a765e6c Miklos Szeredi    2024-02-28  481  		if (inode != d_inode(sb->s_root)) {
b1fe686a765e6c Miklos Szeredi    2024-02-28  482  			remove_inode_hash(inode);
d8a5ba45457e4a Miklos Szeredi    2005-09-09  483  			iput(inode);
d8a5ba45457e4a Miklos Szeredi    2005-09-09  484  			goto retry;
d8a5ba45457e4a Miklos Szeredi    2005-09-09  485  		}
b1fe686a765e6c Miklos Szeredi    2024-02-28  486  	}
9e6268db496a25 Miklos Szeredi    2005-09-09  487  	fi = get_fuse_inode(inode);
c9d8f5f0692d59 Kirill Tkhai      2018-11-09  488  	spin_lock(&fi->lock);
9e6268db496a25 Miklos Szeredi    2005-09-09  489  	fi->nlookup++;
c9d8f5f0692d59 Kirill Tkhai      2018-11-09  490  	spin_unlock(&fi->lock);
c4d361f66ac91d Krister Johansen  2023-11-03  491  done:
972f4c46d0a1bb Miklos Szeredi    2023-08-10  492  	fuse_change_attributes(inode, attr, NULL, attr_valid, attr_version);
243f2d46af8e04 Zhang Tianci      2024-11-14  493  	spin_lock(&fi->lock);
243f2d46af8e04 Zhang Tianci      2024-11-14  494  	if (evict_ctr < fuse_get_evict_ctr(fc))
243f2d46af8e04 Zhang Tianci      2024-11-14  495  		fuse_invalidate_attr(inode);
243f2d46af8e04 Zhang Tianci      2024-11-14  496  	spin_unlock(&fi->lock);
1fb69e7817296d Miklos Szeredi    2007-10-18  497  
d8a5ba45457e4a Miklos Szeredi    2005-09-09  498  	return inode;
d8a5ba45457e4a Miklos Szeredi    2005-09-09  499  }
d8a5ba45457e4a Miklos Szeredi    2005-09-09  500  

-- 
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki




[Index of Archives]     [Linux Ext4 Filesystem]     [Union Filesystem]     [Filesystem Testing]     [Ceph Users]     [Ecryptfs]     [NTFS 3]     [AutoFS]     [Kernel Newbies]     [Share Photos]     [Security]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux Cachefs]     [Reiser Filesystem]     [Linux RAID]     [NTFS 3]     [Samba]     [Device Mapper]     [CEPH Development]

  Powered by Linux