Thread (15 messages) 15 messages, 8 authors, 2014-06-03

Re: [RFC 13/32] ext3: convert to struct inode_time

From: Arnd Bergmann <arnd@arndb.de>
Date: 2014-05-31 14:32:58
Also in: linux-arch, linux-fsdevel, lkml

On Saturday 31 May 2014 02:10:45 H. Peter Anvin wrote:
On 05/30/2014 01:01 PM, Arnd Bergmann wrote:
quoted
ext3fs uses unsigned 32-bit seconds for inode timestamps, which will work
for the next 92 years, but the VFS uses struct timespec for timestamps,
which is only good until 2038 on 32-bit CPUs.

This gets us one small step closer to lifting the VFS limit by using
struct inode_time in ext3. The on-disk format limit is lifted in ext4,
which will work until 2514.
This may be what the spec says, but when I experimented with this just
now it does seem that both ext2 and ext3 actually interpret timestamps
as *signed* 32-bit seconds.
Right, I can see that in ext3_iget() now:

        inode->i_atime.tv_sec = (signed)le32_to_cpu(raw_inode->i_atime);

I may have just looked at ext3_do_update_inode(), which uses this
unsigned conversion:

	raw_inode->i_ctime = cpu_to_le32(inode->i_ctime.tv_sec);

and didn't realize that this is only half of the story, and since it
converts from (potentially 64-bit) long to u32, it doesn't matter
whether that is signed or unsigned.

I may have to go through all of them again to see if I made the same
mistake in other file systems as well.

	Arnd
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help