forked from torvalds/linux
-
Notifications
You must be signed in to change notification settings - Fork 1
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
fs:affs:Replace time_t with time64_t
The affs code uses "time_t" and "get_seconds()". This will cause problems on 32-bit architectures in 2038 when time_t overflows. This patch replaces them with "time64_t" and "ktime_get_real_seconds()". This patch introduces expensive 64-bit divsion in "secs_to_datestamp()", considering this function is not called so often, the cost should be acceptable. Reviewed-by: Arnd Bergmann <[email protected]> Signed-off-by: DengChao <[email protected]> Signed-off-by: Al Viro <[email protected]>
- Loading branch information
DengChao
authored and
Al Viro
committed
Jan 9, 2016
1 parent
8f5fed1
commit db39c16
Showing
3 changed files
with
9 additions
and
8 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -8,6 +8,7 @@ | |
* Please send bug reports to: [email protected] | ||
*/ | ||
|
||
#include <linux/math64.h> | ||
#include "affs.h" | ||
|
||
/* | ||
|
@@ -366,22 +367,22 @@ affs_fix_checksum(struct super_block *sb, struct buffer_head *bh) | |
} | ||
|
||
void | ||
secs_to_datestamp(time_t secs, struct affs_date *ds) | ||
secs_to_datestamp(time64_t secs, struct affs_date *ds) | ||
{ | ||
u32 days; | ||
u32 minute; | ||
s32 rem; | ||
|
||
secs -= sys_tz.tz_minuteswest * 60 + ((8 * 365 + 2) * 24 * 60 * 60); | ||
if (secs < 0) | ||
secs = 0; | ||
days = secs / 86400; | ||
secs -= days * 86400; | ||
minute = secs / 60; | ||
secs -= minute * 60; | ||
days = div_s64_rem(secs, 86400, &rem); | ||
minute = rem / 60; | ||
rem -= minute * 60; | ||
|
||
ds->days = cpu_to_be32(days); | ||
ds->mins = cpu_to_be32(minute); | ||
ds->ticks = cpu_to_be32(secs * 50); | ||
ds->ticks = cpu_to_be32(rem * 50); | ||
} | ||
|
||
umode_t | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters