From: Davide Libenzi <davidel@xmailserver.org>
To: Andrew Morton <akpm@osdl.org>
Cc: Linux Kernel Mailing List <linux-kernel@vger.kernel.org>
Subject: Re: [patch] Fix epoll delayed initialization bug ...
Date: Fri, 16 Sep 2005 16:56:53 -0700 (PDT) [thread overview]
Message-ID: <Pine.LNX.4.63.0509161655240.6125@localhost.localdomain> (raw)
In-Reply-To: <20050916165053.2dec0a6b.akpm@osdl.org>
[-- Attachment #1: Type: TEXT/PLAIN, Size: 1157 bytes --]
On Fri, 16 Sep 2005, Andrew Morton wrote:
> Davide Libenzi <davidel@xmailserver.org> wrote:
>>
>> diff -Nru linux-2.6.13.vanilla/fs/eventpoll.c linux-2.6.13/fs/eventpoll.c
>> --- linux-2.6.13.vanilla/fs/eventpoll.c 2005-09-16 15:20:46.000000000 -0700
>> +++ linux-2.6.13/fs/eventpoll.c 2005-09-16 15:21:08.000000000 -0700
>> @@ -231,8 +231,9 @@
>>
>> static void ep_poll_safewake_init(struct poll_safewake *psw);
>> static void ep_poll_safewake(struct poll_safewake *psw, wait_queue_head_t *wq);
>> -static int ep_getfd(int *efd, struct inode **einode, struct file **efile);
>> -static int ep_file_init(struct file *file);
>> +static int ep_getfd(int *efd, struct inode **einode, struct file **efile,
>> + struct eventpoll *ep);
>> +static int ep_alloc(struct eventpoll **pep);
>
> Sigh. Space-stuffing strikes again. Please resend as an attachment.
>
> The number of whitespace-buggered patches which are coming in is just
> getting out of control lately.
>
> Even `patch -l' tossed four rejects, so there may be something else wrong
> in this one.
My side or your side? Anyway, see if the one attached merges cleanly ...
- Davide
[-- Attachment #2: Type: TEXT/plain, Size: 3118 bytes --]
diff -Nru linux-2.6.13.vanilla/fs/eventpoll.c linux-2.6.13/fs/eventpoll.c
--- linux-2.6.13.vanilla/fs/eventpoll.c 2005-09-16 15:20:46.000000000 -0700
+++ linux-2.6.13/fs/eventpoll.c 2005-09-16 15:21:08.000000000 -0700
@@ -231,8 +231,9 @@
static void ep_poll_safewake_init(struct poll_safewake *psw);
static void ep_poll_safewake(struct poll_safewake *psw, wait_queue_head_t *wq);
-static int ep_getfd(int *efd, struct inode **einode, struct file **efile);
-static int ep_file_init(struct file *file);
+static int ep_getfd(int *efd, struct inode **einode, struct file **efile,
+ struct eventpoll *ep);
+static int ep_alloc(struct eventpoll **pep);
static void ep_free(struct eventpoll *ep);
static struct epitem *ep_find(struct eventpoll *ep, struct file *file, int fd);
static void ep_use_epitem(struct epitem *epi);
@@ -501,38 +502,37 @@
asmlinkage long sys_epoll_create(int size)
{
int error, fd;
+ struct eventpoll *ep;
struct inode *inode;
struct file *file;
DNPRINTK(3, (KERN_INFO "[%p] eventpoll: sys_epoll_create(%d)\n",
current, size));
- /* Sanity check on the size parameter */
+ /*
+ * Sanity check on the size parameter, and create the internal data
+ * structure ( "struct eventpoll" ).
+ */
error = -EINVAL;
- if (size <= 0)
+ if (size <= 0 || (error = ep_alloc(&ep)) != 0)
goto eexit_1;
/*
* Creates all the items needed to setup an eventpoll file. That is,
* a file structure, and inode and a free file descriptor.
*/
- error = ep_getfd(&fd, &inode, &file);
- if (error)
- goto eexit_1;
-
- /* Setup the file internal data structure ( "struct eventpoll" ) */
- error = ep_file_init(file);
+ error = ep_getfd(&fd, &inode, &file, ep);
if (error)
goto eexit_2;
-
DNPRINTK(3, (KERN_INFO "[%p] eventpoll: sys_epoll_create(%d) = %d\n",
current, size, fd));
return fd;
eexit_2:
- sys_close(fd);
+ ep_free(ep);
+ kfree(ep);
eexit_1:
DNPRINTK(3, (KERN_INFO "[%p] eventpoll: sys_epoll_create(%d) = %d\n",
current, size, error));
@@ -706,7 +706,8 @@
/*
* Creates the file descriptor to be used by the epoll interface.
*/
-static int ep_getfd(int *efd, struct inode **einode, struct file **efile)
+static int ep_getfd(int *efd, struct inode **einode, struct file **efile,
+ struct eventpoll *ep)
{
struct qstr this;
char name[32];
@@ -756,7 +757,7 @@
file->f_op = &eventpoll_fops;
file->f_mode = FMODE_READ;
file->f_version = 0;
- file->private_data = NULL;
+ file->private_data = ep;
/* Install the new setup file into the allocated fd. */
fd_install(fd, file);
@@ -777,7 +778,7 @@
}
-static int ep_file_init(struct file *file)
+static int ep_alloc(struct eventpoll **pep)
{
struct eventpoll *ep;
@@ -792,9 +793,9 @@
INIT_LIST_HEAD(&ep->rdllist);
ep->rbr = RB_ROOT;
- file->private_data = ep;
+ *pep = ep;
- DNPRINTK(3, (KERN_INFO "[%p] eventpoll: ep_file_init() ep=%p\n",
+ DNPRINTK(3, (KERN_INFO "[%p] eventpoll: ep_alloc() ep=%p\n",
current, ep));
return 0;
}
next prev parent reply other threads:[~2005-09-16 23:59 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2005-09-16 23:35 Davide Libenzi
2005-09-16 23:50 ` Andrew Morton
2005-09-16 23:56 ` Davide Libenzi [this message]
2005-09-17 0:05 ` Andrew Morton
2005-09-17 2:37 ` Paul Jackson
2005-09-16 23:59 ` Roland Dreier
2005-09-17 5:47 ` Al 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=Pine.LNX.4.63.0509161655240.6125@localhost.localdomain \
--to=davidel@xmailserver.org \
--cc=akpm@osdl.org \
--cc=linux-kernel@vger.kernel.org \
/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
all inboxes | Powered by JetHome®