Am 08.04.2014 um 18:53 hat Eric Blake geschrieben: > On 04/08/2014 09:34 AM, Kevin Wolf wrote: > > Am 08.04.2014 um 14:50 hat Max Reitz geschrieben: > >> Implement progress output for the commit command by querying the > >> progress of the block job. > >> > >> Signed-off-by: Max Reitz <mre...@redhat.com> > >> Reviewed-by: Eric Blake <ebl...@redhat.com> > >> --- > > >> > >> info = block_job_query(job); > >> > >> + if (info->offset) { > >> + if (!mod_offset) { > > > > On a fully populated image this doesn't look entirely right. I think the > > first 2 MB (or whatever the buffer size is) will be disregarded in the > > calculation, even though they are real work that is done. > > Is there any (easy) way to calculate how many dirty sectors remain to be > committed, to use that rather than the image size as the job percentage > remaining?
The very first thing that mirror_run() does is building the dirty bitmap depending on whether clusters are allocated or not. After this loop we have the necessary information, but we don't really communicate it to the caller. Max tries to guess the point at which the loop completed by checking when we make progress for the first time, but that means that we ignore the first actual buffer. We could probably simply change mirror_run() to update s->common.len by subtracting the parts that haven't been marked dirty. Then the caller could use the values as they are, and query-block-jobs would get more accurate values for mirroring jobs, too. commit_run(), for a commit somewhere down in the backing chain, we don't have this initialising loop yet, but we could add it without adding too much overhead, I think. qemu-img convert was changed in December to do the same and noone has complained yet (though it's not in a release yet, perhaps people will complain once 2.0 is out). Kevin
pgpksJm2RJ8vu.pgp
Description: PGP signature