[viro-vfs:work.dcache 6/6] fs/libfs.c:1819:17: warning: comparison of distinct pointer types lacks a cast

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

 



tree:   https://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs.git work.dcache
head:   08141fdc186755910b5bffc21a4325e2b673629f
commit: 7cd7d43774879a6d7fc35662fb788ed8210dd09a [6/6] generic_ci_d_compare(): use shortname_storage
config: csky-randconfig-002-20241223 (https://download.01.org/0day-ci/archive/20241223/202412232059.54ry0khI-lkp@xxxxxxxxx/config)
compiler: csky-linux-gcc (GCC) 14.2.0
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20241223/202412232059.54ry0khI-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/202412232059.54ry0khI-lkp@xxxxxxxxx/

All warnings (new ones prefixed by >>):

   fs/libfs.c: In function 'generic_ci_d_compare':
>> fs/libfs.c:1819:17: warning: comparison of distinct pointer types lacks a cast [-Wcompare-distinct-pointer-types]
    1819 |         if (str == dentry->d_shortname.string) {
         |                 ^~


vim +1819 fs/libfs.c

  1776	
  1777	#if IS_ENABLED(CONFIG_UNICODE)
  1778	/**
  1779	 * generic_ci_d_compare - generic d_compare implementation for casefolding filesystems
  1780	 * @dentry:	dentry whose name we are checking against
  1781	 * @len:	len of name of dentry
  1782	 * @str:	str pointer to name of dentry
  1783	 * @name:	Name to compare against
  1784	 *
  1785	 * Return: 0 if names match, 1 if mismatch, or -ERRNO
  1786	 */
  1787	int generic_ci_d_compare(const struct dentry *dentry, unsigned int len,
  1788				 const char *str, const struct qstr *name)
  1789	{
  1790		const struct dentry *parent;
  1791		const struct inode *dir;
  1792		union shortname_store strbuf;
  1793		struct qstr qstr;
  1794	
  1795		/*
  1796		 * Attempt a case-sensitive match first. It is cheaper and
  1797		 * should cover most lookups, including all the sane
  1798		 * applications that expect a case-sensitive filesystem.
  1799		 *
  1800		 * This comparison is safe under RCU because the caller
  1801		 * guarantees the consistency between str and len. See
  1802		 * __d_lookup_rcu_op_compare() for details.
  1803		 */
  1804		if (len == name->len && !memcmp(str, name->name, len))
  1805			return 0;
  1806	
  1807		parent = READ_ONCE(dentry->d_parent);
  1808		dir = READ_ONCE(parent->d_inode);
  1809		if (!dir || !IS_CASEFOLDED(dir))
  1810			return 1;
  1811	
  1812		/*
  1813		 * If the dentry name is stored in-line, then it may be concurrently
  1814		 * modified by a rename.  If this happens, the VFS will eventually retry
  1815		 * the lookup, so it doesn't matter what ->d_compare() returns.
  1816		 * However, it's unsafe to call utf8_strncasecmp() with an unstable
  1817		 * string.  Therefore, we have to copy the name into a temporary buffer.
  1818		 */
> 1819		if (str == dentry->d_shortname.string) {
  1820			strbuf = dentry->d_shortname;
  1821			strbuf.string[len] = 0;
  1822			str = strbuf.string;
  1823			/* prevent compiler from optimizing out the temporary buffer */
  1824			barrier();
  1825		}
  1826		qstr.len = len;
  1827		qstr.name = str;
  1828	
  1829		return utf8_strncasecmp(dentry->d_sb->s_encoding, name, &qstr);
  1830	}
  1831	EXPORT_SYMBOL(generic_ci_d_compare);
  1832	

-- 
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