|
@@ -1624,17 +1624,19 @@ void dm_cache_metadata_set_stats(struct dm_cache_metadata *cmd,
|
|
|
|
|
|
int dm_cache_commit(struct dm_cache_metadata *cmd, bool clean_shutdown)
|
|
|
{
|
|
|
- int r;
|
|
|
+ int r = -EINVAL;
|
|
|
flags_mutator mutator = (clean_shutdown ? set_clean_shutdown :
|
|
|
clear_clean_shutdown);
|
|
|
|
|
|
WRITE_LOCK(cmd);
|
|
|
+ if (cmd->fail_io)
|
|
|
+ goto out;
|
|
|
+
|
|
|
r = __commit_transaction(cmd, mutator);
|
|
|
if (r)
|
|
|
goto out;
|
|
|
|
|
|
r = __begin_transaction(cmd);
|
|
|
-
|
|
|
out:
|
|
|
WRITE_UNLOCK(cmd);
|
|
|
return r;
|
|
@@ -1646,7 +1648,8 @@ int dm_cache_get_free_metadata_block_count(struct dm_cache_metadata *cmd,
|
|
|
int r = -EINVAL;
|
|
|
|
|
|
READ_LOCK(cmd);
|
|
|
- r = dm_sm_get_nr_free(cmd->metadata_sm, result);
|
|
|
+ if (!cmd->fail_io)
|
|
|
+ r = dm_sm_get_nr_free(cmd->metadata_sm, result);
|
|
|
READ_UNLOCK(cmd);
|
|
|
|
|
|
return r;
|
|
@@ -1658,7 +1661,8 @@ int dm_cache_get_metadata_dev_size(struct dm_cache_metadata *cmd,
|
|
|
int r = -EINVAL;
|
|
|
|
|
|
READ_LOCK(cmd);
|
|
|
- r = dm_sm_get_nr_blocks(cmd->metadata_sm, result);
|
|
|
+ if (!cmd->fail_io)
|
|
|
+ r = dm_sm_get_nr_blocks(cmd->metadata_sm, result);
|
|
|
READ_UNLOCK(cmd);
|
|
|
|
|
|
return r;
|