Messages in this thread | | | Date | Fri, 13 Jun 2008 10:13:12 +0000 | From | Jarek Poplawski <> | Subject | Re: [PATCH] workqueues: insert_work: use "list_head *" instead of "int tail" |
| |
On 13-06-2008 00:24, Jarek Poplawski wrote: > 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.
Hmm... I see it's definitely not for this. I should forget about my crazy idea. Yes, cancel_work_sync() is mostly enough, and flush_ remains dangerous. (Maybe it's better not to get new users for this?)
Regards, Jarek P.
| |