[dm-devel] Calltrace in dm-snapshot in 2.6.27 kernel

aluno3 at poczta.onet.pl aluno3 at poczta.onet.pl
Thu Oct 23 11:30:04 UTC 2008


I used dm-snapshot-fix-primary-pe-race.patch and last patch related with
pending_exception.After the same test and workload everything work
correctly so far.Is it final patch?


best and thanks


Mikulas Patocka wrote:
> Oh, sorry for this "struct struct" in the patch in free_pending_exception, 
> replace it just with one "struct". I forgot to refresh the patch before 
> sending it.
>
> Mikulas
>
> On Wed, 22 Oct 2008, Mikulas Patocka wrote:
>
>   
>> On Wed, 22 Oct 2008, aluno3 at poczta.onet.pl wrote:
>>
>>     
>>> Hi
>>>
>>> I used your patch and I ran test the same workload. After a few hours
>>> test, everything is OK. Is it possible? Test is still running.When I get
>>> something wrong from kernel I write to You again.
>>>       
>> Hi
>>
>> That's good that it works. So try this. Keep the first patch (it is this 
>> one --- 
>> http://people.redhat.com/mpatocka/patches/kernel/2.6.27/dm-snapshot-fix-primary-pe-race.patch 
>> --- I think Milan already sent it to you and you have it applied). Undo 
>> the second patch (that one that hides deallocation with /* */ ). And apply 
>> this. Run the same test.
>>
>> Mikulas
>>
>> ---
>>  drivers/md/dm-snap.c |   10 +++++++++-
>>  drivers/md/dm-snap.h |    2 ++
>>  2 files changed, 11 insertions(+), 1 deletion(-)
>>
>> Index: linux-2.6.27-clean/drivers/md/dm-snap.c
>> ===================================================================
>> --- linux-2.6.27-clean.orig/drivers/md/dm-snap.c	2008-10-22 15:41:24.000000000 +0200
>> +++ linux-2.6.27-clean/drivers/md/dm-snap.c	2008-10-22 15:51:33.000000000 +0200
>> @@ -368,6 +368,7 @@ static struct dm_snap_pending_exception 
>>  	struct dm_snap_pending_exception *pe = mempool_alloc(s->pending_pool,
>>  							     GFP_NOIO);
>>  
>> +	atomic_inc(&s->n_pending_exceptions);
>>  	pe->snap = s;
>>  
>>  	return pe;
>> @@ -375,7 +376,10 @@ static struct dm_snap_pending_exception 
>>  
>>  static void free_pending_exception(struct dm_snap_pending_exception *pe)
>>  {
>> -	mempool_free(pe, pe->snap->pending_pool);
>> +	struct struct dm_snapshot *s = pe->snap;
>> +	mempool_free(pe, s->pending_pool);
>> +	smp_mb__before_atomic_dec();
>> +	atomic_dec(&s->n_pending_exceptions);
>>  }
>>  
>>  static void insert_completed_exception(struct dm_snapshot *s,
>> @@ -601,6 +605,7 @@ static int snapshot_ctr(struct dm_target
>>  	s->valid = 1;
>>  	s->active = 0;
>>  	s->last_percent = 0;
>> +	atomic_set(&s->n_pending_exceptions, 0);
>>  	init_rwsem(&s->lock);
>>  	spin_lock_init(&s->pe_lock);
>>  	s->ti = ti;
>> @@ -727,6 +732,9 @@ static void snapshot_dtr(struct dm_targe
>>  	/* After this returns there can be no new kcopyd jobs. */
>>  	unregister_snapshot(s);
>>  
>> +	while (atomic_read(&s->n_pending_exceptions))
>> +		yield();
>> +
>>  #ifdef CONFIG_DM_DEBUG
>>  	for (i = 0; i < DM_TRACKED_CHUNK_HASH_SIZE; i++)
>>  		BUG_ON(!hlist_empty(&s->tracked_chunk_hash[i]));
>> Index: linux-2.6.27-clean/drivers/md/dm-snap.h
>> ===================================================================
>> --- linux-2.6.27-clean.orig/drivers/md/dm-snap.h	2008-10-22 15:45:08.000000000 +0200
>> +++ linux-2.6.27-clean/drivers/md/dm-snap.h	2008-10-22 15:46:49.000000000 +0200
>> @@ -163,6 +163,8 @@ struct dm_snapshot {
>>  
>>  	mempool_t *pending_pool;
>>  
>> +	atomic_t n_pending_exceptions;
>> +
>>  	struct exception_table pending;
>>  	struct exception_table complete;
>>  
>>
>> --
>> dm-devel mailing list
>> dm-devel at redhat.com
>> https://www.redhat.com/mailman/listinfo/dm-devel
>>
>>     
>
>   




More information about the dm-devel mailing list