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

Mikulas Patocka mpatocka at redhat.com
Thu Oct 23 13:40:31 UTC 2008


On Thu, 23 Oct 2008, aluno3 at poczta.onet.pl wrote:

> 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?

Yes, these two patches are expected to be the final fix. Thanks for the 
testing. If you get some more crashes even with these two, write about 
them.

Mikulas

> 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