[4460] in Athena Bugs
NFS server panic: protection fault
daemon@ATHENA.MIT.EDU (John Carr)
Thu Mar 8 06:37:07 1990
To: bugs@ATHENA.MIT.EDU
Cc: dkk@ATHENA.MIT.EDU
Date: Thu, 08 Mar 90 06:36:48 EST
From: John Carr <jfc@ATHENA.MIT.EDU>
The VAX 3x00 nfs servers panic at intervals of weeks to months with a
"protection fault". This is consistently in the following lines in iget()
(file sys/ufs/ufs_inode.c):
/*
* If inode is on free list, remove it.
*/
if ((ip->i_flag & IREF) == 0) {
if (iq = ip->i_freef)
iq->i_freeb = ip->i_freeb;
else
ifreet = ip->i_freeb;
*ip->i_freeb = iq; <------- here ------<<
ip->i_freef = NULL;
ip->i_freeb = NULL;
}
Looking at the inode pointer, the field "i_freeb" is NULL:
8009ab58:
chain[0] chain[1]
800857f4 800857f4
8009ab60: v_flag count shlc exlc vfs mnt v_op
0 0 0 0 0 80074a68
8009ab70: v_socket v_vfsp v_type dev
0 80d92534 1 0160560
8009ab80: v_data v_text
8009ab58 0
8009ab88: devvp flag dev inode diroff
80d92550 0 04434 35242 0
8009ab98: fs dquot lastr/sock
80490200 800af2dc 0
8009aba4: i_freef i_freeb
0 0
8009abac: mode links uid gid
0100600 1 10274 11342
It would not surprise me if this were the first time we were exercising this
code, considering that our server usage has grown much faster than the
kernel table sizes.
Suggestion: if there are to be different kernels for each machine type, make
the VAX 3600 kernel have MAXUSERS 32 to get larger inode and other tables.