Date: 13 Feb 2003 07:22:18 -0000 From: simon@optinet.com To: FreeBSD-gnats-submit@FreeBSD.org Cc: simon@optinet.com Subject: kern/48234: Kernel disk quota related bug causes a panic when inode limits are set Message-ID: <20030213072218.47216.qmail@shark.acceleratedweb.net>
next in thread | raw e-mail | index | archive | help
>Number: 48234
>Category: kern
>Synopsis: Kernel disk quota related bug causes a panic when inode limits are set
>Confidential: no
>Severity: serious
>Priority: high
>Responsible: freebsd-bugs
>State: open
>Quarter:
>Keywords:
>Date-Required:
>Class: sw-bug
>Submitter-Id: current-users
>Arrival-Date: Wed Feb 12 23:30:07 PST 2003
>Closed-Date:
>Last-Modified:
>Originator: Simon <simon@optinet.com>
>Release: FreeBSD 4.7-RELEASE i386
>Organization:
>Environment:
System: FreeBSD dhcp-731-1 4.7-RELEASE FreeBSD 4.7-RELEASE #0: Fri Feb 7 01:19:35 GMT 2003 root@dhcp-720-53:/usr/src/sys/compile/MANTIS i386
ServerWorks ServerSet III HE-SL chipset w/Dual P3 1.2Ghz CPU
2GB ECC SDRAM
Mylex AcceleRAID 170 w/seagate cheetah harddrives attached
>Description:
FreeBSD panics when a lot of sub-directories and files within them are created one after another.
Fatal trap 12: page fault while in kernel mode
mp_lock = 00000002; cpuid = 0; lapic.id = 00000000
fault virtual address = 0x0
fault code = supervisor write, page not present
instruction pointer = 0x8:0xc01cc212
stack pointer = 0x10:0xf0207c08
frame pointer = 0x10:0xf0207c58
code segment = base 0x0, limit 0xfffff, type 0x1b
= DPL 0, pres 1, def32 1, gran 1
processor eflags = interrupt enabled, resume, IOPL = 0
current process = 275 (perl)
interrupt mask = none <- SMP: XXX
trap number = 12
panic: page fault
mp_lock = 00000002; cpuid = 0; lapic.id = 00000000
boot() called on cpu#0
#13 0xc0206549 in syscall2 (frame={tf_fs = 47, tf_es = 47, tf_ds = -1078001617, tf_edi = 8, tf_esi =
1209875424,
tf_ebp = -1077937732, tf_isp = -266305580, tf_ebx = 1209800268, tf_edx = 1209875424, tf_ecx = 16,
tf_eax = 5, tf_trapno = 7, tf_err = 2, tf_eip = 1209708800, tf_cs = 31, tf_eflags = 663,
tf_esp = -1077937776, tf_ss = 47}) at ../../i386/i386/trap.c:1175
1175 error = (*callp->sy_call)(p, args);
#12 0xc018f380 in open (p=0xe9417860, uap=0xf0207f80) at ../../kern/vfs_syscalls.c:1028
1028 error = vn_open(&nd, flags, cmode);
#11 0xc01931b0 in vn_open (ndp=0xf0207ec4, fmode=1538, cmode=420) at vnode_if.h:106
106 rc = VCALL(dvp, VOFFSET(vop_create), &a);
#10 0xc01cf7c9 in ufs_vnoperate (ap=0xf0207df8) at ../../ufs/ufs/ufs_vnops.c:2422
2422 return (VOCALL(ufs_vnodeop_p, ap->a_desc->vdesc_offset, ap));
#9 0xc01ccaa0 in ufs_create (ap=0xf0207df8) at ../../ufs/ufs/ufs_vnops.c:195
195 error =
#8 0xc01cf480 in ufs_makeinode (mode=33188, dvp=0xf0f1d940, vpp=0xf0207ed8, cnp=0xf0207eec)
at ../../ufs/ufs/ufs_vnops.c:2167
2167 if ((error = getinoquota(ip)) ||
#7 0xc01cb5d2 in getinoquota (ip=0xce212000) at ../../ufs/ufs/ufs_quota.c:95
95 if (ip->i_dquot[USRQUOTA] == NODQUOT &&
#6 0xc01cc212 in dqget (vp=0xf0f1d700, id=1001, ump=0xcacbbc00, type=0, dqp=0xce212044)
at ../../ufs/ufs/ufs_quota.c:763
763 TAILQ_REMOVE(&dqfreelist, dq, dq_freelist);
#5 0xc0205a47 in trap (frame={tf_fs = -381616104, tf_es = 1744830480, tf_ds = 16, tf_edi = -276421056,
tf_esi = -890009540, tf_ebp = -266306472, tf_isp = -266306572, tf_ebx = -887662464, tf_edx = 0,
tf_ecx = -887736320, tf_eax = 0, tf_trapno = 12, tf_err = 2, tf_eip = -1071857134, tf_cs = 8,
tf_eflags = 66118, tf_esp = -836689920, tf_ss = -252586240}) at ../../i386/i386/trap.c:466
466 (void) trap_pfault(&frame, FALSE, eva);
#4 0xc0205ea9 in trap_pfault (frame=0xf0207bc8, usermode=0, eva=0) at ../../i386/i386/trap.c:867
867 trap_fatal(frame, eva);
#3 0xc0206218 in trap_fatal (frame=0xf0207bc8, eva=0) at ../../i386/i386/trap.c:974
974 panic("%s", trap_msg[type]);
>How-To-Repeat:
1. Make sure disk quotas are enabled
2. Pick a system user and set its quota limits to 300,000 inodes and 3,000,000 blocks
3. Switch to the user above, and using a script, create a sub-directory and few files
containig about 17k of data each and one 1byte file within this sub-directory. Repeat
this step using a different name for a sub-directory until the machine panics.
>Fix:
I noticed that disabling (setting soft/hard inode limit to 0) inode limits using edquota
prevents the panic
>Release-Note:
>Audit-Trail:
>Unformatted:
To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-bugs" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20030213072218.47216.qmail>
