Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 25 Apr 2024 19:49:23 -0700
From:      Rick Macklem <rick.macklem@gmail.com>
To:        FreeBSD CURRENT <freebsd-current@freebsd.org>
Subject:   mysterious setting of B_DIRECT?
Message-ID:  <CAM5tNy4bJC9p66_cBYBSdcxDTWwtFUcOvjfxf=a8B%2BA%2B9s_HSg@mail.gmail.com>

next in thread | raw e-mail | index | archive | help
Hi,

This week I have been doing active testing as a part of an IETF
bakeathon for NFSv4. During the week I had a NFSv4 client
crash. On the surface, it is straightforward, in that it called
ncl_doio_directwrite() and the field called b_caller1 was NULL.

Now, here's the weird part...
ncl_doio_directwrite() should never be called because B_DIRECT
should never be set. (The only place B_DIRECT gets set in the code
is never currently executed.)

I have a patch that clears out the "never to be executed" code and
this seems to avoid the patch, since with the patch, ncl_doio_directwrite()
no longer exists.

What I cannot figure out is how B_DIRECT got set?
I can note that UFS was under heavy load when the client crashed,
but I cannot see how a UFS "struct buf" would become a NFS "struct buf"
without b_flags being set to 0.

Anyone have any ideas? rick



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?CAM5tNy4bJC9p66_cBYBSdcxDTWwtFUcOvjfxf=a8B%2BA%2B9s_HSg>