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
