Re: [PATCH] block: convert tasklets to use new tasklet_setup() API
From: Kees Cook <hidden>
Date: 2020-08-26 15:13:54
Also in:
dri-devel, intel-gfx, linux-arm-kernel, linux-block, linux-input, linux-mmc, linux-s390, linux-spi, linux-um, lkml, netdev
On Wed, Aug 26, 2020 at 12:55:28PM +0300, Dan Carpenter wrote:
On Wed, Aug 26, 2020 at 07:21:35AM +0530, Allen Pais wrote:quoted
On Thu, Aug 20, 2020 at 3:09 AM James Bottomley [off-list ref] wrote:quoted
On Wed, 2020-08-19 at 21:54 +0530, Allen wrote:quoted
quoted
[...]quoted
quoted
Since both threads seem to have petered out, let me suggest in kernel.h: #define cast_out(ptr, container, member) \ container_of(ptr, typeof(*container), member) It does what you want, the argument order is the same as container_of with the only difference being you name the containing structure instead of having to specify its type.Not to incessantly bike shed on the naming, but I don't like cast_out, it's not very descriptive. And it has connotations of getting rid of something, which isn't really true.Um, I thought it was exactly descriptive: you're casting to the outer container. I thought about following the C++ dynamic casting style, so out_cast(), but that seemed a bit pejorative. What about outer_cast()?quoted
FWIW, I like the from_ part of the original naming, as it has some clues as to what is being done here. Why not just from_container()? That should immediately tell people what it does without having to look up the implementation, even before this becomes a part of the accepted coding norm.I'm not opposed to container_from() but it seems a little less descriptive than outer_cast() but I don't really care. I always have to look up container_of() when I'm using it so this would just be another macro of that type ...So far we have a few which have been suggested as replacement for from_tasklet() - out_cast() or outer_cast() - from_member(). - container_from() or from_container() from_container() sounds fine, would trimming it a bit work? like from_cont().I'm fine with container_from(). It's the same form as container_of() and I think we need urgent agreement to not stall everything else so the most innocuous name is likely to get the widest acceptance.Kees, Will you be sending the newly proposed API to Linus? I have V2 which uses container_from() ready to be sent out.I liked that James swapped the first two arguments so that it matches container_of(). Plus it's nice that when you have: struct whatever *foo = container_from(ptr, foo, member); Then it means that "ptr == &foo->member".
I'm a bit stalled right now -- the merge window was keeping me busy, and this week is the Linux Plumbers Conference. This is on my list, but I haven't gotten back around to it. If you want, feel free to send the container_from() patch; you might be able to unblock this faster than me right now. :) -Kees -- Kees Cook