From: Max Reitz <mreitz@redhat.com>
To: qemu-block@nongnu.org
Cc: Kevin Wolf <kwolf@redhat.com>,
qemu-devel@nongnu.org, Markus Armbruster <armbru@redhat.com>,
Stefan Hajnoczi <stefanha@redhat.com>,
Max Reitz <mreitz@redhat.com>, John Snow <jsnow@redhat.com>
Subject: [Qemu-devel] [PATCH v3 19/38] block: Prepare remaining BB functions for NULL BDS
Date: Wed, 3 Jun 2015 21:44:00 +0200 [thread overview]
Message-ID: <1433360659-1915-20-git-send-email-mreitz@redhat.com> (raw)
In-Reply-To: <1433360659-1915-1-git-send-email-mreitz@redhat.com>
There are several BlockBackend functions which, in theory, cannot fail.
This patch makes them cope with the BlockDriverState pointer being NULL
by making them fall back to some default action like ignoring the value
in setters and returning the default in getters.
Signed-off-by: Max Reitz <mreitz@redhat.com>
Reviewed-by: Eric Blake <eblake@redhat.com>
---
block/block-backend.c | 76 ++++++++++++++++++++++++++++++++++++++++-----------
1 file changed, 60 insertions(+), 16 deletions(-)
diff --git a/block/block-backend.c b/block/block-backend.c
index 55836a3..57302f8 100644
--- a/block/block-backend.c
+++ b/block/block-backend.c
@@ -655,7 +655,11 @@ int64_t blk_getlength(BlockBackend *blk)
void blk_get_geometry(BlockBackend *blk, uint64_t *nb_sectors_ptr)
{
- bdrv_get_geometry(blk->bs, nb_sectors_ptr);
+ if (!blk->bs) {
+ *nb_sectors_ptr = 0;
+ } else {
+ bdrv_get_geometry(blk->bs, nb_sectors_ptr);
+ }
}
int64_t blk_nb_sectors(BlockBackend *blk)
@@ -882,17 +886,27 @@ int blk_is_read_only(BlockBackend *blk)
int blk_is_sg(BlockBackend *blk)
{
+ if (!blk->bs) {
+ return 0;
+ }
+
return bdrv_is_sg(blk->bs);
}
int blk_enable_write_cache(BlockBackend *blk)
{
+ if (!blk->bs) {
+ return 0;
+ }
+
return bdrv_enable_write_cache(blk->bs);
}
void blk_set_enable_write_cache(BlockBackend *blk, bool wce)
{
- bdrv_set_enable_write_cache(blk->bs, wce);
+ if (blk->bs) {
+ bdrv_set_enable_write_cache(blk->bs, wce);
+ }
}
void blk_invalidate_cache(BlockBackend *blk, Error **errp)
@@ -917,12 +931,16 @@ bool blk_is_available(BlockBackend *blk)
void blk_lock_medium(BlockBackend *blk, bool locked)
{
- bdrv_lock_medium(blk->bs, locked);
+ if (blk->bs) {
+ bdrv_lock_medium(blk->bs, locked);
+ }
}
void blk_eject(BlockBackend *blk, bool eject_flag)
{
- bdrv_eject(blk->bs, eject_flag);
+ if (blk->bs) {
+ bdrv_eject(blk->bs, eject_flag);
+ }
}
int blk_get_flags(BlockBackend *blk)
@@ -936,7 +954,11 @@ int blk_get_flags(BlockBackend *blk)
int blk_get_max_transfer_length(BlockBackend *blk)
{
- return blk->bs->bl.max_transfer_length;
+ if (blk->bs) {
+ return blk->bs->bl.max_transfer_length;
+ } else {
+ return 0;
+ }
}
void blk_set_guest_block_size(BlockBackend *blk, int align)
@@ -951,22 +973,32 @@ void *blk_blockalign(BlockBackend *blk, size_t size)
bool blk_op_is_blocked(BlockBackend *blk, BlockOpType op, Error **errp)
{
+ if (!blk->bs) {
+ return false;
+ }
+
return bdrv_op_is_blocked(blk->bs, op, errp);
}
void blk_op_unblock(BlockBackend *blk, BlockOpType op, Error *reason)
{
- bdrv_op_unblock(blk->bs, op, reason);
+ if (blk->bs) {
+ bdrv_op_unblock(blk->bs, op, reason);
+ }
}
void blk_op_block_all(BlockBackend *blk, Error *reason)
{
- bdrv_op_block_all(blk->bs, reason);
+ if (blk->bs) {
+ bdrv_op_block_all(blk->bs, reason);
+ }
}
void blk_op_unblock_all(BlockBackend *blk, Error *reason)
{
- bdrv_op_unblock_all(blk->bs, reason);
+ if (blk->bs) {
+ bdrv_op_unblock_all(blk->bs, reason);
+ }
}
AioContext *blk_get_aio_context(BlockBackend *blk)
@@ -986,15 +1018,19 @@ static AioContext *blk_aiocb_get_aio_context(BlockAIOCB *acb)
void blk_set_aio_context(BlockBackend *blk, AioContext *new_context)
{
- bdrv_set_aio_context(blk->bs, new_context);
+ if (blk->bs) {
+ bdrv_set_aio_context(blk->bs, new_context);
+ }
}
void blk_add_aio_context_notifier(BlockBackend *blk,
void (*attached_aio_context)(AioContext *new_context, void *opaque),
void (*detach_aio_context)(void *opaque), void *opaque)
{
- bdrv_add_aio_context_notifier(blk->bs, attached_aio_context,
- detach_aio_context, opaque);
+ if (blk->bs) {
+ bdrv_add_aio_context_notifier(blk->bs, attached_aio_context,
+ detach_aio_context, opaque);
+ }
}
void blk_remove_aio_context_notifier(BlockBackend *blk,
@@ -1003,23 +1039,31 @@ void blk_remove_aio_context_notifier(BlockBackend *blk,
void (*detach_aio_context)(void *),
void *opaque)
{
- bdrv_remove_aio_context_notifier(blk->bs, attached_aio_context,
- detach_aio_context, opaque);
+ if (blk->bs) {
+ bdrv_remove_aio_context_notifier(blk->bs, attached_aio_context,
+ detach_aio_context, opaque);
+ }
}
void blk_add_close_notifier(BlockBackend *blk, Notifier *notify)
{
- bdrv_add_close_notifier(blk->bs, notify);
+ if (blk->bs) {
+ bdrv_add_close_notifier(blk->bs, notify);
+ }
}
void blk_io_plug(BlockBackend *blk)
{
- bdrv_io_plug(blk->bs);
+ if (blk->bs) {
+ bdrv_io_plug(blk->bs);
+ }
}
void blk_io_unplug(BlockBackend *blk)
{
- bdrv_io_unplug(blk->bs);
+ if (blk->bs) {
+ bdrv_io_unplug(blk->bs);
+ }
}
BlockAcctStats *blk_get_stats(BlockBackend *blk)
--
2.4.1
next prev parent reply other threads:[~2015-06-03 19:45 UTC|newest]
Thread overview: 77+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-06-03 19:43 [Qemu-devel] [PATCH v3 00/38] blockdev: BlockBackend and media Max Reitz
2015-06-03 19:43 ` [Qemu-devel] [PATCH v3 01/38] block: Remove host floppy support Max Reitz
2015-06-03 20:08 ` Eric Blake
2015-06-03 19:43 ` [Qemu-devel] [PATCH v3 02/38] blockdev: Allow creation of BDS trees without BB Max Reitz
2015-06-03 20:15 ` Eric Blake
2015-06-05 10:56 ` [Qemu-devel] [Qemu-block] " Alberto Garcia
2015-06-03 19:43 ` [Qemu-devel] [PATCH v3 03/38] iotests: Only create BB if necessary Max Reitz
2015-06-05 10:04 ` [Qemu-devel] [Qemu-block] " Alberto Garcia
2015-06-03 19:43 ` [Qemu-devel] [PATCH v3 04/38] block: Make bdrv_is_inserted() return a bool Max Reitz
2015-06-03 20:19 ` Eric Blake
2015-06-04 12:14 ` [Qemu-devel] [Qemu-block] " Alberto Garcia
2015-06-03 19:43 ` [Qemu-devel] [PATCH v3 05/38] block: Add blk_is_available() Max Reitz
2015-06-04 12:22 ` [Qemu-devel] [Qemu-block] " Alberto Garcia
2015-06-03 19:43 ` [Qemu-devel] [PATCH v3 06/38] block: Make bdrv_is_inserted() recursive Max Reitz
2015-06-04 12:28 ` [Qemu-devel] [Qemu-block] " Alberto Garcia
2015-06-03 19:43 ` [Qemu-devel] [PATCH v3 07/38] block/quorum: Implement bdrv_is_inserted() Max Reitz
2015-06-04 12:37 ` [Qemu-devel] [Qemu-block] " Alberto Garcia
2015-06-04 12:46 ` Eric Blake
2015-06-05 15:29 ` Max Reitz
2015-06-17 8:56 ` Alberto Garcia
2015-06-03 19:43 ` [Qemu-devel] [PATCH v3 08/38] block: Invoke change media CB before NULLing drv Max Reitz
2015-06-03 20:25 ` Eric Blake
2015-06-04 14:07 ` [Qemu-devel] [Qemu-block] " Alberto Garcia
2015-06-03 19:43 ` [Qemu-devel] [PATCH v3 09/38] hw/block/fdc: Implement tray status Max Reitz
2015-06-03 20:29 ` Eric Blake
2015-06-03 19:43 ` [Qemu-devel] [PATCH v3 10/38] hw/usb-storage: Check whether BB is inserted Max Reitz
2015-06-03 20:37 ` Eric Blake
2015-06-05 15:05 ` Max Reitz
2015-06-04 12:40 ` [Qemu-devel] [Qemu-block] " Alberto Garcia
2015-06-03 19:43 ` [Qemu-devel] [PATCH v3 11/38] block: Fix BB AIOCB AioContext without BDS Max Reitz
2015-06-04 14:29 ` [Qemu-devel] [Qemu-block] " Alberto Garcia
2015-06-03 19:43 ` [Qemu-devel] [PATCH v3 12/38] block: Move guest_block_size into BlockBackend Max Reitz
2015-06-03 20:41 ` Eric Blake
2015-06-04 14:09 ` [Qemu-devel] [Qemu-block] " Alberto Garcia
2015-06-03 19:43 ` [Qemu-devel] [PATCH v3 13/38] block: Remove wr_highest_sector from BlockAcctStats Max Reitz
2015-06-03 20:47 ` Eric Blake
2015-06-05 10:10 ` [Qemu-devel] [Qemu-block] " Alberto Garcia
2015-06-03 19:43 ` [Qemu-devel] [PATCH v3 14/38] block: Move BlockAcctStats into BlockBackend Max Reitz
2015-06-03 20:52 ` Eric Blake
2015-06-05 10:47 ` Alberto Garcia
2015-06-05 12:35 ` Eric Blake
2015-06-05 10:57 ` [Qemu-devel] [Qemu-block] " Alberto Garcia
2015-06-03 19:43 ` [Qemu-devel] [PATCH v3 15/38] block: Move I/O status and error actions into BB Max Reitz
2015-06-03 19:43 ` [Qemu-devel] [PATCH v3 16/38] block: Add BlockBackendRootState Max Reitz
2015-06-03 19:43 ` [Qemu-devel] [PATCH v3 17/38] block: Make some BB functions fall back to BBRS Max Reitz
2015-06-03 19:43 ` [Qemu-devel] [PATCH v3 18/38] block: Fail requests to empty BlockBackend Max Reitz
2015-06-03 20:57 ` Eric Blake
2015-06-03 19:44 ` Max Reitz [this message]
2015-06-03 19:44 ` [Qemu-devel] [PATCH v3 20/38] block: Add blk_insert_bs() Max Reitz
2015-06-05 15:13 ` [Qemu-devel] [Qemu-block] " Alberto Garcia
2015-06-03 19:44 ` [Qemu-devel] [PATCH v3 21/38] block: Prepare for NULL BDS Max Reitz
2015-06-03 21:02 ` Eric Blake
2015-06-03 19:44 ` [Qemu-devel] [PATCH v3 22/38] blockdev: Do not create BDS for empty drive Max Reitz
2015-06-03 19:44 ` [Qemu-devel] [PATCH v3 23/38] blockdev: Pull out blockdev option extraction Max Reitz
2015-06-09 0:37 ` Fam Zheng
2015-06-09 19:03 ` Max Reitz
2015-06-03 19:44 ` [Qemu-devel] [PATCH v3 24/38] blockdev: Allow more options for BB-less BDS tree Max Reitz
2015-06-03 19:44 ` [Qemu-devel] [PATCH v3 25/38] block: Add blk_remove_bs() Max Reitz
2015-06-03 19:44 ` [Qemu-devel] [PATCH v3 26/38] blockdev: Add blockdev-open-tray Max Reitz
2015-06-03 21:24 ` Eric Blake
2015-06-05 15:06 ` Max Reitz
2015-06-03 19:44 ` [Qemu-devel] [PATCH v3 27/38] blockdev: Add blockdev-close-tray Max Reitz
2015-06-03 19:44 ` [Qemu-devel] [PATCH v3 28/38] blockdev: Add blockdev-remove-medium Max Reitz
2015-06-03 19:44 ` [Qemu-devel] [PATCH v3 29/38] blockdev: Add blockdev-insert-medium Max Reitz
2015-06-03 19:44 ` [Qemu-devel] [PATCH v3 30/38] blockdev: Implement eject with basic operations Max Reitz
2015-06-03 19:44 ` [Qemu-devel] [PATCH v3 31/38] blockdev: Implement change " Max Reitz
2015-06-03 21:31 ` Eric Blake
2015-06-03 19:44 ` [Qemu-devel] [PATCH v3 32/38] block: Inquire tray state before tray-moved events Max Reitz
2015-06-03 19:44 ` [Qemu-devel] [PATCH v3 33/38] qmp: Introduce blockdev-change-medium Max Reitz
2015-06-03 21:37 ` Eric Blake
2015-06-03 19:44 ` [Qemu-devel] [PATCH v3 34/38] hmp: Use blockdev-change-medium for change command Max Reitz
2015-06-03 19:44 ` [Qemu-devel] [PATCH v3 35/38] blockdev: read-only-mode for blockdev-change-medium Max Reitz
2015-06-03 19:44 ` [Qemu-devel] [PATCH v3 36/38] hmp: Add read-only-mode option to change command Max Reitz
2015-06-03 19:44 ` [Qemu-devel] [PATCH v3 37/38] iotests: More options for VM.add_drive() Max Reitz
2015-06-03 19:44 ` [Qemu-devel] [PATCH v3 38/38] iotests: Add test for change-related QMP commands Max Reitz
2015-06-03 21:46 ` Eric Blake
2015-06-05 15:08 ` Max Reitz
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1433360659-1915-20-git-send-email-mreitz@redhat.com \
--to=mreitz@redhat.com \
--cc=armbru@redhat.com \
--cc=jsnow@redhat.com \
--cc=kwolf@redhat.com \
--cc=qemu-block@nongnu.org \
--cc=qemu-devel@nongnu.org \
--cc=stefanha@redhat.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).