Browse Source

qed: introduce bdrv_qed_init_state

This will be used in the next patch, which will call bdrv_qed_do_open
with a CoMutex taken.  bdrv_qed_init_state provides a nice place to
initialize it.

Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Message-Id: <20170629132749.997-9-pbonzini@redhat.com>
Reviewed-by: Eric Blake <eblake@redhat.com>
Reviewed-by: Stefan Hajnoczi <stefanha@redhat.com>
Reviewed-by: Fam Zheng <famz@redhat.com>
Signed-off-by: Fam Zheng <famz@redhat.com>
Paolo Bonzini 8 năm trước cách đây
mục cha
commit
61c7887e0f
1 tập tin đã thay đổi với 11 bổ sung5 xóa
  1. 11 5
      block/qed.c

+ 11 - 5
block/qed.c

@@ -363,6 +363,15 @@ static void coroutine_fn bdrv_qed_co_drain(BlockDriverState *bs)
     }
     }
 }
 }
 
 
+static void bdrv_qed_init_state(BlockDriverState *bs)
+{
+    BDRVQEDState *s = bs->opaque;
+
+    memset(s, 0, sizeof(BDRVQEDState));
+    s->bs = bs;
+    qemu_co_queue_init(&s->allocating_write_reqs);
+}
+
 static int bdrv_qed_do_open(BlockDriverState *bs, QDict *options, int flags,
 static int bdrv_qed_do_open(BlockDriverState *bs, QDict *options, int flags,
                             Error **errp)
                             Error **errp)
 {
 {
@@ -371,9 +380,6 @@ static int bdrv_qed_do_open(BlockDriverState *bs, QDict *options, int flags,
     int64_t file_size;
     int64_t file_size;
     int ret;
     int ret;
 
 
-    s->bs = bs;
-    qemu_co_queue_init(&s->allocating_write_reqs);
-
     ret = bdrv_pread(bs->file, 0, &le_header, sizeof(le_header));
     ret = bdrv_pread(bs->file, 0, &le_header, sizeof(le_header));
     if (ret < 0) {
     if (ret < 0) {
         return ret;
         return ret;
@@ -507,6 +513,7 @@ static int bdrv_qed_open(BlockDriverState *bs, QDict *options, int flags,
         return -EINVAL;
         return -EINVAL;
     }
     }
 
 
+    bdrv_qed_init_state(bs);
     return bdrv_qed_do_open(bs, options, flags, errp);
     return bdrv_qed_do_open(bs, options, flags, errp);
 }
 }
 
 
@@ -1462,13 +1469,12 @@ static int bdrv_qed_change_backing_file(BlockDriverState *bs,
 
 
 static void bdrv_qed_invalidate_cache(BlockDriverState *bs, Error **errp)
 static void bdrv_qed_invalidate_cache(BlockDriverState *bs, Error **errp)
 {
 {
-    BDRVQEDState *s = bs->opaque;
     Error *local_err = NULL;
     Error *local_err = NULL;
     int ret;
     int ret;
 
 
     bdrv_qed_close(bs);
     bdrv_qed_close(bs);
 
 
-    memset(s, 0, sizeof(BDRVQEDState));
+    bdrv_qed_init_state(bs);
     ret = bdrv_qed_do_open(bs, NULL, bs->open_flags, &local_err);
     ret = bdrv_qed_do_open(bs, NULL, bs->open_flags, &local_err);
     if (local_err) {
     if (local_err) {
         error_propagate(errp, local_err);
         error_propagate(errp, local_err);