summaryrefslogtreecommitdiffstats
path: root/fs/cifs/netmisc.c
diff options
context:
space:
mode:
authorDmitry Torokhov <dmitry.torokhov@gmail.com>2014-10-11 11:41:19 -0700
committerDmitry Torokhov <dmitry.torokhov@gmail.com>2014-10-11 11:41:19 -0700
commit4af6600fd793023c01634cca5abfe4a2b707788f (patch)
tree9e3a830d7782512b492011932ddd789d13a900c4 /fs/cifs/netmisc.c
parent447a8b858e4bda41c394b1bc7fdbc9dc0bdf44f6 (diff)
parent68da166491655bc54051bf04c78ce648e2e33508 (diff)
downloadop-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.c20
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;
}
OpenPOWER on IntegriCloud