X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=lib%2Fnetlink-socket.c;h=23c05c5e812d8040086faa61904edf4fa88a2f23;hb=57e8d2bdc174cb24e2ae474ea805c7b7308d68a5;hp=da32284b1f8dc67d36237d48b71faf7c20acf521;hpb=0bd01224dcbdabb871e9366799b1647a9a303361;p=sliver-openvswitch.git diff --git a/lib/netlink-socket.c b/lib/netlink-socket.c index da32284b1..23c05c5e8 100644 --- a/lib/netlink-socket.c +++ b/lib/netlink-socket.c @@ -925,12 +925,10 @@ do_lookup_genl_family(const char *name, struct nlattr **attrs, /* Finds the multicast group called 'group_name' in genl family 'family_name'. * When successful, writes its result to 'multicast_group' and returns 0. * Otherwise, clears 'multicast_group' and returns a positive error code. - * - * Some kernels do not support looking up a multicast group with this function. - * In this case, 'multicast_group' will be populated with 'fallback'. */ + */ int nl_lookup_genl_mcgroup(const char *family_name, const char *group_name, - unsigned int *multicast_group, unsigned int fallback) + unsigned int *multicast_group) { struct nlattr *family_attrs[ARRAY_SIZE(family_policy)]; const struct nlattr *mc; @@ -945,10 +943,7 @@ nl_lookup_genl_mcgroup(const char *family_name, const char *group_name, } if (!family_attrs[CTRL_ATTR_MCAST_GROUPS]) { - *multicast_group = fallback; - VLOG_WARN("%s-%s: has no multicast group, using fallback %d", - family_name, group_name, *multicast_group); - error = 0; + error = EPROTO; goto exit; } @@ -1012,8 +1007,8 @@ struct nl_pool { int n; }; -static struct nl_pool pools[MAX_LINKS]; -static pthread_mutex_t pool_mutex = PTHREAD_ADAPTIVE_MUTEX_INITIALIZER; +static struct ovs_mutex pool_mutex = OVS_MUTEX_INITIALIZER; +static struct nl_pool pools[MAX_LINKS] OVS_GUARDED_BY(pool_mutex); static int nl_pool_alloc(int protocol, struct nl_sock **sockp) @@ -1023,12 +1018,12 @@ nl_pool_alloc(int protocol, struct nl_sock **sockp) ovs_assert(protocol >= 0 && protocol < ARRAY_SIZE(pools)); - xpthread_mutex_lock(&pool_mutex); + ovs_mutex_lock(&pool_mutex); pool = &pools[protocol]; if (pool->n > 0) { sock = pool->socks[--pool->n]; } - xpthread_mutex_unlock(&pool_mutex); + ovs_mutex_unlock(&pool_mutex); if (sock) { *sockp = sock; @@ -1044,12 +1039,12 @@ nl_pool_release(struct nl_sock *sock) if (sock) { struct nl_pool *pool = &pools[sock->protocol]; - xpthread_mutex_lock(&pool_mutex); + ovs_mutex_lock(&pool_mutex); if (pool->n < ARRAY_SIZE(pool->socks)) { pool->socks[pool->n++] = sock; sock = NULL; } - xpthread_mutex_unlock(&pool_mutex); + ovs_mutex_unlock(&pool_mutex); nl_sock_destroy(sock); }