On Tue, Nov 17, 2015 at 11:10:26AM +0300, Denis V. Lunev wrote: > On 11/17/2015 10:22 AM, Stefan Hajnoczi wrote: > >On Mon, Nov 16, 2015 at 06:24:36PM +0300, Denis V. Lunev wrote: > >>@@ -2168,21 +2157,7 @@ void hmp_info_snapshots(Monitor *mon, const QDict > >>*qdict) > >> available_snapshots = g_new0(int, nb_sns); > >> total = 0; > >> for (i = 0; i < nb_sns; i++) { > >>- sn = &sn_tab[i]; > >>- available = 1; > >>- bs1 = NULL; > >>- > >>- while ((bs1 = bdrv_next(bs1))) { > >>- if (bdrv_can_snapshot(bs1) && bs1 != bs) { > >>- ret = bdrv_snapshot_find(bs1, sn_info, sn->id_str); > >>- if (ret < 0) { > >>- available = 0; > >>- break; > >>- } > >>- } > >>- } > >>- > >>- if (available) { > >>+ if (bdrv_all_find_snapshot(sn_tab[i].id_str, false, &bs1) == 0) { > >bdrv_all_find_snapshot() doesn't do the bs1 != bs exclusion so the new > >code behaves differently from the old code. That seems like a bug. > no. The result will be the same. This is a minor optimisation: > - we get the first block device we can make snapshot on > - we get snapshot list on that device > - after that we start iterations over the list and removing not available > snapshots on other devices > This means that if bs == bs1 the check will be "always true"
Ah, I see. Thanks! Stefan
signature.asc
Description: PGP signature