Skip to content

Commit

Permalink
dm thin metadata: add format option to dm_pool_metadata_open
Browse files Browse the repository at this point in the history
Add a parameter to dm_pool_metadata_open to indicate whether or not an
unformatted metadata area should be formatted.

Signed-off-by: Joe Thornber <ejt@redhat.com>
Signed-off-by: Mike Snitzer <snitzer@redhat.com>
Signed-off-by: Alasdair G Kergon <agk@redhat.com>
  • Loading branch information
Joe Thornber authored and Alasdair G Kergon committed Jul 27, 2012
1 parent 0fa5b17 commit 66b1edc
Show file tree
Hide file tree
Showing 3 changed files with 12 additions and 10 deletions.
17 changes: 9 additions & 8 deletions drivers/md/dm-thin-metadata.c
Original file line number Diff line number Diff line change
Expand Up @@ -624,7 +624,7 @@ static int __open_metadata(struct dm_pool_metadata *pmd)
return r;
}

static int __open_or_format_metadata(struct dm_pool_metadata *pmd)
static int __open_or_format_metadata(struct dm_pool_metadata *pmd, bool format_device)
{
int r, unformatted;

Expand All @@ -633,12 +633,12 @@ static int __open_or_format_metadata(struct dm_pool_metadata *pmd)
return r;

if (unformatted)
return __format_metadata(pmd);
else
return __open_metadata(pmd);
return format_device ? __format_metadata(pmd) : -EPERM;

return __open_metadata(pmd);
}

static int __create_persistent_data_objects(struct dm_pool_metadata *pmd)
static int __create_persistent_data_objects(struct dm_pool_metadata *pmd, bool format_device)
{
int r;

Expand All @@ -650,7 +650,7 @@ static int __create_persistent_data_objects(struct dm_pool_metadata *pmd)
return PTR_ERR(pmd->bm);
}

r = __open_or_format_metadata(pmd);
r = __open_or_format_metadata(pmd, format_device);
if (r)
dm_block_manager_destroy(pmd->bm);

Expand Down Expand Up @@ -792,7 +792,8 @@ static int __commit_transaction(struct dm_pool_metadata *pmd)
}

struct dm_pool_metadata *dm_pool_metadata_open(struct block_device *bdev,
sector_t data_block_size)
sector_t data_block_size,
bool format_device)
{
int r;
struct dm_pool_metadata *pmd;
Expand All @@ -809,7 +810,7 @@ struct dm_pool_metadata *dm_pool_metadata_open(struct block_device *bdev,
pmd->bdev = bdev;
pmd->data_block_size = data_block_size;

r = __create_persistent_data_objects(pmd);
r = __create_persistent_data_objects(pmd, format_device);
if (r) {
kfree(pmd);
return ERR_PTR(r);
Expand Down
3 changes: 2 additions & 1 deletion drivers/md/dm-thin-metadata.h
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,8 @@ typedef uint64_t dm_thin_id;
* Reopens or creates a new, empty metadata volume.
*/
struct dm_pool_metadata *dm_pool_metadata_open(struct block_device *bdev,
sector_t data_block_size);
sector_t data_block_size,
bool format_device);

int dm_pool_metadata_close(struct dm_pool_metadata *pmd);

Expand Down
2 changes: 1 addition & 1 deletion drivers/md/dm-thin.c
Original file line number Diff line number Diff line change
Expand Up @@ -1712,7 +1712,7 @@ static struct pool *pool_create(struct mapped_device *pool_md,
struct pool *pool;
struct dm_pool_metadata *pmd;

pmd = dm_pool_metadata_open(metadata_dev, block_size);
pmd = dm_pool_metadata_open(metadata_dev, block_size, true);
if (IS_ERR(pmd)) {
*error = "Error creating metadata object";
return (struct pool *)pmd;
Expand Down

0 comments on commit 66b1edc

Please sign in to comment.