[Date Prev][Date Next] [Thread Prev][Thread Next]
[Thread Index]
[Date Index]
[Author Index]
Re: [dm-devel] [PATCH] 2.6.12-rc6: fix rh_dec()/rh_inc() race in dm-raid1.c
- From: "Jun'ichi Nomura" <j-nomura ce jp nec com>
- To: Jonathan Brassow <jbrassow redhat com>
- Cc: device-mapper development <dm-devel redhat com>
- Subject: Re: [dm-devel] [PATCH] 2.6.12-rc6: fix rh_dec()/rh_inc() race in dm-raid1.c
- Date: Fri, 24 Jun 2005 11:45:31 -0400
Hi Jon,
Jonathan E Brassow wrote:
> could this be solved by doing your patch in rh_dec and just moving the
> atomic_inc in rh_inc? The reason I ask is that the mark_region log
> call can block.
No.
Unless they are serialized, it's possible that rh_inc() will see the
state RH_DIRTY, while rh_dec change it to RH_CLEAN.
As a result, the region which has I/O in-flight may be freed.
Is it reasonable to call mark_region() unconditionally?
Then we can call it outside of the lock.
>> CPU0 CPU1
>>
>> -----------------------------------------------------------------------
>> -------
>> rh_dec()
>> if (atomic_dec_and_test(pending))
>> <the region is still marked dirty>
if (atomic_read(pending)==0)
>> rh_inc()
>> atomic_inc(pending)
>> if the region is clean
>> mark the region dirty
>> and remove from clean list
else do nothing
>> mark the region clean
>> and move to clean list
[Date Prev][Date Next] [Thread Prev][Thread Next]
[Thread Index]
[Date Index]
[Author Index]