diff options
author | Fam Zheng <famz@redhat.com> | 2013-08-23 09:14:50 +0800 |
---|---|---|
committer | Stefan Hajnoczi <stefanha@redhat.com> | 2013-09-06 15:25:08 +0200 |
commit | 38b54b6dc18ae7e2a32e5ae38b312fb13f0584c8 (patch) | |
tree | 851ab3d0f6f967b769ecdb87e5bbf22f4c7d0958 /nbd.c | |
parent | c0777fe18b08c3a6de0c53325d6b9b75ebb9de9a (diff) | |
download | qemu-38b54b6dc18ae7e2a32e5ae38b312fb13f0584c8.tar.gz qemu-38b54b6dc18ae7e2a32e5ae38b312fb13f0584c8.tar.bz2 qemu-38b54b6dc18ae7e2a32e5ae38b312fb13f0584c8.zip |
nbd: use BlockDriverState refcnt
Previously, nbd calls drive_get_ref() on the drive of bs. A BDS doesn't
always have associated dinfo, which nbd doesn't care either. We already
have BDS ref count, so use it to make it safe for a BDS w/o blockdev.
Signed-off-by: Fam Zheng <famz@redhat.com>
Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
Diffstat (limited to 'nbd.c')
-rw-r--r-- | nbd.c | 5 |
1 files changed, 5 insertions, 0 deletions
@@ -882,6 +882,7 @@ NBDExport *nbd_export_new(BlockDriverState *bs, off_t dev_offset, exp->nbdflags = nbdflags; exp->size = size == -1 ? bdrv_getlength(bs) : size; exp->close = close; + bdrv_ref(bs); return exp; } @@ -928,6 +929,10 @@ void nbd_export_close(NBDExport *exp) } nbd_export_set_name(exp, NULL); nbd_export_put(exp); + if (exp->bs) { + bdrv_unref(exp->bs); + exp->bs = NULL; + } } void nbd_export_get(NBDExport *exp) |