summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMiloslav Trmač <mitr@redhat.com>2010-08-25 03:08:13 +0200
committerMiloslav Trmač <mitr@redhat.com>2010-08-25 03:08:13 +0200
commit638b47ddcec13d384c6122f56f8e336019382e2b (patch)
tree68c0fcc3764be4bb62a3d2fd016f4f00d4b77308
parentdaa80bfb63be6fcab80f2d7f526976b3000572f2 (diff)
downloadkernel-crypto-638b47ddcec13d384c6122f56f8e336019382e2b.tar.gz
kernel-crypto-638b47ddcec13d384c6122f56f8e336019382e2b.tar.xz
kernel-crypto-638b47ddcec13d384c6122f56f8e336019382e2b.zip
Don't allocate session IDs for *_ONCE.
Also skip locking the mutex - the session is private to the calling thread, nothing else can access it.
-rw-r--r--ncr-sessions.c21
1 files changed, 2 insertions, 19 deletions
diff --git a/ncr-sessions.c b/ncr-sessions.c
index ab4c9971719..c0ef7e01f51 100644
--- a/ncr-sessions.c
+++ b/ncr-sessions.c
@@ -1096,34 +1096,17 @@ int ncr_session_once(struct ncr_lists *lists,
int compat)
{
struct session_item_st *sess;
- int ret, desc;
-
- desc = session_alloc_desc(lists);
- if (desc < 0) {
- err();
- return desc;
- }
+ int ret;
- sess = _ncr_session_init(lists, desc, once->op, tb);
+ sess = _ncr_session_init(lists, -1, once->op, tb);
if (IS_ERR(sess)) {
err();
- session_drop_desc(lists, desc);
return PTR_ERR(sess);
}
- session_publish(lists, sess);
-
- if (mutex_lock_interruptible(&sess->mem_mutex)) {
- err();
- _ncr_sessions_item_put(sess);
- return -ERESTARTSYS;
- }
-
ret = _ncr_session_final(lists, sess, tb, compat);
- mutex_unlock(&sess->mem_mutex);
_ncr_sessions_item_put(sess);
- _ncr_session_remove(lists, desc);
return ret;
}