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