[dm-devel] [PATCH 0/8] dm: request-based dm-multipath

Hannes Reinecke hare at suse.de
Wed Mar 11 12:28:29 UTC 2009


Hi Kiyoshi,

Kiyoshi Ueda wrote:
> Hi Hannes,
> 
[ .. ]
> 
> Suspend was broken.
> dm_suspend() recognized that suspend completed while some requests
> were still in flight.  So we could swap/free the in-use table while
> there was in_flight request.
> The patch is like the attached one, although it is not finalized and
> I'm testing now.
> I'll post an updated patch-set including the attached patch
> this week or next week.
> 
> 
> ---
>  drivers/md/dm.c |  236 ++++++++++++++++++++++++++++++++++----------------------
>  1 file changed, 144 insertions(+), 92 deletions(-)
> 
> Index: 2.6.29-rc2/drivers/md/dm.c
> ===================================================================
> --- 2.6.29-rc2.orig/drivers/md/dm.c
> +++ 2.6.29-rc2/drivers/md/dm.c
> @@ -701,11 +701,17 @@ static void free_bio_clone(struct reques
>  	}
>  }
>  
> -static void dec_rq_pending(struct dm_rq_target_io *tio)
> +/*
> + * XXX: Not taking queue lock for efficiency.
> + *      For correctness, waiters will check that again with queue lock held.
> + *      No false negative because this function will be called everytime
> + *      in_flight is decremented.
> + */
> +static void rq_completed(struct mapped_device *md)
>  {
> -	if (!atomic_dec_return(&tio->md->pending))
> +	if (!md->queue->in_flight)
>  		/* nudge anyone waiting on suspend queue */
> -		wake_up(&tio->md->wait);
> +		wake_up(&md->wait);
>  }
>  
Hmm. Don't think that's a good idea. Either take the spinlock here or
in_flight should be atomic.

Apart from this I'll give it a shot.

Cheers,

Hannes
-- 
Dr. Hannes Reinecke		      zSeries & Storage
hare at suse.de			      +49 911 74053 688
SUSE LINUX Products GmbH, Maxfeldstr. 5, 90409 Nürnberg
GF: Markus Rex, HRB 16746 (AG Nürnberg)




More information about the dm-devel mailing list