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

Reply via email to