From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1IIrZC-00075v-QG for qemu-devel@nongnu.org; Wed, 08 Aug 2007 15:51:38 -0400 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1IIrZB-00074h-K9 for qemu-devel@nongnu.org; Wed, 08 Aug 2007 15:51:38 -0400 Received: from [199.232.76.173] (helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1IIrZB-000749-2e for qemu-devel@nongnu.org; Wed, 08 Aug 2007 15:51:37 -0400 Received: from wa-out-1112.google.com ([209.85.146.182]) by monty-python.gnu.org with esmtp (Exim 4.60) (envelope-from ) id 1IIrZ9-0005SZ-4i for qemu-devel@nongnu.org; Wed, 08 Aug 2007 15:51:36 -0400 Received: by wa-out-1112.google.com with SMTP id k22so310768waf for ; Wed, 08 Aug 2007 12:51:32 -0700 (PDT) Message-ID: <59abf66e0708081251o25e81ddcw5c912b696fa1669b@mail.gmail.com> Date: Wed, 8 Aug 2007 16:51:32 -0300 From: "=?ISO-8859-1?Q?Jorge_Luc=E1ngeli_Obes?=" In-Reply-To: <59abf66e0708081122k65fd4670y3db5659bc6ea0aa9@mail.gmail.com> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="----=_Part_131046_30196380.1186602692075" References: <59abf66e0708081122k65fd4670y3db5659bc6ea0aa9@mail.gmail.com> Subject: [Qemu-devel] [PATCH 2/4][RFC] Add functions to manipulate image annotations Reply-To: qemu-devel@nongnu.org List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org ------=_Part_131046_30196380.1186602692075 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable Content-Disposition: inline This patch adds block driver functions to use qcow2 image annotations. Signed-off-by: Laurent Vivier Signed-off-by: Jorge Luc=E1ngeli Obes --- diff --git a/qemu/block.c b/qemu/block.c index 39ec37a..4d794f6 100644 --- a/qemu/block.c +++ b/qemu/block.c @@ -56,6 +56,8 @@ static int bdrv_write_em(BlockDriverState *bs, int64_t sector_num, static BlockDriverState *bdrv_first; static BlockDriver *first_drv; +static char *filter_name(char *name); + int path_is_absolute(const char *path) { const char *p; @@ -1037,6 +1039,8 @@ char *bdrv_snapshot_dump(char *buf, int buf_size, QEMUSnapshotInfo *sn) snprintf(buf, buf_size, "%-10s%-20s%7s%20s%15s", "ID", "TAG", "VM SIZE", "DATE", "VM CLOCK"); + } else if (bdrv_snapshot_annotated(sn)) { + snprintf(buf, buf_size, "%s: '%s'", filter_name(sn->name), sn->ann= ot); } else { ti =3D sn->date_sec; #ifdef _WIN32 @@ -1361,3 +1365,128 @@ void bdrv_set_locked(BlockDriverState *bs, int lock= ed) drv->bdrv_set_locked(bs, locked); } } + +/**************************************************************/ +/* image annotation support */ + +static char *prepare_name(const char *name) +{ + char *res =3D malloc(1024 * sizeof(char)); + + res[0] =3D '\n'; + return strncat(res, name, 1022); +} + +static char *filter_name(char *name) +{ + return strtok(name, "\n"); +} + +int bdrv_snapshot_annotated(QEMUSnapshotInfo *sn) +{ + return (sn->name[0] =3D=3D '\n' && + sn->vm_state_size =3D=3D 0 && + *sn->annot !=3D '\0'); +} + +int bdrv_set_annot(BlockDriverState *bs, + const char *name, + const char *annotation) +{ + int nbsnaps, i; + int ret =3D 0; + + char *fltname; + char *prepname; + char *id_annot =3D NULL; + + QEMUSnapshotInfo *sn_info; + BlockDriver *drv =3D bs->drv; + + nbsnaps =3D drv->bdrv_snapshot_list(bs, &sn_info); + + if (nbsnaps < 0) { + ret =3D -1; + goto end; + } + + for (i =3D 0; i < nbsnaps; i++) { + fltname =3D filter_name(sn_info[i].name); + + if (sn_info[i].name[0] =3D=3D '\n' && + !strcmp(fltname, name) && + sn_info[i].vm_state_size =3D=3D 0) { + + id_annot =3D sn_info[i].id_str; + break; + } + } + + if (id_annot !=3D NULL) + drv->bdrv_snapshot_delete(bs, id_annot); + + if (strlen(annotation) =3D=3D 0) + goto end; + + QEMUSnapshotInfo *new_sn_info =3D qemu_malloc(sizeof(QEMUSnapshotInfo)= ); + + if (!new_sn_info) { + ret =3D -ENOMEM; + goto end; + } + + prepname =3D prepare_name(name); + + // No id, set by create + new_sn_info->id_str[0] =3D '\0'; + pstrcpy(new_sn_info->name, 1024, prepname); + pstrcpy(new_sn_info->annot, 1024, annotation); + + new_sn_info->vm_state_size =3D new_sn_info->date_sec =3D + new_sn_info->date_nsec =3D new_sn_info->vm_clock_nsec =3D 0; + + if (drv->bdrv_snapshot_create(bs, new_sn_info) < 0) + ret =3D -1; + + free(prepname); + free(new_sn_info); + +end: + free(sn_info); + return ret; +} + +char *bdrv_get_annot(BlockDriverState *bs, const char *name) +{ + int nbsnaps, i; + char *filteredn; + char *res; + + QEMUSnapshotInfo *sn_info =3D NULL; + + res =3D malloc(1024 * sizeof(char)); + if (!res) + return NULL; + + nbsnaps =3D bs->drv->bdrv_snapshot_list(bs, &sn_info); + + if (nbsnaps < 0) { + free(sn_info); + free(res); + return NULL; + } + + for (i =3D 0; i < nbsnaps; i++) { + filteredn =3D filter_name(sn_info[i].name); + + if (sn_info[i].name[0] =3D=3D '\n' && + !strcmp(filteredn, name) && + sn_info[i].vm_state_size =3D=3D 0) { + + pstrcpy(res, 1024, sn_info[i].annot); + break; + } + } + + return res; +} ------=_Part_131046_30196380.1186602692075 Content-Type: text/x-patch; name=block-drv-functions.patch; charset=ANSI_X3.4-1968 Content-Transfer-Encoding: base64 X-Attachment-Id: f_f545e8oo Content-Disposition: attachment; filename="block-drv-functions.patch" VGhpcyBwYXRjaCBhZGRzIGJsb2NrIGRyaXZlciBmdW5jdGlvbnMgdG8gdXNlIHFjb3cyIGltYWdl IGFubm90YXRpb25zLgoKU2lnbmVkLW9mZi1ieTogTGF1cmVudCBWaXZpZXIgPExhdXJlbnQuVml2 aWVyQGJ1bGwubmV0PgpTaWduZWQtb2ZmLWJ5OiBKb3JnZSBMdWPDoW5nZWxpIE9iZXMgPHQ0bTV5 bkBnbWFpbC5jb20+Ci0tLQpkaWZmIC0tZ2l0IGEvcWVtdS9ibG9jay5jIGIvcWVtdS9ibG9jay5j CmluZGV4IDM5ZWMzN2EuLjRkNzk0ZjYgMTAwNjQ0Ci0tLSBhL3FlbXUvYmxvY2suYworKysgYi9x ZW11L2Jsb2NrLmMKQEAgLTU2LDYgKzU2LDggQEAgc3RhdGljIGludCBiZHJ2X3dyaXRlX2VtKEJs b2NrRHJpdmVyU3RhdGUgKmJzLCBpbnQ2NF90IHNlY3Rvcl9udW0sCiBzdGF0aWMgQmxvY2tEcml2 ZXJTdGF0ZSAqYmRydl9maXJzdDsKIHN0YXRpYyBCbG9ja0RyaXZlciAqZmlyc3RfZHJ2OwogCitz dGF0aWMgY2hhciAqZmlsdGVyX25hbWUoY2hhciAqbmFtZSk7CisKIGludCBwYXRoX2lzX2Fic29s dXRlKGNvbnN0IGNoYXIgKnBhdGgpCiB7CiAgICAgY29uc3QgY2hhciAqcDsKQEAgLTEwMzcsNiAr MTAzOSw4IEBAIGNoYXIgKmJkcnZfc25hcHNob3RfZHVtcChjaGFyICpidWYsIGludCBidWZfc2l6 ZSwgUUVNVVNuYXBzaG90SW5mbyAqc24pCiAgICAgICAgIHNucHJpbnRmKGJ1ZiwgYnVmX3NpemUs IAogICAgICAgICAgICAgICAgICAiJS0xMHMlLTIwcyU3cyUyMHMlMTVzIiwgCiAgICAgICAgICAg ICAgICAgICJJRCIsICJUQUciLCAiVk0gU0laRSIsICJEQVRFIiwgIlZNIENMT0NLIik7CisgICAg fSBlbHNlIGlmIChiZHJ2X3NuYXBzaG90X2Fubm90YXRlZChzbikpIHsKKyAgICAgICAgc25wcmlu dGYoYnVmLCBidWZfc2l6ZSwgIiVzOiAnJXMnIiwgZmlsdGVyX25hbWUoc24tPm5hbWUpLCBzbi0+ YW5ub3QpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIHRpID0gc24tPmRhdGVfc2VjOwogI2lmZGVm IF9XSU4zMgpAQCAtMTM2MSwzICsxMzY1LDEyOCBAQCB2b2lkIGJkcnZfc2V0X2xvY2tlZChCbG9j a0RyaXZlclN0YXRlICpicywgaW50IGxvY2tlZCkKICAgICAgICAgZHJ2LT5iZHJ2X3NldF9sb2Nr ZWQoYnMsIGxvY2tlZCk7CiAgICAgfQogfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiBpbWFnZSBhbm5vdGF0aW9u IHN1cHBvcnQgKi8KKworc3RhdGljIGNoYXIgKnByZXBhcmVfbmFtZShjb25zdCBjaGFyICpuYW1l KQoreworICAgIGNoYXIgKnJlcyA9IG1hbGxvYygxMDI0ICogc2l6ZW9mKGNoYXIpKTsKKworICAg IHJlc1swXSA9ICdcbic7CisgICAgcmV0dXJuIHN0cm5jYXQocmVzLCBuYW1lLCAxMDIyKTsKK30K Kworc3RhdGljIGNoYXIgKmZpbHRlcl9uYW1lKGNoYXIgKm5hbWUpCit7CisgICAgcmV0dXJuIHN0 cnRvayhuYW1lLCAiXG4iKTsKK30KKworaW50IGJkcnZfc25hcHNob3RfYW5ub3RhdGVkKFFFTVVT bmFwc2hvdEluZm8gKnNuKQoreworICAgICAgIHJldHVybiAoc24tPm5hbWVbMF0gPT0gJ1xuJyAm JgorICAgICAgICAgICAgICAgc24tPnZtX3N0YXRlX3NpemUgPT0gMCAmJgorICAgICAgICAgICAg ICAgKnNuLT5hbm5vdCAhPSAnXDAnKTsKK30KKworaW50IGJkcnZfc2V0X2Fubm90KEJsb2NrRHJp dmVyU3RhdGUgKmJzLCAKKyAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpuYW1lLCAKKyAg ICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICphbm5vdGF0aW9uKQoreworICAgIGludCBuYnNu YXBzLCBpOworICAgIGludCByZXQgPSAwOworCisgICAgY2hhciAqZmx0bmFtZTsKKyAgICBjaGFy ICpwcmVwbmFtZTsKKyAgICBjaGFyICppZF9hbm5vdCA9IE5VTEw7CisKKyAgICBRRU1VU25hcHNo b3RJbmZvICpzbl9pbmZvOworICAgIEJsb2NrRHJpdmVyICpkcnYgPSBicy0+ZHJ2OworICAgIAor ICAgIG5ic25hcHMgPSBkcnYtPmJkcnZfc25hcHNob3RfbGlzdChicywgJnNuX2luZm8pOworCisg ICAgaWYgKG5ic25hcHMgPCAwKSB7CisgICAgICAgIHJldCA9IC0xOworICAgICAgICBnb3RvIGVu ZDsKKyAgICB9CisKKyAgICBmb3IgKGkgPSAwOyBpIDwgbmJzbmFwczsgaSsrKSB7CisgICAgICAg IGZsdG5hbWUgPSBmaWx0ZXJfbmFtZShzbl9pbmZvW2ldLm5hbWUpOworICAgICAgICAKKyAgICAg ICAgaWYgKHNuX2luZm9baV0ubmFtZVswXSA9PSAnXG4nICYmCisgICAgICAgICAgICAhc3RyY21w KGZsdG5hbWUsIG5hbWUpICYmCisgICAgICAgICAgICBzbl9pbmZvW2ldLnZtX3N0YXRlX3NpemUg PT0gMCkgeworICAgICAgICAgICAgCisgICAgICAgICAgICBpZF9hbm5vdCA9IHNuX2luZm9baV0u aWRfc3RyOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAo aWRfYW5ub3QgIT0gTlVMTCkKKyAgICAgICAgZHJ2LT5iZHJ2X3NuYXBzaG90X2RlbGV0ZShicywg aWRfYW5ub3QpOworCisgICAgaWYgKHN0cmxlbihhbm5vdGF0aW9uKSA9PSAwKQorICAgICAgICBn b3RvIGVuZDsKKworICAgIFFFTVVTbmFwc2hvdEluZm8gKm5ld19zbl9pbmZvID0gcWVtdV9tYWxs b2Moc2l6ZW9mKFFFTVVTbmFwc2hvdEluZm8pKTsKKyAgICAKKyAgICBpZiAoIW5ld19zbl9pbmZv KSB7CisgICAgICAgIHJldCA9IC1FTk9NRU07CisgICAgICAgIGdvdG8gZW5kOworICAgIH0KKwor ICAgIHByZXBuYW1lID0gcHJlcGFyZV9uYW1lKG5hbWUpOworCisgICAgLy8gTm8gaWQsIHNldCBi eSBjcmVhdGUKKyAgICBuZXdfc25faW5mby0+aWRfc3RyWzBdID0gJ1wwJzsKKyAgICBwc3RyY3B5 KG5ld19zbl9pbmZvLT5uYW1lLCAxMDI0LCBwcmVwbmFtZSk7CisgICAgcHN0cmNweShuZXdfc25f aW5mby0+YW5ub3QsIDEwMjQsIGFubm90YXRpb24pOworCisgICAgbmV3X3NuX2luZm8tPnZtX3N0 YXRlX3NpemUgPSBuZXdfc25faW5mby0+ZGF0ZV9zZWMgPQorICAgICAgICBuZXdfc25faW5mby0+ ZGF0ZV9uc2VjID0gbmV3X3NuX2luZm8tPnZtX2Nsb2NrX25zZWMgPSAwOworCisgICAgaWYgKGRy di0+YmRydl9zbmFwc2hvdF9jcmVhdGUoYnMsIG5ld19zbl9pbmZvKSA8IDApCisgICAgICAgIHJl dCA9IC0xOworCisgICAgZnJlZShwcmVwbmFtZSk7CisgICAgZnJlZShuZXdfc25faW5mbyk7CisK K2VuZDoKKyAgICBmcmVlKHNuX2luZm8pOworICAgIHJldHVybiByZXQ7Cit9CisKK2NoYXIgKmJk cnZfZ2V0X2Fubm90KEJsb2NrRHJpdmVyU3RhdGUgKmJzLCBjb25zdCBjaGFyICpuYW1lKQorewor ICAgIGludCBuYnNuYXBzLCBpOworICAgIGNoYXIgKmZpbHRlcmVkbjsKKyAgICBjaGFyICpyZXM7 CisgICAgCisgICAgUUVNVVNuYXBzaG90SW5mbyAqc25faW5mbyA9IE5VTEw7CisKKyAgICByZXMg PSBtYWxsb2MoMTAyNCAqIHNpemVvZihjaGFyKSk7CisgICAgaWYgKCFyZXMpCisgICAgICAgIHJl dHVybiBOVUxMOworCisgICAgbmJzbmFwcyA9IGJzLT5kcnYtPmJkcnZfc25hcHNob3RfbGlzdChi cywgJnNuX2luZm8pOworCisgICAgaWYgKG5ic25hcHMgPCAwKSB7CisgICAgICAgIGZyZWUoc25f aW5mbyk7CisgICAgICAgIGZyZWUocmVzKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQor CisgICAgZm9yIChpID0gMDsgaSA8IG5ic25hcHM7IGkrKykgeworICAgICAgICBmaWx0ZXJlZG4g PSBmaWx0ZXJfbmFtZShzbl9pbmZvW2ldLm5hbWUpOworCisgICAgICAgIGlmIChzbl9pbmZvW2ld Lm5hbWVbMF0gPT0gJ1xuJyAmJgorICAgICAgICAgICAgIXN0cmNtcChmaWx0ZXJlZG4sIG5hbWUp ICYmCisgICAgICAgICAgICBzbl9pbmZvW2ldLnZtX3N0YXRlX3NpemUgPT0gMCkgeworICAgICAg ICAgICAgCisgICAgICAgICAgICBwc3RyY3B5KHJlcywgMTAyNCwgc25faW5mb1tpXS5hbm5vdCk7 CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiByZXM7 Cit9Cg== ------=_Part_131046_30196380.1186602692075--