| Index: drivers/md/dm-bht.c
 | 
| diff --git a/drivers/md/dm-bht.c b/drivers/md/dm-bht.c
 | 
| index 46b03c09702bd31ad8319228c24112164c31cac7..4c262a54d0cbd35fca49e0a1c690bccd53628bc6 100644
 | 
| --- a/drivers/md/dm-bht.c
 | 
| +++ b/drivers/md/dm-bht.c
 | 
| @@ -691,12 +691,13 @@ static int dm_bht_verify_path(struct dm_bht *bht, unsigned int block_index)
 | 
|  		int state;
 | 
|  
 | 
|  		DMDEBUG("verify_path for b=%u on d=%d", block_index, depth);
 | 
| +		/* TODO(msb,wad): would be nice to avoid two atomic reads */
 | 
|  		state = atomic_read(&entry->state);
 | 
|  		if (state == DM_BHT_ENTRY_VERIFIED) {
 | 
| -			DMDEBUG("verify_path node %u is verified in parent",
 | 
| +			DMDEBUG("verify_path node %u is verified to root",
 | 
|  				block_index);
 | 
| -			entry = dm_bht_get_entry(bht, --depth, block_index);
 | 
| -			continue;
 | 
| +			depth++; /* avoid an extra cmpxchg */
 | 
| +			break;
 | 
|  		} else if (state <= DM_BHT_ENTRY_ERROR) {
 | 
|  			DMCRIT("entry(d=%u,b=%u) is in an error state: %d",
 | 
|  			       depth, block_index, state);
 | 
| @@ -726,12 +727,15 @@ static int dm_bht_verify_path(struct dm_bht *bht, unsigned int block_index)
 | 
|  			goto mismatch;
 | 
|  		}
 | 
|  
 | 
| +		entry = parent;
 | 
| +		depth--;
 | 
| +	}
 | 
| +	/* Mark path to leaf as verified. */
 | 
| +	for (; depth < bht->depth; depth++) {
 | 
| +		entry = dm_bht_get_entry(bht, depth, block_index);
 | 
|  		atomic_cmpxchg(&entry->state,
 | 
|  			       DM_BHT_ENTRY_READY,
 | 
|  			       DM_BHT_ENTRY_VERIFIED);
 | 
| -
 | 
| -		entry = parent;
 | 
| -		depth--;
 | 
|  	}
 | 
|  
 | 
|  	return 0;
 | 
| 
 |