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

Commit 12ba58af authored by Joe Thornber's avatar Joe Thornber Committed by Alasdair G Kergon
Browse files

dm thin metadata: introduce dm_pool_metadata_set_read_only



Introduce dm_pool_metadata_set_read_only to put the underlying block
manager into read-only mode.

Signed-off-by: default avatarJoe Thornber <ejt@redhat.com>
Signed-off-by: default avatarMike Snitzer <snitzer@redhat.com>
Signed-off-by: default avatarAlasdair G Kergon <agk@redhat.com>
parent 31097557
Loading
Loading
Loading
Loading
+16 −4
Original line number Diff line number Diff line
@@ -184,6 +184,7 @@ struct dm_pool_metadata {
	uint64_t trans_id;
	unsigned long flags;
	sector_t data_block_size;
	bool read_only:1;
};

struct dm_thin_device {
@@ -807,6 +808,7 @@ struct dm_pool_metadata *dm_pool_metadata_open(struct block_device *bdev,
	init_rwsem(&pmd->root_lock);
	pmd->time = 0;
	INIT_LIST_HEAD(&pmd->thin_devices);
	pmd->read_only = false;
	pmd->bdev = bdev;
	pmd->data_block_size = data_block_size;

@@ -849,10 +851,12 @@ int dm_pool_metadata_close(struct dm_pool_metadata *pmd)
		return -EBUSY;
	}

	if (!pmd->read_only) {
		r = __commit_transaction(pmd);
		if (r < 0)
			DMWARN("%s: __commit_transaction() failed, error = %d",
			       __func__, r);
	}

	__destroy_persistent_data_objects(pmd);
	kfree(pmd);
@@ -1587,3 +1591,11 @@ int dm_pool_resize_data_dev(struct dm_pool_metadata *pmd, dm_block_t new_count)

	return r;
}

void dm_pool_metadata_read_only(struct dm_pool_metadata *pmd)
{
	down_write(&pmd->root_lock);
	pmd->read_only = true;
	dm_bm_set_read_only(pmd->bm);
	up_write(&pmd->root_lock);
}
+6 −0
Original line number Diff line number Diff line
@@ -174,6 +174,12 @@ int dm_pool_get_data_dev_size(struct dm_pool_metadata *pmd, dm_block_t *result);
 */
int dm_pool_resize_data_dev(struct dm_pool_metadata *pmd, dm_block_t new_size);

/*
 * Flicks the underlying block manager into read only mode, so you know
 * that nothing is changing.
 */
void dm_pool_metadata_read_only(struct dm_pool_metadata *pmd);

/*----------------------------------------------------------------*/

#endif