Messages in this thread | | | Date | Fri, 13 Jun 2008 00:24:58 +0200 | From | Jarek Poplawski <> | Subject | Re: [PATCH] workqueues: insert_work: use "list_head *" instead of "int tail" |
| |
On Thu, Jun 12, 2008 at 08:55:50PM +0400, Oleg Nesterov wrote: > On 06/12, Oleg Nesterov wrote: > > > > insert_work() inserts the new work_struct before or after cwq->worklist, > > depending on the "int tail" parameter. Change it to accept "list_head *" > > instead, this shrinks .text a bit and allows us to insert the barrier > > after specific work_struct. > > This allows us to implement > > int flush_work(struct work_struct *work) > { ... > } > > suggested by Peter. It only waits for selected work_struct. > > I doubt it will have a lot of users though. In most cases we need > cancel_work_sync() and nothing more.
I guess it could've had enough users if it were done a bit sooner...
I didn't check this implementation yet, but if it's "rtnl_lock in other works" safe then it could've been used in David Miller's fresh patch replacing last uses of flush_scheduled_work() in net drivers' ->stop() etc (thread: "Re: 2.6.25rc7 lockdep trace") - there would be far less doubts about possible change of functionality.
Anyway, this idea looks right to me.
Thanks, Jarek P.
| |