ocfs2: use time64_t to represent orphan scan times
authorDeepa Dinamani <deepa.kernel@gmail.com>
Tue, 13 Dec 2016 00:41:23 +0000 (16:41 -0800)
committerLinus Torvalds <torvalds@linux-foundation.org>
Tue, 13 Dec 2016 02:55:06 +0000 (18:55 -0800)
struct timespec is not y2038 safe.  Use time64_t which is y2038 safe to
represent orphan scan times.  time64_t is sufficient here as only the
seconds delta times are relevant.

Also use appropriate time functions that return time in time64_t format.
Time functions now return monotonic time instead of real time as only
delta scan times are relevant and these values are not persistent across
reboots.

The format string for the debug print is still using long as this is
only the time elapsed since the last scan and long is sufficient to
represent this value.

Link: http://lkml.kernel.org/r/1475365138-20567-1-git-send-email-deepa.kernel@gmail.com
Signed-off-by: Deepa Dinamani <deepa.kernel@gmail.com>
Reviewed-by: Arnd Bergmann <arnd@arndb.de>
Cc: Mark Fasheh <mfasheh@versity.com>
Cc: Joel Becker <jlbec@evilplan.org>
Cc: Junxiao Bi <junxiao.bi@oracle.com>
Cc: Joseph Qi <jiangqi903@gmail.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
fs/ocfs2/journal.c
fs/ocfs2/ocfs2.h
fs/ocfs2/super.c

index a244f14c6b87737ca75c1d1c34dcf4e80ad0de40..d5e5fa7f07436f4be241d9fc1746b34dbaf48a64 100644 (file)
@@ -1947,7 +1947,7 @@ static void ocfs2_queue_orphan_scan(struct ocfs2_super *osb)
         */
        seqno++;
        os->os_count++;
-       os->os_scantime = CURRENT_TIME;
+       os->os_scantime = ktime_get_seconds();
 unlock:
        ocfs2_orphan_scan_unlock(osb, seqno);
 out:
@@ -2004,7 +2004,7 @@ void ocfs2_orphan_scan_start(struct ocfs2_super *osb)
        struct ocfs2_orphan_scan *os;
 
        os = &osb->osb_orphan_scan;
-       os->os_scantime = CURRENT_TIME;
+       os->os_scantime = ktime_get_seconds();
        if (ocfs2_is_hard_readonly(osb) || ocfs2_mount_local(osb))
                atomic_set(&os->os_state, ORPHAN_SCAN_INACTIVE);
        else {
index e63af7ddfe688f85516fd9f64d3600152b118e64..7e5958b0be6b1c76a8d684dda5996792f5eeaadb 100644 (file)
@@ -224,7 +224,7 @@ struct ocfs2_orphan_scan {
        struct ocfs2_super      *os_osb;
        struct ocfs2_lock_res   os_lockres;     /* lock to synchronize scans */
        struct delayed_work     os_orphan_scan_work;
-       struct timespec         os_scantime;  /* time this node ran the scan */
+       time64_t                os_scantime;  /* time this node ran the scan */
        u32                     os_count;      /* tracks node specific scans */
        u32                     os_seqno;       /* tracks cluster wide scans */
        atomic_t                os_state;              /* ACTIVE or INACTIVE */
index f56fe39fab04010174c6b300b32f69c52c6ac69c..c894d945b084d71d7672f588d561acccf143be43 100644 (file)
@@ -337,7 +337,7 @@ static int ocfs2_osb_dump(struct ocfs2_super *osb, char *buf, int len)
                out += snprintf(buf + out, len - out, "Disabled\n");
        else
                out += snprintf(buf + out, len - out, "%lu seconds ago\n",
-                               (get_seconds() - os->os_scantime.tv_sec));
+                               (unsigned long)(ktime_get_seconds() - os->os_scantime));
 
        out += snprintf(buf + out, len - out, "%10s => %3s  %10s\n",
                        "Slots", "Num", "RecoGen");