Loading net/dcb/dcbnl.c +35 −46 Original line number Diff line number Diff line Loading @@ -1716,6 +1716,22 @@ static int dcb_doit(struct sk_buff *skb, struct nlmsghdr *nlh, void *arg) return ret; } static struct dcb_app_type *dcb_app_lookup(const struct dcb_app *app, int ifindex, int prio) { struct dcb_app_type *itr; list_for_each_entry(itr, &dcb_app_list, list) { if (itr->app.selector == app->selector && itr->app.protocol == app->protocol && itr->ifindex == ifindex && (!prio || itr->app.priority == prio)) return itr; } return NULL; } /** * dcb_getapp - retrieve the DCBX application user priority * Loading @@ -1729,14 +1745,8 @@ u8 dcb_getapp(struct net_device *dev, struct dcb_app *app) u8 prio = 0; spin_lock(&dcb_lock); list_for_each_entry(itr, &dcb_app_list, list) { if (itr->app.selector == app->selector && itr->app.protocol == app->protocol && itr->ifindex == dev->ifindex) { if ((itr = dcb_app_lookup(app, dev->ifindex, 0))) prio = itr->app.priority; break; } } spin_unlock(&dcb_lock); return prio; Loading @@ -1762,10 +1772,7 @@ int dcb_setapp(struct net_device *dev, struct dcb_app *new) spin_lock(&dcb_lock); /* Search for existing match and replace */ list_for_each_entry(itr, &dcb_app_list, list) { if (itr->app.selector == new->selector && itr->app.protocol == new->protocol && itr->ifindex == dev->ifindex) { if ((itr = dcb_app_lookup(new, dev->ifindex, 0))) { if (new->priority) itr->app.priority = new->priority; else { Loading @@ -1774,7 +1781,6 @@ int dcb_setapp(struct net_device *dev, struct dcb_app *new) } goto out; } } /* App type does not exist add new application type */ if (new->priority) { struct dcb_app_type *entry; Loading Loading @@ -1808,13 +1814,8 @@ u8 dcb_ieee_getapp_mask(struct net_device *dev, struct dcb_app *app) u8 prio = 0; spin_lock(&dcb_lock); list_for_each_entry(itr, &dcb_app_list, list) { if (itr->app.selector == app->selector && itr->app.protocol == app->protocol && itr->ifindex == dev->ifindex) { if ((itr = dcb_app_lookup(app, dev->ifindex, 0))) prio |= 1 << itr->app.priority; } } spin_unlock(&dcb_lock); return prio; Loading @@ -1830,7 +1831,7 @@ EXPORT_SYMBOL(dcb_ieee_getapp_mask); */ int dcb_ieee_setapp(struct net_device *dev, struct dcb_app *new) { struct dcb_app_type *itr, *entry; struct dcb_app_type *entry; struct dcb_app_type event; int err = 0; Loading @@ -1841,15 +1842,10 @@ int dcb_ieee_setapp(struct net_device *dev, struct dcb_app *new) spin_lock(&dcb_lock); /* Search for existing match and abort if found */ list_for_each_entry(itr, &dcb_app_list, list) { if (itr->app.selector == new->selector && itr->app.protocol == new->protocol && itr->app.priority == new->priority && itr->ifindex == dev->ifindex) { if (dcb_app_lookup(new, dev->ifindex, new->priority)) { err = -EEXIST; goto out; } } /* App entry does not exist add new entry */ entry = kmalloc(sizeof(struct dcb_app_type), GFP_ATOMIC); Loading Loading @@ -1887,19 +1883,12 @@ int dcb_ieee_delapp(struct net_device *dev, struct dcb_app *del) spin_lock(&dcb_lock); /* Search for existing match and remove it. */ list_for_each_entry(itr, &dcb_app_list, list) { if (itr->app.selector == del->selector && itr->app.protocol == del->protocol && itr->app.priority == del->priority && itr->ifindex == dev->ifindex) { if ((itr = dcb_app_lookup(del, dev->ifindex, del->priority))) { list_del(&itr->list); kfree(itr); err = 0; goto out; } } out: spin_unlock(&dcb_lock); if (!err) call_dcbevent_notifiers(DCB_APP_EVENT, &event); Loading Loading
net/dcb/dcbnl.c +35 −46 Original line number Diff line number Diff line Loading @@ -1716,6 +1716,22 @@ static int dcb_doit(struct sk_buff *skb, struct nlmsghdr *nlh, void *arg) return ret; } static struct dcb_app_type *dcb_app_lookup(const struct dcb_app *app, int ifindex, int prio) { struct dcb_app_type *itr; list_for_each_entry(itr, &dcb_app_list, list) { if (itr->app.selector == app->selector && itr->app.protocol == app->protocol && itr->ifindex == ifindex && (!prio || itr->app.priority == prio)) return itr; } return NULL; } /** * dcb_getapp - retrieve the DCBX application user priority * Loading @@ -1729,14 +1745,8 @@ u8 dcb_getapp(struct net_device *dev, struct dcb_app *app) u8 prio = 0; spin_lock(&dcb_lock); list_for_each_entry(itr, &dcb_app_list, list) { if (itr->app.selector == app->selector && itr->app.protocol == app->protocol && itr->ifindex == dev->ifindex) { if ((itr = dcb_app_lookup(app, dev->ifindex, 0))) prio = itr->app.priority; break; } } spin_unlock(&dcb_lock); return prio; Loading @@ -1762,10 +1772,7 @@ int dcb_setapp(struct net_device *dev, struct dcb_app *new) spin_lock(&dcb_lock); /* Search for existing match and replace */ list_for_each_entry(itr, &dcb_app_list, list) { if (itr->app.selector == new->selector && itr->app.protocol == new->protocol && itr->ifindex == dev->ifindex) { if ((itr = dcb_app_lookup(new, dev->ifindex, 0))) { if (new->priority) itr->app.priority = new->priority; else { Loading @@ -1774,7 +1781,6 @@ int dcb_setapp(struct net_device *dev, struct dcb_app *new) } goto out; } } /* App type does not exist add new application type */ if (new->priority) { struct dcb_app_type *entry; Loading Loading @@ -1808,13 +1814,8 @@ u8 dcb_ieee_getapp_mask(struct net_device *dev, struct dcb_app *app) u8 prio = 0; spin_lock(&dcb_lock); list_for_each_entry(itr, &dcb_app_list, list) { if (itr->app.selector == app->selector && itr->app.protocol == app->protocol && itr->ifindex == dev->ifindex) { if ((itr = dcb_app_lookup(app, dev->ifindex, 0))) prio |= 1 << itr->app.priority; } } spin_unlock(&dcb_lock); return prio; Loading @@ -1830,7 +1831,7 @@ EXPORT_SYMBOL(dcb_ieee_getapp_mask); */ int dcb_ieee_setapp(struct net_device *dev, struct dcb_app *new) { struct dcb_app_type *itr, *entry; struct dcb_app_type *entry; struct dcb_app_type event; int err = 0; Loading @@ -1841,15 +1842,10 @@ int dcb_ieee_setapp(struct net_device *dev, struct dcb_app *new) spin_lock(&dcb_lock); /* Search for existing match and abort if found */ list_for_each_entry(itr, &dcb_app_list, list) { if (itr->app.selector == new->selector && itr->app.protocol == new->protocol && itr->app.priority == new->priority && itr->ifindex == dev->ifindex) { if (dcb_app_lookup(new, dev->ifindex, new->priority)) { err = -EEXIST; goto out; } } /* App entry does not exist add new entry */ entry = kmalloc(sizeof(struct dcb_app_type), GFP_ATOMIC); Loading Loading @@ -1887,19 +1883,12 @@ int dcb_ieee_delapp(struct net_device *dev, struct dcb_app *del) spin_lock(&dcb_lock); /* Search for existing match and remove it. */ list_for_each_entry(itr, &dcb_app_list, list) { if (itr->app.selector == del->selector && itr->app.protocol == del->protocol && itr->app.priority == del->priority && itr->ifindex == dev->ifindex) { if ((itr = dcb_app_lookup(del, dev->ifindex, del->priority))) { list_del(&itr->list); kfree(itr); err = 0; goto out; } } out: spin_unlock(&dcb_lock); if (!err) call_dcbevent_notifiers(DCB_APP_EVENT, &event); Loading