arp: Remove a nest in arp_req_get().
authorKuniyuki Iwashima <kuniyu@amazon.com>
Tue, 30 Apr 2024 01:58:10 +0000 (18:58 -0700)
committerJakub Kicinski <kuba@kernel.org>
Thu, 2 May 2024 01:37:07 +0000 (18:37 -0700)
This is a prep patch to make the following changes tidy.

No functional change intended.

Signed-off-by: Kuniyuki Iwashima <kuniyu@amazon.com>
Link: https://lore.kernel.org/r/20240430015813.71143-5-kuniyu@amazon.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
net/ipv4/arp.c

index ac3e15799c2ffbcc79e858eab0c631e7f8d06f0f..60f633b24ec83704f6f9ce79560565c423ed3ed5 100644 (file)
@@ -1138,23 +1138,28 @@ static int arp_req_get(struct arpreq *r, struct net_device *dev)
 {
        __be32 ip = ((struct sockaddr_in *) &r->arp_pa)->sin_addr.s_addr;
        struct neighbour *neigh;
-       int err = -ENXIO;
 
        neigh = neigh_lookup(&arp_tbl, &ip, dev);
-       if (neigh) {
-               if (!(READ_ONCE(neigh->nud_state) & NUD_NOARP)) {
-                       read_lock_bh(&neigh->lock);
-                       memcpy(r->arp_ha.sa_data, neigh->ha,
-                              min(dev->addr_len, sizeof(r->arp_ha.sa_data_min)));
-                       r->arp_flags = arp_state_to_flags(neigh);
-                       read_unlock_bh(&neigh->lock);
-                       r->arp_ha.sa_family = dev->type;
-                       strscpy(r->arp_dev, dev->name, sizeof(r->arp_dev));
-                       err = 0;
-               }
+       if (!neigh)
+               return -ENXIO;
+
+       if (READ_ONCE(neigh->nud_state) & NUD_NOARP) {
                neigh_release(neigh);
+               return -ENXIO;
        }
-       return err;
+
+       read_lock_bh(&neigh->lock);
+       memcpy(r->arp_ha.sa_data, neigh->ha,
+              min(dev->addr_len, sizeof(r->arp_ha.sa_data_min)));
+       r->arp_flags = arp_state_to_flags(neigh);
+       read_unlock_bh(&neigh->lock);
+
+       neigh_release(neigh);
+
+       r->arp_ha.sa_family = dev->type;
+       strscpy(r->arp_dev, dev->name, sizeof(r->arp_dev));
+
+       return 0;
 }
 
 int arp_invalidate(struct net_device *dev, __be32 ip, bool force)