2010-08-02 12:19:38

by Menyhart Zoltan

[permalink] [raw]
Subject: Warning in kref handling + kernel hangs

Hi,

I have a warning in kref handling (e.g. in 2.6.34.1) and my kernel hangs.
Should not we miss a svc_xprt_get(xprt) in the else branch of svc_xprt_enqueue() ?

int svc_recv(struct svc_rqst *rqstp, long timeout)
{
...
xprt = svc_xprt_dequeue(pool);
if (xprt) {
rqstp->rq_xprt = xprt;
svc_xprt_get(xprt); //WARNING: at lib/kref.c:43 kref_get+0x23/0x2d()


void svc_xprt_enqueue(struct svc_xprt *xprt)
{
...
if (!list_empty(&pool->sp_threads)) {
...
svc_xprt_get(xprt);
...
wake_up(&rqstp->rq_wait);
} else {
list_add_tail(&xprt->xpt_ready, &pool->sp_sockets);
pool->sp_stats.sockets_queued++;
}

Thanks,

Zoltan Menyhart