On Mon, Apr 19, 2010 at 10:48 PM, Josef Bacik <jo...@redhat.com> wrote:
> On Mon, Apr 19, 2010 at 10:46:12PM +0800, Yan, Zheng wrote:
>> On Mon, Apr 19, 2010 at 9:57 PM, Josef Bacik <jo...@redhat.com> wrote:
>> > The purpose of maybe_allocate_chunk was that there is no way to know if 
>> > some
>> > other CPU is currently trying to allocate a chunk for the given space 
>> > info.  We
>> > could have two cpu's come inot do_chunk_alloc at relatively the same time 
>> > and
>> > end up allocating twice the amount of space, which is why I did the 
>> > waitqueue
>> > thing.  It seems like this is still a possibility with your patch.  Thanks,
>> >
>> This is impossible because the very first thing do_chunk_alloc does is
>> lock the chunk_mutex.
>>
>
> Sure, that just means we don't get two things creating chunks at the same 
> time,
> but not from creating them one right after another.  So CPU 0 and 1 come in to
> the check free space stuff, realize they need to allocate a chunk, and race to
> call do_chunk_alloc.  One of them wins, and the other blocks on the 
> chunk_mutex
> lock.  When the first finishes the other one is able to continue and do what 
> it
> was originally going to do, and then you get two chunks when you really only
> wanted one.  Thanks,
>

there is a check in do_chunk_alloc, so the later one will do nothing
if the first
call adds enough space.

Yan Zheng
--
To unsubscribe from this list: send the line "unsubscribe linux-btrfs" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to