Whamcloud - gitweb
b=20997 Enable time limit on the request to be queued
[fs/lustre-release.git] / lustre / ptlrpc / sec.c
index 55bd19d..1d64af4 100644 (file)
@@ -277,8 +277,8 @@ struct ptlrpc_cli_ctx *get_my_ctx(struct ptlrpc_sec *sec)
                         remove_dead = 0;
                 }
         } else {
-                vcred.vc_uid = cfs_current()->uid;
-                vcred.vc_gid = cfs_current()->gid;
+                vcred.vc_uid = cfs_curproc_uid();
+                vcred.vc_gid = cfs_curproc_gid();
         }
 
         return sec->ps_policy->sp_cops->lookup_ctx(sec, &vcred,
@@ -667,7 +667,9 @@ again:
         }
 
         if (unlikely(cfs_test_bit(PTLRPC_CTX_ERROR_BIT, &ctx->cc_flags))) {
+                cfs_spin_lock(&req->rq_lock);
                 req->rq_err = 1;
+                cfs_spin_unlock(&req->rq_lock);
                 req_off_ctx_list(req, ctx);
                 RETURN(-EPERM);
         }
@@ -709,7 +711,9 @@ again:
                  * don't switch ctx if import was deactivated
                  */
                 if (req->rq_import->imp_deactive) {
+                        cfs_spin_lock(&req->rq_lock);
                         req->rq_err = 1;
+                        cfs_spin_unlock(&req->rq_lock);
                         RETURN(-EINTR);
                 }
 
@@ -718,7 +722,9 @@ again:
                         LASSERT(ctx == req->rq_cli_ctx);
                         CERROR("req %p: failed to replace dead ctx %p: %d\n",
                                 req, ctx, rc);
+                        cfs_spin_lock(&req->rq_lock);
                         req->rq_err = 1;
+                        cfs_spin_unlock(&req->rq_lock);
                         RETURN(rc);
                 }
 
@@ -890,6 +896,7 @@ int sptlrpc_import_check_ctx(struct obd_import *imp)
         cfs_atomic_set(&req->rq_refcount, 10000);
         CFS_INIT_LIST_HEAD(&req->rq_ctx_chain);
         cfs_waitq_init(&req->rq_reply_waitq);
+        cfs_waitq_init(&req->rq_set_waitq);
         req->rq_import = imp;
         req->rq_flvr = sec->ps_flvr;
         req->rq_cli_ctx = ctx;
@@ -1108,6 +1115,7 @@ int sptlrpc_cli_unwrap_early_reply(struct ptlrpc_request *req,
         early_req->rq_repdata = (struct lustre_msg *) early_buf;
         early_req->rq_repdata_len = early_size;
         early_req->rq_early = 1;
+        early_req->rq_reqmsg = req->rq_reqmsg;
 
         rc = do_cli_unwrap_reply(early_req);
         if (rc) {
@@ -1473,7 +1481,7 @@ void sptlrpc_import_flush_root_ctx(struct obd_import *imp)
 
 void sptlrpc_import_flush_my_ctx(struct obd_import *imp)
 {
-        import_flush_ctx_common(imp, cfs_current()->uid, 1, 1);
+        import_flush_ctx_common(imp, cfs_curproc_uid(), 1, 1);
 }
 EXPORT_SYMBOL(sptlrpc_import_flush_my_ctx);
 
@@ -2290,10 +2298,10 @@ int sptlrpc_pack_user_desc(struct lustre_msg *msg, int offset)
 
         pud = lustre_msg_buf(msg, offset, 0);
 
-        pud->pud_uid = cfs_current()->uid;
-        pud->pud_gid = cfs_current()->gid;
-        pud->pud_fsuid = cfs_current()->fsuid;
-        pud->pud_fsgid = cfs_current()->fsgid;
+        pud->pud_uid = cfs_curproc_uid();
+        pud->pud_gid = cfs_curproc_gid();
+        pud->pud_fsuid = cfs_curproc_fsuid();
+        pud->pud_fsgid = cfs_curproc_fsgid();
         pud->pud_cap = cfs_curproc_cap_pack();
         pud->pud_ngroups = (msg->lm_buflens[offset] - sizeof(*pud)) / 4;
 
@@ -2301,7 +2309,7 @@ int sptlrpc_pack_user_desc(struct lustre_msg *msg, int offset)
         task_lock(current);
         if (pud->pud_ngroups > current_ngroups)
                 pud->pud_ngroups = current_ngroups;
-        memcpy(pud->pud_groups, cfs_current()->group_info->blocks[0],
+        memcpy(pud->pud_groups, current_cred()->group_info->blocks[0],
                pud->pud_ngroups * sizeof(__u32));
         task_unlock(current);
 #endif