Skip to content

Commit

Permalink
Staging: batman-adv: don't lock while sending packets
Browse files Browse the repository at this point in the history
As in other parts of batman-adv, we should not lock while sending a packet but
keep the lock held for as short as possible. Additionally, we should check
whether the interface is active, otherwise batman_if->net_dev might not be
available ...

Signed-off-by: Simon Wunderlich <siwu@hrz.tu-chemnitz.de>
Acked-by: Marek Lindner <lindner_marek@yahoo.de>
Signed-off-by: Andrew Lunn <andrew@lunn.ch>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
  • Loading branch information
Simon Wunderlich authored and Greg Kroah-Hartman committed Mar 4, 2010
1 parent 0fce643 commit eb50081
Showing 1 changed file with 10 additions and 3 deletions.
13 changes: 10 additions & 3 deletions drivers/staging/batman-adv/device.c
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@
#include "send.h"
#include "types.h"
#include "hash.h"
#include "hard-interface.h"

static struct class *batman_class;

Expand Down Expand Up @@ -206,6 +207,7 @@ ssize_t bat_device_write(struct file *file, const char __user *buff,
struct icmp_packet icmp_packet;
struct orig_node *orig_node;
struct batman_if *batman_if;
uint8_t dstaddr[ETH_ALEN];
unsigned long flags;

if (len < sizeof(struct icmp_packet)) {
Expand Down Expand Up @@ -251,19 +253,24 @@ ssize_t bat_device_write(struct file *file, const char __user *buff,
goto unlock;

batman_if = orig_node->batman_if;
memcpy(dstaddr, orig_node->router->addr, ETH_ALEN);

spin_unlock_irqrestore(&orig_hash_lock, flags);

if (!batman_if)
goto unlock;
goto dst_unreach;

if (batman_if->if_active != IF_ACTIVE)
goto dst_unreach;

memcpy(icmp_packet.orig,
batman_if->net_dev->dev_addr,
ETH_ALEN);

send_raw_packet((unsigned char *)&icmp_packet,
sizeof(struct icmp_packet),
batman_if, orig_node->router->addr);
batman_if, dstaddr);

spin_unlock_irqrestore(&orig_hash_lock, flags);
goto out;

unlock:
Expand Down

0 comments on commit eb50081

Please sign in to comment.