diff options
author | Jiri Pirko <jpirko@redhat.com> | 2011-12-08 19:52:37 -0500 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2011-12-08 19:52:37 -0500 |
commit | 8e586137e6b63af1e881b328466ab5ffbe562510 (patch) | |
tree | da0767e1b1361aa24bd32f485453079e31854c0c /drivers/s390 | |
parent | 7da82c06ded105bf601bfa0eafc92e84eb0ceeed (diff) |
net: make vlan ndo_vlan_rx_[add/kill]_vid return error value
Let caller know the result of adding/removing vlan id to/from vlan
filter.
In some drivers I make those functions to just return 0. But in those
where there is able to see if hw setup went correctly, return value is
set appropriately.
Signed-off-by: Jiri Pirko <jpirko@redhat.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/s390')
-rw-r--r-- | drivers/s390/net/qeth_l2_main.c | 18 | ||||
-rw-r--r-- | drivers/s390/net/qeth_l3_main.c | 9 |
2 files changed, 16 insertions, 11 deletions
diff --git a/drivers/s390/net/qeth_l2_main.c b/drivers/s390/net/qeth_l2_main.c index a21ae3d549db..c4e2004bd0e8 100644 --- a/drivers/s390/net/qeth_l2_main.c +++ b/drivers/s390/net/qeth_l2_main.c | |||
@@ -301,21 +301,21 @@ static void qeth_l2_process_vlans(struct qeth_card *card) | |||
301 | spin_unlock_bh(&card->vlanlock); | 301 | spin_unlock_bh(&card->vlanlock); |
302 | } | 302 | } |
303 | 303 | ||
304 | static void qeth_l2_vlan_rx_add_vid(struct net_device *dev, unsigned short vid) | 304 | static int qeth_l2_vlan_rx_add_vid(struct net_device *dev, unsigned short vid) |
305 | { | 305 | { |
306 | struct qeth_card *card = dev->ml_priv; | 306 | struct qeth_card *card = dev->ml_priv; |
307 | struct qeth_vlan_vid *id; | 307 | struct qeth_vlan_vid *id; |
308 | 308 | ||
309 | QETH_CARD_TEXT_(card, 4, "aid:%d", vid); | 309 | QETH_CARD_TEXT_(card, 4, "aid:%d", vid); |
310 | if (!vid) | 310 | if (!vid) |
311 | return; | 311 | return 0; |
312 | if (card->info.type == QETH_CARD_TYPE_OSM) { | 312 | if (card->info.type == QETH_CARD_TYPE_OSM) { |
313 | QETH_CARD_TEXT(card, 3, "aidOSM"); | 313 | QETH_CARD_TEXT(card, 3, "aidOSM"); |
314 | return; | 314 | return 0; |
315 | } | 315 | } |
316 | if (qeth_wait_for_threads(card, QETH_RECOVER_THREAD)) { | 316 | if (qeth_wait_for_threads(card, QETH_RECOVER_THREAD)) { |
317 | QETH_CARD_TEXT(card, 3, "aidREC"); | 317 | QETH_CARD_TEXT(card, 3, "aidREC"); |
318 | return; | 318 | return 0; |
319 | } | 319 | } |
320 | id = kmalloc(sizeof(struct qeth_vlan_vid), GFP_ATOMIC); | 320 | id = kmalloc(sizeof(struct qeth_vlan_vid), GFP_ATOMIC); |
321 | if (id) { | 321 | if (id) { |
@@ -324,10 +324,13 @@ static void qeth_l2_vlan_rx_add_vid(struct net_device *dev, unsigned short vid) | |||
324 | spin_lock_bh(&card->vlanlock); | 324 | spin_lock_bh(&card->vlanlock); |
325 | list_add_tail(&id->list, &card->vid_list); | 325 | list_add_tail(&id->list, &card->vid_list); |
326 | spin_unlock_bh(&card->vlanlock); | 326 | spin_unlock_bh(&card->vlanlock); |
327 | } else { | ||
328 | return -ENOMEM; | ||
327 | } | 329 | } |
330 | return 0; | ||
328 | } | 331 | } |
329 | 332 | ||
330 | static void qeth_l2_vlan_rx_kill_vid(struct net_device *dev, unsigned short vid) | 333 | static int qeth_l2_vlan_rx_kill_vid(struct net_device *dev, unsigned short vid) |
331 | { | 334 | { |
332 | struct qeth_vlan_vid *id, *tmpid = NULL; | 335 | struct qeth_vlan_vid *id, *tmpid = NULL; |
333 | struct qeth_card *card = dev->ml_priv; | 336 | struct qeth_card *card = dev->ml_priv; |
@@ -335,11 +338,11 @@ static void qeth_l2_vlan_rx_kill_vid(struct net_device *dev, unsigned short vid) | |||
335 | QETH_CARD_TEXT_(card, 4, "kid:%d", vid); | 338 | QETH_CARD_TEXT_(card, 4, "kid:%d", vid); |
336 | if (card->info.type == QETH_CARD_TYPE_OSM) { | 339 | if (card->info.type == QETH_CARD_TYPE_OSM) { |
337 | QETH_CARD_TEXT(card, 3, "kidOSM"); | 340 | QETH_CARD_TEXT(card, 3, "kidOSM"); |
338 | return; | 341 | return 0; |
339 | } | 342 | } |
340 | if (qeth_wait_for_threads(card, QETH_RECOVER_THREAD)) { | 343 | if (qeth_wait_for_threads(card, QETH_RECOVER_THREAD)) { |
341 | QETH_CARD_TEXT(card, 3, "kidREC"); | 344 | QETH_CARD_TEXT(card, 3, "kidREC"); |
342 | return; | 345 | return 0; |
343 | } | 346 | } |
344 | spin_lock_bh(&card->vlanlock); | 347 | spin_lock_bh(&card->vlanlock); |
345 | list_for_each_entry(id, &card->vid_list, list) { | 348 | list_for_each_entry(id, &card->vid_list, list) { |
@@ -355,6 +358,7 @@ static void qeth_l2_vlan_rx_kill_vid(struct net_device *dev, unsigned short vid) | |||
355 | kfree(tmpid); | 358 | kfree(tmpid); |
356 | } | 359 | } |
357 | qeth_l2_set_multicast_list(card->dev); | 360 | qeth_l2_set_multicast_list(card->dev); |
361 | return 0; | ||
358 | } | 362 | } |
359 | 363 | ||
360 | static int qeth_l2_stop_card(struct qeth_card *card, int recovery_mode) | 364 | static int qeth_l2_stop_card(struct qeth_card *card, int recovery_mode) |
diff --git a/drivers/s390/net/qeth_l3_main.c b/drivers/s390/net/qeth_l3_main.c index b2a55e3fde0b..b3b045c21e2c 100644 --- a/drivers/s390/net/qeth_l3_main.c +++ b/drivers/s390/net/qeth_l3_main.c | |||
@@ -1869,15 +1869,15 @@ static void qeth_l3_free_vlan_addresses(struct qeth_card *card, | |||
1869 | qeth_l3_free_vlan_addresses6(card, vid); | 1869 | qeth_l3_free_vlan_addresses6(card, vid); |
1870 | } | 1870 | } |
1871 | 1871 | ||
1872 | static void qeth_l3_vlan_rx_add_vid(struct net_device *dev, unsigned short vid) | 1872 | static int qeth_l3_vlan_rx_add_vid(struct net_device *dev, unsigned short vid) |
1873 | { | 1873 | { |
1874 | struct qeth_card *card = dev->ml_priv; | 1874 | struct qeth_card *card = dev->ml_priv; |
1875 | 1875 | ||
1876 | set_bit(vid, card->active_vlans); | 1876 | set_bit(vid, card->active_vlans); |
1877 | return; | 1877 | return 0; |
1878 | } | 1878 | } |
1879 | 1879 | ||
1880 | static void qeth_l3_vlan_rx_kill_vid(struct net_device *dev, unsigned short vid) | 1880 | static int qeth_l3_vlan_rx_kill_vid(struct net_device *dev, unsigned short vid) |
1881 | { | 1881 | { |
1882 | struct qeth_card *card = dev->ml_priv; | 1882 | struct qeth_card *card = dev->ml_priv; |
1883 | unsigned long flags; | 1883 | unsigned long flags; |
@@ -1885,7 +1885,7 @@ static void qeth_l3_vlan_rx_kill_vid(struct net_device *dev, unsigned short vid) | |||
1885 | QETH_CARD_TEXT_(card, 4, "kid:%d", vid); | 1885 | QETH_CARD_TEXT_(card, 4, "kid:%d", vid); |
1886 | if (qeth_wait_for_threads(card, QETH_RECOVER_THREAD)) { | 1886 | if (qeth_wait_for_threads(card, QETH_RECOVER_THREAD)) { |
1887 | QETH_CARD_TEXT(card, 3, "kidREC"); | 1887 | QETH_CARD_TEXT(card, 3, "kidREC"); |
1888 | return; | 1888 | return 0; |
1889 | } | 1889 | } |
1890 | spin_lock_irqsave(&card->vlanlock, flags); | 1890 | spin_lock_irqsave(&card->vlanlock, flags); |
1891 | /* unregister IP addresses of vlan device */ | 1891 | /* unregister IP addresses of vlan device */ |
@@ -1893,6 +1893,7 @@ static void qeth_l3_vlan_rx_kill_vid(struct net_device *dev, unsigned short vid) | |||
1893 | clear_bit(vid, card->active_vlans); | 1893 | clear_bit(vid, card->active_vlans); |
1894 | spin_unlock_irqrestore(&card->vlanlock, flags); | 1894 | spin_unlock_irqrestore(&card->vlanlock, flags); |
1895 | qeth_l3_set_multicast_list(card->dev); | 1895 | qeth_l3_set_multicast_list(card->dev); |
1896 | return 0; | ||
1896 | } | 1897 | } |
1897 | 1898 | ||
1898 | static inline int qeth_l3_rebuild_skb(struct qeth_card *card, | 1899 | static inline int qeth_l3_rebuild_skb(struct qeth_card *card, |