mirror of
				https://github.com/torvalds/linux.git
				synced 2025-11-04 10:40:15 +02:00 
			
		
		
		
	dm cache: avoid calls to prealloc_free_structs() if possible
If no work was performed then prealloc_data_structs() wasn't ever called so there isn't any need to call prealloc_free_structs(). Signed-off-by: Mike Snitzer <snitzer@redhat.com>
This commit is contained in:
		
							parent
							
								
									e782eff591
								
							
						
					
					
						commit
						665022d72f
					
				
					 1 changed files with 12 additions and 3 deletions
				
			
		| 
						 | 
				
			
			@ -1946,6 +1946,7 @@ static int commit_if_needed(struct cache *cache)
 | 
			
		|||
 | 
			
		||||
static void process_deferred_bios(struct cache *cache)
 | 
			
		||||
{
 | 
			
		||||
	bool prealloc_used = false;
 | 
			
		||||
	unsigned long flags;
 | 
			
		||||
	struct bio_list bios;
 | 
			
		||||
	struct bio *bio;
 | 
			
		||||
| 
						 | 
				
			
			@ -1980,13 +1981,16 @@ static void process_deferred_bios(struct cache *cache)
 | 
			
		|||
			process_discard_bio(cache, &structs, bio);
 | 
			
		||||
		else
 | 
			
		||||
			process_bio(cache, &structs, bio);
 | 
			
		||||
		prealloc_used = true;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	prealloc_free_structs(cache, &structs);
 | 
			
		||||
	if (prealloc_used)
 | 
			
		||||
		prealloc_free_structs(cache, &structs);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void process_deferred_cells(struct cache *cache)
 | 
			
		||||
{
 | 
			
		||||
	bool prealloc_used = false;
 | 
			
		||||
	unsigned long flags;
 | 
			
		||||
	struct dm_bio_prison_cell *cell, *tmp;
 | 
			
		||||
	struct list_head cells;
 | 
			
		||||
| 
						 | 
				
			
			@ -2014,9 +2018,11 @@ static void process_deferred_cells(struct cache *cache)
 | 
			
		|||
		}
 | 
			
		||||
 | 
			
		||||
		process_cell(cache, &structs, cell);
 | 
			
		||||
		prealloc_used = true;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	prealloc_free_structs(cache, &structs);
 | 
			
		||||
	if (prealloc_used)
 | 
			
		||||
		prealloc_free_structs(cache, &structs);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void process_deferred_flush_bios(struct cache *cache, bool submit_bios)
 | 
			
		||||
| 
						 | 
				
			
			@ -2061,6 +2067,7 @@ static void process_deferred_writethrough_bios(struct cache *cache)
 | 
			
		|||
 | 
			
		||||
static void writeback_some_dirty_blocks(struct cache *cache)
 | 
			
		||||
{
 | 
			
		||||
	bool prealloc_used = false;
 | 
			
		||||
	dm_oblock_t oblock;
 | 
			
		||||
	dm_cblock_t cblock;
 | 
			
		||||
	struct prealloc structs;
 | 
			
		||||
| 
						 | 
				
			
			@ -2080,9 +2087,11 @@ static void writeback_some_dirty_blocks(struct cache *cache)
 | 
			
		|||
		}
 | 
			
		||||
 | 
			
		||||
		writeback(cache, &structs, oblock, cblock, old_ocell);
 | 
			
		||||
		prealloc_used = true;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	prealloc_free_structs(cache, &structs);
 | 
			
		||||
	if (prealloc_used)
 | 
			
		||||
		prealloc_free_structs(cache, &structs);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/*----------------------------------------------------------------
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in a new issue