I'm working on RedHat Linux, 2.4.20 kernel.
I'm trying to understand where the read operation on NFS sleeps
while waiting for the results of the read.
The caller goes to sys_read(), then eventually to nfs_readpage_async(),
then eventually to nfs_list_add_request(). But I can't make out where
it sleeps while the request is going on. struct rpc_task has a field
called tk_exit which points to the callback routine which is
nfs_readpage_result(). Where does the read operation sleep in NFS ?
On the other side of the operation, when the reply comes in from the network,
the packets make their way from the NIC driver, to IP, to UDP, then at
some point, it ends up in the callback routine. However I don't see
a "wake". Where should it be ?
My bigger goal is to catch the read buffer and see what NFS is receiving.
I know that the result of my read request comes in as three packets.
So I'm trying to see what those packets look like when NFS receives them.
The bug I'm trying to track down is a corruption in one of those packets.
AFAIK, the packets are clean on the wire. I'm using the ethereal tool.
If you can tell me where the NFS read operation sleeps & gets woken up,
perhaps I can look at the read buffer at that point. If you need more
info, pls let me know.
thank you
|