Thread (180 messages) 180 messages, 22 authors, 2006-08-22

Re: [take3 3/4] kevent: Network AIO, socket notifications.

From: Eric Dumazet <hidden>
Date: 2006-08-03 09:54:31
Also in: lkml

On Thursday 03 August 2006 11:46, Evgeniy Polyakov wrote:
quoted hunk ↗ jump to hunk
Network AIO, socket notifications.

This patchset includes socket notifications and network asynchronous IO.
Network AIO is based on kevent and works as usual kevent storage on top
of inode.
 						          (3 * TCP_RTO_MIN) / 4,
diff --git a/kernel/kevent/kevent_naio.c b/kernel/kevent/kevent_naio.c
+
+static int kevent_naio_enqueue(struct kevent *k)
+{
+	int err, i;
+	struct page **page;
+	void *addr;
+	unsigned int size = k->event.id.raw[1];
+	int num = size/PAGE_SIZE;
+	struct file *file;
+	struct sock *sk = NULL;
+	int fput_needed;
+
+	file = fget_light(k->event.id.raw[0], &fput_needed);
+	if (!file)
+		return -ENODEV;
+
+	err = -EINVAL;
+	if (!file->f_dentry || !file->f_dentry->d_inode)
+		goto err_out_fput;
How can you be 100% sure this file is actually a socket here ?
(Another thread could close the fd and this fd can now point to another file)

You should do
if (file->f_op != &socket_file_ops)
	goto err_out_fput;
sk = file->private_data;  /* set in sock_map_fd */ 
+
+	sk = SOCKET_I(file->f_dentry->d_inode)->sk;
+

Eric
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help