sys/fs/nfsclient on RTEMS gets a bad seqid error with open

Chris Johns chrisj at rtems.org
Wed Dec 30 23:32:14 UTC 2020


On 31/12/20 10:04 am, Rick Macklem wrote:
> Chris Johns wrote:
>> Hello,
>>
>> I am porting the kernel's nfsclient file system to the RTEMS port of FreeBSD. I
>> have ported across the FreeBSD file descriptors, VFS and NFS code. I have a
>> custom pseudofs file system as my root file system and I can mount an NFSv4
>> mount exported from a FreeBSD 12 box.
>>
>> When I open a file there are a some getattr RPC calls that are successful
>> however the open call (PUTFH, OPEN, GETATTR) results in the server returning the
>> bas seqid (10026) error code for the OPEN and I am not sure why this is
>> happening. I suspect I am missing a step in the nfsclient set up.
> Well, for NFSv4.0 Opens, there is a field in the open_owner called a "seqid',
> which is used to serialize Open calls. If that "seqid" gets screwed up, you
> get a "bad seqid" (10026) from the server and your mount is broken.

There is only one open call being made and the seq id in the packet is 0. The
server code seems to consider ownership when returning this error and this is an
area I am not sure about. RTEMS simulates a process and does not have a normal
user/group model.

> A couple of possibilities:
> - The FreeBSD client code depends on an exclusive lock on the vnode
>    to serialize the Opens.

There is only one open call active. This is something I can control.

>    --> If what you are doing doesn't serialize them, then that will be a
>           problem.
> - If the VOP_OPEN() generates an unexpected error (I just ran into this
>   on FreeBSD head), then the client might not get things correct.
>   --> The seqid is incremented for some errors, but not others.

I am currently basing this work on the FreeBSD 12 branch we have. A master port
is next.

> Btw, all this seqid stuff goes away when you use NFSv4.1 and there
> are NFSv4.1 only clients out there. You might want to consider doing
> this. If I was writing the code now, there would be no NFSv4.0.

Ah OK. How do I make the FreeBSD nfsclient operate as NFSv4.1? I looked into
this but I could not figure out how.

> rick
> ps: Getting this seqid stuff right was about the hardest part of
>     implementing NFSv4.0 and it could still be buggy.

Hmm yes it seems a little tricky.

Thanks
Chris


More information about the freebsd-hackers mailing list