From: Christoph Hellwig <hch@infradead.org>
To: Evgeniy Polyakov <johnpol@2ka.mipt.ru>
Cc: lkml <linux-kernel@vger.kernel.org>,
David Miller <davem@davemloft.net>,
Ulrich Drepper <drepper@redhat.com>,
Andrew Morton <akpm@osdl.org>, netdev <netdev@vger.kernel.org>,
Zach Brown <zach.brown@oracle.com>
Subject: [PATCH] kevent_user: remove non-chardev interface
Date: Tue, 22 Aug 2006 12:54:59 +0100 [thread overview]
Message-ID: <20060822115459.GA10839@infradead.org> (raw)
In-Reply-To: <11561555871530@2ka.mipt.ru>
Currently a user can create a user kevents in two ways:
a) simply open() the kevent chardevice
b) use sys_kevent_ctl with the KEVENT_CTL_INIT cmd type
both are equally easy to use for the user, but to support type b) a lot
of code in kernelspace is required. remove type b to save lots of code
without functionality loss.
include/linux/ukevent.h | 1
kernel/kevent/kevent_user.c | 99 +-------------------------------------------
2 files changed, 4 insertions(+), 96 deletions(-)
Signed-off-by: Christoph Hellwig <hch@lst.de>
Index: linux-2.6/kernel/kevent/kevent_user.c
===================================================================
--- linux-2.6.orig/kernel/kevent/kevent_user.c 2006-08-22 13:26:25.000000000 +0200
+++ linux-2.6/kernel/kevent/kevent_user.c 2006-08-22 13:46:08.000000000 +0200
@@ -36,20 +36,6 @@
static char kevent_name[] = "kevent";
static kmem_cache_t *kevent_cache;
-static int kevent_get_sb(struct file_system_type *fs_type,
- int flags, const char *dev_name, void *data, struct vfsmount *mnt)
-{
- /* So original magic... */
- return get_sb_pseudo(fs_type, kevent_name, NULL, 0xbcdbcdul, mnt);
-}
-
-static struct file_system_type kevent_fs_type = {
- .name = kevent_name,
- .get_sb = kevent_get_sb,
- .kill_sb = kill_anon_super,
-};
-
-static struct vfsmount *kevent_mnt;
/*
* kevents are pollable, return POLLIN and POLLRDNORM
@@ -178,17 +164,14 @@
}
-/*
- * Allocate new kevent userspace control entry.
- */
-static struct kevent_user *kevent_user_alloc(void)
+static int kevent_user_open(struct inode *inode, struct file *file)
{
struct kevent_user *u;
int i;
u = kzalloc(sizeof(struct kevent_user), GFP_KERNEL);
if (!u)
- return NULL;
+ return -ENOMEM;
INIT_LIST_HEAD(&u->ready_list);
spin_lock_init(&u->ready_lock);
@@ -202,23 +185,12 @@
atomic_set(&u->refcnt, 1);
- if (kevent_user_ring_init(u)) {
+ if (unlikely(kevent_user_ring_init(u))) {
kfree(u);
- u = NULL;
- }
-
- return u;
-}
-
-static int kevent_user_open(struct inode *inode, struct file *file)
-{
- struct kevent_user *u = kevent_user_alloc();
-
- if (!u)
return -ENOMEM;
+ }
file->private_data = u;
-
return 0;
}
@@ -807,51 +779,6 @@
.fops = &kevent_user_fops,
};
-
-/*
- * Userspace control block creation and initialization.
- */
-static int kevent_ctl_init(void)
-{
- struct kevent_user *u;
- struct file *file;
- int fd, ret;
-
- fd = get_unused_fd();
- if (fd < 0)
- return fd;
-
- file = get_empty_filp();
- if (!file) {
- ret = -ENFILE;
- goto out_put_fd;
- }
-
- u = kevent_user_alloc();
- if (unlikely(!u)) {
- ret = -ENOMEM;
- goto out_put_file;
- }
-
- file->f_op = &kevent_user_fops;
- file->f_vfsmnt = mntget(kevent_mnt);
- file->f_dentry = dget(kevent_mnt->mnt_root);
- file->f_mapping = file->f_dentry->d_inode->i_mapping;
- file->f_mode = FMODE_READ;
- file->f_flags = O_RDONLY;
- file->private_data = u;
-
- fd_install(fd, file);
-
- return fd;
-
-out_put_file:
- put_filp(file);
-out_put_fd:
- put_unused_fd(fd);
- return ret;
-}
-
static int kevent_ctl_process(struct file *file, unsigned int cmd, unsigned int num, void __user *arg)
{
int err;
@@ -920,9 +847,6 @@
int err = -EINVAL;
struct file *file;
- if (cmd == KEVENT_CTL_INIT)
- return kevent_ctl_init();
-
file = fget(fd);
if (!file)
return -ENODEV;
@@ -948,16 +872,6 @@
kevent_cache = kmem_cache_create("kevent_cache",
sizeof(struct kevent), 0, SLAB_PANIC, NULL, NULL);
- err = register_filesystem(&kevent_fs_type);
- if (err)
- panic("%s: failed to register filesystem: err=%d.\n",
- kevent_name, err);
-
- kevent_mnt = kern_mount(&kevent_fs_type);
- if (IS_ERR(kevent_mnt))
- panic("%s: failed to mount silesystem: err=%ld.\n",
- kevent_name, PTR_ERR(kevent_mnt));
-
err = misc_register(&kevent_miscdev);
if (err) {
printk(KERN_ERR "Failed to register kevent miscdev: err=%d.\n", err);
@@ -969,17 +883,12 @@
return 0;
err_out_exit:
- mntput(kevent_mnt);
- unregister_filesystem(&kevent_fs_type);
-
return err;
}
static void __devexit kevent_user_fini(void)
{
misc_deregister(&kevent_miscdev);
- mntput(kevent_mnt);
- unregister_filesystem(&kevent_fs_type);
}
module_init(kevent_user_init);
Index: linux-2.6/include/linux/ukevent.h
===================================================================
--- linux-2.6.orig/include/linux/ukevent.h 2006-08-22 12:10:24.000000000 +0200
+++ linux-2.6/include/linux/ukevent.h 2006-08-22 13:48:05.000000000 +0200
@@ -131,6 +131,5 @@
#define KEVENT_CTL_ADD 0
#define KEVENT_CTL_REMOVE 1
#define KEVENT_CTL_MODIFY 2
-#define KEVENT_CTL_INIT 3
#endif /* __UKEVENT_H */
next prev parent reply other threads:[~2006-08-22 11:55 UTC|newest]
Thread overview: 143+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <12345678912345.GA1898@2ka.mipt.ru>
2006-08-17 7:43 ` [take11 0/3] kevent: Generic event handling mechanism Evgeniy Polyakov
2006-08-17 7:43 ` [take11 1/3] kevent: Core files Evgeniy Polyakov
2006-08-17 7:43 ` [take11 2/3] kevent: poll/select() notifications Evgeniy Polyakov
2006-08-17 7:43 ` [take11 3/3] kevent: Timer notifications Evgeniy Polyakov
2006-08-21 10:19 ` [take12 0/3] kevent: Generic event handling mechanism Evgeniy Polyakov
2006-08-21 10:19 ` [take12 1/3] kevent: Core files Evgeniy Polyakov
2006-08-21 10:19 ` [take12 2/3] kevent: poll/select() notifications Evgeniy Polyakov
2006-08-21 10:19 ` [take12 3/3] kevent: Timer notifications Evgeniy Polyakov
2006-08-21 11:12 ` Christoph Hellwig
2006-08-21 11:18 ` Evgeniy Polyakov
2006-08-21 11:27 ` Arjan van de Ven
2006-08-21 11:59 ` Evgeniy Polyakov
2006-08-21 12:13 ` Arjan van de Ven
2006-08-21 12:25 ` Evgeniy Polyakov
2006-08-21 14:25 ` Thomas Gleixner
2006-08-22 18:25 ` Evgeniy Polyakov
2006-08-21 12:09 ` Evgeniy Polyakov
2006-08-22 4:36 ` Andrew Morton
2006-08-22 5:48 ` Evgeniy Polyakov
2006-08-21 12:37 ` [take12 4/3] kevent: Comment cleanup Evgeniy Polyakov
2006-08-23 8:51 ` [take12 1/3] kevent: Core files Eric Dumazet
2006-08-23 9:18 ` Evgeniy Polyakov
2006-08-23 9:23 ` Eric Dumazet
2006-08-23 9:29 ` Evgeniy Polyakov
2006-08-22 7:00 ` [take12 0/3] kevent: Generic event handling mechanism Nicholas Miell
2006-08-22 7:24 ` Evgeniy Polyakov
2006-08-22 8:17 ` Nicholas Miell
2006-08-22 8:23 ` David Miller
2006-08-22 8:59 ` Nicholas Miell
2006-08-22 14:59 ` James Morris
2006-08-22 20:00 ` Nicholas Miell
2006-08-22 20:36 ` David Miller
2006-08-22 21:13 ` Nicholas Miell
2006-08-22 21:25 ` David Miller
2006-08-22 22:58 ` Nicholas Miell
2006-08-22 23:46 ` Ulrich Drepper
2006-08-23 1:51 ` Nicholas Miell
2006-08-23 6:54 ` Evgeniy Polyakov
2006-08-22 8:37 ` Evgeniy Polyakov
2006-08-22 9:29 ` Nicholas Miell
2006-08-22 10:03 ` Evgeniy Polyakov
2006-08-22 19:57 ` Nicholas Miell
2006-08-22 20:16 ` Evgeniy Polyakov
2006-08-22 21:13 ` Nicholas Miell
2006-08-22 21:37 ` Randy.Dunlap
2006-08-22 22:01 ` Andrew Morton
2006-08-22 22:17 ` David Miller
2006-08-22 23:35 ` Andrew Morton
2006-08-22 22:58 ` Nicholas Miell
2006-08-22 23:06 ` David Miller
2006-08-23 1:36 ` The Proposed Linux kevent API (was: Re: [take12 0/3] kevent: Generic event handling mechanism.) Nicholas Miell
2006-08-23 2:01 ` The Proposed Linux kevent API Howard Chu
2006-08-23 3:31 ` David Miller
2006-08-23 3:47 ` Nicholas Miell
2006-08-23 4:23 ` Nicholas Miell
2006-08-23 6:22 ` The Proposed Linux kevent API (was: Re: [take12 0/3] kevent: Generic event handling mechanism.) Evgeniy Polyakov
2006-08-23 8:01 ` Nicholas Miell
2006-08-23 18:24 ` The Proposed Linux kevent API Stephen Hemminger
2006-08-22 23:22 ` [take12 0/3] kevent: Generic event handling mechanism Randy.Dunlap
[not found] ` <b3f268590608220957g43a16d6bmde8a542f8ad8710b@mail.gmail.com>
2006-08-22 17:09 ` Jari Sundell
2006-08-22 18:01 ` Evgeniy Polyakov
2006-08-22 19:14 ` Jari Sundell
2006-08-22 19:47 ` Evgeniy Polyakov
2006-08-22 22:51 ` Jari Sundell
2006-08-22 23:11 ` Alexey Kuznetsov
2006-08-23 0:28 ` Jari Sundell
2006-08-23 0:32 ` David Miller
2006-08-23 0:43 ` Jari Sundell
2006-08-23 6:56 ` Evgeniy Polyakov
2006-08-23 7:07 ` Andrew Morton
2006-08-23 7:10 ` Evgeniy Polyakov
2006-08-23 9:58 ` Andi Kleen
2006-08-23 10:03 ` Evgeniy Polyakov
2006-08-23 7:35 ` David Miller
2006-08-23 8:18 ` Nicholas Miell
2006-08-23 7:43 ` Ian McDonald
2006-08-23 7:50 ` Evgeniy Polyakov
2006-08-23 16:09 ` Andrew Morton
2006-08-23 16:22 ` Evgeniy Polyakov
2006-08-23 8:22 ` Jari Sundell
2006-08-23 8:39 ` Evgeniy Polyakov
2006-08-23 9:49 ` Jari Sundell
2006-08-23 10:20 ` Evgeniy Polyakov
2006-08-23 10:34 ` Jari Sundell
2006-08-23 10:51 ` Evgeniy Polyakov
2006-08-23 12:55 ` Jari Sundell
2006-08-23 13:11 ` Evgeniy Polyakov
2006-08-22 11:54 ` Christoph Hellwig [this message]
2006-08-22 12:17 ` [PATCH] kevent_user: remove non-chardev interface Evgeniy Polyakov
2006-08-22 12:27 ` Christoph Hellwig
2006-08-22 12:39 ` Evgeniy Polyakov
2006-08-22 11:55 ` [PATCH] kevent_user: use struct kevent_mring for the page ring Christoph Hellwig
2006-08-22 12:20 ` Evgeniy Polyakov
2006-08-23 11:24 ` [take13 0/3] kevent: Generic event handling mechanism Evgeniy Polyakov
2006-08-23 11:24 ` [take13 1/3] kevent: Core files Evgeniy Polyakov
2006-08-23 11:24 ` [take13 2/3] kevent: poll/select() notifications Evgeniy Polyakov
2006-08-23 11:24 ` [take13 3/3] kevent: Timer notifications Evgeniy Polyakov
2006-08-23 12:51 ` [take13 1/3] kevent: Core files Eric Dumazet
[not found] ` <20060823132753.GB29056@2ka.mipt.ru>
2006-08-23 13:44 ` Evgeniy Polyakov
2006-08-24 20:03 ` Christoph Hellwig
2006-08-25 5:48 ` Evgeniy Polyakov
2006-08-25 6:20 ` Andrew Morton
2006-08-25 6:32 ` Evgeniy Polyakov
2006-08-25 6:58 ` Andrew Morton
2006-08-25 7:20 ` Evgeniy Polyakov
2006-08-25 7:01 ` David Miller
2006-08-25 7:13 ` Andrew Morton
[not found] ` <Pine.LNX.4.63.0608231313370.8007@alpha.polcom.net>
[not found] ` <20060823122509.GA5744@2ka.mipt.ru>
[not found] ` <Pine.LNX.4.63.0608231437170.8007@alpha.polcom.net>
[not found] ` <20060823134227.GC29056@2ka.mipt.ru>
2006-08-23 18:56 ` [take13 0/3] kevent: Generic event handling mechanism Evgeniy Polyakov
2006-08-23 19:42 ` Evgeniy Polyakov
2006-08-25 9:54 ` [take14 " Evgeniy Polyakov
2006-08-25 9:54 ` [take14 1/3] kevent: Core files Evgeniy Polyakov
2006-08-25 9:54 ` [take14 2/3] kevent: poll/select() notifications Evgeniy Polyakov
2006-08-25 9:54 ` [take14 3/3] kevent: Timer notifications Evgeniy Polyakov
2006-08-27 21:03 ` [take14 0/3] kevent: Generic event handling mechanism Ulrich Drepper
2006-08-28 1:57 ` David Miller
2006-08-28 2:11 ` Ulrich Drepper
2006-08-28 2:40 ` Nicholas Miell
2006-08-28 2:59 ` Nicholas Miell
2006-08-28 11:47 ` Jari Sundell
2006-08-31 7:58 ` Evgeniy Polyakov
2006-09-09 16:10 ` Ulrich Drepper
2006-09-11 5:42 ` Evgeniy Polyakov
2006-09-04 10:14 ` [take15 0/4] " Evgeniy Polyakov
2006-09-04 9:58 ` Evgeniy Polyakov
2006-09-04 10:14 ` [take15 1/4] kevent: Core files Evgeniy Polyakov
2006-09-04 10:14 ` [take15 2/4] kevent: poll/select() notifications Evgeniy Polyakov
2006-09-04 10:14 ` [take15 3/4] kevent: Socket notifications Evgeniy Polyakov
2006-09-04 10:14 ` [take15 4/4] kevent: Timer notifications Evgeniy Polyakov
2006-09-05 13:39 ` Arnd Bergmann
2006-09-06 6:42 ` Evgeniy Polyakov
2006-09-05 13:28 ` [take15 1/4] kevent: Core files Arnd Bergmann
2006-09-06 6:51 ` Evgeniy Polyakov
2006-09-04 10:24 ` [take15 0/4] kevent: Generic event handling mechanism Evgeniy Polyakov
2006-09-06 11:55 ` [take16 " Evgeniy Polyakov
2006-09-06 11:55 ` [take16 1/4] kevent: Core files Evgeniy Polyakov
2006-09-06 11:55 ` [take16 2/4] kevent: poll/select() notifications Evgeniy Polyakov
2006-09-06 11:55 ` [take16 3/4] kevent: Socket notifications Evgeniy Polyakov
2006-09-06 11:55 ` [take16 4/4] kevent: Timer notifications Evgeniy Polyakov
2006-09-06 13:40 ` [take16 1/4] kevent: Core files Chase Venters
2006-09-06 13:54 ` Chase Venters
2006-09-06 14:03 ` Evgeniy Polyakov
2006-09-06 14:23 ` Chase Venters
2006-09-07 7:10 ` Evgeniy Polyakov
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=20060822115459.GA10839@infradead.org \
--to=hch@infradead.org \
--cc=akpm@osdl.org \
--cc=davem@davemloft.net \
--cc=drepper@redhat.com \
--cc=johnpol@2ka.mipt.ru \
--cc=linux-kernel@vger.kernel.org \
--cc=netdev@vger.kernel.org \
--cc=zach.brown@oracle.com \
/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.