looks good to me, Marcel. thanks for picking this up after the long time
since we filed that bug!

On Fri, 16 Oct 2009 10:36:15 +0200, Marcel Telka <Marcel.Telka at sun.com> 
wrote:

> 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.
>



-- 
frankB

It is always possible to agglutinate multiple separate problems
into a single complex interdependent solution.
In most cases this is a bad idea.

Reply via email to