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>
This commit is contained in:
Родитель
be7e985804
Коммит
620038f6d2
|
@ -192,17 +192,23 @@ gss_fill_context(const void *p, const void *end, struct gss_cl_ctx *ctx, struct
|
||||||
const void *q;
|
const void *q;
|
||||||
unsigned int seclen;
|
unsigned int seclen;
|
||||||
unsigned int timeout;
|
unsigned int timeout;
|
||||||
|
unsigned long now = jiffies;
|
||||||
u32 window_size;
|
u32 window_size;
|
||||||
int ret;
|
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));
|
p = simple_get_bytes(p, end, &timeout, sizeof(timeout));
|
||||||
if (IS_ERR(p))
|
if (IS_ERR(p))
|
||||||
goto err;
|
goto err;
|
||||||
if (timeout == 0)
|
if (timeout == 0)
|
||||||
timeout = GSSD_MIN_TIMEOUT;
|
timeout = GSSD_MIN_TIMEOUT;
|
||||||
ctx->gc_expiry = jiffies + (unsigned long)timeout * HZ * 3 / 4;
|
ctx->gc_expiry = now + ((unsigned long)timeout * HZ);
|
||||||
/* Sequence number window. Determines the maximum number of simultaneous requests */
|
/* Sequence number window. Determines the maximum number of
|
||||||
|
* simultaneous requests
|
||||||
|
*/
|
||||||
p = simple_get_bytes(p, end, &window_size, sizeof(window_size));
|
p = simple_get_bytes(p, end, &window_size, sizeof(window_size));
|
||||||
if (IS_ERR(p))
|
if (IS_ERR(p))
|
||||||
goto err;
|
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);
|
p = ERR_PTR(ret);
|
||||||
goto err;
|
goto err;
|
||||||
}
|
}
|
||||||
|
dprintk("RPC: %s Success. gc_expiry %lu now %lu timeout %u\n",
|
||||||
|
__func__, ctx->gc_expiry, now, timeout);
|
||||||
return q;
|
return q;
|
||||||
err:
|
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;
|
return p;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Загрузка…
Ссылка в новой задаче