Hi all, Please code review the following fix: http://cr.opensolaris.org/~aragorn/6577647-nfs-intr/
Background ========== Please read the description for the CR at http://bugs.opensolaris.org/bugdatabase/view_bug.do?bug_id=6577647 The fix just use cv_wait_sig() in case when the "intr" mount flag is active. The fix is inspired by nfs_rw_enter_sig() implementation. Unit Test ========= Here is unit test for x86. I've got similar results on sparc. # uname -a SunOS va64-v20zh-prg06 5.11 onnv-bugfixes i86pc i386 i86pc # export SERVER=v4u-150a-prg06.czech # ssh r...@$server "mkdir /export/test; chmod 777 /export/test; share /export/test" # cd /tmp # mkdir test2 test3 test4 # mount -o vers=2 $SERVER:/export/test `pwd`/test2 # mount -o vers=3 $SERVER:/export/test `pwd`/test3 # mount -o vers=4 $SERVER:/export/test `pwd`/test4 # mkfile 1g `pwd`/test2/test2 & [1] 4220 # mkfile 1g `pwd`/test3/test3 & [2] 4222 # mkfile 1g `pwd`/test4/test4 & [3] 4224 # echo "::pgrep mkfile|::walk thread|::findstack" | mdb -k stack pointer for thread ffffff02d28b78a0: ffffff000f742b50 [ ffffff000f742b50 _resume_from_idle+0xf1() ] ffffff000f742b80 swtch+0x147() ffffff000f742be0 cv_wait_sig+0x14a() ffffff000f742d70 nfs4_write+0x3dd() ffffff000f742de0 fop_write+0x6b() ffffff000f742e90 write+0x2e2() ffffff000f742ec0 write32+0x22() ffffff000f742f10 sys_syscall32+0xff() stack pointer for thread ffffff02d29cd8c0: ffffff0010ba9b60 [ ffffff0010ba9b60 _resume_from_idle+0xf1() ] ffffff0010ba9b90 swtch+0x147() ffffff0010ba9bf0 cv_wait_sig+0x14a() ffffff0010ba9d70 nfs3_write+0x371() ffffff0010ba9de0 fop_write+0x6b() ffffff0010ba9e90 write+0x2e2() ffffff0010ba9ec0 write32+0x22() ffffff0010ba9f10 sys_syscall32+0xff() stack pointer for thread ffffff02d2c57c80: ffffff001041cb70 [ ffffff001041cb70 _resume_from_idle+0xf1() ] ffffff001041cba0 swtch+0x147() ffffff001041cc00 cv_wait_sig+0x14a() ffffff001041cd70 nfs_write+0x34b() ffffff001041cde0 fop_write+0x6b() ffffff001041ce90 write+0x2e2() ffffff001041cec0 write32+0x22() ffffff001041cf10 sys_syscall32+0xff() # ssh r...@$server "svcadm disable svc:/network/nfs/server:default" # echo "::pgrep mkfile|::walk thread|::findstack" | mdb -k stack pointer for thread ffffff02d28b78a0: ffffff000f742b50 [ ffffff000f742b50 _resume_from_idle+0xf1() ] ffffff000f742b80 swtch+0x147() ffffff000f742be0 cv_wait_sig+0x14a() ffffff000f742d70 nfs4_write+0x3dd() ffffff000f742de0 fop_write+0x6b() ffffff000f742e90 write+0x2e2() ffffff000f742ec0 write32+0x22() ffffff000f742f10 sys_syscall32+0xff() stack pointer for thread ffffff02d29cd8c0: ffffff0010ba9b60 [ ffffff0010ba9b60 _resume_from_idle+0xf1() ] ffffff0010ba9b90 swtch+0x147() ffffff0010ba9bf0 cv_wait_sig+0x14a() ffffff0010ba9d70 nfs3_write+0x371() ffffff0010ba9de0 fop_write+0x6b() ffffff0010ba9e90 write+0x2e2() ffffff0010ba9ec0 write32+0x22() ffffff0010ba9f10 sys_syscall32+0xff() stack pointer for thread ffffff02d2c57c80: ffffff001041cb70 [ ffffff001041cb70 _resume_from_idle+0xf1() ] ffffff001041cba0 swtch+0x147() ffffff001041cc00 cv_wait_sig+0x14a() ffffff001041cd70 nfs_write+0x34b() ffffff001041cde0 fop_write+0x6b() ffffff001041ce90 write+0x2e2() ffffff001041cec0 write32+0x22() ffffff001041cf10 sys_syscall32+0xff() # pkill -INT mkfile # echo "::pgrep mkfile|::walk thread|::findstack" | mdb -k # Thank you. -- Marcel Telka Solaris RPE