aboutsummaryrefslogtreecommitdiff
path: root/drivers/md/dm-thin.c
diff options
context:
space:
mode:
authorJoe Thornber <ejt@redhat.com>2013-12-04 20:16:12 -0500
committerMike Snitzer <snitzer@redhat.com>2014-01-07 10:14:26 -0500
commit88a6621bed65ce2d421a808a2f60e1b64914d777 (patch)
tree764c3b6f7c3a7938c043fe4a12dad27fb0b29dce /drivers/md/dm-thin.c
parentdaec338bbdaa96ba5b14c4777603e65ef74c769b (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.c37
1 files changed, 22 insertions, 15 deletions
diff --git a/drivers/md/dm-thin.c b/drivers/md/dm-thin.c
index efa3d42ac70..e49c27c91a1 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);