diff options
author | Dmitry Torokhov <dmitry.torokhov@gmail.com> | 2014-10-11 11:41:19 -0700 |
---|---|---|
committer | Dmitry Torokhov <dmitry.torokhov@gmail.com> | 2014-10-11 11:41:19 -0700 |
commit | 4af6600fd793023c01634cca5abfe4a2b707788f (patch) | |
tree | 9e3a830d7782512b492011932ddd789d13a900c4 /fs/cifs/netmisc.c | |
parent | 447a8b858e4bda41c394b1bc7fdbc9dc0bdf44f6 (diff) | |
parent | 68da166491655bc54051bf04c78ce648e2e33508 (diff) | |
download | op-kernel-dev-4af6600fd793023c01634cca5abfe4a2b707788f.zip op-kernel-dev-4af6600fd793023c01634cca5abfe4a2b707788f.tar.gz |
Merge branch 'next' into for-linus
Prepare second round of input updates for 3.18.
Diffstat (limited to 'fs/cifs/netmisc.c')
-rw-r--r-- | fs/cifs/netmisc.c | 20 |
1 files changed, 16 insertions, 4 deletions
diff --git a/fs/cifs/netmisc.c b/fs/cifs/netmisc.c index 6834b9c..b333ff6 100644 --- a/fs/cifs/netmisc.c +++ b/fs/cifs/netmisc.c @@ -925,11 +925,23 @@ cifs_NTtimeToUnix(__le64 ntutc) /* BB what about the timezone? BB */ /* Subtract the NTFS time offset, then convert to 1s intervals. */ - u64 t; + s64 t = le64_to_cpu(ntutc) - NTFS_TIME_OFFSET; + + /* + * Unfortunately can not use normal 64 bit division on 32 bit arch, but + * the alternative, do_div, does not work with negative numbers so have + * to special case them + */ + if (t < 0) { + t = -t; + ts.tv_nsec = (long)(do_div(t, 10000000) * 100); + ts.tv_nsec = -ts.tv_nsec; + ts.tv_sec = -t; + } else { + ts.tv_nsec = (long)do_div(t, 10000000) * 100; + ts.tv_sec = t; + } - t = le64_to_cpu(ntutc) - NTFS_TIME_OFFSET; - ts.tv_nsec = do_div(t, 10000000) * 100; - ts.tv_sec = t; return ts; } |