HomeFreeBSD

Check that port is started when MAC filter is set

Description

Check that port is started when MAC filter is set

The MAC filter set may be called without softc_lock held in the case of
SIOCADDMULTI and SIOCDELMULTI ioctls. The ioctl handler checks IFF_DRV_RUNNING
flag which implies port started, but it is not guaranteed to remain.
softc_lock shared lock can't be held in the case of these ioctls processing,
since it results in failure where kernel complains that non-sleepable
lock is held in sleeping thread.

Both problems are repeatable on LAG with LACP proto bring up.

Submitted by: Andrew Rybchenko <Andrew.Rybchenko at oktetlabs.ru>
Sponsored by: Solarflare Communications, Inc.

MFC after: 2 weeks

Details

Provenance
gnnAuthored on Apr 22 2014, 8:19 PM
Parents
rG994f858a8b5f: Use calloc() in favor of malloc + memset.
Branches
Unknown
Tags
Unknown

Event Timeline