On Thu 21 Feb 2019 04:26:39 PM CET, Andrey Shinkevich wrote: > The block-stream job needs to own the base node as the limiter > of the copy-on-read operation. So, the base node is included in > the job node list (block_job_add_bdrv). > Also, the block-stream job would not allow the base node to go > away due to the graph modification, e.g. when a filter node is > inserted between the bottom node and the base node. > For that reason, the flag BLK_PERM_GRAPH_MOD is unset in the > shared permission bit mask of the base node. > > Signed-off-by: Andrey Shinkevich <andrey.shinkev...@virtuozzo.com> > --- > block/stream.c | 9 +++++++++ > 1 file changed, 9 insertions(+) > > diff --git a/block/stream.c b/block/stream.c > index 7a49ac0..c8f93d4 100644 > --- a/block/stream.c > +++ b/block/stream.c > @@ -259,6 +259,15 @@ void stream_start(const char *job_id, BlockDriverState > *bs, > &error_abort); > } > > + if (base) { > + /* > + * The base node should not disappear during the job. > + */ > + block_job_add_bdrv(&s->common, "base", base, 0, > + BLK_PERM_ALL & ~BLK_PERM_GRAPH_MOD, > + &error_abort);
I'm not sure if I understand the ~BLK_PERM_GRAPH_MOD bit, what's the consequence of not removing that permission? Berto