Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 17 Dec 1998 14:10:00 -0800 (PST)
From:      Alfred Perlstein <bright@hotjobs.com>
To:        freebsd-bugs@FreeBSD.ORG
Subject:   Re: kern/8732: nfs mounts with 'intr' can cause system hang
Message-ID:  <199812172210.OAA15605@freefall.freebsd.org>

next in thread | raw e-mail | index | archive | help
The following reply was made to PR kern/8732; it has been noted by GNATS.

From: Alfred Perlstein <bright@hotjobs.com>
To: "David G. Andersen" <danderse@cs.utah.edu>
Cc: freebsd-gnats-submit@freebsd.org
Subject: Re: kern/8732: nfs mounts with 'intr' can cause system hang
Date: Thu, 17 Dec 1998 17:07:10 -0500 (EST)

 On Thu, 17 Dec 1998, David G. Andersen wrote:
 
 > Okay.. hrm.  Want to try a different one?
 > 
 > Index: vfs_subr.c
 > ===================================================================
 > RCS file: /n/marker/usr/lsrc/FreeBSD/CVS/src/sys/kern/vfs_subr.c,v
 > retrieving revision 1.174
 > diff -r1.174 vfs_subr.c
 > 582,584c582,587
 > <                       tsleep((caddr_t)&vp->v_numoutput,
 > <                               slpflag | (PRIBIO + 1),
 > <                               "vinvlbuf", slptimeo);
 > ---
 > >                       if (error = tsleep((caddr_t)&vp->v_numoutput,
 > >                                          slpflag | (PRIBIO + 1),
 > >                                          "vinvlbuf", slptimeo)) {
 > >                               splx(s);
 > >                               return (error);
 > >                       }
 > 
 > 
 > (Instead of just checking for EINTR, it returns on any error)
 > 
 > I managed to replicate the crash you had with my first patch, but it
 > took a lot more pounding for some reason.  I haven't managed to crash
 > with this one yet, but who knows.
 > 
 >   -Dave
 
 ok, A & B
 
 A) ok, what if tsleep returns ERESTART?  will the kernel allow the process
 to exit the kernel call?  or will it loop retrying the syscall, and not
 allowing the process to return to userland?
 
 unless you say yes, i'll be trying the patch tonight (unplugging the
 ethernet to simulate an interrupted mount, then sending a ^C)
 
 B) well, um, i think i just got it.  Basically a ^C will make tsleep
 return EINTR which will allow the process back to userland, but perhaps a
 SIGIO or some other call will make tsleep give ERESTART which will restart
 the IO?
 
 is it A or B or ???
 
 thanks,
 -Alfred
 

To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-bugs" in the body of the message



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?199812172210.OAA15605>