net/macvtap: fix reference counting
authorArnd Bergmann <arnd@arndb.de>
Thu, 11 Feb 2010 05:55:39 +0000 (05:55 +0000)
committerDavid S. Miller <davem@davemloft.net>
Tue, 16 Feb 2010 05:49:49 +0000 (21:49 -0800)
commit564517e804c9c6d4e29c270bfc1517404d27107b
treef1912327050508a1d2902dbba7cbfcf7d054cd0f
parente9449d85c67127d6f9d01aad8963d567ab02cb96
net/macvtap: fix reference counting

The RCU usage in the original code was broken because
there are cases where we possibly sleep with rcu_read_lock
held. As a fix, change the macvtap_file_get_queue to
get a reference on the socket and the netdev instead of
taking the full rcu_read_lock.

Also, change macvtap_file_get_queue failure case to
not require a subsequent macvtap_file_put_queue, as
pointed out by Ed Swierk.

Signed-off-by: Arnd Bergmann <arnd@arndb.de>
Cc: Ed Swierk <eswierk@aristanetworks.com>
Cc: Sridhar Samudrala <sri@us.ibm.com>
Acked-by: Sridhar Samudrala <sri@us.ibm.com>
Acked-by: Ed Swierk <eswierk@aristanetworks.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/macvtap.c