| From: |
| David Howells <dhowells@redhat.com> |
| To: |
| torvalds@osdl.org, akpm@osdl.org |
| Subject: |
| [PATCH 0/4] Use 64-bit inode numbers internally in the kernel |
| Date: |
| Mon, 14 Aug 2006 22:15:04 +0100 |
| Cc: |
| linux-kernel@vger.kernel.org, linux-fsdevel@vger.kernel.org#,
dhowells@redhat.com |
| Archive-link: |
| Article,
Thread
|
These patches make the kernel use 64-bit inode numbers internally, even on a
32-bit system. They are required because some filesystems have intrinsic
64-bit inode numbers: NFS and XFS for example. The 64-bit inode numbers are
then propagated to userspace automatically where the arch supports it.
Problems have been seen with userspace (eg: ld.so) using the 64-bit inode
number returned by stat64() or getdents64() to differentiate files, and failing
because the 64-bit inode number space was compressed to 32-bits, and so
overlaps occur.
There are four patches:
(1) Supply __udivdi3() and __umoddi3() so that the compiler can do 64-bit
division and modulus. __udivmoddi4() is also supplied as the other two
are wrappers around that.
(2) Make __kernel_ino_t consistently typedef'd to "unsigned long long" on all
archs.
Where ino_t has been used in userspace facing structures (such as struct
stat), it has been replaced with whatever ino_t used to be defined as on
that arch.
struct inode::i_ino and struct kstat::ino are changed to ino_t type.
(3) Fix print format warnings in general code due to the change in type of
i_ino. These should now all carry an "ll" modifier.
(4) As for (3), but fix the CacheFiles code.
David