Commit 08193d1a authored by Petr Machata's avatar Petr Machata Committed by David S. Miller

net: dcb: For wild-card lookups, use priority -1, not 0

The function dcb_app_lookup walks the list of specified DCB APP entries,
looking for one that matches a given criteria: ifindex, selector,
protocol ID and optionally also priority. The "don't care" value for
priority is set to 0, because that priority has not been allowed under
CEE regime, which predates the IEEE standardization.

Under IEEE, 0 is a valid priority number. But because dcb_app_lookup
considers zero a wild card, attempts to add an APP entry with priority 0
fail when other entries exist for a given ifindex / selector / PID
triplet.

Fix by changing the wild-card value to -1.
Signed-off-by: default avatarPetr Machata <petrm@mellanox.com>
Signed-off-by: default avatarIdo Schimmel <idosch@mellanox.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 1f3ed383
...@@ -1786,7 +1786,7 @@ static struct dcb_app_type *dcb_app_lookup(const struct dcb_app *app, ...@@ -1786,7 +1786,7 @@ static struct dcb_app_type *dcb_app_lookup(const struct dcb_app *app,
if (itr->app.selector == app->selector && if (itr->app.selector == app->selector &&
itr->app.protocol == app->protocol && itr->app.protocol == app->protocol &&
itr->ifindex == ifindex && itr->ifindex == ifindex &&
(!prio || itr->app.priority == prio)) ((prio == -1) || itr->app.priority == prio))
return itr; return itr;
} }
...@@ -1821,7 +1821,8 @@ u8 dcb_getapp(struct net_device *dev, struct dcb_app *app) ...@@ -1821,7 +1821,8 @@ u8 dcb_getapp(struct net_device *dev, struct dcb_app *app)
u8 prio = 0; u8 prio = 0;
spin_lock_bh(&dcb_lock); spin_lock_bh(&dcb_lock);
if ((itr = dcb_app_lookup(app, dev->ifindex, 0))) itr = dcb_app_lookup(app, dev->ifindex, -1);
if (itr)
prio = itr->app.priority; prio = itr->app.priority;
spin_unlock_bh(&dcb_lock); spin_unlock_bh(&dcb_lock);
...@@ -1849,7 +1850,8 @@ int dcb_setapp(struct net_device *dev, struct dcb_app *new) ...@@ -1849,7 +1850,8 @@ int dcb_setapp(struct net_device *dev, struct dcb_app *new)
spin_lock_bh(&dcb_lock); spin_lock_bh(&dcb_lock);
/* Search for existing match and replace */ /* Search for existing match and replace */
if ((itr = dcb_app_lookup(new, dev->ifindex, 0))) { itr = dcb_app_lookup(new, dev->ifindex, -1);
if (itr) {
if (new->priority) if (new->priority)
itr->app.priority = new->priority; itr->app.priority = new->priority;
else { else {
...@@ -1882,7 +1884,8 @@ u8 dcb_ieee_getapp_mask(struct net_device *dev, struct dcb_app *app) ...@@ -1882,7 +1884,8 @@ u8 dcb_ieee_getapp_mask(struct net_device *dev, struct dcb_app *app)
u8 prio = 0; u8 prio = 0;
spin_lock_bh(&dcb_lock); spin_lock_bh(&dcb_lock);
if ((itr = dcb_app_lookup(app, dev->ifindex, 0))) itr = dcb_app_lookup(app, dev->ifindex, -1);
if (itr)
prio |= 1 << itr->app.priority; prio |= 1 << itr->app.priority;
spin_unlock_bh(&dcb_lock); spin_unlock_bh(&dcb_lock);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment