On 19 Jun 2015, at 10:36, Emmanuel Dreyfus <m...@netbsd.org> wrote:

> Hi
> 
> I have encountered a bug with NetBSD NFS client. Despite a mount with
> -o intr,soft, we can hit situation where a process can remain hang in 
> kernel because the NFS server is gone.
> 
> This happens when the ioflush does its duty, with the following code path:
> sync_fsync / nfs_sync / VOP_FSYNC / nfs_fsync / nfs_flush / VOP_PUTPAGES
> 
> VOP_PUTPAGES has flags = PGO_ALLPAGES|PGO_FREE. It then goes through
> genfs_putpages and genfs_do_putpages, and get stuck in:
> 
>       /* Wait for output to complete. */
>       if (!wasclean && !async && vp->v_numoutput != 0) {
>               while (vp->v_numoutput != 0)
>                       cv_wait(&vp->v_cv, slock);
>       }

Looks like your problem is the missing nfs aware implementation of
function nfs_node.c:nfs_gop_write(). Falling back to genfs_gop_write()
ignores nfs timeouts.

--
J. Hannken-Illjes - hann...@eis.cs.tu-bs.de - TU Braunschweig (Germany)

Reply via email to