X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=net%2Feconet%2Faf_econet.c;h=fc31ae1209d1f96d8c8b1e04197f443a8094ed9c;hb=c7b5ebbddf7bcd3651947760f423e3783bbe6573;hp=07b4cff2f44d302d50ca20a044e46908e09ab44a;hpb=a2c21200f1c81b08cb55e417b68150bba439b646;p=linux-2.6.git diff --git a/net/econet/af_econet.c b/net/econet/af_econet.c index 07b4cff2f..fc31ae120 100644 --- a/net/econet/af_econet.c +++ b/net/econet/af_econet.c @@ -39,6 +39,7 @@ #include #include #include +#include #include #include @@ -401,16 +402,17 @@ static int econet_sendmsg(struct kiocb *iocb, struct socket *sock, y.x maps to IP a.b.c.x. This should be replaced with something more flexible and more aware of subnet masks. */ { - struct in_device *idev = in_dev_get(dev); + struct in_device *idev; unsigned long network = 0; + + rcu_read_lock(); + idev = __in_dev_get(dev); if (idev) { - read_lock(&idev->lock); if (idev->ifa_list) network = ntohl(idev->ifa_list->ifa_address) & 0xffffff00; /* !!! */ - read_unlock(&idev->lock); - in_dev_put(idev); } + rcu_read_unlock(); udpdest.sin_addr.s_addr = htonl(network | addr.station); }