config_aqm() refused to configure CoDel/PIE on a flowset whose
scheduler had a hash table or an instance ("flowset busy"). The check
was there because queues that already exist were left without AQM
state after aqm_cleanup_deconfig_fs(). It had two bad effects:
- a scheduler with a mask always has siht allocated, so CoDel/PIE could never be configured on "pipe N config ... mask ... codel" or on a queue of a masked scheduler, even with no traffic at all;
- on the changed-parameters path of config_fs(), fsk_detach() has already removed the old AQM, so a refusal left the flowset with DN_IS_AQM set and aqmfp NULL. Changing the weight of a queue while its pipe carried traffic silently turned it into droptail.
The error never reached userland, only the kernel log.
Instead of refusing, init the AQM status of the queues that exist
after the new AQM is configured, which is what si_new() and q_new()
do for new queues. config_fs() now configures AQM after fsk_attach()
on the changed path, so the queue embedded in the instances of a
!DN_MULTIQUEUE scheduler (which survives fsk_detach()) is covered.
Both cleanup and init now select those embedded queues by
"fs->sched->fs == fs", the flowset si_new() uses, rather than by
the flowset number.
PR: 298731
Signed-off-by: Abdul Wasey <w453y.me@gmail.com>