diff options
Diffstat (limited to 'net/sunrpc/auth_gss/auth_gss.c')
| -rw-r--r-- | net/sunrpc/auth_gss/auth_gss.c | 17 | 
1 files changed, 13 insertions, 4 deletions
diff --git a/net/sunrpc/auth_gss/auth_gss.c b/net/sunrpc/auth_gss/auth_gss.c index 909dc0c31aa..6e5c824b040 100644 --- a/net/sunrpc/auth_gss/auth_gss.c +++ b/net/sunrpc/auth_gss/auth_gss.c @@ -192,17 +192,23 @@ gss_fill_context(const void *p, const void *end, struct gss_cl_ctx *ctx, struct  	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; @@ -237,9 +243,12 @@ gss_fill_context(const void *p, const void *end, struct gss_cl_ctx *ctx, struct  		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;  }  |