From: Andries.Brouwer@cwi.nl
To: Andries.Brouwer@cwi.nl, torvalds@transmeta.com
Cc: linux-kernel@vger.kernel.org, viro@math.psu.edu
Subject: Re: [PATCH] struct char_device
Date: Wed, 23 May 2001 01:33:23 +0200 (MET DST) [thread overview]
Message-ID: <UTC200105222333.BAA77751.aeb@vlet.cwi.nl> (raw)
From torvalds@transmeta.com Wed May 23 00:39:23 2001
On Tue, 22 May 2001 Andries.Brouwer@cwi.nl wrote:
>
> The operations are different, but all bdev/cdev code is identical.
>
> So the choice is between two uglies:
> (i) have some not entirely trivial amount of code twice in the kernel
> (ii) have a union at the point where the struct operations
> is assigned.
>
> I preferred the union.
I would much prefer a union of pointers over a pointer to a union.
Why? Because if you have a "struct inode", you also have enough
information to decide _which_ of the two types of pointers you have, so
you can do the proper dis-ambiguation of the union and properly select
either 'inode->dev.char' or 'inode->dev.block' depending on other
information in the inode.
I am not sure whether we agree or differ in opinion. I wouldn't mind
/* pairing for dev_t to bd_op/cd_op */
struct bc_device {
struct list_head bd_hash;
atomic_t bd_count;
dev_t bd_dev;
atomic_t bd_openers;
union {
struct block_device_operations_and_data *bd_op;
struct char_device_operations_and_data *cd_op;
}
struct semaphore bd_sem;
};
typedef struct bc_device *kdev_t;
and in an inode
kdev_t dev;
dev_t rdev;
In reality we want the pair (dev_t, pointer to stuff), but then
there is all this administrative nonsense needed to make sure
that nobody uses the pointer after the module has been unloaded
that makes the pointer a bit thicker.
And we should not depend on the "inode->dev.xxxx" pointer
being valid all the time, as there is absolutely zero point
in initializing the pointer every time somebody does a "ls -l /dev".
Yes, that is why I want to go back and have dev_t rdev, not kdev_t.
The lookup is done when the device is opened.
Andries
next reply other threads:[~2001-05-22 23:34 UTC|newest]
Thread overview: 55+ messages / expand[flat|nested] mbox.gz Atom feed top
2001-05-22 23:33 Andries.Brouwer [this message]
2001-05-23 0:03 ` [PATCH] struct char_device Alexander Viro
-- strict thread matches above, loose matches on Subject: below --
2001-05-23 20:01 Andries.Brouwer
2001-05-23 18:28 Andries.Brouwer
2001-05-23 18:42 ` Alexander Viro
2001-05-23 15:24 Wayne.Brown
2001-05-23 13:34 Andries.Brouwer
2001-05-23 17:54 ` Alexander Viro
2001-05-24 10:35 ` Stephen C. Tweedie
2001-05-23 12:29 Andries.Brouwer
2001-05-23 12:30 ` Alan Cox
2001-05-23 13:26 ` Helge Hafting
2001-05-23 11:57 Andries.Brouwer
2001-05-23 12:13 ` Alan Cox
2001-05-23 6:47 Andries.Brouwer
2001-05-23 0:28 Andries.Brouwer
2001-05-23 0:38 ` Alexander Viro
2001-05-23 0:22 Andries.Brouwer
2001-05-23 0:29 ` Martin Dalecki
2001-05-23 0:20 Andries.Brouwer
2001-05-23 2:43 ` Linus Torvalds
2001-05-23 0:01 Andries.Brouwer
2001-05-22 22:17 Andries.Brouwer
2001-05-22 22:34 ` Martin Dalecki
2001-05-22 22:47 ` Martin Dalecki
2001-05-23 0:02 ` Jeff Garzik
2001-05-23 0:14 ` Jens Axboe
2001-05-23 2:40 ` Linus Torvalds
2001-05-23 12:35 ` Martin Dalecki
2001-05-22 21:35 Andries.Brouwer
2001-05-22 22:00 ` Martin Dalecki
2001-05-22 20:54 Andries.Brouwer
2001-05-22 21:17 ` Martin Dalecki
2001-05-22 22:37 ` Linus Torvalds
2001-05-22 23:51 ` Alexander Viro
2001-05-23 0:06 ` Jeff Garzik
2001-05-23 0:14 ` Jens Axboe
2001-05-23 2:37 ` Linus Torvalds
2001-05-23 3:04 ` Jeff Garzik
2001-05-23 3:21 ` Jeff Garzik
2001-05-23 9:05 ` Alan Cox
2001-05-23 2:35 ` Linus Torvalds
2001-05-22 19:52 Andries.Brouwer
2001-05-22 20:10 ` Alexander Viro
[not found] <Pine.GSO.4.21.0105221007460.15685-100000@weyl.math.psu.edu >
2001-05-22 15:26 ` Anton Altaparmakov
2001-05-22 16:08 ` Oliver Xymoron
2001-05-22 16:12 ` Alexander Viro
2001-05-22 17:30 ` Oliver Xymoron
2001-05-22 17:41 ` Alexander Viro
2001-05-22 19:22 ` Guest section DW
2001-05-22 19:25 ` Alexander Viro
2001-05-22 19:38 ` Oliver Xymoron
[not found] <Pine.LNX.4.10.10105221050080.8984-100000@coffee.psychology.mcmaster.ca>
2001-05-22 14:59 ` Tommy Hallgren
2001-05-22 14:40 Tommy Hallgren
2001-05-22 14:18 Alexander Viro
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=UTC200105222333.BAA77751.aeb@vlet.cwi.nl \
--to=andries.brouwer@cwi.nl \
--cc=linux-kernel@vger.kernel.org \
--cc=torvalds@transmeta.com \
--cc=viro@math.psu.edu \
/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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.