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:
Родитель
e782eff591
Коммит
665022d72f
|
@ -1946,6 +1946,7 @@ static int commit_if_needed(struct cache *cache)
|
||||||
|
|
||||||
static void process_deferred_bios(struct cache *cache)
|
static void process_deferred_bios(struct cache *cache)
|
||||||
{
|
{
|
||||||
|
bool prealloc_used = false;
|
||||||
unsigned long flags;
|
unsigned long flags;
|
||||||
struct bio_list bios;
|
struct bio_list bios;
|
||||||
struct bio *bio;
|
struct bio *bio;
|
||||||
|
@ -1980,13 +1981,16 @@ static void process_deferred_bios(struct cache *cache)
|
||||||
process_discard_bio(cache, &structs, bio);
|
process_discard_bio(cache, &structs, bio);
|
||||||
else
|
else
|
||||||
process_bio(cache, &structs, bio);
|
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)
|
static void process_deferred_cells(struct cache *cache)
|
||||||
{
|
{
|
||||||
|
bool prealloc_used = false;
|
||||||
unsigned long flags;
|
unsigned long flags;
|
||||||
struct dm_bio_prison_cell *cell, *tmp;
|
struct dm_bio_prison_cell *cell, *tmp;
|
||||||
struct list_head cells;
|
struct list_head cells;
|
||||||
|
@ -2014,9 +2018,11 @@ static void process_deferred_cells(struct cache *cache)
|
||||||
}
|
}
|
||||||
|
|
||||||
process_cell(cache, &structs, cell);
|
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)
|
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)
|
static void writeback_some_dirty_blocks(struct cache *cache)
|
||||||
{
|
{
|
||||||
|
bool prealloc_used = false;
|
||||||
dm_oblock_t oblock;
|
dm_oblock_t oblock;
|
||||||
dm_cblock_t cblock;
|
dm_cblock_t cblock;
|
||||||
struct prealloc structs;
|
struct prealloc structs;
|
||||||
|
@ -2080,9 +2087,11 @@ static void writeback_some_dirty_blocks(struct cache *cache)
|
||||||
}
|
}
|
||||||
|
|
||||||
writeback(cache, &structs, oblock, cblock, old_ocell);
|
writeback(cache, &structs, oblock, cblock, old_ocell);
|
||||||
|
prealloc_used = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
prealloc_free_structs(cache, &structs);
|
if (prealloc_used)
|
||||||
|
prealloc_free_structs(cache, &structs);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*----------------------------------------------------------------
|
/*----------------------------------------------------------------
|
||||||
|
|
Загрузка…
Ссылка в новой задаче