mirror of
https://github.com/genesi/linux-legacy.git
synced 2026-09-23 07:04:16 +00:00
ext4: Fix time encoding with extra epoch bits
(cherry picked from commit c1fccc0696bcaff6008c11865091f5ec4b0937ab) "Looking at ext4.h, I think the setting of extra time fields forgets to mask the epoch bits so the epoch part overwrites nsec part. The second change is only for coherency (2 -> EXT4_EPOCH_BITS)." Thanks to Damien Guibouret for pointing out this problem. Signed-off-by: "Theodore Ts'o" <tytso@mit.edu> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
This commit is contained in:
committed by
Greg Kroah-Hartman
parent
e39f192052
commit
28c72b7fbc
@@ -522,8 +522,8 @@ struct move_extent {
|
||||
static inline __le32 ext4_encode_extra_time(struct timespec *time)
|
||||
{
|
||||
return cpu_to_le32((sizeof(time->tv_sec) > 4 ?
|
||||
time->tv_sec >> 32 : 0) |
|
||||
((time->tv_nsec << 2) & EXT4_NSEC_MASK));
|
||||
(time->tv_sec >> 32) & EXT4_EPOCH_MASK : 0) |
|
||||
((time->tv_nsec << EXT4_EPOCH_BITS) & EXT4_NSEC_MASK));
|
||||
}
|
||||
|
||||
static inline void ext4_decode_extra_time(struct timespec *time, __le32 extra)
|
||||
@@ -531,7 +531,7 @@ static inline void ext4_decode_extra_time(struct timespec *time, __le32 extra)
|
||||
if (sizeof(time->tv_sec) > 4)
|
||||
time->tv_sec |= (__u64)(le32_to_cpu(extra) & EXT4_EPOCH_MASK)
|
||||
<< 32;
|
||||
time->tv_nsec = (le32_to_cpu(extra) & EXT4_NSEC_MASK) >> 2;
|
||||
time->tv_nsec = (le32_to_cpu(extra) & EXT4_NSEC_MASK) >> EXT4_EPOCH_BITS;
|
||||
}
|
||||
|
||||
#define EXT4_INODE_SET_XTIME(xtime, inode, raw_inode) \
|
||||
|
||||
Reference in New Issue
Block a user