Messages in this thread | | | Date | Wed, 13 Jun 2012 13:56:47 +1000 | From | Dave Chinner <> | Subject | Re: [PATCH] writeback: avoid race when update bandwidth |
| |
On Tue, Jun 12, 2012 at 07:21:29PM +0800, Fengguang Wu wrote: > On Tue, Jun 12, 2012 at 06:26:43PM +0800, Wanpeng Li wrote: > > From: Wanpeng Li <liwp@linux.vnet.ibm.com> > > That email address is no longer in use? > > > Since bdi->wb.list_lock is used to protect the b_* lists, > > so the flushers who call wb_writeback to writeback pages will > > stuck when bandwidth update policy holds this lock. In order > > to avoid this race we can introduce a new bandwidth_lock who > > is responsible for protecting bandwidth update policy.
This is not a race condition - it is a lock contention condition.
> This looks good to me. wb.list_lock could be contended and it's better > for bdi_update_bandwidth() to use a standalone and hardly contended > lock.
I'm not sure it will be "hardly contended". That's a global lock, so now we'll end up with updates on different bdis contending and it's not uncommon to see a couple of thousand processes on large machines beating on balance_dirty_pages(). Putting a global scope lock around such a function doesn't seem like a good solution to me.
Oh, and if you want to remove the dirty_lock from global_update_limit(), then replacing the lock with a cmpxchg loop will do it just fine....
Cheers,
Dave. -- Dave Chinner david@fromorbit.com
| |