bug-idutils
[Top][All Lists]
Advanced

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

[bug-idutils] bug#29092: Bug related to 64-bit inodes


From: Curt McDowell
Subject: [bug-idutils] bug#29092: Bug related to 64-bit inodes
Date: Tue, 31 Oct 2017 12:03:57 -0700

Hi,

I'm running idutils 4.6 on Ubuntu 14.04 to index a large source base that is on an NFS-mounted filesystem that uses 64-bit inodes. mkid incorrectly issues many warnings such as the following:

/home/csm/src/idutils-4.6/src/mkid: warning: `/df-csm/ir-csm7/platform/dot/ir/component/si5338/si5338.py' and `/df-csm/ir-csm7/hardware/perf/CTRL_systemC/src/demux.hpp' are the same file, but yield different scans!

It turns out these inodes are equal in the lower 32 bits, but are not equal.

% ls -li /df-csm/ir-csm7/platform/dot/ir/component/si5338/si5338.py /df-csm/ir-csm7/hardware/perf/CTRL_systemC/src/demux.hpp
33776997256654722 -rwxr-xr-x 1 csm staff  3290 May 22 22:03 /df-csm/ir-csm7/hardware/perf/CTRL_systemC/src/demux.hpp
63050394834562946 -rw-r--r-- 1 csm staff 28973 May 22 22:03 /df-csm/ir-csm7/platform/dot/ir/component/si5338/si5338.py

The inode numbers in hex are 780000030FEF82 and E00000030FEF82, respectively.

I believe the bug is that the inode hash functions should account for the size of the di_ino field in case it is 8 bytes wide, rather than assuming they are always 4 bytes:

/****************************************************************************/
/* Hash stuff for `struct dev_ino'.  */

static unsigned long
dev_ino_hash_1 (void const *key)
{
  unsigned long result = 0;
  INTEGER_HASH_1 (((struct dev_ino const *) key)->di_dev, result);
  INTEGER_HASH_1 (((struct dev_ino const *) key)->di_ino, result);
  return result;
}

static unsigned long
dev_ino_hash_2 (void const *key)
{
  unsigned long result = 0;
  INTEGER_HASH_2 (((struct dev_ino const *) key)->di_dev, result);
  INTEGER_HASH_2 (((struct dev_ino const *) key)->di_ino, result);
  return result;
}

As an unrelated issue, in order to get idutils 4.6 to compile on Ubuntu 14.0.4 I had to edit lib/stdio.h and change "#if 1" to "#if 0" for the section that deals with the "gets" function (libc 2.19-0ubuntu6.13).
 
Regards,

--
Curt McDowell / Pure Storage / FlashBlade

reply via email to

[Prev in Thread] Current Thread [Next in Thread]