up_read(&md->lock); 
up_read(&md->io_lock); 
static int dm_request(request_queue_t *q, struct bio *bio){	int r;	struct mapped_device *md = q->queuedata;	down_read(&md->lock);	/*	 * If we're suspended we have to queue	 * this io for later.	 */	while (test_bit(DMF_BLOCK_IO, &md->flags)) {		up_read(&md->lock);		if (bio_rw(bio) == READA) {			bio_io_error(bio, bio->bi_size);			return 0;		}		r = queue_io(md, bio);		if (r < 0) {			bio_io_error(bio, bio->bi_size);			return 0;		} else if (r == 0)			return 0;	/* deferred successfully */		/*		 * We're in a while loop, because someone could suspend		 * before we get to the following read lock.		 */		down_read(&md->lock);	}	__split_bio(md, bio);	up_read(&md->lock);	return 0;}
10457	/local/tlutelli/issta_data/temp/c/2005_temp/2005/10457/2ca3310e78912a527d7d2c62c01da7cbf7346b8d/dm.c/clean/drivers/md/dm.c