Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 02 Aug 2016 17:18:24 +0000
From:      bugzilla-noreply@freebsd.org
To:        freebsd-bugs@FreeBSD.org
Subject:   [Bug 211531] Hitting non sleepable lock panic for lock "unp_link_rwlock"
Message-ID:  <bug-211531-8@https.bugs.freebsd.org/bugzilla/>

next in thread | raw e-mail | index | archive | help
https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=3D211531

            Bug ID: 211531
           Summary: Hitting non sleepable lock panic for lock
                    "unp_link_rwlock"
           Product: Base System
           Version: 10.3-STABLE
          Hardware: Any
                OS: Any
            Status: New
          Severity: Affects Only Me
          Priority: ---
         Component: kern
          Assignee: freebsd-bugs@FreeBSD.org
          Reporter: raviprakash.darbha@gmail.com

I encountered a double lock issue in unp_connectat function. After looking =
at
the code , I think the unp_link_rwlock is being locked once unp_connectat a=
nd
once again in unp_detach  (called from sofree ). Below is the exact call st=
ack.


UNP_LINK_WLOCK();         <=E2=80=94=E2=80=94=E2=80=94=E2=80=94=E2=80=94=E2=
=80=94=E2=80=94=E2=80=94=E2=80=94=E2=80=94  1 st call=20
=E2=80=A6..
=E2=80=A6..
if (so->so_proto->pr_flags & PR_CONNREQUIRED) {
     if (so2->so_options & SO_ACCEPTCONN
         CURVNET_SET(so2->so_vnet);=20
          so3 =3D sonewconn(so2, 0);
          // Expanding sonewconn=20
          {=20
             sonewconn=20
              {
                   =E2=80=A6=E2=80=A6
                   soalloc
                   =E2=80=A6=E2=80=A6.
                   pru_attach=20
                   =E2=80=A6=E2=80=A6.
                   if (!(head->so_options & SO_ACCEPTCONN) &&
                   ((head->so_proto->pr_protocol !=3D IPPROTO_SCTP) ||
                    (head->so_type !=3D SOCK_SEQPACKET))) {
                       =E2=80=A6=E2=80=A6=E2=80=A6.
                       sofree(so);             /* NB: returns ACCEPT_UNLOCK=
'ed.
*/
                       // Expanding sofree=20

                      {=20=20=20

                        =E2=80=A6=E2=80=A6.

                        pru_detach

                        // expanding pru_detach=20

                        {

                             // Recursive wlock acquiring.=20

                             UNP_LINK_WLOCK()     <=E2=80=94=E2=80=94=E2=80=
=94=E2=80=94=E2=80=94=E2=80=94=E2=80=94=E2=80=94=E2=80=94=E2=80=94  2nd Cal=
l=20

------------------------------------------------

Backtrace:
#0  doadump (textdump=3D1) at
/.amd/svl-engdata1vs1/occamdev/build/freebsd/stable_10/20160419.182836_fbsd=
-builder_10.325814/src/sys/kern/kern_shutdown.c:269
#1  0xffffffff8041084f in kern_reboot (howto=3D260) at
/.amd/svl-engdata1vs1/occamdev/build/freebsd/stable_10/20160419.182836_fbsd=
-builder_10.325814/src/sys/kern/kern_shutdown.c:452
#2  0xffffffff80410d32 in vpanic (fmt=3D<value optimized out>, ap=3D<value
optimized out>) at
/.amd/svl-engdata1vs1/occamdev/build/freebsd/stable_10/20160419.182836_fbsd=
-builder_10.325814/src/sys/kern/kern_shutdown.c:759
#3  0xffffffff80410f23 in kassert_panic (fmt=3D0xffffffff805e4300 "%s: recu=
rsing
but non-recursive rw %s @ %s:%d\n")
    at
/.amd/svl-engdata1vs1/occamdev/build/freebsd/stable_10/20160419.182836_fbsd=
-builder_10.325814/src/sys/kern/kern_shutdown.c:647
#4  0xffffffff8040e2c5 in __rw_wlock_hard (c=3D<value optimized out>,
tid=3D18446735292422403312, file=3D0x0, line=3D0)
    at
/.amd/svl-engdata1vs1/occamdev/build/freebsd/stable_10/20160419.182836_fbsd=
-builder_10.325814/src/sys/kern/kern_rwlock.c:739
#5  0xffffffff8040ed21 in _rw_wlock_cookie (c=3D<value optimized out>,
file=3D0xffffffff805f4e20
"/.amd/svl-engdata1vs1/occamdev/build/freebsd/stable_10/20160419.182836_fbs=
d-builder_10.325814/src/sys/kern/uipc_usrreq.c",=20
    line=3D654) at
/.amd/svl-engdata1vs1/occamdev/build/freebsd/stable_10/20160419.182836_fbsd=
-builder_10.325814/src/sys/kern/kern_rwlock.c:267
#6  0xffffffff8049b1c4 in uipc_detach (so=3D<value optimized out>) at
/.amd/svl-engdata1vs1/occamdev/build/freebsd/stable_10/20160419.182836_fbsd=
-builder_10.325814/src/sys/kern/uipc_usrreq.c:654
#7  0xffffffff80490203 in sofree (so=3D0xfffff80372dc5000) at
/.amd/svl-engdata1vs1/occamdev/build/freebsd/stable_10/20160419.182836_fbsd=
-builder_10.325814/src/sys/kern/uipc_socket.c:791
#8  0xffffffff80490c21 in sonewconn (head=3D0xfffff80735e98000, connstatus=
=3D0) at
/.amd/svl-engdata1vs1/occamdev/build/freebsd/stable_10/20160419.182836_fbsd=
-builder_10.325814/src/sys/kern/uipc_socket.c:617
#9  0xffffffff80498f79 in unp_connectat (fd=3D<value optimized out>,
so=3D0xfffff8066ee292e0, nam=3D<value optimized out>, td=3D0xfffff803727fb4=
f0)
    at
/.amd/svl-engdata1vs1/occamdev/build/freebsd/stable_10/20160419.182836_fbsd=
-builder_10.325814/src/sys/kern/uipc_usrreq.c:1359
#10 0xffffffff8049c0c1 in uipc_connect (so=3D0xfffff8066ee292e0,
nam=3D0xfffffe085d25d170, td=3D0xfffff803727fb4f0)
    at
/.amd/svl-engdata1vs1/occamdev/build/freebsd/stable_10/20160419.182836_fbsd=
-builder_10.325814/src/sys/kern/uipc_usrreq.c:585
#11 0xffffffff83879e5a in clnt_vc_create (so=3D0xfffff8066ee292e0, raddr=3D=
<value
optimized out>, prog=3D100000, vers=3D3, sendsz=3D9000, recvsz=3D9000, intr=
flag=3D1)
    at
/.amd/svl-engdata1vs1/occamdev/build/freebsd/stable_10/20160419.182836_fbsd=
-builder_10.325814/src/sys/rpc/clnt_vc.c:154
#12 0xffffffff8387caa6 in local_rpcb () at
/.amd/svl-engdata1vs1/occamdev/build/freebsd/stable_10/20160419.182836_fbsd=
-builder_10.325814/src/sys/rpc/rpcb_clnt.c:461
#13 0xffffffff8387cb0d in rpcb_unset (program=3D0, version=3D0, nconf=3D0x0=
) at
/.amd/svl-engdata1vs1/occamdev/build/freebsd/stable_10/20160419.182836_fbsd=
-builder_10.325814/src/sys/rpc/rpcb_clnt.c:616
#14 0xffffffff8387f57c in svc_unreg (pool=3D0xfffffe0003d27000, prog=3D1000=
03,
vers=3D2) at
/.amd/svl-engdata1vs1/occamdev/build/freebsd/stable_10/20160419.182836_fbsd=
-builder_10.325814/src/sys/rpc/svc.c:532
#15 0xffffffff8387f991 in svcpool_destroy (pool=3D0xfffffe0003d27000) at
/.amd/svl-engdata1vs1/occamdev/build/freebsd/stable_10/20160419.182836_fbsd=
-builder_10.325814/src/sys/rpc/svc.c:204
#16 0xffffffff838c3cf9 in nfsrvd_init (terminating=3D<value optimized out>)=
 at
/.amd/svl-engdata1vs1/occamdev/build/freebsd/stable_10/20160419.182836_fbsd=
-builder_10.325814/src/sys/fs/nfsserver/nfs_nfsdkrpc.c:539
#17 0xffffffff838c490b in nfsrvd_nfsd (td=3D<value optimized out>,
args=3D0xfffffe085d25da70)
    at
/.amd/svl-engdata1vs1/occamdev/build/freebsd/stable_10/20160419.182836_fbsd=
-builder_10.325814/src/sys/fs/nfsserver/nfs_nfsdkrpc.c:516
#18 0xffffffff838d4f9b in nfssvc_nfsd (td=3D0xfffff803727fb4f0, uap=3D<value
optimized out>)
    at
/.amd/svl-engdata1vs1/occamdev/build/freebsd/stable_10/20160419.182836_fbsd=
-builder_10.325814/src/sys/fs/nfsserver/nfs_nfsdport.c:3081
#19 0xffffffff838b111b in sys_nfssvc (td=3D0xfffff803727fb4f0,
uap=3D0xfffffe085d25db70) at
/.amd/svl-engdata1vs1/occamdev/build/freebsd/stable_10/20160419.182836_fbsd=
-builder_10.325814/src/sys/nfs/nfs_nfssvc.c:108
#20 0xffffffff805597a6 in amd64_syscall (td=3D0xfffff803727fb4f0, traced=3D=
0) at
/.amd/svl-engdata1vs1/occamdev/build/freebsd/stable_10/20160419.182836_fbsd=
-builder_10.325814/src/sys/amd64/amd64/../../kern/subr_syscall.c:145
#21 0xffffffff8053e647 in Xfast_syscall () at
/.amd/svl-engdata1vs1/occamdev/build/freebsd/stable_10/20160419.182836_fbsd=
-builder_10.325814/src/sys/amd64/amd64/exception.S:396
#22 0x0000000800a915fa in ?? ()
Backtrace stopped: previous frame inner to this frame (corrupt stack?)




I am working on a patch for the fix

--=20
You are receiving this mail because:
You are the assignee for the bug.=



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