Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

sunrpc: Simplify do_enqueue tracing

There are three cases where svc_xprt_do_enqueue() returns without
waking an nfsd thread:

1. There is no work to do

2. The transport is already busy

3. There are no available nfsd threads

Only 3. is truly interesting. Move the trace point so it records
that there was work to do and either an nfsd thread was awoken, or
a free one could not found.

As an additional clean up, remove a redundant comment and a couple
of dprintk call sites.

Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
Signed-off-by: J. Bruce Fields <bfields@redhat.com>

authored by

Chuck Lever and committed by
J. Bruce Fields
7dbb53ba caa3e106

+3 -8
+3 -8
net/sunrpc/svc_xprt.c
··· 382 382 int cpu; 383 383 384 384 if (!svc_xprt_has_something_to_do(xprt)) 385 - goto out; 385 + return; 386 386 387 387 /* Mark transport as busy. It will remain in this state until 388 388 * the provider calls svc_xprt_received. We update XPT_BUSY 389 389 * atomically because it also guards against trying to enqueue 390 390 * the transport twice. 391 391 */ 392 - if (test_and_set_bit(XPT_BUSY, &xprt->xpt_flags)) { 393 - /* Don't enqueue transport while already enqueued */ 394 - dprintk("svc: transport %p busy, not enqueued\n", xprt); 395 - goto out; 396 - } 392 + if (test_and_set_bit(XPT_BUSY, &xprt->xpt_flags)) 393 + return; 397 394 398 395 cpu = get_cpu(); 399 396 pool = svc_pool_for_cpu(xprt->xpt_server, cpu); 400 397 401 398 atomic_long_inc(&pool->sp_stats.packets); 402 399 403 - dprintk("svc: transport %p put into queue\n", xprt); 404 400 spin_lock_bh(&pool->sp_lock); 405 401 list_add_tail(&xprt->xpt_ready, &pool->sp_sockets); 406 402 pool->sp_stats.sockets_queued++; ··· 416 420 out_unlock: 417 421 rcu_read_unlock(); 418 422 put_cpu(); 419 - out: 420 423 trace_svc_xprt_do_enqueue(xprt, rqstp); 421 424 } 422 425 EXPORT_SYMBOL_GPL(svc_xprt_do_enqueue);