On 23/10/2026 22:28, Tejun Heo wrote:
Hello, Tvrtko.
On Thu, Oct 22, 2026 at 10:38:46AM +0100, Tvrtko Ursulin wrote:
+/* Sanitize attributes not modifiable via sysfs. */
+static void
+sanitize_immutable_workqueue_attrs(struct workqueue_struct *wq,
+ struct workqueue_attrs *attrs)
...
+/* Sanitize attributes modifiable via sysfs. */
+static void
+sanitize_mutable_workqueue_attrs(struct workqueue_struct *wq,
+ struct workqueue_attrs *attrs)
...
+static void
+sanitize_workqueue_attrs(struct workqueue_struct *wq,
+ struct workqueue_attrs *attrs)
+{
+ sanitize_immutable_workqueue_attrs(wq, attrs);
+ sanitize_mutable_workqueue_attrs(wq, attrs);
+}
The three helpers seem a bit excessive for what they do, and the
immutable call in sanitize_workqueue_attrs() is redundant, as
apply_wqattrs_prepare() runs sanitize_immutable_workqueue_attrs() on
both of its copies anyway.
Okay I dropped sanitize_workqueue_attrs() locally. I was trying to
express the logic behind mutable and immutable, which also leads me to...
Could the comment on sanitize_immutable_workqueue_attrs() state the
contract? These attrs follow from the workqueue flags and are enforced
on every apply, apply_workqueue_attrs() callers included, not only
sysfs.
...the topic of what would be the best commentary for both.
Would these comments work:
/*
* Sanitize attributes derived from the workqueue flags and which need
to be
* enforced on every attribute application.
*/
static void
sanitize_immutable_workqueue_attrs(struct workqueue_struct *wq,
struct workqueue_attrs *attrs)
{
if (wq->flags & __WQ_ORDERED)
attrs->ordered = true;
}
/*
* Sanitize attributes derived from the workqueue flags and which need
to be
* enforced only on workqueue creation.
*/
static void
sanitize_mutable_workqueue_attrs(struct workqueue_struct *wq,
struct workqueue_attrs *attrs)
{
if (wq->flags & WQ_HIGHPRI)
attrs->nice = HIGHPRI_NICE_LEVEL;
}
Regards,
Tvrtko