David, your tree
git+ssh://master.kernel.org/pub/scm/linux/kernel/git/davem/net-2.6.17.git
is oopsing all over the place. Reverting "[NET]: Do not lose accepted
socket when -ENFILE/-EMFILE." makes it stop:
diff -puN net/socket.c~0001-NET-Do-not-lose-accepted-socket-when-ENFILE-EMFILE
net/socket.c
--- devel/net/socket.c~0001-NET-Do-not-lose-accepted-socket-when-ENFILE-EMFILE
2006-01-28 17:08:35.000000000 -0800
+++ devel-akpm/net/socket.c 2006-01-28 17:08:48.000000000 -0800
@@ -351,8 +351,8 @@ static struct dentry_operations sockfs_d
/*
* Obtains the first available file descriptor and sets it up for use.
*
- * These functions create file structures and maps them to fd space
- * of the current process. On success it returns file descriptor
+ * This function creates file structure and maps it to fd space
+ * of current process. On success it returns file descriptor
* and file struct implicitly stored in sock->file.
* Note that another thread may close file descriptor before we return
* from this function. We use the fact that now we do not refer
@@ -365,67 +365,52 @@ static struct dentry_operations sockfs_d
* but we take care of internal coherence yet.
*/
-static int sock_alloc_fd(struct file **filep)
+int sock_map_fd(struct socket *sock)
{
int fd;
+ struct qstr this;
+ char name[32];
+
+ /*
+ * Find a file descriptor suitable for return to the user.
+ */
fd = get_unused_fd();
- if (likely(fd >= 0)) {
+ if (fd >= 0) {
struct file *file = get_empty_filp();
- if (unlikely(!file)) {
+ if (!file) {
put_unused_fd(fd);
- return -ENFILE;
+ fd = -ENFILE;
+ goto out;
}
- *filep = file;
- } else
- *filep = NULL;
- return fd;
-}
-static int sock_attach_fd(struct socket *sock, struct file *file)
-{
- struct qstr this;
- char name[32];
-
- this.len = sprintf(name, "[%lu]", SOCK_INODE(sock)->i_ino);
- this.name = name;
- this.hash = SOCK_INODE(sock)->i_ino;
-
- file->f_dentry = d_alloc(sock_mnt->mnt_sb->s_root, &this);
- if (unlikely(!file->f_dentry))
- return -ENOMEM;
-
- file->f_dentry->d_op = &sockfs_dentry_operations;
- d_add(file->f_dentry, SOCK_INODE(sock));
- file->f_vfsmnt = mntget(sock_mnt);
- file->f_mapping = file->f_dentry->d_inode->i_mapping;
-
- sock->file = file;
- file->f_op = SOCK_INODE(sock)->i_fop = &socket_file_ops;
- file->f_mode = FMODE_READ | FMODE_WRITE;
- file->f_flags = O_RDWR;
- file->f_pos = 0;
- file->private_data = sock;
-
- return 0;
-}
-
-int sock_map_fd(struct socket *sock)
-{
- struct file *newfile;
- int fd = sock_alloc_fd(&newfile);
-
- if (likely(fd >= 0)) {
- int err = sock_attach_fd(sock, newfile);
-
- if (unlikely(err < 0)) {
- fput(newfile);
+ this.len = sprintf(name, "[%lu]", SOCK_INODE(sock)->i_ino);
+ this.name = name;
+ this.hash = SOCK_INODE(sock)->i_ino;
+
+ file->f_dentry = d_alloc(sock_mnt->mnt_sb->s_root, &this);
+ if (!file->f_dentry) {
+ put_filp(file);
put_unused_fd(fd);
- return err;
+ fd = -ENOMEM;
+ goto out;
}
- fd_install(fd, newfile);
+ file->f_dentry->d_op = &sockfs_dentry_operations;
+ d_add(file->f_dentry, SOCK_INODE(sock));
+ file->f_vfsmnt = mntget(sock_mnt);
+ file->f_mapping = file->f_dentry->d_inode->i_mapping;
+
+ sock->file = file;
+ file->f_op = SOCK_INODE(sock)->i_fop = &socket_file_ops;
+ file->f_mode = FMODE_READ | FMODE_WRITE;
+ file->f_flags = O_RDWR;
+ file->f_pos = 0;
+ file->private_data = sock;
+ fd_install(fd, file);
}
+
+out:
return fd;
}
@@ -1367,8 +1352,7 @@ asmlinkage long sys_listen(int fd, int b
asmlinkage long sys_accept(int fd, struct sockaddr __user *upeer_sockaddr, int
__user *upeer_addrlen)
{
struct socket *sock, *newsock;
- struct file *newfile;
- int err, len, newfd;
+ int err, len;
char address[MAX_SOCK_ADDR];
sock = sockfd_lookup(fd, &err);
@@ -1388,38 +1372,28 @@ asmlinkage long sys_accept(int fd, struc
*/
__module_get(newsock->ops->owner);
- newfd = sock_alloc_fd(&newfile);
- if (newfd < 0) {
- err = newfd;
- goto out_release;
- }
-
- err = sock_attach_fd(sock, newfile);
- if (err < 0)
- goto out_fd;
-
err = security_socket_accept(sock, newsock);
if (err)
- goto out_fd;
+ goto out_release;
err = sock->ops->accept(sock, newsock, sock->file->f_flags);
if (err < 0)
- goto out_fd;
+ goto out_release;
if (upeer_sockaddr) {
if(newsock->ops->getname(newsock, (struct sockaddr *)address,
&len, 2)<0) {
err = -ECONNABORTED;
- goto out_fd;
+ goto out_release;
}
err = move_addr_to_user(address, len, upeer_sockaddr,
upeer_addrlen);
if (err < 0)
- goto out_fd;
+ goto out_release;
}
/* File flags are not inherited via accept() unlike another OSes. */
- fd_install(newfd, newfile);
- err = newfd;
+ if ((err = sock_map_fd(newsock)) < 0)
+ goto out_release;
security_socket_post_accept(sock, newsock);
@@ -1427,9 +1401,6 @@ out_put:
sockfd_put(sock);
out:
return err;
-out_fd:
- fput(newfile);
- put_unused_fd(newfd);
out_release:
sock_release(newsock);
goto out_put;
_
Jan 28 17:03:16 sony kernel: ACPI: Video Device [NGFX] (multi-head: yes rom:
no post: no)
Jan 28 17:03:16 sony kernel: ACPI: Video Device [GFX0] (multi-head: yes rom:
yes post: no)
Jan 28 17:03:16 sony kernel: EXT3 FS on sda6, internal journal
Jan 28 17:03:16 sony kernel: Adding 1052216k swap on /dev/sda5. Priority:-1
extents:1 across:1052216k
Jan 28 17:03:16 sony kernel: Unable to handle kernel NULL pointer dereference
at virtual address 00000004
Jan 28 17:03:16 sony kernel: printing eip:
Jan 28 17:03:16 sony kernel: c0258d87
Jan 28 17:03:17 sony kernel: *pde = 3c9a7067
Jan 28 17:03:17 sony kernel: Oops: 0000 [#1]
Jan 28 17:03:17 sony kernel: last sysfs file:
/devices/system/cpu/cpu0/cpufreq/scaling_setspeed
Jan 28 17:03:17 sony kernel: Modules linked in: autofs4 sunrpc video sony_acpi
button battery ac nvram snd_hda_intel snd_hda_codec snd_seq_dummy snd_seq_oss
snd_seq_midi_event snd_seq snd_seq_device snd_pcm_oss snd_mixer_oss ohci1394
ipw2200 snd_pcm ieee80211 ieee1394 ieee80211_crypt e100 mii ehci_hcd snd_timer
uhci_hcd i2c_i801 snd soundcore snd_page_alloc i2c_core hw_random ext3 jbd ahci
ata_piix libata sd_mod scsi_mod
Jan 28 17:03:17 sony kernel: CPU: 0
Jan 28 17:03:17 sony kernel: EIP: 0060:[<c0258d87>] Not tainted VLI
Jan 28 17:03:17 sony kernel: EFLAGS: 00210282 (2.6.16-rc1)
Jan 28 17:03:17 sony kernel: EIP is at sys_accept+0x45/0x174
Jan 28 17:03:17 sony kernel: eax: 00000000 ebx: 00000005 ecx: f6eff3a4
edx: c1d8e000
Jan 28 17:03:17 sony kernel: esi: f6eff380 edi: f6eff380 ebp: c1d8e000
esp: c1d8eee0
Jan 28 17:03:17 sony kernel: ds: 007b es: 007b ss: 0068
Jan 28 17:03:17 sony kernel: Process hpiod (pid: 2311, threadinfo=c1d8e000
task=c1d8c560)
Jan 28 17:03:17 sony kernel: Stack: <0>f6c19fbc 0000005a ffffffe9 c1d8ef14
c011810b 00000000 003d0f00 00000006
Jan 28 17:03:17 sony kernel: 420a5100 003d08c2 f7333560 c1d8e000
f7333574 c012744b c1d8e000 003d0f00
Jan 28 17:03:17 sony kernel: 00000000 f7333560 c0119f8f 00000000
c1d8efbc b7fa04d4 003d0f00 f6c3ab74
Jan 28 17:03:17 sony kernel: Call Trace:
Jan 28 17:03:17 sony kernel: [<c011810b>] scheduler_tick+0x234/0x281
Jan 28 17:03:18 sony kernel: [<c012744b>] attach_pid+0x1d/0x9d
Jan 28 17:03:18 sony kernel: [<c0119f8f>] copy_process+0x761/0xc22
Jan 28 17:03:18 sony kernel: [<c0259774>] sys_socketcall+0xa5/0x18b
Jan 28 17:03:18 sony kernel: [<c0102afd>] syscall_call+0x7/0xb
Jan 28 17:03:18 sony kernel: Code: 85 c0 89 c7 0f 84 9a 00 00 00 c7 44 24 08 e9
ff ff ff e8 21 f0 ff ff 85 c0 89 c6 74 7f 0f b7 47 20 66 89 46 20 8b 47 08 89
46 08 <8b> 58 04 85 db 74 15 89 d8 e8 6a 56 ed ff 85 c0 0f 84 0c 01 00
Jan 28 17:03:18 sony kernel: <1>Unable to handle kernel NULL pointer
dereference at virtual address 0000001c
Jan 28 17:03:18 sony kernel: printing eip:
Jan 28 17:03:18 sony kernel: c0259007
Jan 28 17:03:18 sony kernel: *pde = 00000000
Jan 28 17:03:18 sony kernel: Oops: 0000 [#2]
Jan 28 17:03:18 sony kernel: last sysfs file:
/devices/system/cpu/cpu0/cpufreq/scaling_setspeed
Jan 28 17:03:18 sony kernel: Modules linked in: autofs4 sunrpc video sony_acpi
button battery ac nvram snd_hda_intel snd_hda_codec snd_seq_dummy snd_seq_oss
snd_seq_midi_event snd_seq snd_seq_device snd_pcm_oss snd_mixer_oss ohci1394
ipw2200 snd_pcm ieee80211 ieee1394 ieee80211_crypt e100 mii ehci_hcd snd_timer
uhci_hcd i2c_i801 snd soundcore snd_page_alloc i2c_core hw_random ext3 jbd ahci
ata_piix libata sd_mod scsi_mod
Jan 28 17:03:18 sony kernel: CPU: 0
Jan 28 17:03:18 sony kernel: EIP: 0060:[<c0259007>] Not tainted VLI
Jan 28 17:03:18 sony kernel: EFLAGS: 00010246 (2.6.16-rc1)
Jan 28 17:03:18 sony kernel: EIP is at sys_getpeername+0x44/0x85
Jan 28 17:03:18 sony kernel: eax: f681e680 ebx: 00000000 ecx: f730cee8
edx: f730cef0
Jan 28 17:03:19 sony kernel: esi: f681e680 edi: f730cef0 ebp: f730c000
esp: f730cee4
Jan 28 17:03:19 sony kernel: ds: 007b es: 007b ss: 0068
Jan 28 17:03:19 sony kernel: Process xinetd (pid: 2422, threadinfo=f730c000
task=f720fa90)
Jan 28 17:03:19 sony kernel: Stack: <0>00000001 f7f5b244 00000000 f730cf2c
f6829f94 c031fa20 00000000 c031fa20
Jan 28 17:03:19 sony kernel: 00000000 c014410f 0000000e c013f077
00000000 c1dae184 c17ed0e0 b7e4dda0
Jan 28 17:03:19 sony kernel: f6829f94 f7160ac0 00000002 f68d3b7c
b7e4dda0 00000000 f7160ac0 c0144365
Jan 28 17:03:19 sony kernel: Call Trace:
Jan 28 17:03:19 sony kernel: [<c014410f>] do_no_page+0x163/0x277
Jan 28 17:03:19 sony kernel: [<c013f077>] __pagevec_lru_add_active+0x91/0x9c
Jan 28 17:03:19 sony kernel: [<c0144365>] __handle_mm_fault+0xce/0x1a5
Jan 28 17:03:19 sony kernel: [<c025978e>] sys_socketcall+0xbf/0x18b
Jan 28 17:03:19 sony kernel: [<c0102afd>] syscall_call+0x7/0xb
Jan 28 17:03:19 sony kernel: Code: 85 c0 89 c6 74 39 8b 15 c0 1c 3e c0 ff 92 04
02 00 00 89 44 24 04 85 c0 75 1d 8b 5e 08 8d 7c 24 08 89 fa 6a 01 8d 4c 24 04
89 f0 <ff> 53 1c 89 44 24 08 85 c0 5b 74 16 8b 46 10 e8 ac 9b ef ff 8b
Jan 28 17:03:19 sony kernel: <1>Unable to handle kernel NULL pointer
dereference at virtual address 00000008
-
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at http://vger.kernel.org/majordomo-info.html