Skip to content

Commit ef132dc

Browse files
committed
Merge branch 'nfc-llcp-cleanups'
Krzysztof Kozlowski says: ==================== nfc: llcp: few cleanups/improvements These are improvements, not fixing any experienced issue, just looking correct to me from the code point of view. Changes since v1 ================ 1. Split from the fix. Testing ======= Under QEMU only. The NFC/LLCP code was not really tested on a device. ==================== Signed-off-by: David S. Miller <[email protected]>
2 parents ca0a53d + 44cd576 commit ef132dc

File tree

3 files changed

+25
-34
lines changed

3 files changed

+25
-34
lines changed

net/nfc/llcp.h

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@
66
enum llcp_state {
77
LLCP_CONNECTED = 1, /* wait_for_packet() wants that */
88
LLCP_CONNECTING,
9-
LLCP_DISCONNECTING,
109
LLCP_CLOSED,
1110
LLCP_BOUND,
1211
LLCP_LISTEN,

net/nfc/llcp_core.c

Lines changed: 1 addition & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -383,7 +383,7 @@ u8 nfc_llcp_get_sdp_ssap(struct nfc_llcp_local *local,
383383
pr_debug("WKS %d\n", ssap);
384384

385385
/* This is a WKS, let's check if it's free */
386-
if (local->local_wks & BIT(ssap)) {
386+
if (test_bit(ssap, &local->local_wks)) {
387387
mutex_unlock(&local->sdp_lock);
388388

389389
return LLCP_SAP_MAX;
@@ -737,13 +737,6 @@ static void nfc_llcp_tx_work(struct work_struct *work)
737737
print_hex_dump_debug("LLCP Tx: ", DUMP_PREFIX_OFFSET,
738738
16, 1, skb->data, skb->len, true);
739739

740-
if (ptype == LLCP_PDU_DISC && sk != NULL &&
741-
sk->sk_state == LLCP_DISCONNECTING) {
742-
nfc_llcp_sock_unlink(&local->sockets, sk);
743-
sock_orphan(sk);
744-
sock_put(sk);
745-
}
746-
747740
if (ptype == LLCP_PDU_I)
748741
copy_skb = skb_copy(skb, GFP_ATOMIC);
749742

net/nfc/llcp_sock.c

Lines changed: 24 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -108,21 +108,13 @@ static int llcp_sock_bind(struct socket *sock, struct sockaddr *addr, int alen)
108108
llcp_sock->service_name_len,
109109
GFP_KERNEL);
110110
if (!llcp_sock->service_name) {
111-
nfc_llcp_local_put(llcp_sock->local);
112-
llcp_sock->local = NULL;
113-
llcp_sock->dev = NULL;
114111
ret = -ENOMEM;
115-
goto put_dev;
112+
goto sock_llcp_put_local;
116113
}
117114
llcp_sock->ssap = nfc_llcp_get_sdp_ssap(local, llcp_sock);
118115
if (llcp_sock->ssap == LLCP_SAP_MAX) {
119-
nfc_llcp_local_put(llcp_sock->local);
120-
llcp_sock->local = NULL;
121-
kfree(llcp_sock->service_name);
122-
llcp_sock->service_name = NULL;
123-
llcp_sock->dev = NULL;
124116
ret = -EADDRINUSE;
125-
goto put_dev;
117+
goto free_service_name;
126118
}
127119

128120
llcp_sock->reserved_ssap = llcp_sock->ssap;
@@ -132,6 +124,19 @@ static int llcp_sock_bind(struct socket *sock, struct sockaddr *addr, int alen)
132124
pr_debug("Socket bound to SAP %d\n", llcp_sock->ssap);
133125

134126
sk->sk_state = LLCP_BOUND;
127+
nfc_put_device(dev);
128+
release_sock(sk);
129+
130+
return 0;
131+
132+
free_service_name:
133+
kfree(llcp_sock->service_name);
134+
llcp_sock->service_name = NULL;
135+
136+
sock_llcp_put_local:
137+
nfc_llcp_local_put(llcp_sock->local);
138+
llcp_sock->local = NULL;
139+
llcp_sock->dev = NULL;
135140

136141
put_dev:
137142
nfc_put_device(dev);
@@ -626,23 +631,16 @@ static int llcp_sock_release(struct socket *sock)
626631
}
627632
}
628633

629-
if (llcp_sock->reserved_ssap < LLCP_SAP_MAX)
630-
nfc_llcp_put_ssap(llcp_sock->local, llcp_sock->ssap);
631-
632-
release_sock(sk);
633-
634-
/* Keep this sock alive and therefore do not remove it from the sockets
635-
* list until the DISC PDU has been actually sent. Otherwise we would
636-
* reply with DM PDUs before sending the DISC one.
637-
*/
638-
if (sk->sk_state == LLCP_DISCONNECTING)
639-
return err;
640-
641634
if (sock->type == SOCK_RAW)
642635
nfc_llcp_sock_unlink(&local->raw_sockets, sk);
643636
else
644637
nfc_llcp_sock_unlink(&local->sockets, sk);
645638

639+
if (llcp_sock->reserved_ssap < LLCP_SAP_MAX)
640+
nfc_llcp_put_ssap(llcp_sock->local, llcp_sock->ssap);
641+
642+
release_sock(sk);
643+
646644
out:
647645
sock_orphan(sk);
648646
sock_put(sk);
@@ -712,10 +710,8 @@ static int llcp_sock_connect(struct socket *sock, struct sockaddr *_addr,
712710
llcp_sock->local = nfc_llcp_local_get(local);
713711
llcp_sock->ssap = nfc_llcp_get_local_ssap(local);
714712
if (llcp_sock->ssap == LLCP_SAP_MAX) {
715-
nfc_llcp_local_put(llcp_sock->local);
716-
llcp_sock->local = NULL;
717713
ret = -ENOMEM;
718-
goto put_dev;
714+
goto sock_llcp_put_local;
719715
}
720716

721717
llcp_sock->reserved_ssap = llcp_sock->ssap;
@@ -760,8 +756,11 @@ static int llcp_sock_connect(struct socket *sock, struct sockaddr *_addr,
760756

761757
sock_llcp_release:
762758
nfc_llcp_put_ssap(local, llcp_sock->ssap);
759+
760+
sock_llcp_put_local:
763761
nfc_llcp_local_put(llcp_sock->local);
764762
llcp_sock->local = NULL;
763+
llcp_sock->dev = NULL;
765764

766765
put_dev:
767766
nfc_put_device(dev);

0 commit comments

Comments
 (0)