diff options
author | Miloslav Trmač <mitr@redhat.com> | 2010-08-25 02:33:00 +0200 |
---|---|---|
committer | Miloslav Trmač <mitr@redhat.com> | 2010-08-25 02:33:00 +0200 |
commit | b6ddae6aab4f799f0df64865079ffdc5f1f24b6f (patch) | |
tree | e495230c941afcf52e32ded6970d285db9078d7c | |
parent | 24a20d546d227083a5304a3c82cba69d8334f80c (diff) | |
download | cryptodev-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.c | 42 |
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) { |