Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 88a6621b authored by Joe Thornber's avatar Joe Thornber Committed by Mike Snitzer
Browse files

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: default avatarJoe Thornber <ejt@redhat.com>
Signed-off-by: default avatarMike Snitzer <snitzer@redhat.com>
parent daec338b
Loading
Loading
Loading
Loading
+22 −15
Original line number Diff line number Diff line
@@ -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);