GNU bug report logs - #29092
Bug related to 64-bit inodes

Previous Next

Package: idutils;

Reported by: Curt McDowell <csm <at> purestorage.com>

Date: Tue, 31 Oct 2017 19:20:02 UTC

Severity: normal

Done: Jim Meyering <jim <at> meyering.net>

Bug is archived. No further changes may be made.

Full log


View this message in rfc822 format

From: help-debbugs <at> gnu.org (GNU bug Tracking System)
To: Jim Meyering <jim <at> meyering.net>
Cc: tracker <at> debbugs.gnu.org
Subject: bug#29092: closed (Bug related to 64-bit inodes)
Date: Sun, 07 Jan 2018 01:04:02 +0000
[Message part 1 (text/plain, inline)]
Your message dated Sat, 6 Jan 2018 17:02:43 -0800
with message-id <CA+8g5KFLBkvVM55x0B0jL-N2fiwP=NAP36yeCDrtbH6EEjdd6w <at> mail.gmail.com>
and subject line Re: [bug-idutils] bug#29092: bug#29092: bug#29092: bug#29092: Bug related to 64-bit inodes
has caused the debbugs.gnu.org bug report #29092,
regarding Bug related to 64-bit inodes
to be marked as done.

(If you believe you have received this mail in error, please contact
help-debbugs <at> gnu.org.)


-- 
29092: http://debbugs.gnu.org/cgi/bugreport.cgi?bug=29092
GNU Bug Tracking System
Contact help-debbugs <at> gnu.org with problems
[Message part 2 (message/rfc822, inline)]
From: Curt McDowell <csm <at> purestorage.com>
To: bug-idutils <at> gnu.org
Subject: Bug related to 64-bit inodes
Date: Tue, 31 Oct 2017 12:03:57 -0700
[Message part 3 (text/plain, inline)]
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
csm <at> purestorage.com
[Message part 4 (text/html, inline)]
[Message part 5 (message/rfc822, inline)]
From: Jim Meyering <jim <at> meyering.net>
To: Curt McDowell <csm <at> purestorage.com>
Cc: 29092-done <at> debbugs.gnu.org
Subject: Re: [bug-idutils] bug#29092: bug#29092: bug#29092: bug#29092: Bug
 related to 64-bit inodes
Date: Sat, 6 Jan 2018 17:02:43 -0800
On Sat, Jan 6, 2018 at 4:56 PM, Jim Meyering <jim <at> meyering.net> wrote:
> On Fri, Jan 5, 2018 at 8:27 PM, Jim Meyering <jim <at> meyering.net> wrote:
>> On Mon, Dec 18, 2017 at 8:36 PM, Jim Meyering <jim <at> meyering.net> wrote:
>>> On Mon, Dec 18, 2017 at 3:31 PM, Curt McDowell <csm <at> purestorage.com> wrote:
>>>> Jim,
>>>>
>>>> Thanks for getting to this. I applied the patch and was surprised to see it
>>>> still has the same bug! There is another comparison function that needs
>>>> fixing. I verified that 64-bit inodes work properly with this additional
>>>> change:
>>>>
>>>> static int
>>>> dev_ino_hash_compare (void const *x, void const *y)
>>>> {
>>>>   int result;
>>>>   result = memcmp(&((struct dev_ino const *) x)->di_ino,
>>>>                   &((struct dev_ino const *) y)->di_ino, sizeof (ino_t));
>>>>   if (result)
>>>>     return result;
>>>>   result = memcmp(&((struct dev_ino const *) x)->di_dev,
>>>>                   &((struct dev_ino const *) y)->di_dev, sizeof (ino_t));
>>>>   return result;
>>>> }
>>>
>>> Thank you for the quick testing and patch.
>>>
>>> I've simplified that but left it in your name. However, since it's
>>> still in your name, yet modified, I'll wait for your ACK before
>>> pushing (check both author-name+email and wording of the commit log as
>>> well as the actual patch, since we treat master-pushed commits as
>>> immutable):
>>
>> Ping?
>
> Pushed, in spite of no reply.

Incidentally, I've just updated gnulib and copyright notices, too.
Marking this as "done".


This bug report was last modified 7 years and 219 days ago.

Previous Next


GNU bug tracking system
Copyright (C) 1999 Darren O. Benham, 1997,2003 nCipher Corporation Ltd, 1994-97 Ian Jackson.