net/sunrpc/svc.c: In function ‘__svc_create_thread’:
net/sunrpc/svc.c:550: warning: ‘oldmask.bits[0u]’ may be used uninitialized in 
this function

is a bogus warning, but gcc isn't smart enough to see why. We cannot just
reorganize the code in the function, because we want the set_cpus_allowed()
restore to happen only after the kernel_thread() is forked. Alas, we have
to use cpus_clear() to initialize oldmask instead to keep gcc happy.

Also add some comments to describe what's happening in the function.

Signed-off-by: Satyam Sharma <[EMAIL PROTECTED]>

---

 net/sunrpc/svc.c |    7 +++++++
 1 file changed, 7 insertions(+)

--- linux-2.6.23-rc4-mm1/net/sunrpc/svc.c~fix   2007-09-02 22:55:25.000000000 
+0530
+++ linux-2.6.23-rc4-mm1/net/sunrpc/svc.c       2007-09-02 23:03:45.000000000 
+0530
@@ -568,17 +568,24 @@ __svc_create_thread(svc_thread_fn func, 
        rqstp->rq_server = serv;
        rqstp->rq_pool = pool;
 
+       /* Only to prevent gcc warning */
+       cpus_clear(oldmask);
+
+       /* Temporarily change CPU affinity before forking svc thread */
        if (serv->sv_nrpools > 1)
                have_oldmask = svc_pool_map_set_cpumask(pool->sp_id, &oldmask);
 
+       /* Will inherit current->cpus_allowed */
        error = kernel_thread((int (*)(void *)) func, rqstp, 0);
 
+       /* Restore old cpus_allowed */
        if (have_oldmask)
                set_cpus_allowed(current, oldmask);
 
        if (error < 0)
                goto out_thread;
        svc_sock_update_bufs(serv);
+
        error = 0;
 out:
        return error;

Reply via email to