[sheepdog] [PATCH v4 2/3] work: make locking by queue_work() more fine grain

Hitoshi Mitake mitake.hitoshi at gmail.com
Wed Dec 18 07:39:12 CET 2013


At Wed, 18 Dec 2013 14:25:48 +0800,
Liu Yuan wrote:
> 
> On Wed, Dec 18, 2013 at 03:04:22PM +0900, Hitoshi Mitake wrote:
> > wi->nr_threads is protected by wi->startup_lock now, we can make the
> > critical section in queue_work() smaller.
> > 
> > Signed-off-by: Hitoshi Mitake <mitake.hitoshi at lab.ntt.co.jp>
> > ---
> >  lib/work.c |    2 +-
> >  1 file changed, 1 insertion(+), 1 deletion(-)
> > 
> > diff --git a/lib/work.c b/lib/work.c
> > index 9d5c5a9..c3b568b 100644
> > --- a/lib/work.c
> > +++ b/lib/work.c
> > @@ -271,12 +271,12 @@ void queue_work(struct work_queue *q, struct work *work)
> >  	struct worker_info *wi = container_of(q, struct worker_info, q);
> >  
> >  	uatomic_inc(&wi->nr_workers);
> > -	pthread_mutex_lock(&wi->pending_lock);
> >  
> >  	if (wq_need_grow(wi))
> 
> no need to protect 'wq_need_grow'? I think this patch is wrong because
> we_need_grow should be protected by wi->pending_lock.

wq_need_grow() should be protected by workers_lock, not pending_lock. I'll send
v5.

Thanks,
Hitoshi



More information about the sheepdog mailing list