sched_ext: create_dsq: Return -EEXIST on duplicate request
commita8897ed852upstream. create_dsq and therefore the scx_bpf_create_dsq kfunc currently silently ignore duplicate entries. As a sched_ext scheduler is creating each DSQ for a different purpose this is surprising behaviour. Replace rhashtable_insert_fast which ignores duplicates with rhashtable_lookup_insert_fast that reports duplicates (though doesn't return their value). The rest of the code is structured correctly and this now returns -EEXIST. Tested by adding an extra scx_bpf_create_dsq to scx_simple. Previously this was ignored, now init fails with a -17 code. Also ran scx_lavd which continued to work well. Signed-off-by: Jake Hillion <jake@hillion.co.uk> Acked-by: Andrea Righi <arighi@nvidia.com> Fixes:f0e1a0643a("sched_ext: Implement BPF extensible scheduler class") Cc: stable@vger.kernel.org # v6.12+ Signed-off-by: Tejun Heo <tj@kernel.org> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
committed by
Greg Kroah-Hartman
parent
7a30bbd36c
commit
0f91e4f69f
+2
-2
@@ -4160,8 +4160,8 @@ static struct scx_dispatch_q *create_dsq(u64 dsq_id, int node)
|
||||
|
||||
init_dsq(dsq, dsq_id);
|
||||
|
||||
ret = rhashtable_insert_fast(&dsq_hash, &dsq->hash_node,
|
||||
dsq_hash_params);
|
||||
ret = rhashtable_lookup_insert_fast(&dsq_hash, &dsq->hash_node,
|
||||
dsq_hash_params);
|
||||
if (ret) {
|
||||
kfree(dsq);
|
||||
return ERR_PTR(ret);
|
||||
|
||||
Reference in New Issue
Block a user