mirror of https://github.com/xemu-project/xemu.git
block: Remove bdrv_recurse_is_first_non_filter()
It no longer has any users. Signed-off-by: Max Reitz <mreitz@redhat.com> Reviewed-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com> Message-Id: <20200218103454.296704-11-mreitz@redhat.com> Signed-off-by: Kevin Wolf <kwolf@redhat.com>
This commit is contained in:
parent
810803a87c
commit
6b4907cf42
33
block.c
33
block.c
|
@ -6201,39 +6201,6 @@ int bdrv_amend_options(BlockDriverState *bs, QemuOpts *opts,
|
||||||
return bs->drv->bdrv_amend_options(bs, opts, status_cb, cb_opaque, errp);
|
return bs->drv->bdrv_amend_options(bs, opts, status_cb, cb_opaque, errp);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* This function will be called by the bdrv_recurse_is_first_non_filter method
|
|
||||||
* of block filter and by bdrv_is_first_non_filter.
|
|
||||||
* It is used to test if the given bs is the candidate or recurse more in the
|
|
||||||
* node graph.
|
|
||||||
*/
|
|
||||||
bool bdrv_recurse_is_first_non_filter(BlockDriverState *bs,
|
|
||||||
BlockDriverState *candidate)
|
|
||||||
{
|
|
||||||
/* return false if basic checks fails */
|
|
||||||
if (!bs || !bs->drv) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* the code reached a non block filter driver -> check if the bs is
|
|
||||||
* the same as the candidate. It's the recursion termination condition.
|
|
||||||
*/
|
|
||||||
if (!bs->drv->is_filter) {
|
|
||||||
return bs == candidate;
|
|
||||||
}
|
|
||||||
/* Down this path the driver is a block filter driver */
|
|
||||||
|
|
||||||
/* If the block filter recursion method is defined use it to recurse down
|
|
||||||
* the node graph.
|
|
||||||
*/
|
|
||||||
if (bs->drv->bdrv_recurse_is_first_non_filter) {
|
|
||||||
return bs->drv->bdrv_recurse_is_first_non_filter(bs, candidate);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* the driver is a block filter but don't allow to recurse -> return false
|
|
||||||
*/
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* This function checks whether the given @to_replace is allowed to be
|
* This function checks whether the given @to_replace is allowed to be
|
||||||
* replaced by a node that always shows the same data as @bs. This is
|
* replaced by a node that always shows the same data as @bs. This is
|
||||||
|
|
|
@ -268,20 +268,6 @@ static int blkverify_co_flush(BlockDriverState *bs)
|
||||||
return bdrv_co_flush(s->test_file->bs);
|
return bdrv_co_flush(s->test_file->bs);
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool blkverify_recurse_is_first_non_filter(BlockDriverState *bs,
|
|
||||||
BlockDriverState *candidate)
|
|
||||||
{
|
|
||||||
BDRVBlkverifyState *s = bs->opaque;
|
|
||||||
|
|
||||||
bool perm = bdrv_recurse_is_first_non_filter(bs->file->bs, candidate);
|
|
||||||
|
|
||||||
if (perm) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
return bdrv_recurse_is_first_non_filter(s->test_file->bs, candidate);
|
|
||||||
}
|
|
||||||
|
|
||||||
static bool blkverify_recurse_can_replace(BlockDriverState *bs,
|
static bool blkverify_recurse_can_replace(BlockDriverState *bs,
|
||||||
BlockDriverState *to_replace)
|
BlockDriverState *to_replace)
|
||||||
{
|
{
|
||||||
|
@ -341,7 +327,6 @@ static BlockDriver bdrv_blkverify = {
|
||||||
.bdrv_co_flush = blkverify_co_flush,
|
.bdrv_co_flush = blkverify_co_flush,
|
||||||
|
|
||||||
.is_filter = true,
|
.is_filter = true,
|
||||||
.bdrv_recurse_is_first_non_filter = blkverify_recurse_is_first_non_filter,
|
|
||||||
.bdrv_recurse_can_replace = blkverify_recurse_can_replace,
|
.bdrv_recurse_can_replace = blkverify_recurse_can_replace,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -118,13 +118,6 @@ static void cor_lock_medium(BlockDriverState *bs, bool locked)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static bool cor_recurse_is_first_non_filter(BlockDriverState *bs,
|
|
||||||
BlockDriverState *candidate)
|
|
||||||
{
|
|
||||||
return bdrv_recurse_is_first_non_filter(bs->file->bs, candidate);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
static BlockDriver bdrv_copy_on_read = {
|
static BlockDriver bdrv_copy_on_read = {
|
||||||
.format_name = "copy-on-read",
|
.format_name = "copy-on-read",
|
||||||
|
|
||||||
|
@ -143,8 +136,6 @@ static BlockDriver bdrv_copy_on_read = {
|
||||||
|
|
||||||
.bdrv_co_block_status = bdrv_co_block_status_from_file,
|
.bdrv_co_block_status = bdrv_co_block_status_from_file,
|
||||||
|
|
||||||
.bdrv_recurse_is_first_non_filter = cor_recurse_is_first_non_filter,
|
|
||||||
|
|
||||||
.has_variable_length = true,
|
.has_variable_length = true,
|
||||||
.is_filter = true,
|
.is_filter = true,
|
||||||
};
|
};
|
||||||
|
|
|
@ -128,13 +128,6 @@ static void compress_lock_medium(BlockDriverState *bs, bool locked)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static bool compress_recurse_is_first_non_filter(BlockDriverState *bs,
|
|
||||||
BlockDriverState *candidate)
|
|
||||||
{
|
|
||||||
return bdrv_recurse_is_first_non_filter(bs->file->bs, candidate);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
static BlockDriver bdrv_compress = {
|
static BlockDriver bdrv_compress = {
|
||||||
.format_name = "compress",
|
.format_name = "compress",
|
||||||
|
|
||||||
|
@ -154,8 +147,6 @@ static BlockDriver bdrv_compress = {
|
||||||
|
|
||||||
.bdrv_co_block_status = bdrv_co_block_status_from_file,
|
.bdrv_co_block_status = bdrv_co_block_status_from_file,
|
||||||
|
|
||||||
.bdrv_recurse_is_first_non_filter = compress_recurse_is_first_non_filter,
|
|
||||||
|
|
||||||
.has_variable_length = true,
|
.has_variable_length = true,
|
||||||
.is_filter = true,
|
.is_filter = true,
|
||||||
};
|
};
|
||||||
|
|
|
@ -796,23 +796,6 @@ static coroutine_fn int quorum_co_flush(BlockDriverState *bs)
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool quorum_recurse_is_first_non_filter(BlockDriverState *bs,
|
|
||||||
BlockDriverState *candidate)
|
|
||||||
{
|
|
||||||
BDRVQuorumState *s = bs->opaque;
|
|
||||||
int i;
|
|
||||||
|
|
||||||
for (i = 0; i < s->num_children; i++) {
|
|
||||||
bool perm = bdrv_recurse_is_first_non_filter(s->children[i]->bs,
|
|
||||||
candidate);
|
|
||||||
if (perm) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
static bool quorum_recurse_can_replace(BlockDriverState *bs,
|
static bool quorum_recurse_can_replace(BlockDriverState *bs,
|
||||||
BlockDriverState *to_replace)
|
BlockDriverState *to_replace)
|
||||||
{
|
{
|
||||||
|
@ -1216,7 +1199,6 @@ static BlockDriver bdrv_quorum = {
|
||||||
.bdrv_child_perm = quorum_child_perm,
|
.bdrv_child_perm = quorum_child_perm,
|
||||||
|
|
||||||
.is_filter = true,
|
.is_filter = true,
|
||||||
.bdrv_recurse_is_first_non_filter = quorum_recurse_is_first_non_filter,
|
|
||||||
.bdrv_recurse_can_replace = quorum_recurse_can_replace,
|
.bdrv_recurse_can_replace = quorum_recurse_can_replace,
|
||||||
|
|
||||||
.strong_runtime_opts = quorum_strong_runtime_opts,
|
.strong_runtime_opts = quorum_strong_runtime_opts,
|
||||||
|
|
|
@ -306,12 +306,6 @@ out:
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool replication_recurse_is_first_non_filter(BlockDriverState *bs,
|
|
||||||
BlockDriverState *candidate)
|
|
||||||
{
|
|
||||||
return bdrv_recurse_is_first_non_filter(bs->file->bs, candidate);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void secondary_do_checkpoint(BDRVReplicationState *s, Error **errp)
|
static void secondary_do_checkpoint(BDRVReplicationState *s, Error **errp)
|
||||||
{
|
{
|
||||||
Error *local_err = NULL;
|
Error *local_err = NULL;
|
||||||
|
@ -699,7 +693,6 @@ static BlockDriver bdrv_replication = {
|
||||||
.bdrv_co_writev = replication_co_writev,
|
.bdrv_co_writev = replication_co_writev,
|
||||||
|
|
||||||
.is_filter = true,
|
.is_filter = true,
|
||||||
.bdrv_recurse_is_first_non_filter = replication_recurse_is_first_non_filter,
|
|
||||||
|
|
||||||
.has_variable_length = true,
|
.has_variable_length = true,
|
||||||
.strong_runtime_opts = replication_strong_runtime_opts,
|
.strong_runtime_opts = replication_strong_runtime_opts,
|
||||||
|
|
|
@ -207,12 +207,6 @@ static void throttle_reopen_abort(BDRVReopenState *reopen_state)
|
||||||
reopen_state->opaque = NULL;
|
reopen_state->opaque = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool throttle_recurse_is_first_non_filter(BlockDriverState *bs,
|
|
||||||
BlockDriverState *candidate)
|
|
||||||
{
|
|
||||||
return bdrv_recurse_is_first_non_filter(bs->file->bs, candidate);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void coroutine_fn throttle_co_drain_begin(BlockDriverState *bs)
|
static void coroutine_fn throttle_co_drain_begin(BlockDriverState *bs)
|
||||||
{
|
{
|
||||||
ThrottleGroupMember *tgm = bs->opaque;
|
ThrottleGroupMember *tgm = bs->opaque;
|
||||||
|
@ -252,8 +246,6 @@ static BlockDriver bdrv_throttle = {
|
||||||
.bdrv_co_pwrite_zeroes = throttle_co_pwrite_zeroes,
|
.bdrv_co_pwrite_zeroes = throttle_co_pwrite_zeroes,
|
||||||
.bdrv_co_pdiscard = throttle_co_pdiscard,
|
.bdrv_co_pdiscard = throttle_co_pdiscard,
|
||||||
|
|
||||||
.bdrv_recurse_is_first_non_filter = throttle_recurse_is_first_non_filter,
|
|
||||||
|
|
||||||
.bdrv_attach_aio_context = throttle_attach_aio_context,
|
.bdrv_attach_aio_context = throttle_attach_aio_context,
|
||||||
.bdrv_detach_aio_context = throttle_detach_aio_context,
|
.bdrv_detach_aio_context = throttle_detach_aio_context,
|
||||||
|
|
||||||
|
|
|
@ -391,10 +391,6 @@ int bdrv_amend_options(BlockDriverState *bs_new, QemuOpts *opts,
|
||||||
BlockDriverAmendStatusCB *status_cb, void *cb_opaque,
|
BlockDriverAmendStatusCB *status_cb, void *cb_opaque,
|
||||||
Error **errp);
|
Error **errp);
|
||||||
|
|
||||||
/* external snapshots */
|
|
||||||
bool bdrv_recurse_is_first_non_filter(BlockDriverState *bs,
|
|
||||||
BlockDriverState *candidate);
|
|
||||||
|
|
||||||
/* check if a named node can be replaced when doing drive-mirror */
|
/* check if a named node can be replaced when doing drive-mirror */
|
||||||
BlockDriverState *check_to_replace_node(BlockDriverState *parent_bs,
|
BlockDriverState *check_to_replace_node(BlockDriverState *parent_bs,
|
||||||
const char *node_name, Error **errp);
|
const char *node_name, Error **errp);
|
||||||
|
|
|
@ -94,14 +94,6 @@ struct BlockDriver {
|
||||||
* must implement them and return -ENOTSUP.
|
* must implement them and return -ENOTSUP.
|
||||||
*/
|
*/
|
||||||
bool is_filter;
|
bool is_filter;
|
||||||
/* for snapshots block filter like Quorum can implement the
|
|
||||||
* following recursive callback.
|
|
||||||
* It's purpose is to recurse on the filter children while calling
|
|
||||||
* bdrv_recurse_is_first_non_filter on them.
|
|
||||||
* For a sample implementation look in the future Quorum block filter.
|
|
||||||
*/
|
|
||||||
bool (*bdrv_recurse_is_first_non_filter)(BlockDriverState *bs,
|
|
||||||
BlockDriverState *candidate);
|
|
||||||
/*
|
/*
|
||||||
* Return true if @to_replace can be replaced by a BDS with the
|
* Return true if @to_replace can be replaced by a BDS with the
|
||||||
* same data as @bs without it affecting @bs's behavior (that is,
|
* same data as @bs without it affecting @bs's behavior (that is,
|
||||||
|
|
Loading…
Reference in New Issue