From: Linus Torvalds <torvalds@osdl.org>
To: Andrew Morton <akpm@osdl.org>
Cc: Nick Piggin <nickpiggin@yahoo.com.au>,
Christoph Lameter <clameter@sgi.com>,
linux-mm@kvack.org
Subject: Re: Slab: Remove kmem_cache_t
Date: Tue, 28 Nov 2006 20:38:45 -0800 (PST) [thread overview]
Message-ID: <Pine.LNX.4.64.0611282027431.3395@woody.osdl.org> (raw)
In-Reply-To: <20061128200619.67080e11.akpm@osdl.org>
On Tue, 28 Nov 2006, Andrew Morton wrote:
> On Wed, 29 Nov 2006 15:42:44 +1100
> Nick Piggin <nickpiggin@yahoo.com.au> wrote:
>
> > So what exactly is wrong with
> > a kmem_cache_t declaration in include files, then?
>
> a) it's a typedef and
>
> b) it's a typedef, and you cannot forward-declare typedefs. We've hit this
> a couple of times. Header files need to include slab.h just to be able to do
>
> extern kmem_cache_t *wozzle;
Yeah. There really is a good reason to never really use typedef's at all.
The _only_ valid reason to use typedefs ever is because it's a type that
depends on some configuration option (where "architecture" is obviously
the biggest config option of all).
If the type has the same name regardless of config options, it should
never be a typedef. And "struct kmem_cache" obviously doesn't change names
just because of config options (it may change some of the _members_ it
contains, but that's a totally different thing, and has no bearing
what-so-ever on whether you should use a typedef).
So typedefs are good for
- "u8"/"u16"/"u32"/"u64" kind of things, where the underlying types
really are potentially different on different architectures.
- "sector_t"-like things which may be 32-bit or 64-bit depending on some
CONFIG_LBD option or other.
- as a special case, "sparse" actually makes bitwise typedefs have real
meaning as types, so if you are using sparse to distinguish between a
little-endian 16-bit entity or a big-endian 16-bit entity, the typedef
there is actually important and has real meaning to sparse (without the
typedef, each bitwise type declaration would be strictly a _different_
type from another bitwise type declaration that otherwise looks the
same).
But typedefs are NOT good for:
- trying to avoid typing a few characters:
"kmem_cache_t" is strictly _worse_ than "struct kmem_cache", not
just because it causes declaration issues. It also hides the fact
that the thing really is a structure (and hiding the fact that
it's a pointer is a shooting offense: things like "voidptr_t"
should not be allowed at all)
- incorrect "portability".
the POSIX "socklen_t" was not only a really bad way to write
"int", it actually caused a lot of NON-portability, and made some
people think it should be "size_t" or something equally broken.
The one excuse for typedefs in the "typing" sense can be complicated
function pointer types. Some function pointers are just too easy to screw
up, and using a
typedef (*myfn_t)(int, ...);
can be preferable over forcing people to write that really complex kind of
type out every time. But that shouldn't be overused either (but we use it
for things like "readdir_t", for example, for exactly this reason).
Linus
--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org. For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>
next prev parent reply other threads:[~2006-11-29 4:38 UTC|newest]
Thread overview: 29+ messages / expand[flat|nested] mbox.gz Atom feed top
2006-11-29 2:49 Christoph Lameter
2006-11-29 3:06 ` Andrew Morton
2006-11-29 4:06 ` Nick Piggin
2006-11-29 3:32 ` Christoph Lameter
2006-11-29 4:42 ` Nick Piggin
2006-11-29 3:48 ` Nick Piggin
2006-11-29 4:06 ` Andrew Morton
2006-11-29 4:38 ` Linus Torvalds [this message]
2006-11-29 5:51 ` Nick Piggin
2006-11-29 15:48 ` Linus Torvalds
2006-11-30 1:40 ` Nick Piggin
2006-11-30 1:59 ` Linus Torvalds
2006-11-30 2:14 ` Nick Piggin
2006-11-30 2:37 ` Linus Torvalds
2006-11-30 2:51 ` Nick Piggin
2006-11-29 6:21 ` Nick Piggin
2006-11-29 16:11 ` Linus Torvalds
2006-11-29 5:41 ` Nick Piggin
2006-11-29 6:24 ` Andrew Morton
2006-11-29 6:41 ` Nick Piggin
2006-11-29 7:08 ` Andrew Morton
2006-11-29 7:23 ` Nick Piggin
2006-11-29 7:41 ` Andrew Morton
2006-11-29 8:04 ` Nick Piggin
2006-11-29 16:23 ` Linus Torvalds
2006-11-30 1:44 ` Nick Piggin
2006-11-29 19:16 ` Christoph Lameter
2006-11-29 8:50 ` Peter Zijlstra
2006-11-29 19:27 ` Christoph Lameter
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=Pine.LNX.4.64.0611282027431.3395@woody.osdl.org \
--to=torvalds@osdl.org \
--cc=akpm@osdl.org \
--cc=clameter@sgi.com \
--cc=linux-mm@kvack.org \
--cc=nickpiggin@yahoo.com.au \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox