All of lore.kernel.org
 help / color / mirror / Atom feed
From: Kevin Wolf <kwolf@redhat.com>
To: anthony@codemonkey.ws
Cc: kwolf@redhat.com, qemu-devel@nongnu.org
Subject: [Qemu-devel] [PATCH 06/28] block: tell drivers about an image resize
Date: Mon, 31 Jan 2011 16:28:54 +0100	[thread overview]
Message-ID: <1296487756-12553-7-git-send-email-kwolf@redhat.com> (raw)
In-Reply-To: <1296487756-12553-1-git-send-email-kwolf@redhat.com>

From: Christoph Hellwig <hch@lst.de>

Extend the change_cb callback with a reason argument, and use it
to tell drivers about size changes.

Signed-off-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
---
 block.c       |   12 ++++++++----
 block.h       |    3 ++-
 block_int.h   |    5 ++++-
 hw/ide/core.c |    6 +++++-
 hw/sd.c       |    7 ++++++-
 5 files changed, 25 insertions(+), 8 deletions(-)

diff --git a/block.c b/block.c
index 7ad3ddf..998df1b 100644
--- a/block.c
+++ b/block.c
@@ -645,7 +645,7 @@ int bdrv_open(BlockDriverState *bs, const char *filename, int flags,
         /* call the change callback */
         bs->media_changed = 1;
         if (bs->change_cb)
-            bs->change_cb(bs->change_opaque);
+            bs->change_cb(bs->change_opaque, CHANGE_MEDIA);
     }
 
     return 0;
@@ -684,7 +684,7 @@ void bdrv_close(BlockDriverState *bs)
         /* call the change callback */
         bs->media_changed = 1;
         if (bs->change_cb)
-            bs->change_cb(bs->change_opaque);
+            bs->change_cb(bs->change_opaque, CHANGE_MEDIA);
     }
 }
 
@@ -1135,6 +1135,9 @@ int bdrv_truncate(BlockDriverState *bs, int64_t offset)
     ret = drv->bdrv_truncate(bs, offset);
     if (ret == 0) {
         ret = refresh_total_sectors(bs, offset >> BDRV_SECTOR_BITS);
+        if (bs->change_cb) {
+            bs->change_cb(bs->change_opaque, CHANGE_SIZE);
+        }
     }
     return ret;
 }
@@ -1366,7 +1369,8 @@ int bdrv_enable_write_cache(BlockDriverState *bs)
 
 /* XXX: no longer used */
 void bdrv_set_change_cb(BlockDriverState *bs,
-                        void (*change_cb)(void *opaque), void *opaque)
+                        void (*change_cb)(void *opaque, int reason),
+                        void *opaque)
 {
     bs->change_cb = change_cb;
     bs->change_opaque = opaque;
@@ -1411,7 +1415,7 @@ int bdrv_set_key(BlockDriverState *bs, const char *key)
         /* call the change callback now, we skipped it on open */
         bs->media_changed = 1;
         if (bs->change_cb)
-            bs->change_cb(bs->change_opaque);
+            bs->change_cb(bs->change_opaque, CHANGE_MEDIA);
     }
     return ret;
 }
diff --git a/block.h b/block.h
index f923add..239f729 100644
--- a/block.h
+++ b/block.h
@@ -182,7 +182,8 @@ int bdrv_is_locked(BlockDriverState *bs);
 void bdrv_set_locked(BlockDriverState *bs, int locked);
 int bdrv_eject(BlockDriverState *bs, int eject_flag);
 void bdrv_set_change_cb(BlockDriverState *bs,
-                        void (*change_cb)(void *opaque), void *opaque);
+                        void (*change_cb)(void *opaque, int reason),
+                        void *opaque);
 void bdrv_get_format(BlockDriverState *bs, char *buf, int buf_size);
 BlockDriverState *bdrv_find(const char *name);
 BlockDriverState *bdrv_next(BlockDriverState *bs);
diff --git a/block_int.h b/block_int.h
index 12663e8..6ebdc3e 100644
--- a/block_int.h
+++ b/block_int.h
@@ -153,7 +153,7 @@ struct BlockDriverState {
     int valid_key; /* if true, a valid encryption key has been set */
     int sg;        /* if true, the device is a /dev/sg* */
     /* event callback when inserting/removing */
-    void (*change_cb)(void *opaque);
+    void (*change_cb)(void *opaque, int reason);
     void *change_opaque;
 
     BlockDriver *drv; /* NULL means no media */
@@ -203,6 +203,9 @@ struct BlockDriverState {
     void *private;
 };
 
+#define CHANGE_MEDIA	0x01
+#define CHANGE_SIZE	0x02
+
 struct BlockDriverAIOCB {
     AIOPool *pool;
     BlockDriverState *bs;
diff --git a/hw/ide/core.c b/hw/ide/core.c
index e698c13..dd63664 100644
--- a/hw/ide/core.c
+++ b/hw/ide/core.c
@@ -1584,11 +1584,15 @@ static void ide_cfata_metadata_write(IDEState *s)
 }
 
 /* called when the inserted state of the media has changed */
-static void cdrom_change_cb(void *opaque)
+static void cdrom_change_cb(void *opaque, int reason)
 {
     IDEState *s = opaque;
     uint64_t nb_sectors;
 
+    if (!(reason & CHANGE_MEDIA)) {
+        return;
+    }
+
     bdrv_get_geometry(s->bs, &nb_sectors);
     s->nb_sectors = nb_sectors;
 
diff --git a/hw/sd.c b/hw/sd.c
index 601545b..789ca84 100644
--- a/hw/sd.c
+++ b/hw/sd.c
@@ -422,9 +422,14 @@ static void sd_reset(SDState *sd, BlockDriverState *bdrv)
     sd->pwd_len = 0;
 }
 
-static void sd_cardchange(void *opaque)
+static void sd_cardchange(void *opaque, int reason)
 {
     SDState *sd = opaque;
+
+    if (!(reason & CHANGE_MEDIA)) {
+        return;
+    }
+
     qemu_set_irq(sd->inserted_cb, bdrv_is_inserted(sd->bdrv));
     if (bdrv_is_inserted(sd->bdrv)) {
         sd_reset(sd, sd->bdrv);
-- 
1.7.2.3

  parent reply	other threads:[~2011-01-31 15:28 UTC|newest]

Thread overview: 30+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-01-31 15:28 [Qemu-devel] [PULL 00/28] Block patches Kevin Wolf
2011-01-31 15:28 ` [Qemu-devel] [PATCH 01/28] strtosz(): use unsigned char and switch to qemu_isspace() Kevin Wolf
2011-01-31 15:28 ` [Qemu-devel] [PATCH 02/28] strtosz() use qemu_toupper() to simplify switch statement Kevin Wolf
2011-01-31 15:28 ` [Qemu-devel] [PATCH 03/28] strtosz(): Fix name confusion in use of modf() Kevin Wolf
2011-01-31 15:28 ` [Qemu-devel] [PATCH 04/28] strtosz(): Use suffix macros in switch() statement Kevin Wolf
2011-01-31 15:28 ` [Qemu-devel] [PATCH 05/28] block: add block_resize monitor command Kevin Wolf
2011-01-31 15:28 ` Kevin Wolf [this message]
2011-01-31 15:28 ` [Qemu-devel] [PATCH 07/28] virtio-blk: tell the guest about size changes Kevin Wolf
2011-01-31 15:28 ` [Qemu-devel] [PATCH 08/28] virtio-pci: Disable virtio-ioeventfd when !CONFIG_IOTHREAD Kevin Wolf
2011-01-31 15:28 ` [Qemu-devel] [PATCH 09/28] Add documentation for STRTOSZ_DEFSUFFIX_ macros Kevin Wolf
2011-01-31 15:28 ` [Qemu-devel] [PATCH 10/28] ahci: Fix cpu_physical_memory_unmap() argument ordering Kevin Wolf
2011-01-31 15:28 ` [Qemu-devel] [PATCH 11/28] Reorganize struct Qcow2Cache for better struct packing Kevin Wolf
2011-01-31 15:29 ` [Qemu-devel] [PATCH 12/28] sheepdog: support creating images on remote hosts Kevin Wolf
2011-01-31 15:29 ` [Qemu-devel] [PATCH 13/28] qemu-io: Fix discard command Kevin Wolf
2011-01-31 15:29 ` [Qemu-devel] [PATCH 14/28] qcow2: Add bdrv_discard support Kevin Wolf
2011-01-31 15:29 ` [Qemu-devel] [PATCH 15/28] qed: Images with backing file do not require QED_F_NEED_CHECK Kevin Wolf
2011-01-31 15:29 ` [Qemu-devel] [PATCH 16/28] raw-win32: Fix bdrv_flush return value Kevin Wolf
2011-01-31 15:29 ` [Qemu-devel] [PATCH 17/28] scsi hotplug: Set DriveInfo member bus correctly Kevin Wolf
2011-01-31 15:29 ` [Qemu-devel] [PATCH 18/28] qcow2-refcount: remove write-only variables Kevin Wolf
2011-01-31 15:29 ` [Qemu-devel] [PATCH 19/28] blockdev: New drive_get_next(), replacing qdev_init_bdrv() Kevin Wolf
2011-01-31 15:29 ` [Qemu-devel] [PATCH 20/28] blockdev: Move BlockInterfaceType from qemu-common.h to blockdev.h Kevin Wolf
2011-01-31 15:29 ` [Qemu-devel] [PATCH 21/28] blockdev: Put BlockInterfaceType names and max_devs in tables Kevin Wolf
2011-01-31 15:29 ` [Qemu-devel] [PATCH 22/28] blockdev: Fix regression in -drive if=scsi, index=N Kevin Wolf
2011-01-31 15:29 ` [Qemu-devel] [PATCH 23/28] blockdev: Make drive_add() take explicit type, index parameters Kevin Wolf
2011-01-31 15:29 ` [Qemu-devel] [PATCH 24/28] blockdev: Factor drive_index_to_{bus, unit}_id out of drive_init() Kevin Wolf
2011-01-31 15:29 ` [Qemu-devel] [PATCH 25/28] blockdev: New drive_get_by_index() Kevin Wolf
2011-01-31 15:29 ` [Qemu-devel] [PATCH 26/28] blockdev: Reject multiple definitions for the same drive Kevin Wolf
2011-01-31 15:29 ` [Qemu-devel] [PATCH 27/28] blockdev: Replace drive_add()'s fmt, ... by optstr parameter Kevin Wolf
2011-01-31 15:29 ` [Qemu-devel] [PATCH 28/28] blockdev: Fix drive_add for drives without media Kevin Wolf
2011-01-31 18:01 ` [Qemu-devel] Re: [PULL 00/28] Block patches Anthony Liguori

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=1296487756-12553-7-git-send-email-kwolf@redhat.com \
    --to=kwolf@redhat.com \
    --cc=anthony@codemonkey.ws \
    --cc=qemu-devel@nongnu.org \
    /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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.