NFS pending RPC requests

Bill Hawes (whawes@star.net)
Wed, 29 Oct 1997 08:35:21 -0500


After some further work I've figured out why we're getting pending RPC
requests in nfs_delete_inode.

The nfs_file_close code is supposed to flush dirty pages, but is
checking only for pending requests for the current pid. Since the file
close operation is called only by the _last_ process that has a file
open, if this isn't the one that wrote to the file, then the pages don't
get flushed. Thus any file held open by multiple processes may not get
flushed at close time.

The current NFS patch set handles the problem correctly at delete_inode
time, but I'm working on some changes to nfs_file_close to flush the
requests there.

There's also an issue of reporting errors from failed write requests.
It seems to me that nfs_file_close is not a very good time to report a
write error, as most software doesn't expect or check for error returns
from close. And since the close operation may not be called until the
process that wrote the file has already exited, it's a little late to be
looking for errors.

To address this problem I'm adding code to check for write errors in
nfs_fsync, which is otherwise pretty much the same as the close
operation.

Will have the new patch ready in a while, after some further testing.

Regards,
Bill