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:
Andy Adamson 2012-11-27 10:34:20 -05:00 коммит произвёл Trond Myklebust
Родитель be7e985804
Коммит 620038f6d2
1 изменённых файлов: 13 добавлений и 4 удалений

Просмотреть файл

@ -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;
} }