>> We are seeing crash in svc_release_it().
>> We are using ganesha V2.7.3 and have taken some recent patches for ntirpc which includes the patch to avoid leaking FDs "Mark ANYFD clients as local clients".
>> We are seeing the following crash repeatedly. Please check the backtrace below. Can there be a chance of having the same 'xprt' getting destroyed twice in clnt_vc_destroy()? Could this crash be related to it?

> What do the logs say?

 
We have not enabled all tracing for ntirpc by default, will enable and check the logs. Thank you.

>> (gdb) l -
>> 423         /* enforce once-only semantic, trace others */
>> 424         xp_flags = atomic_postset_uint16_t_bits(&xprt->xp_flags,
>> 425                                                 SVC_XPRT_FLAG_RELEASING);
>> 426         if (xp_flags & SVC_XPRT_FLAG_RELEASING) {
>> 427                 XPRT_TRACE(xprt, "WARNING! already destroying!", tag, line);
>> 428                 return;
>> 429         }
>> 430
>> 431         /* Releasing last reference */
>> 432         (*(xprt)->xp_ops->xp_destroy)(xprt, flags, tag, line);

> That atomic_postset should prevent two destroys.  We used to have this problem all
the time (since before I'd joined in 2014), so I'd added that.

Thanks,
Madhu Thorat
IBM-India Software Labs, Pune.
 
 
----- Original message -----
From: William Allen Simpson <william.allen.simpson@gmail.com>
To: Madhu P Punjabi <madhu.punjabi@in.ibm.com>, devel@lists.nfs-ganesha.org
Cc:
Subject: Re: [NFS-Ganesha-Devel] Crash in svc_release_it()
Date: Tue, May 14, 2019 6:45 PM
 
On 5/14/19 7:19 AM, Madhu P Punjabi wrote:
> We are seeing crash in svc_release_it().
> We are using ganesha V2.7.3 and have taken some recent patches for ntirpc which includes the patch to avoid leaking FDs "Mark ANYFD clients as local clients".
> We are seeing the following crash repeatedly. Please check the backtrace below. Can there be a chance of having the same 'xprt' getting destroyed twice in clnt_vc_destroy()? Could this crash be related to it?

What do the logs say?


> (gdb) l -
> 423         /* enforce once-only semantic, trace others */
> 424         xp_flags = atomic_postset_uint16_t_bits(&xprt->xp_flags,
> 425                                                 SVC_XPRT_FLAG_RELEASING);
> 426         if (xp_flags & SVC_XPRT_FLAG_RELEASING) {
> 427                 XPRT_TRACE(xprt, "WARNING! already destroying!", tag, line);
> 428                 return;
> 429         }
> 430
> 431         /* Releasing last reference */
> 432         (*(xprt)->xp_ops->xp_destroy)(xprt, flags, tag, line);

That atomic_postset should prevent two destroys.  We used to have this problem all
the time (since before I'd joined in 2014), so I'd added that.