mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-12-21 01:54:51 +08:00
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 <davem@davemloft.net>
This commit is contained in:
commit
ef132dc40a
@ -6,7 +6,6 @@
|
||||
enum llcp_state {
|
||||
LLCP_CONNECTED = 1, /* wait_for_packet() wants that */
|
||||
LLCP_CONNECTING,
|
||||
LLCP_DISCONNECTING,
|
||||
LLCP_CLOSED,
|
||||
LLCP_BOUND,
|
||||
LLCP_LISTEN,
|
||||
|
@ -383,7 +383,7 @@ u8 nfc_llcp_get_sdp_ssap(struct nfc_llcp_local *local,
|
||||
pr_debug("WKS %d\n", ssap);
|
||||
|
||||
/* This is a WKS, let's check if it's free */
|
||||
if (local->local_wks & BIT(ssap)) {
|
||||
if (test_bit(ssap, &local->local_wks)) {
|
||||
mutex_unlock(&local->sdp_lock);
|
||||
|
||||
return LLCP_SAP_MAX;
|
||||
@ -737,13 +737,6 @@ static void nfc_llcp_tx_work(struct work_struct *work)
|
||||
print_hex_dump_debug("LLCP Tx: ", DUMP_PREFIX_OFFSET,
|
||||
16, 1, skb->data, skb->len, true);
|
||||
|
||||
if (ptype == LLCP_PDU_DISC && sk != NULL &&
|
||||
sk->sk_state == LLCP_DISCONNECTING) {
|
||||
nfc_llcp_sock_unlink(&local->sockets, sk);
|
||||
sock_orphan(sk);
|
||||
sock_put(sk);
|
||||
}
|
||||
|
||||
if (ptype == LLCP_PDU_I)
|
||||
copy_skb = skb_copy(skb, GFP_ATOMIC);
|
||||
|
||||
|
@ -108,21 +108,13 @@ static int llcp_sock_bind(struct socket *sock, struct sockaddr *addr, int alen)
|
||||
llcp_sock->service_name_len,
|
||||
GFP_KERNEL);
|
||||
if (!llcp_sock->service_name) {
|
||||
nfc_llcp_local_put(llcp_sock->local);
|
||||
llcp_sock->local = NULL;
|
||||
llcp_sock->dev = NULL;
|
||||
ret = -ENOMEM;
|
||||
goto put_dev;
|
||||
goto sock_llcp_put_local;
|
||||
}
|
||||
llcp_sock->ssap = nfc_llcp_get_sdp_ssap(local, llcp_sock);
|
||||
if (llcp_sock->ssap == LLCP_SAP_MAX) {
|
||||
nfc_llcp_local_put(llcp_sock->local);
|
||||
llcp_sock->local = NULL;
|
||||
kfree(llcp_sock->service_name);
|
||||
llcp_sock->service_name = NULL;
|
||||
llcp_sock->dev = NULL;
|
||||
ret = -EADDRINUSE;
|
||||
goto put_dev;
|
||||
goto free_service_name;
|
||||
}
|
||||
|
||||
llcp_sock->reserved_ssap = llcp_sock->ssap;
|
||||
@ -132,6 +124,19 @@ static int llcp_sock_bind(struct socket *sock, struct sockaddr *addr, int alen)
|
||||
pr_debug("Socket bound to SAP %d\n", llcp_sock->ssap);
|
||||
|
||||
sk->sk_state = LLCP_BOUND;
|
||||
nfc_put_device(dev);
|
||||
release_sock(sk);
|
||||
|
||||
return 0;
|
||||
|
||||
free_service_name:
|
||||
kfree(llcp_sock->service_name);
|
||||
llcp_sock->service_name = NULL;
|
||||
|
||||
sock_llcp_put_local:
|
||||
nfc_llcp_local_put(llcp_sock->local);
|
||||
llcp_sock->local = NULL;
|
||||
llcp_sock->dev = NULL;
|
||||
|
||||
put_dev:
|
||||
nfc_put_device(dev);
|
||||
@ -626,23 +631,16 @@ static int llcp_sock_release(struct socket *sock)
|
||||
}
|
||||
}
|
||||
|
||||
if (llcp_sock->reserved_ssap < LLCP_SAP_MAX)
|
||||
nfc_llcp_put_ssap(llcp_sock->local, llcp_sock->ssap);
|
||||
|
||||
release_sock(sk);
|
||||
|
||||
/* Keep this sock alive and therefore do not remove it from the sockets
|
||||
* list until the DISC PDU has been actually sent. Otherwise we would
|
||||
* reply with DM PDUs before sending the DISC one.
|
||||
*/
|
||||
if (sk->sk_state == LLCP_DISCONNECTING)
|
||||
return err;
|
||||
|
||||
if (sock->type == SOCK_RAW)
|
||||
nfc_llcp_sock_unlink(&local->raw_sockets, sk);
|
||||
else
|
||||
nfc_llcp_sock_unlink(&local->sockets, sk);
|
||||
|
||||
if (llcp_sock->reserved_ssap < LLCP_SAP_MAX)
|
||||
nfc_llcp_put_ssap(llcp_sock->local, llcp_sock->ssap);
|
||||
|
||||
release_sock(sk);
|
||||
|
||||
out:
|
||||
sock_orphan(sk);
|
||||
sock_put(sk);
|
||||
@ -712,10 +710,8 @@ static int llcp_sock_connect(struct socket *sock, struct sockaddr *_addr,
|
||||
llcp_sock->local = nfc_llcp_local_get(local);
|
||||
llcp_sock->ssap = nfc_llcp_get_local_ssap(local);
|
||||
if (llcp_sock->ssap == LLCP_SAP_MAX) {
|
||||
nfc_llcp_local_put(llcp_sock->local);
|
||||
llcp_sock->local = NULL;
|
||||
ret = -ENOMEM;
|
||||
goto put_dev;
|
||||
goto sock_llcp_put_local;
|
||||
}
|
||||
|
||||
llcp_sock->reserved_ssap = llcp_sock->ssap;
|
||||
@ -760,8 +756,11 @@ sock_unlink:
|
||||
|
||||
sock_llcp_release:
|
||||
nfc_llcp_put_ssap(local, llcp_sock->ssap);
|
||||
|
||||
sock_llcp_put_local:
|
||||
nfc_llcp_local_put(llcp_sock->local);
|
||||
llcp_sock->local = NULL;
|
||||
llcp_sock->dev = NULL;
|
||||
|
||||
put_dev:
|
||||
nfc_put_device(dev);
|
||||
|
Loading…
Reference in New Issue
Block a user