Merge tag 'scsi-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi
[linux-2.6-microblaze.git] / crypto / algif_hash.c
index da1ffa4..50f7b22 100644 (file)
@@ -279,10 +279,8 @@ static struct proto_ops algif_hash_ops = {
        .ioctl          =       sock_no_ioctl,
        .listen         =       sock_no_listen,
        .shutdown       =       sock_no_shutdown,
-       .getsockopt     =       sock_no_getsockopt,
        .mmap           =       sock_no_mmap,
        .bind           =       sock_no_bind,
-       .setsockopt     =       sock_no_setsockopt,
 
        .release        =       af_alg_release,
        .sendmsg        =       hash_sendmsg,
@@ -301,7 +299,7 @@ static int hash_check_key(struct socket *sock)
        struct alg_sock *ask = alg_sk(sk);
 
        lock_sock(sk);
-       if (ask->refcnt)
+       if (!atomic_read(&ask->nokey_refcnt))
                goto unlock_child;
 
        psk = ask->parent;
@@ -313,11 +311,8 @@ static int hash_check_key(struct socket *sock)
        if (crypto_ahash_get_flags(tfm) & CRYPTO_TFM_NEED_KEY)
                goto unlock;
 
-       if (!pask->refcnt++)
-               sock_hold(psk);
-
-       ask->refcnt = 1;
-       sock_put(psk);
+       atomic_dec(&pask->nokey_refcnt);
+       atomic_set(&ask->nokey_refcnt, 0);
 
        err = 0;
 
@@ -386,10 +381,8 @@ static struct proto_ops algif_hash_ops_nokey = {
        .ioctl          =       sock_no_ioctl,
        .listen         =       sock_no_listen,
        .shutdown       =       sock_no_shutdown,
-       .getsockopt     =       sock_no_getsockopt,
        .mmap           =       sock_no_mmap,
        .bind           =       sock_no_bind,
-       .setsockopt     =       sock_no_setsockopt,
 
        .release        =       af_alg_release,
        .sendmsg        =       hash_sendmsg_nokey,