Whamcloud - gitweb
git://git.whamcloud.com
/
fs
/
lustre-release.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (parent:
2be9988
)
fix cred flags during client gss upcall; adjust timeout value.
author
ericm
<ericm>
Thu, 2 Jun 2005 05:58:14 +0000
(
05:58
+0000)
committer
ericm
<ericm>
Thu, 2 Jun 2005 05:58:14 +0000
(
05:58
+0000)
lustre/sec/gss/sec_gss.c
patch
|
blob
|
history
diff --git
a/lustre/sec/gss/sec_gss.c
b/lustre/sec/gss/sec_gss.c
index
9a4d7b6
..
7c8ce34
100644
(file)
--- a/
lustre/sec/gss/sec_gss.c
+++ b/
lustre/sec/gss/sec_gss.c
@@
-87,8
+87,8
@@
struct rpc_clnt;
* gss security init/fini helper *
**********************************************/
* gss security init/fini helper *
**********************************************/
-#define SECINIT_RPC_TIMEOUT (
1
0)
-#define SECFINI_RPC_TIMEOUT (
1
0)
+#define SECINIT_RPC_TIMEOUT (
3
0)
+#define SECFINI_RPC_TIMEOUT (
3
0)
static int secinit_compose_request(struct obd_import *imp,
char *buf, int bufsize,
static int secinit_compose_request(struct obd_import *imp,
char *buf, int bufsize,
@@
-518,7
+518,9
@@
int gss_cred_is_uptodate_ctx(struct ptlrpc_cred *cred)
int res = 0;
read_lock(&gss_ctx_lock);
int res = 0;
read_lock(&gss_ctx_lock);
- if ((cred->pc_flags & PTLRPC_CRED_UPTODATE) && gcred->gc_ctx)
+ if (((cred->pc_flags & PTLRPC_CRED_FLAGS_MASK) ==
+ PTLRPC_CRED_UPTODATE) &&
+ gcred->gc_ctx)
res = 1;
read_unlock(&gss_ctx_lock);
return res;
res = 1;
read_unlock(&gss_ctx_lock);
return res;
@@
-709,7
+711,7
@@
err_free_ctx:
* cred APIs *
***************************************/
#ifdef __KERNEL__
* cred APIs *
***************************************/
#ifdef __KERNEL__
-#define CRED_REFRESH_UPCALL_TIMEOUT (
2
0)
+#define CRED_REFRESH_UPCALL_TIMEOUT (
5
0)
static int gss_cred_refresh(struct ptlrpc_cred *cred)
{
struct obd_import *import;
static int gss_cred_refresh(struct ptlrpc_cred *cred)
{
struct obd_import *import;
@@
-723,7
+725,8
@@
static int gss_cred_refresh(struct ptlrpc_cred *cred)
int res;
ENTRY;
int res;
ENTRY;
- if (ptlrpcs_cred_is_uptodate(cred))
+ /* any flags means it has been handled, do nothing */
+ if (cred->pc_flags & PTLRPC_CRED_FLAGS_MASK)
RETURN(0);
LASSERT(cred->pc_sec);
RETURN(0);
LASSERT(cred->pc_sec);
@@
-801,7
+804,7
@@
again:
CERROR("rpc_queue_upcall failed: %d\n", res);
gss_unhash_msg(gss_new);
gss_release_msg(gss_new);
CERROR("rpc_queue_upcall failed: %d\n", res);
gss_unhash_msg(gss_new);
gss_release_msg(gss_new);
- cred->pc_flags |= PTLRPC_CRED_ERROR;
+ cred->pc_flags |= PTLRPC_CRED_
DEAD | PTLRPC_CRED_
ERROR;
RETURN(res);
}
gss_msg = gss_new;
RETURN(res);
}
gss_msg = gss_new;
@@
-820,17
+823,30
@@
waiting:
add_wait_queue(&gss_msg->gum_waitq, &wait);
spin_unlock(&gsec->gs_lock);
add_wait_queue(&gss_msg->gum_waitq, &wait);
spin_unlock(&gsec->gs_lock);
- res = schedule_timeout(CRED_REFRESH_UPCALL_TIMEOUT * HZ);
+ if (gss_new)
+ res = schedule_timeout(CRED_REFRESH_UPCALL_TIMEOUT * HZ);
+ else {
+ schedule();
+ res = 0;
+ }
+
remove_wait_queue(&gss_msg->gum_waitq, &wait);
remove_wait_queue(&gss_msg->gum_waitq, &wait);
+ /* - the one who refresh the cred for us should also be responsible
+ * to set the status of cred, we can simply return.
+ * - if cred flags has been set, we also don't need to do that again,
+ * no matter signal pending or timeout etc.
+ */
+ if (!gss_new || cred->pc_flags & PTLRPC_CRED_FLAGS_MASK)
+ goto out;
+
if (signal_pending(current)) {
CERROR("cred %p: interrupted upcall\n", cred);
if (signal_pending(current)) {
CERROR("cred %p: interrupted upcall\n", cred);
- if (gss_new)
- cred->pc_flags |= PTLRPC_CRED_DEAD | PTLRPC_CRED_ERROR;
+ cred->pc_flags |= PTLRPC_CRED_DEAD | PTLRPC_CRED_ERROR;
res = -EINTR;
} else if (res == 0) {
CERROR("cred %p: upcall timedout\n", cred);
res = -EINTR;
} else if (res == 0) {
CERROR("cred %p: upcall timedout\n", cred);
- cred->pc_flags |= PTLRPC_CRED_DEAD
| PTLRPC_CRED_ERROR
;
+ cred->pc_flags |= PTLRPC_CRED_DEAD;
res = -ETIMEDOUT;
} else
res = 0;
res = -ETIMEDOUT;
} else
res = 0;