Merge branch 'modules' of git://git.kernel.org/pub/scm/linux/kernel/git/rusty/linux...
[linux-drm-fsl-dcu.git] / net / x25 / af_x25.c
index 296e65e0106415dece19df0c5d8889ed664ff217..5e86d4e97dceb29f89ae779554b51b3f336705ef 100644 (file)
@@ -453,7 +453,6 @@ static int x25_setsockopt(struct socket *sock, int level, int optname,
        struct sock *sk = sock->sk;
        int rc = -ENOPROTOOPT;
 
-       lock_kernel();
        if (level != SOL_X25 || optname != X25_QBITINCL)
                goto out;
 
@@ -465,10 +464,12 @@ static int x25_setsockopt(struct socket *sock, int level, int optname,
        if (get_user(opt, (int __user *)optval))
                goto out;
 
-       x25_sk(sk)->qbitincl = !!opt;
+       if (opt)
+               set_bit(X25_Q_BIT_FLAG, &x25_sk(sk)->flags);
+       else
+               clear_bit(X25_Q_BIT_FLAG, &x25_sk(sk)->flags);
        rc = 0;
 out:
-       unlock_kernel();
        return rc;
 }
 
@@ -478,7 +479,6 @@ static int x25_getsockopt(struct socket *sock, int level, int optname,
        struct sock *sk = sock->sk;
        int val, len, rc = -ENOPROTOOPT;
 
-       lock_kernel();
        if (level != SOL_X25 || optname != X25_QBITINCL)
                goto out;
 
@@ -496,10 +496,9 @@ static int x25_getsockopt(struct socket *sock, int level, int optname,
        if (put_user(len, optlen))
                goto out;
 
-       val = x25_sk(sk)->qbitincl;
+       val = test_bit(X25_Q_BIT_FLAG, &x25_sk(sk)->flags);
        rc = copy_to_user(optval, &val, len) ? -EFAULT : 0;
 out:
-       unlock_kernel();
        return rc;
 }
 
@@ -583,7 +582,7 @@ static int x25_create(struct net *net, struct socket *sock, int protocol,
        x25->t2    = sysctl_x25_ack_holdback_timeout;
        x25->state = X25_STATE_0;
        x25->cudmatchlength = 0;
-       x25->accptapprv = X25_DENY_ACCPT_APPRV;         /* normally no cud  */
+       set_bit(X25_ACCPT_APPRV_FLAG, &x25->flags);     /* normally no cud  */
                                                        /* on call accept   */
 
        x25->facilities.winsize_in  = X25_DEFAULT_WINDOW_SIZE;
@@ -632,12 +631,12 @@ static struct sock *x25_make_new(struct sock *osk)
        x25->t22        = ox25->t22;
        x25->t23        = ox25->t23;
        x25->t2         = ox25->t2;
+       x25->flags      = ox25->flags;
        x25->facilities = ox25->facilities;
-       x25->qbitincl   = ox25->qbitincl;
        x25->dte_facilities = ox25->dte_facilities;
        x25->cudmatchlength = ox25->cudmatchlength;
-       x25->accptapprv = ox25->accptapprv;
 
+       clear_bit(X25_INTERRUPT_FLAG, &x25->flags);
        x25_init_timers(sk);
 out:
        return sk;
@@ -1053,8 +1052,8 @@ int x25_rx_call_request(struct sk_buff *skb, struct x25_neigh *nb,
        makex25->vc_facil_mask &= ~X25_MASK_CALLING_AE;
        makex25->cudmatchlength = x25_sk(sk)->cudmatchlength;
 
-       /* Normally all calls are accepted immediatly */
-       if(makex25->accptapprv & X25_DENY_ACCPT_APPRV) {
+       /* Normally all calls are accepted immediately */
+       if (test_bit(X25_ACCPT_APPRV_FLAG, &makex25->flags)) {
                x25_write_internal(make, X25_CALL_ACCEPTED);
                makex25->state = X25_STATE_3;
        }
@@ -1186,7 +1185,7 @@ static int x25_sendmsg(struct kiocb *iocb, struct socket *sock,
         *      If the Q BIT Include socket option is in force, the first
         *      byte of the user data is the logical value of the Q Bit.
         */
-       if (x25->qbitincl) {
+       if (test_bit(X25_Q_BIT_FLAG, &x25->flags)) {
                qbit = skb->data[0];
                skb_pull(skb, 1);
        }
@@ -1242,7 +1241,7 @@ static int x25_sendmsg(struct kiocb *iocb, struct socket *sock,
                len = rc;
                if (rc < 0)
                        kfree_skb(skb);
-               else if (x25->qbitincl)
+               else if (test_bit(X25_Q_BIT_FLAG, &x25->flags))
                        len++;
        }
 
@@ -1307,7 +1306,7 @@ static int x25_recvmsg(struct kiocb *iocb, struct socket *sock,
                /*
                 *      No Q bit information on Interrupt data.
                 */
-               if (x25->qbitincl) {
+               if (test_bit(X25_Q_BIT_FLAG, &x25->flags)) {
                        asmptr  = skb_push(skb, 1);
                        *asmptr = 0x00;
                }
@@ -1325,7 +1324,7 @@ static int x25_recvmsg(struct kiocb *iocb, struct socket *sock,
                skb_pull(skb, x25->neighbour->extended ?
                                X25_EXT_MIN_LEN : X25_STD_MIN_LEN);
 
-               if (x25->qbitincl) {
+               if (test_bit(X25_Q_BIT_FLAG, &x25->flags)) {
                        asmptr  = skb_push(skb, 1);
                        *asmptr = qbit;
                }
@@ -1576,7 +1575,7 @@ static int x25_ioctl(struct socket *sock, unsigned int cmd, unsigned long arg)
                        rc = -EINVAL;
                        if (sk->sk_state != TCP_CLOSE)
                                break;
-                       x25->accptapprv = X25_ALLOW_ACCPT_APPRV;
+                       clear_bit(X25_ACCPT_APPRV_FLAG, &x25->flags);
                        rc = 0;
                        break;
                }
@@ -1585,7 +1584,8 @@ static int x25_ioctl(struct socket *sock, unsigned int cmd, unsigned long arg)
                        rc = -EINVAL;
                        if (sk->sk_state != TCP_ESTABLISHED)
                                break;
-                       if (x25->accptapprv)    /* must call accptapprv above */
+                       /* must call accptapprv above */
+                       if (test_bit(X25_ACCPT_APPRV_FLAG, &x25->flags))
                                break;
                        x25_write_internal(sk, X25_CALL_ACCEPTED);
                        x25->state = X25_STATE_3;