From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754374Ab3ARCsL (ORCPT ); Thu, 17 Jan 2013 21:48:11 -0500 Received: from mail-vc0-f170.google.com ([209.85.220.170]:39348 "EHLO mail-vc0-f170.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752962Ab3ARCsJ (ORCPT ); Thu, 17 Jan 2013 21:48:09 -0500 MIME-Version: 1.0 In-Reply-To: <20130118012503.GH16568@mtj.dyndns.org> References: <20130116025251.GM2668@htj.dyndns.org> <20130116032502.GN2668@htj.dyndns.org> <20130116164832.GP2668@htj.dyndns.org> <50F6DD4D.3070808@linux.intel.com> <20130116213032.GS2668@htj.dyndns.org> <20130118012503.GH16568@mtj.dyndns.org> From: Linus Torvalds Date: Thu, 17 Jan 2013 18:47:48 -0800 X-Google-Sender-Auth: y6qo9Q3FaZalMVixOwh5s4IckYE Message-ID: Subject: Re: [PATCH 2/3] workqueue, async: implement work/async_current_func() To: Tejun Heo Cc: Arjan van de Ven , Ming Lei , Alex Riesen , Alan Stern , Jens Axboe , USB list , Linux Kernel Mailing List , Rusty Russell Content-Type: text/plain; charset=ISO-8859-1 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Thu, Jan 17, 2013 at 5:25 PM, Tejun Heo wrote: > Implement work/async_current_func() which query whether the current > task is a workqueue or async worker respectively and, if so, return > the current function being executed along with work / async item > related information. So why the odd interface? The only user of it calls it with a NULL/NULL pair of arguments, and in general it's just way too complex to be an exported function at all. I *suspect* you chose that complex interface because you feel you may have some use for it inside of the async code itself, but why isn't that then not totally private to there? IOW, why isn't the interface just static struct worker *current_worker(void) { if (current->flags & PF_WQ_WORKER) return kthread_data(current); return NULL; } int current_is_async(void) { struct worker *worker = current_worker(void); return worker && worker->current_func == async_run_entry_fn; } and that current_is_async() is enough for the exported interface. Then, if you actually want to care about the work itself, you can use that same "current_worker()" helper function, and look at the different worker fields more. But why export that kind of logic? Am I missing something? Linus