summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMiloslav Trmač <mitr@redhat.com>2010-08-25 02:33:00 +0200
committerMiloslav Trmač <mitr@redhat.com>2010-08-25 02:33:00 +0200
commitb6ddae6aab4f799f0df64865079ffdc5f1f24b6f (patch)
treee495230c941afcf52e32ded6970d285db9078d7c
parent24a20d546d227083a5304a3c82cba69d8334f80c (diff)
downloadcryptodev-linux-b6ddae6aab4f799f0df64865079ffdc5f1f24b6f.tar.gz
cryptodev-linux-b6ddae6aab4f799f0df64865079ffdc5f1f24b6f.tar.xz
cryptodev-linux-b6ddae6aab4f799f0df64865079ffdc5f1f24b6f.zip
Avoid duplicit lookup and locking in _try_session_update
-rw-r--r--ncr-sessions.c42
1 files changed, 11 insertions, 31 deletions
diff --git a/ncr-sessions.c b/ncr-sessions.c
index d711ba7..d5ae1dd 100644
--- a/ncr-sessions.c
+++ b/ncr-sessions.c
@@ -803,35 +803,16 @@ fail:
return ret;
}
-static int try_session_update(struct ncr_lists *lists, ncr_session_t ses,
- struct nlattr *tb[], int compat)
+static int try_session_update(struct ncr_lists *lists,
+ struct session_item_st *sess, struct nlattr *tb[],
+ int compat)
{
- struct session_item_st *sess;
- int ret;
-
- sess = ncr_sessions_item_get(lists, ses);
- if (sess == NULL) {
- err();
- return -EINVAL;
- }
-
- if (mutex_lock_interruptible(&sess->mem_mutex)) {
- err();
- ret = -ERESTARTSYS;
- goto end;
- }
if (tb[NCR_ATTR_UPDATE_INPUT_KEY_AS_DATA] != NULL)
- ret = _ncr_session_update_key(lists, sess, tb);
+ return _ncr_session_update_key(lists, sess, tb);
else if (tb[NCR_ATTR_UPDATE_INPUT_DATA] != NULL)
- ret = _ncr_session_update(sess, tb, compat);
+ return _ncr_session_update(sess, tb, compat);
else
- ret = 0;
- mutex_unlock(&sess->mem_mutex);
-
-end:
- _ncr_sessions_item_put(sess);
-
- return ret;
+ return 0;
}
static int _ncr_session_final(struct ncr_lists *lists, ncr_session_t ses,
@@ -850,17 +831,16 @@ static int _ncr_session_final(struct ncr_lists *lists, ncr_session_t ses,
return -EINVAL;
}
- ret = try_session_update(lists, ses, tb, compat);
- if (ret < 0) {
+ if (mutex_lock_interruptible(&sess->mem_mutex)) {
err();
_ncr_sessions_item_put(sess);
- return ret;
+ return -ERESTARTSYS;
}
- if (mutex_lock_interruptible(&sess->mem_mutex)) {
+ ret = try_session_update(lists, sess, tb, compat);
+ if (ret < 0) {
err();
- _ncr_sessions_item_put(sess);
- return -ERESTARTSYS;
+ goto fail;
}
switch(sess->op) {