Hello, On Mon, May 13, 2024 at 02:53:41PM +0200, Håkon Bugge wrote: > diff --git a/include/linux/workqueue.h b/include/linux/workqueue.h > index 158784dd189ab..09ecc692ffcae 100644 > --- a/include/linux/workqueue.h > +++ b/include/linux/workqueue.h > @@ -398,6 +398,8 @@ enum wq_flags { > __WQ_DRAINING = 1 << 16, /* internal: workqueue is draining */ > __WQ_ORDERED = 1 << 17, /* internal: workqueue is ordered */ > __WQ_LEGACY = 1 << 18, /* internal: create*_workqueue() */ > + __WQ_NOIO = 1 << 19, /* internal: execute work with NOIO */ > + __WQ_NOFS = 1 << 20, /* internal: execute work with NOFS */ I don't quite understand how this is supposed to be used. The flags are marked internal but nothing actually sets them. Looking at later patches, I don't see any usages either. What am I missing? > @@ -3184,6 +3189,12 @@ __acquires(&pool->lock) > > lockdep_copy_map(&lockdep_map, &work->lockdep_map); > #endif > + /* Set inherited alloc flags */ > + if (use_noio_allocs) > + noio_flags = memalloc_noio_save(); > + if (use_nofs_allocs) > + nofs_flags = memalloc_nofs_save(); > + > /* ensure we're on the correct CPU */ > WARN_ON_ONCE(!(pool->flags & POOL_DISASSOCIATED) && > raw_smp_processor_id() != pool->cpu); > @@ -3320,6 +3331,12 @@ __acquires(&pool->lock) > > /* must be the last step, see the function comment */ > pwq_dec_nr_in_flight(pwq, work_data); > + > + /* Restore alloc flags */ > + if (use_nofs_allocs) > + memalloc_nofs_restore(nofs_flags); > + if (use_noio_allocs) > + memalloc_noio_restore(noio_flags); Also, this looks like something that the work function can do on entry and before exit, no? Thanks. -- tejun