This makes sense! Much appreciated, will revise.

On Wed, Feb 2, 2022 at 12:37 PM Christian Schoenebeck <
qemu_...@crudebyte.com> wrote:

> On Mittwoch, 2. Februar 2022 16:07:09 CET Will Cohen wrote:
> > Does the version proposed in v3 address the V9fsFidState issues? In 9p.c
> > for v2 to v3, we propose
> >
> > -    return telldir(fidp->fs.dir.stream);
> > +    return v9fs_co_telldir(pdu, fidp);
> >
> > and in codir.c from v2 to v3 we propose
> > -        saved_dir_pos = telldir(fidp->fs.dir.stream);
> > +        saved_dir_pos = s->ops->telldir(&s->ctx, &fidp->fs);
> >
> > This removes the direct access to fidp->, and we hope this should be
> > sufficient to avoid the concurrency
> > and undefined behaviors you noted in the v2 review.
>
> I am not sure why you think that you are no longer accessing fidp, you
> still
> do, just in a slightly different way.
>
> Let me propose a different solution: on macOS there is 'd_seekoff' in
> struct
> dirent. As already discussed that dirent field is apparently unused (zero)
> by
> macOS. So what about filling this dirent field (early, on driver level,
> not on
> server/controller level [9p.c]) with telldir() for macOS, then you have
> the
> same info as other systems provide with dirent field 'd_off' later on.
>
> Then you can add an inline helper function or a macro to deal with macOS
> vs.
> RoW, e.g.:
>
> inline
> off_t qemu_dirent_off(struct dirent *dent)
> {
> #ifdef CONFIG_DARWIN
>     return dent->d_seekoff;
> #else
>     return dent->d_off;
> #endif
> }
>
> And in 9p.c at all locations where dent->d_off is currently accessed, you
> would just use that helper instead.
>
> Best regards,
> Christian Schoenebeck
>
>
>

Reply via email to