Hi! > This patch implements freezer support for workqueues. The current > refrigerator implementation makes all workqueues NOFREEZE, regardless of > whether they need to be or not. > > While this doesn't appear to have caused any problems with swsusp (ie > Pavel's version) to date, this is no guarantee for the future. > Furthermore, it seems better to me to treat kernel and userspace threads > consistently, and it also enables us to err on the side of caution by > default with new workqueues. > > Queues can be made unfreezable via the new kthread_nonfreeze_run, > create_nofreeze_workqueue and create_nofreeze_singlethread_workqueue > calls, which take the same parameters as kthread_run, create_workqueue > and create_singlethread_workqueue respectively. Existing call syntax is > unchanged and the vast majority of current workqueue calls are therefore > unaffected. > > As far as Suspend2 goes, I don't rate this as critical. May save your > hard disk partition one day, but that depends upon what workqueues get > implemented in the future, what out of tree ones do and whether I've > missed good rationale for having nofreeze on existing in tree instances. > If you must flame me, call me overly careful :>. > @@ -151,6 +158,20 @@ struct task_struct *kthread_create(int ( > > return create.result; > } > + > +struct task_struct *kthread_create(int (*threadfn)(void *data), > + void *data, > + const char namefmt[], ...) > +{ > + char result[TASK_COMM_LEN]; > + > + va_list args; > + va_start(args, namefmt); > + vsnprintf(result, TASK_COMM_LEN, namefmt, args); > + va_end(args); > + return _kthread_create(threadfn, data, 0, result); > +} > + This is slightly ugly and uses lot of stack. Otherwise patch looks okay. If you want me to apply it, be sure to put me into To: or at least Cc:. Or perhaps you want to just mail it to akpm, noting that I acked it (if you do something with the char result[] :-). Pavel -- teflon -- maybe it is a trademark, but it should not be.