const void *q;
        unsigned int seclen;
        unsigned int timeout;
+       unsigned long now = jiffies;
        u32 window_size;
        int ret;
 
-       /* First unsigned int gives the lifetime (in seconds) of the cred */
+       /* First unsigned int gives the remaining lifetime in seconds of the
+        * credential - e.g. the remaining TGT lifetime for Kerberos or
+        * the -t value passed to GSSD.
+        */
        p = simple_get_bytes(p, end, &timeout, sizeof(timeout));
        if (IS_ERR(p))
                goto err;
        if (timeout == 0)
                timeout = GSSD_MIN_TIMEOUT;
-       ctx->gc_expiry = jiffies + (unsigned long)timeout * HZ * 3 / 4;
-       /* Sequence number window. Determines the maximum number of simultaneous requests */
+       ctx->gc_expiry = now + ((unsigned long)timeout * HZ);
+       /* Sequence number window. Determines the maximum number of
+        * simultaneous requests
+        */
        p = simple_get_bytes(p, end, &window_size, sizeof(window_size));
        if (IS_ERR(p))
                goto err;
                p = ERR_PTR(ret);
                goto err;
        }
+       dprintk("RPC:       %s Success. gc_expiry %lu now %lu timeout %u\n",
+               __func__, ctx->gc_expiry, now, timeout);
        return q;
 err:
-       dprintk("RPC:       %s returning %ld\n", __func__, -PTR_ERR(p));
+       dprintk("RPC:       %s returns %ld gc_expiry %lu now %lu timeout %u\n",
+               __func__, -PTR_ERR(p), ctx->gc_expiry, now, timeout);
        return p;
 }