Andries.Brouwer@cwi.nl wrote:
> From viro@math.psu.edu Sat Sep 1 18:26:53 2001
> > A kdev_t is a pointer to a struct that has the info now found in
> > the arrays (and major, minor fields, and a name function..).
> > This struct is allocated by the driver.
>
> Umm... Apply the arguments from the char_device thread - pointers to
> unions are rather bad idea. IOW, kdev_t must die - kernel always
> knows which kind we are dealing with.
>[...]
> However, a union is not so bad. It seems a pity to avoid unions
> and waste 4 bytes for every inode with separate i_bdev and i_cdev
> instead of a single i_bcdev.
Please, a union of different pointer types is much nicer. You can have
i_bdev and i_cdev without wasting any bytes.
This form works with GCC 2.96:
union {
struct char_device * i_cdev;
struct block_device * i_bdev;
};
If you're using a really old compiler that doesn't support anonymous unions,
(GCC 2.95 might be in this category, I'm not sure), then you'll need this:
#define i_bdev __i_bcdev_union.i_bdev
#define i_cdev __i_bcdev_union.i_cdev
union {
struct char_device * i_cdev;
struct block_device * i_bdev;
} __i_bcdev_union;
Either way, you avoid pointers to unions and you also avoid having a
named union type which contains pointers.
-- Jamie
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
This archive was generated by hypermail 2b29 : Fri Sep 07 2001 - 21:00:13 EST