All of lore.kernel.org
 help / color / mirror / Atom feed
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

             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.