diff options
author | Joe Thornber <ejt@redhat.com> | 2013-12-04 20:16:12 -0500 |
---|---|---|
committer | Mike Snitzer <snitzer@redhat.com> | 2014-01-07 10:14:26 -0500 |
commit | 88a6621bed65ce2d421a808a2f60e1b64914d777 (patch) | |
tree | 764c3b6f7c3a7938c043fe4a12dad27fb0b29dce /drivers/md/dm-thin.c | |
parent | daec338bbdaa96ba5b14c4777603e65ef74c769b (diff) |
dm thin: factor out check_low_water_mark and use bools
Factor check_low_water_mark() out of alloc_data_block().
Change a couple unsigned flags in the pool structure to bool.
Signed-off-by: Joe Thornber <ejt@redhat.com>
Signed-off-by: Mike Snitzer <snitzer@redhat.com>
Diffstat (limited to 'drivers/md/dm-thin.c')
-rw-r--r-- | drivers/md/dm-thin.c | 37 |
1 files changed, 22 insertions, 15 deletions
diff --git a/drivers/md/dm-thin.c b/drivers/md/dm-thin.c index efa3d42ac70a..e49c27c91a1f 100644 --- a/drivers/md/dm-thin.c +++ b/drivers/md/dm-thin.c @@ -163,8 +163,8 @@ struct pool { int sectors_per_block_shift; struct pool_features pf; - unsigned low_water_triggered:1; /* A dm event has been sent */ - unsigned no_free_space:1; /* A -ENOSPC warning has been issued */ + bool low_water_triggered:1; /* A dm event has been sent */ + bool no_free_space:1; /* A -ENOSPC warning has been issued */ struct dm_bio_prison *prison; struct dm_kcopyd_client *copier; @@ -909,6 +909,20 @@ static int commit(struct pool *pool) return r; } +static void check_low_water_mark(struct pool *pool, dm_block_t free_blocks) +{ + unsigned long flags; + + if (free_blocks <= pool->low_water_blocks && !pool->low_water_triggered) { + DMWARN("%s: reached low water mark for data device: sending event.", + dm_device_name(pool->pool_md)); + spin_lock_irqsave(&pool->lock, flags); + pool->low_water_triggered = true; + spin_unlock_irqrestore(&pool->lock, flags); + dm_table_event(pool->ti->table); + } +} + static int alloc_data_block(struct thin_c *tc, dm_block_t *result) { int r; @@ -930,14 +944,7 @@ static int alloc_data_block(struct thin_c *tc, dm_block_t *result) if (r) return r; - if (free_blocks <= pool->low_water_blocks && !pool->low_water_triggered) { - DMWARN("%s: reached low water mark for data device: sending event.", - dm_device_name(pool->pool_md)); - spin_lock_irqsave(&pool->lock, flags); - pool->low_water_triggered = 1; - spin_unlock_irqrestore(&pool->lock, flags); - dm_table_event(pool->ti->table); - } + check_low_water_mark(pool, free_blocks); if (!free_blocks) { /* @@ -963,7 +970,7 @@ static int alloc_data_block(struct thin_c *tc, dm_block_t *result) DMWARN("%s: no free data space available.", dm_device_name(pool->pool_md)); spin_lock_irqsave(&pool->lock, flags); - pool->no_free_space = 1; + pool->no_free_space = true; spin_unlock_irqrestore(&pool->lock, flags); return -ENOSPC; } @@ -1780,8 +1787,8 @@ static struct pool *pool_create(struct mapped_device *pool_md, bio_list_init(&pool->deferred_flush_bios); INIT_LIST_HEAD(&pool->prepared_mappings); INIT_LIST_HEAD(&pool->prepared_discards); - pool->low_water_triggered = 0; - pool->no_free_space = 0; + pool->low_water_triggered = false; + pool->no_free_space = false; bio_list_init(&pool->retry_on_resume_list); pool->shared_read_ds = dm_deferred_set_create(); @@ -2298,8 +2305,8 @@ static void pool_resume(struct dm_target *ti) unsigned long flags; spin_lock_irqsave(&pool->lock, flags); - pool->low_water_triggered = 0; - pool->no_free_space = 0; + pool->low_water_triggered = false; + pool->no_free_space = false; __requeue_bios(pool); spin_unlock_irqrestore(&pool->lock, flags); |