clp->cl_clientid.cl_boot,
                        clp->cl_clientid.cl_id);
        list_move_tail(&clp->cl_lru, &nn->client_lru);
-       clp->cl_time = get_seconds();
+       clp->cl_time = ktime_get_boottime_seconds();
 }
 
 static void put_client_renew_locked(struct nfs4_client *clp)
        cps = kzalloc(sizeof(struct nfs4_cpntf_state), GFP_KERNEL);
        if (!cps)
                return NULL;
-       cps->cpntf_time = get_seconds();
+       cps->cpntf_time = ktime_get_boottime_seconds();
        refcount_set(&cps->cp_stateid.sc_count, 1);
        if (!nfs4_init_cp_state(nn, &cps->cp_stateid, NFS4_COPYNOTIFY_STID))
                goto out_free;
        gen_clid(clp, nn);
        kref_init(&clp->cl_nfsdfs.cl_ref);
        nfsd4_init_cb(&clp->cl_cb_null, clp, NULL, NFSPROC4_CLNT_CB_NULL);
-       clp->cl_time = get_seconds();
+       clp->cl_time = ktime_get_boottime_seconds();
        clear_bit(0, &clp->cl_cb_slot_busy);
        copy_verf(clp, verf);
        memcpy(&clp->cl_addr, sa, sizeof(struct sockaddr_storage));
        last = oo->oo_last_closed_stid;
        oo->oo_last_closed_stid = s;
        list_move_tail(&oo->oo_close_lru, &nn->close_lru);
-       oo->oo_time = get_seconds();
+       oo->oo_time = ktime_get_boottime_seconds();
        spin_unlock(&nn->client_lock);
        if (last)
                nfs4_put_stid(&last->st_stid);
         */
        spin_lock(&state_lock);
        if (dp->dl_time == 0) {
-               dp->dl_time = get_seconds();
+               dp->dl_time = ktime_get_boottime_seconds();
                list_add_tail(&dp->dl_recall_lru, &nn->del_recall_lru);
        }
        spin_unlock(&state_lock);
  */
 static bool clients_still_reclaiming(struct nfsd_net *nn)
 {
-       unsigned long now = (unsigned long) ktime_get_real_seconds();
-       unsigned long double_grace_period_end = (unsigned long)nn->boot_time +
-                                          2 * (unsigned long)nn->nfsd4_lease;
+       time64_t double_grace_period_end = nn->boot_time +
+                                          2 * nn->nfsd4_lease;
 
        if (nn->track_reclaim_completes &&
                        atomic_read(&nn->nr_reclaim_complete) ==
         * If we've given them *two* lease times to reclaim, and they're
         * still not done, give up:
         */
-       if (time_after(now, double_grace_period_end))
+       if (ktime_get_boottime_seconds() > double_grace_period_end)
                return false;
        return true;
 }
 
-static time_t
+static time64_t
 nfs4_laundromat(struct nfsd_net *nn)
 {
        struct nfs4_client *clp;
        struct nfs4_ol_stateid *stp;
        struct nfsd4_blocked_lock *nbl;
        struct list_head *pos, *next, reaplist;
-       time_t cutoff = get_seconds() - nn->nfsd4_lease;
-       time_t t, new_timeo = nn->nfsd4_lease;
+       time64_t cutoff = ktime_get_boottime_seconds() - nn->nfsd4_lease;
+       time64_t t, new_timeo = nn->nfsd4_lease;
        struct nfs4_cpntf_state *cps;
        copy_stateid_t *cps_t;
        int i;
        idr_for_each_entry(&nn->s2s_cp_stateids, cps_t, i) {
                cps = container_of(cps_t, struct nfs4_cpntf_state, cp_stateid);
                if (cps->cp_stateid.sc_type == NFS4_COPYNOTIFY_STID &&
-                               !time_after((unsigned long)cps->cpntf_time,
-                               (unsigned long)cutoff))
+                               cps->cpntf_time > cutoff)
                        _free_cpntf_state_locked(nn, cps);
        }
        spin_unlock(&nn->s2s_cp_lock);
        spin_lock(&nn->client_lock);
        list_for_each_safe(pos, next, &nn->client_lru) {
                clp = list_entry(pos, struct nfs4_client, cl_lru);
-               if (time_after((unsigned long)clp->cl_time, (unsigned long)cutoff)) {
+               if (clp->cl_time > cutoff) {
                        t = clp->cl_time - cutoff;
                        new_timeo = min(new_timeo, t);
                        break;
        spin_lock(&state_lock);
        list_for_each_safe(pos, next, &nn->del_recall_lru) {
                dp = list_entry (pos, struct nfs4_delegation, dl_recall_lru);
-               if (time_after((unsigned long)dp->dl_time, (unsigned long)cutoff)) {
+               if (dp->dl_time > cutoff) {
                        t = dp->dl_time - cutoff;
                        new_timeo = min(new_timeo, t);
                        break;
        while (!list_empty(&nn->close_lru)) {
                oo = list_first_entry(&nn->close_lru, struct nfs4_openowner,
                                        oo_close_lru);
-               if (time_after((unsigned long)oo->oo_time,
-                              (unsigned long)cutoff)) {
+               if (oo->oo_time > cutoff) {
                        t = oo->oo_time - cutoff;
                        new_timeo = min(new_timeo, t);
                        break;
        while (!list_empty(&nn->blocked_locks_lru)) {
                nbl = list_first_entry(&nn->blocked_locks_lru,
                                        struct nfsd4_blocked_lock, nbl_lru);
-               if (time_after((unsigned long)nbl->nbl_time,
-                              (unsigned long)cutoff)) {
+               if (nbl->nbl_time > cutoff) {
                        t = nbl->nbl_time - cutoff;
                        new_timeo = min(new_timeo, t);
                        break;
                free_blocked_lock(nbl);
        }
 out:
-       new_timeo = max_t(time_t, new_timeo, NFSD_LAUNDROMAT_MINTIMEOUT);
+       new_timeo = max_t(time64_t, new_timeo, NFSD_LAUNDROMAT_MINTIMEOUT);
        return new_timeo;
 }
 
 static void
 laundromat_main(struct work_struct *laundry)
 {
-       time_t t;
+       time64_t t;
        struct delayed_work *dwork = to_delayed_work(laundry);
        struct nfsd_net *nn = container_of(dwork, struct nfsd_net,
                                           laundromat_work);
 
        t = nfs4_laundromat(nn);
-       dprintk("NFSD: laundromat_main - sleeping for %ld seconds\n", t);
+       dprintk("NFSD: laundromat_main - sleeping for %lld seconds\n", t);
        queue_delayed_work(laundry_wq, &nn->laundromat_work, t*HZ);
 }
 
        if (status)
                return status;
 
-       cps->cpntf_time = get_seconds();
+       cps->cpntf_time = ktime_get_boottime_seconds();
        memset(&cstate, 0, sizeof(cstate));
        status = lookup_clientid(&cps->cp_p_clid, &cstate, nn, true);
        if (status)
        }
 
        if (fl_flags & FL_SLEEP) {
-               nbl->nbl_time = get_seconds();
+               nbl->nbl_time = ktime_get_boottime_seconds();
                spin_lock(&nn->blocked_locks_lock);
                list_add_tail(&nbl->nbl_list, &lock_sop->lo_blocked);
                list_add_tail(&nbl->nbl_lru, &nn->blocked_locks_lru);
        nfsd4_client_tracking_init(net);
        if (nn->track_reclaim_completes && nn->reclaim_str_hashtbl_size == 0)
                goto skip_grace;
-       printk(KERN_INFO "NFSD: starting %ld-second grace period (net %x)\n",
+       printk(KERN_INFO "NFSD: starting %lld-second grace period (net %x)\n",
               nn->nfsd4_grace, net->ns.inum);
        queue_delayed_work(laundry_wq, &nn->laundromat_work, nn->nfsd4_grace * HZ);
        return 0;