diff options
author | Andy Adamson <andros@netapp.com> | 2012-11-27 10:34:20 -0500 |
---|---|---|
committer | Trond Myklebust <Trond.Myklebust@netapp.com> | 2012-12-12 15:35:59 -0500 |
commit | 620038f6d2304475dce800dc5c75fc335a19613a (patch) | |
tree | 8b506761978f52e80cda2877f4ae14aceabe69fc /net/sunrpc | |
parent | be7e985804c610fcdcee8730cf42718b8a4e1c41 (diff) |
SUNRPC set gss gc_expiry to full lifetime
Only use the default GSSD_MIN_TIMEOUT if the gss downcall timeout is zero.
Store the full lifetime in gc_expiry (not 3/4 of the lifetime) as subsequent
patches will use the gc_expiry to determine buffered WRITE behavior in the
face of expired or soon to be expired gss credentials.
Signed-off-by: Andy Adamson <andros@netapp.com>
Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
Diffstat (limited to 'net/sunrpc')
-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 909dc0c31aab..6e5c824b040b 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 | |||
192 | const void *q; | 192 | const void *q; |
193 | unsigned int seclen; | 193 | unsigned int seclen; |
194 | unsigned int timeout; | 194 | unsigned int timeout; |
195 | unsigned long now = jiffies; | ||
195 | u32 window_size; | 196 | u32 window_size; |
196 | int ret; | 197 | int ret; |
197 | 198 | ||
198 | /* First unsigned int gives the lifetime (in seconds) of the cred */ | 199 | /* First unsigned int gives the remaining lifetime in seconds of the |
200 | * credential - e.g. the remaining TGT lifetime for Kerberos or | ||
201 | * the -t value passed to GSSD. | ||
202 | */ | ||
199 | p = simple_get_bytes(p, end, &timeout, sizeof(timeout)); | 203 | p = simple_get_bytes(p, end, &timeout, sizeof(timeout)); |
200 | if (IS_ERR(p)) | 204 | if (IS_ERR(p)) |
201 | goto err; | 205 | goto err; |
202 | if (timeout == 0) | 206 | if (timeout == 0) |
203 | timeout = GSSD_MIN_TIMEOUT; | 207 | timeout = GSSD_MIN_TIMEOUT; |
204 | ctx->gc_expiry = jiffies + (unsigned long)timeout * HZ * 3 / 4; | 208 | ctx->gc_expiry = now + ((unsigned long)timeout * HZ); |
205 | /* Sequence number window. Determines the maximum number of simultaneous requests */ | 209 | /* Sequence number window. Determines the maximum number of |
210 | * simultaneous requests | ||
211 | */ | ||
206 | p = simple_get_bytes(p, end, &window_size, sizeof(window_size)); | 212 | p = simple_get_bytes(p, end, &window_size, sizeof(window_size)); |
207 | if (IS_ERR(p)) | 213 | if (IS_ERR(p)) |
208 | goto err; | 214 | goto err; |
@@ -237,9 +243,12 @@ gss_fill_context(const void *p, const void *end, struct gss_cl_ctx *ctx, struct | |||
237 | p = ERR_PTR(ret); | 243 | p = ERR_PTR(ret); |
238 | goto err; | 244 | goto err; |
239 | } | 245 | } |
246 | dprintk("RPC: %s Success. gc_expiry %lu now %lu timeout %u\n", | ||
247 | __func__, ctx->gc_expiry, now, timeout); | ||
240 | return q; | 248 | return q; |
241 | err: | 249 | err: |
242 | dprintk("RPC: %s returning %ld\n", __func__, -PTR_ERR(p)); | 250 | dprintk("RPC: %s returns %ld gc_expiry %lu now %lu timeout %u\n", |
251 | __func__, -PTR_ERR(p), ctx->gc_expiry, now, timeout); | ||
243 | return p; | 252 | return p; |
244 | } | 253 | } |
245 | 254 | ||