On Tue, 17 Aug 2021 14:38:24 +0200 Christian Schoenebeck <qemu_...@crudebyte.com> wrote:
> The v9fs_walk() function resolves all client submitted path nodes to the > local 'pathes' array. Using a separate string scalar variable 'path' > inside the background worker thread loop and copying that local 'path' > string scalar variable subsequently to the 'pathes' array (at the end of > each loop iteration) is not necessary. > > Instead simply resolve each path directly to the 'pathes' array and > don't use the string scalar variable 'path' inside the fs worker thread > loop at all. > > The only advantage of the 'path' scalar was that in case of an error > the respective 'pathes' element would not be filled. Right now this is > not an issue as the v9fs_walk() function returns as soon as any error > occurs. > > Suggested-by: Greg Kurz <gr...@kaod.org> > Signed-off-by: Christian Schoenebeck <qemu_...@crudebyte.com> > --- Reviewed-by: Greg Kurz <gr...@kaod.org> With this change, the path variable is no longer used at all in the first loop. I see at least an extra possible cleanup : don't set path before the first loop since it gets reset before the second one. Maybe we can even get rid of path all the way ? I'll have a look. > hw/9pfs/9p.c | 8 ++++---- > 1 file changed, 4 insertions(+), 4 deletions(-) > > diff --git a/hw/9pfs/9p.c b/hw/9pfs/9p.c > index 2815257f42..4d642ab12a 100644 > --- a/hw/9pfs/9p.c > +++ b/hw/9pfs/9p.c > @@ -1787,7 +1787,8 @@ static void coroutine_fn v9fs_walk(void *opaque) > strcmp("..", wnames[name_idx].data)) > { > err = s->ops->name_to_path(&s->ctx, &dpath, > - wnames[name_idx].data, &path); > + wnames[name_idx].data, > + &pathes[name_idx]); > if (err < 0) { > err = -errno; > break; > @@ -1796,14 +1797,13 @@ static void coroutine_fn v9fs_walk(void *opaque) > err = -EINTR; > break; > } > - err = s->ops->lstat(&s->ctx, &path, &stbuf); > + err = s->ops->lstat(&s->ctx, &pathes[name_idx], &stbuf); > if (err < 0) { > err = -errno; > break; > } > stbufs[name_idx] = stbuf; > - v9fs_path_copy(&dpath, &path); > - v9fs_path_copy(&pathes[name_idx], &path); > + v9fs_path_copy(&dpath, &pathes[name_idx]); > } > } > });