From 38b54b6dc18ae7e2a32e5ae38b312fb13f0584c8 Mon Sep 17 00:00:00 2001 From: Fam Zheng Date: Fri, 23 Aug 2013 09:14:50 +0800 Subject: 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 Signed-off-by: Stefan Hajnoczi --- nbd.c | 5 +++++ 1 file changed, 5 insertions(+) (limited to 'nbd.c') diff --git a/nbd.c b/nbd.c index 0fd05836ca..f847940f3e 100644 --- a/nbd.c +++ b/nbd.c @@ -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) -- cgit v1.2.3