vm6 abcb461, vmcore.412 KDB: debugger backends: ddb KDB: current backend: ddb 524288K of memory above 4GB ignored Copyright (c) 1992-2010 The FreeBSD Project. Copyright (c) 1979, 1980, 1983, 1986, 1988, 1989, 1991, 1992, 1993, 1994 The Regents of the University of California. All rights reserved. FreeBSD is a registered trademark of The FreeBSD Foundation. FreeBSD 9.0-CURRENT #0 r201756+abcb461-dirty: Mon Jan 11 20:23:44 CET 2010 pho@x4.osted.lan:/var/tmp/deviant2/sys/i386/compile/PHO i386 WARNING: WITNESS option enabled, expect reduced performance. WARNING: DIAGNOSTIC option enabled, expect reduced performance. Timecounter "i8254" frequency 1193182 Hz quality 0 CPU: AMD Phenom(tm) 9150e Quad-Core Processor (1799.99-MHz 686-class CPU) Origin = "AuthenticAMD" Id = 0x100f23 Stepping = 3 Features=0x178bfbff Features2=0x802009 AMD Features=0xee500800 AMD Features2=0x7ff TSC: P-state invariant real memory = 4294967296 (4096 MB) avail memory = 3536142336 (3372 MB) : Trying to mount root from ufs:/dev/ad4s1a Enter full pathname of shell or RETURN for /bin/sh: # mount -t ufs -o ro -a # swapon -a swapon: adding /dev/ad4s1b as swap device swapon: adding /dev/ad4s2b as swap device # dumpon /dev/ad4s1b # mount /dev/ad4s1a on / (ufs, local, read-only) devfs on /dev (devfs, local, multilabel) /dev/ad4s1e on /tmp (ufs, local, read-only) /dev/ad4s1f on /usr (ufs, local, read-only) /dev/ad4s1d on /var (ufs, local, read-only) # mount -u -o rw /tmp # cd ~pho/stress2 # ./umount.sh run: run time 0+00:05:00, incarnations 1, load 100, verbose 1 20:51:21 Loop #1 swap: run time 0+00:02:00, incarnations 9, load 100, verbose 1 mmap: run time 0+00:02:00, incarnations 12, load 100, verbose 1 lock order reversal: 1st 0xc797e234 vnode interlock (vnode interlock) @ kern/vfs_subr.c:2192 2nd 0xc18900e8 system map (system map) @ vm/vm_kern.c:289 KDB: stack backtrace: db_trace_self_wrapper(c0ca62b1,f6455834,c08d57f5,c08c62db,c0ca9255,...) at db_trace_self_wrapper+0x26 kdb_backtrace(c08c62db,c0ca9255,c712d178,c712d0a8,f6455890,...) at kdb_backtrace+0x29 _witness_debugger(c0ca9255,c18900e8,c0ccd70b,c712d0a8,c0ccda38,...) at _witness_debugger+0x25 witness_checkorder(c18900e8,9,c0ccda2f,121,0,...) at witness_checkorder+0x839 _mtx_lock_flags(c18900e8,0,c0ccda2f,121,c1894900,...) at _mtx_lock_flags+0xc4 _vm_map_lock(c189008c,c0ccda2f,121,c7839900,c77f41d0,...) at _vm_map_lock+0x31 kmem_malloc(c189008c,1000,401,f6455980,c0aef5cd,...) at kmem_malloc+0x3a page_alloc(c188b380,1000,f6455973,401,c188b380,...) at page_alloc+0x27 keg_alloc_slab(c1894908,4,c0cccd9c,83e,f64559c0,...) at keg_alloc_slab+0xed keg_fetch_slab(401,14,c7a2ef6c,f6455a18,c0af15c1,...) at keg_fetch_slab+0x17f zone_fetch_slab(c188b380,c1894900,401,7f4,c0c2646e,...) at zone_fetch_slab+0x4c uma_zalloc_arg(c188b380,0,401,0,c797e170,...) at uma_zalloc_arg+0x581 malloc(5c,c0da036c,401,c0cb12e1,c797e170,...) at malloc+0xe6 v_record_ref(c797e234,0,c0cb0420,890,4,...) at v_record_ref+0x47 vrele(c797e170,0,c0cce77d,1c6,c79f27f8,...) at vrele+0x98 vm_object_deallocate(c79f27f8,0,c0ccd613,a2,0,...) at vm_object_deallocate+0x1cc unlock_and_deallocate(c21f41d0,0,c0ccd613,3ad,3,...) at unlock_and_deallocate+0x106 vm_fault(c77fe9f8,281be000,2,0,281be000,...) at vm_fault+0x1c11 trap_pfault(5,0,c0cde15a,2f0,c7982550,...) at trap_pfault+0x10d trap(f6455d38) at trap+0x2d0 calltrap() at calltrap+0x6 --- trap 0xc, eip = 0x2818d39e, esp = 0xbfbfe8d4, ebp = 0xbfbfea08 --- 20:53:21 Loop #2 mmap: run time 0+00:02:00, incarnations 2, load 100, verbose 1 swap: run time 0+00:02:00, incarnations 7, load 100, verbose 1 20:55:22 Loop #3 mmap: run time 0+00:02:00, incarnations 9, load 100, verbose 1 swap: run time 0+00:02:00, incarnations 18, load 100, verbose 1 lock order reversal: 1st 0xc783ca68 ufs (ufs) @ kern/vfs_mount.c:1204 2nd 0xc75c5a68 syncer (syncer) @ kern/vfs_subr.c:2224 KDB: stack backtrace: db_trace_self_wrapper(c0ca62b1,f64e4a4c,c08d57f5,c08c62db,c0ca9255,...) at db_trace_self_wrapper+0x26 kdb_backtrace(c08c62db,c0ca9255,c71338a8,c7133978,f64e4aa8,...) at kdb_backtrace+0x29 _witness_debugger(c0ca9255,c75c5a68,c0cb059b,c7133978,c0cb0429,...) at _witness_debugger+0x25 witness_checkorder(c75c5a68,9,c0cb0420,8b0,0,...) at witness_checkorder+0x839 __lockmgr_args(c75c5a68,80100,c75c5ad4,0,0,...) at __lockmgr_args+0x804 vop_stdlock(f64e4bc4,c09246ba,c0cb0429,80100,c75c5a10,...) at vop_stdlock+0x65 VOP_LOCK1_APV(c0da0440,f64e4bc4,c0881d13,c0dcb100,c75c5a10,...) at VOP_LOCK1_APV+0xb5 _vn_lock(c75c5a10,80100,c0cb0420,8b0,c0f6ca00,...) at _vn_lock+0x78 vrele(c75c5a10,0,c0cafc1e,4f9,80,...) at vrele+0x16a dounmount(c783d5a8,8000000,c7a26d80,47e,ff1ca3a5,...) at dounmount+0x3ce unmount(c7a26d80,f64e4cf8,8,c7a26d80,c0d8e868,...) at unmount+0x2ff syscall(f64e4d38) at syscall+0x2b4 Xint0x80_syscall() at Xint0x80_syscall+0x20 --- syscall (22, FreeBSD ELF32, unmount), eip = 0x280d9f7f, esp = 0xbfbfe43c, ebp = 0xbfbfe508 --- lock order reversal: 1st 0xc783ca68 ufs (ufs) @ kern/vfs_mount.c:1204 2nd 0xc783c8f8 devfs (devfs) @ ufs/ffs/ffs_softdep.c:1031 KDB: stack backtrace: db_trace_self_wrapper(c0ca62b1,f64e49dc,c08d57f5,c08c62db,c0ca9255,...) at db_trace_self_wrapper+0x26 kdb_backtrace(c08c62db,c0ca9255,c71338a8,c7133770,f64e4a38,...) at kdb_backtrace+0x29 _witness_debugger(c0ca9255,c783c8f8,c0c978c9,c7133770,c0cc9751,...) at _witness_debugger+0x25 witness_checkorder(c783c8f8,9,c0cc9748,407,c783c964,...) at witness_checkorder+0x839 __lockmgr_args(c783c8f8,80400,c783c964,0,0,...) at __lockmgr_args+0x804 vop_stdlock(f64e4b54,4,c0ca1569,80400,c783c8a0,...) at vop_stdlock+0x65 VOP_LOCK1_APV(c0d8aa00,f64e4b54,c0f78504,c0dcb100,c783c8a0,...) at VOP_LOCK1_APV+0xb5 _vn_lock(c783c8a0,80400,c0cc9748,407,c783d5a8,...) at _vn_lock+0x78 softdep_flushworklist(c783d5a8,f64e4c00,c7a26d80,553,c75c5a10,...) at softdep_flushworklist+0x47 ffs_sync(c783d5a8,1,c0cafc1e,4f9,80,...) at ffs_sync+0x2fd dounmount(c783d5a8,8000000,c7a26d80,47e,ff1ca3a5,...) at dounmount+0x44e unmount(c7a26d80,f64e4cf8,8,c7a26d80,c0d8e868,...) at unmount+0x2ff syscall(f64e4d38) at syscall+0x2b4 Xint0x80_syscall() at Xint0x80_syscall+0x20 --- syscall (22, FreeBSD ELF32, unmount), eip = 0x280d9f7f, esp = 0xbfbfe43c, ebp = 0xbfbfe508 --- run: run time 0+00:05:00, incarnations 1, load 100, verbose 1 20:57:29 Loop #1 mmap: run time 0+00:02:00, incarnations 2, load 100, verbose 1 swap: run time 0+00:02:00, incarnations 9, load 100, verbose 1 20:59:29 Loop #2 mmap: run time 0+00:02:00, incarnations 10, load 100, verbose 1 swap: run time 0+00:02:00, incarnations 1, load 100, verbose 1 21:01:29 Loop #3 mmap: run time 0+00:02:00, incarnations 18, load 100, verbose 1 swap: run time 0+00:02:00, incarnations 30, load 100, verbose 1 run: run time 0+00:05:00, incarnations 1, load 100, verbose 1 21:03:46 Loop #1 swap: run time 0+00:02:00, incarnations 39, load 100, verbose 1 mmap: run time 0+00:02:00, incarnations 14, load 100, verbose 1 21:05:49 Loop #2 mmap: run time 0+00:02:00, incarnations 14, load 100, verbose 1 swap: run time 0+00:02:00, incarnations 3, load 100, verbose 1 21:07:49 Loop #3 mmap: run time 0+00:02:00, incarnations 17, load 100, verbose 1 swap: run time 0+00:02:00, incarnations 9, load 100, verbose 1 run: run time 0+00:05:00, incarnations 1, load 100, verbose 1 21:09:55 Loop #1 mmap: run time 0+00:02:00, incarnations 12, load 100, verbose 1 swap: run time 0+00:02:00, incarnations 30, load 100, verbose 1 21:12:07 Loop #2 swap: run time 0+00:02:00, incarnations 4, load 100, verbose 1 mmap: run time 0+00:02:00, incarnations 10, load 100, verbose 1 21:14:07 Loop #3 mmap: run time 0+00:02:00, incarnations 5, load 100, verbose 1 swap: run time 0+00:02:00, incarnations 35, load 100, verbose 1 umount: unmount of /tmp failed: Device busy # ~KDB: enter: Line break on console [thread pid 11 tid 100005 ] Stopped at kdb_enter+0x3a: movl $0,kdb_why db> show mount 0xc77aeb50 /dev/ad4s1a on / (ufs) 0xc77af000 devfs on /dev (devfs) 0xc783d2d4 /dev/ad4s1f on /usr (ufs) 0xc783d000 /dev/ad4s1d on /var (ufs) 0xc77af87c /dev/ad4s1e on /tmp (ufs) More info: show mount db> show mount 0xc77af87c 0xc77af87c /dev/ad4s1e on /tmp (ufs) mnt_flag = SOFTDEP, LOCAL mnt_kern_flag = SOFTDEP, MPSAFE, LOOKUP_SHARED, 0x00000040 mnt_opt = rw, fstype, fspath, from, errmsg, noro mnt_stat = { version=537068824 type=3 flags=0x0000000000201000 bsize=2048 iosize=16384 blocks=50777075 bfree=49800428 bavail=45738262 files=13142014 ffree=13103420 syncwrites=0 asyncwrites=0 syncreads=0 asyncreads=0 namemax=255 owner=0 fsid=[1223921212, -14900315] } mnt_cred = { uid=0 ruid=0 } mnt_ref = 3 mnt_gen = 1 mnt_nvnodelistsize = 3 mnt_writeopcount = 0 mnt_noasync = 1 mnt_maxsymlinklen = 120 mnt_iosize_max = 131072 mnt_hashseed = 694016229 mnt_secondary_writes = 0 mnt_secondary_accwrites = 1528008 mnt_gjprovider = NULL vnode 0xc7976cf0: tag ufs, type VREG usecount 1, writecount 0, refcount 3 mountedhere 0 flags (VV_NOSYNC|VV(0x2000)) v_object 0xc7b5aa18 ref 0 pages 4 lock type ufs: UNLOCKED #0 0xc087a1be at __lockmgr_args+0xbfe #1 0xc0ad5e51 at ffs_lock+0xa1 #2 0xc0be88f5 at VOP_LOCK1_APV+0xb5 #3 0xc0932378 at _vn_lock+0x78 #4 0xc0925fbb at vget+0xbb #5 0xc0927ff5 at vfs_msync+0xf5 #6 0xc09282cb at sync_fsync+0x17b #7 0xc0be64f5 at VOP_FSYNC_APV+0xc5 #8 0xc092663b at sync_vnode+0x16b #9 0xc0926983 at sched_sync+0x273 #10 0xc0867558 at fork_exit+0xb8 #11 0xc0bb1cb0 at fork_trampoline+0x8 ino 6052911, on dev ad4s1e REF 2 vref #0 0xc0923a5d at v_record_ref+0x5d #1 0xc0923afd at vref+0x4d #2 0xc0b0e4e2 at vnode_pager_alloc+0x1a2 #3 0xc0b0e9d8 at vnode_create_vobject+0x1c8 #4 0xc0ae3dcd at ufs_open+0x6d #5 0xc0be6f75 at VOP_OPEN_APV+0xc5 #6 0xc0931ef1 at vn_open_cred+0x4c1 #7 0xc093202b at vn_open+0x3b #8 0xc092fcef at kern_openat+0x11f #9 0xc0930255 at kern_open+0x35 #10 0xc0930290 at open+0x30 #11 0xc0bcf944 at syscall+0x2b4 #12 0xc0bb1ca0 at Xint0x80_syscall+0x20 REF 1 vrele #0 0xc0923a5d at v_record_ref+0x5d #1 0xc0926348 at vrele+0x98 #2 0xc0b0ea26 at vnode_create_vobject+0x216 #3 0xc0ae3dcd at ufs_open+0x6d #4 0xc0be6f75 at VOP_OPEN_APV+0xc5 #5 0xc0931ef1 at vn_open_cred+0x4c1 #6 0xc093202b at vn_open+0x3b #7 0xc092fcef at kern_openat+0x11f #8 0xc0930255 at kern_open+0x35 #9 0xc0930290 at open+0x30 #10 0xc0bcf944 at syscall+0x2b4 #11 0xc0bb1ca0 at Xint0x80_syscall+0x20 REF 2 vget #0 0xc0923a5d at v_record_ref+0x5d #1 0xc09260a1 at vget+0x1a1 #2 0xc0afd705 at vm_mmap+0x245 #3 0xc0afe32e at mmap+0x3ae #4 0xc0bcf944 at syscall+0x2b4 #5 0xc0bb1ca0 at Xint0x80_syscall+0x20 REF 3 vref #0 0xc0923a5d at v_record_ref+0x5d #1 0xc0923afd at vref+0x4d #2 0xc0b0e4e2 at vnode_pager_alloc+0x1a2 #3 0xc0b086b7 at vm_pager_allocate+0x57 #4 0xc0afd8e9 at vm_mmap+0x429 #5 0xc0afe32e at mmap+0x3ae #6 0xc0bcf944 at syscall+0x2b4 #7 0xc0bb1ca0 at Xint0x80_syscall+0x20 REF 2 vput #0 0xc0923a5d at v_record_ref+0x5d #1 0xc0927d5b at vput+0x9b #2 0xc0afd921 at vm_mmap+0x461 #3 0xc0afe32e at mmap+0x3ae #4 0xc0bcf944 at syscall+0x2b4 #5 0xc0bb1ca0 at Xint0x80_syscall+0x20 REF 3 vref #0 0xc0923a5d at v_record_ref+0x5d #1 0xc0923afd at vref+0x4d #2 0xc0b0092f at vm_object_reference_locked+0x3f #3 0xc0af2e86 at vm_fault+0x176 #4 0xc0bcf59d at trap_pfault+0x10d #5 0xc0bcfe60 at trap+0x2d0 #6 0xc0bb1c3b at calltrap+0x6 REF 4 vget #0 0xc0923a5d at v_record_ref+0x5d #1 0xc09260a1 at vget+0x1a1 #2 0xc0af36e4 at vm_fault+0x9d4 #3 0xc0bcf59d at trap_pfault+0x10d #4 0xc0bcfe60 at trap+0x2d0 #5 0xc0bb1c3b at calltrap+0x6 REF 3 vrele #0 0xc0923a5d at v_record_ref+0x5d #1 0xc0926348 at vrele+0x98 #2 0xc0b022fc at vm_object_deallocate+0x1cc #3 0xc0af2c96 at unlock_and_deallocate+0x106 #4 0xc0af4921 at vm_fault+0x1c11 #5 0xc0bcf59d at trap_pfault+0x10d #6 0xc0bcfe60 at trap+0x2d0 #7 0xc0bb1c3b at calltrap+0x6 REF 2 vput #0 0xc0923a5d at v_record_ref+0x5d #1 0xc0927d5b at vput+0x9b #2 0xc0af2cd2 at unlock_and_deallocate+0x142 #3 0xc0af4921 at vm_fault+0x1c11 #4 0xc0bcf59d at trap_pfault+0x10d #5 0xc0bcfe60 at trap+0x2d0 #6 0xc0bb1c3b at calltrap+0x6 REF 3 vref #0 0xc0923a5d at v_record_ref+0x5d #1 0xc0923afd at vref+0x4d #2 0xc0b0092f at vm_object_reference_locked+0x3f #3 0xc0af2e86 at vm_fault+0x176 #4 0xc0bcf59d at trap_pfault+0x10d #5 0xc0bcfe60 at trap+0x2d0 #6 0xc0bb1c3b at calltrap+0x6 REF 4 vget #0 0xc0923a5d at v_record_ref+0x5d #1 0xc09260a1 at vget+0x1a1 #2 0xc0af36e4 at vm_fault+0x9d4 #3 0xc0bcf59d at trap_pfault+0x10d #4 0xc0bcfe60 at trap+0x2d0 #5 0xc0bb1c3b at calltrap+0x6 REF 3 vrele #0 0xc0923a5d at v_record_ref+0x5d #1 0xc0926348 at vrele+0x98 #2 0xc0b022fc at vm_object_deallocate+0x1cc #3 0xc0af2c96 at unlock_and_deallocate+0x106 #4 0xc0af4921 at vm_fault+0x1c11 #5 0xc0bcf59d at trap_pfault+0x10d #6 0xc0bcfe60 at trap+0x2d0 #7 0xc0bb1c3b at calltrap+0x6 REF 2 vput #0 0xc0923a5d at v_record_ref+0x5d #1 0xc0927d5b at vput+0x9b #2 0xc0af2cd2 at unlock_and_deallocate+0x142 #3 0xc0af4921 at vm_fault+0x1c11 #4 0xc0bcf59d at trap_pfault+0x10d #5 0xc0bcfe60 at trap+0x2d0 #6 0xc0bb1c3b at calltrap+0x6 REF 3 vref #0 0xc0923a5d at v_record_ref+0x5d #1 0xc0923afd at vref+0x4d #2 0xc0b0092f at vm_object_reference_locked+0x3f #3 0xc0af2e86 at vm_fault+0x176 #4 0xc0bcf59d at trap_pfault+0x10d #5 0xc0bcfe60 at trap+0x2d0 #6 0xc0bb1c3b at calltrap+0x6 REF 4 vget #0 0xc0923a5d at v_record_ref+0x5d #1 0xc09260a1 at vget+0x1a1 #2 0xc0af36e4 at vm_fault+0x9d4 #3 0xc0bcf59d at trap_pfault+0x10d #4 0xc0bcfe60 at trap+0x2d0 #5 0xc0bb1c3b at calltrap+0x6 REF 3 vrele #0 0xc0923a5d at v_record_ref+0x5d #1 0xc0926348 at vrele+0x98 #2 0xc0b022fc at vm_object_deallocate+0x1cc #3 0xc0af2c96 at unlock_and_deallocate+0x106 #4 0xc0af4921 at vm_fault+0x1c11 #5 0xc0bcf59d at trap_pfault+0x10d #6 0xc0bcfe60 at trap+0x2d0 #7 0xc0bb1c3b at calltrap+0x6 REF 2 vput #0 0xc0923a5d at v_record_ref+0x5d #1 0xc0927d5b at vput+0x9b #2 0xc0af2cd2 at unlock_and_deallocate+0x142 #3 0xc0af4921 at vm_fault+0x1c11 #4 0xc0bcf59d at trap_pfault+0x10d #5 0xc0bcfe60 at trap+0x2d0 #6 0xc0bb1c3b at calltrap+0x6 REF 3 vref #0 0xc0923a5d at v_record_ref+0x5d #1 0xc0923afd at vref+0x4d #2 0xc0b0092f at vm_object_reference_locked+0x3f #3 0xc0af2e86 at vm_fault+0x176 #4 0xc0bcf59d at trap_pfault+0x10d #5 0xc0bcfe60 at trap+0x2d0 #6 0xc0bb1c3b at calltrap+0x6 REF 2 vrele #0 0xc0923a5d at v_record_ref+0x5d #1 0xc0926348 at vrele+0x98 #2 0xc0b022fc at vm_object_deallocate+0x1cc #3 0xc0af2c96 at unlock_and_deallocate+0x106 #4 0xc0af4921 at vm_fault+0x1c11 #5 0xc0bcf59d at trap_pfault+0x10d #6 0xc0bcfe60 at trap+0x2d0 #7 0xc0bb1c3b at calltrap+0x6 REF 1 vrele #0 0xc0923a5d at v_record_ref+0x5d #1 0xc0926348 at vrele+0x98 #2 0xc0b022fc at vm_object_deallocate+0x1cc #3 0xc0af9476 at _vm_map_unlock+0x76 #4 0xc0afe618 at munmap+0x188 #5 0xc0bcf944 at syscall+0x2b4 #6 0xc0bb1ca0 at Xint0x80_syscall+0x20 REF 0 vput #0 0xc0923a5d at v_record_ref+0x5d #1 0xc0927d5b at vput+0x9b #2 0xc0932b3a at vn_close+0x19a #3 0xc0932c34 at vn_closefile+0xe4 #4 0xc0858543 at _fdrop+0x43 #5 0xc085a270 at closef+0x290 #6 0xc085a617 at kern_close+0x117 #7 0xc085a7ba at close+0x1a #8 0xc0bcf944 at syscall+0x2b4 #9 0xc0bb1ca0 at Xint0x80_syscall+0x20 REF 1 vget #0 0xc0923a5d at v_record_ref+0x5d #1 0xc09260a1 at vget+0x1a1 #2 0xc0917fed at vfs_hash_get+0xed #3 0xc0ad04d9 at ffs_vgetf+0x49 #4 0xc0ad0a7e at ffs_vget+0x2e #5 0xc0ade081 at ufs_lookup_+0x7f1 #6 0xc0ade3ce at ufs_lookup+0x1e #7 0xc0be70c5 at VOP_CACHEDLOOKUP_APV+0xc5 #8 0xc0911de6 at vfs_cache_lookup+0xd6 #9 0xc0be9a75 at VOP_LOOKUP_APV+0xe5 #10 0xc091925b at lookup+0x67b #11 0xc091a09f at namei+0x57f #12 0xc092a164 at kern_unlinkat+0x54 #13 0xc092a367 at kern_unlink+0x27 #14 0xc092a392 at unlink+0x22 #15 0xc0bcf944 at syscall+0x2b4 #16 0xc0bb1ca0 at Xint0x80_syscall+0x20 REF 2 vget #0 0xc0923a5d at v_record_ref+0x5d #1 0xc09260a1 at vget+0x1a1 #2 0xc0917fed at vfs_hash_get+0xed #3 0xc0ad04d9 at ffs_vgetf+0x49 #4 0xc0ac5ca5 at handle_workitem_remove+0x45 #5 0xc0ac6a94 at softdep_setup_remove+0x124 #6 0xc0ade6aa at ufs_dirremove+0x16a #7 0xc0ae55ae at ufs_remove+0x6e #8 0xc0be9206 at VOP_REMOVE_APV+0xf6 #9 0xc092a291 at kern_unlinkat+0x181 #10 0xc092a367 at kern_unlink+0x27 #11 0xc092a392 at unlink+0x22 #12 0xc0bcf944 at syscall+0x2b4 #13 0xc0bb1ca0 at Xint0x80_syscall+0x20 REF 1 vput #0 0xc0923a5d at v_record_ref+0x5d #1 0xc0927d5b at vput+0x9b #2 0xc0ac5dae at handle_workitem_remove+0x14e #3 0xc0ac6a94 at softdep_setup_remove+0x124 #4 0xc0ade6aa at ufs_dirremove+0x16a #5 0xc0ae55ae at ufs_remove+0x6e #6 0xc0be9206 at VOP_REMOVE_APV+0xf6 #7 0xc092a291 at kern_unlinkat+0x181 #8 0xc092a367 at kern_unlink+0x27 #9 0xc092a392 at unlink+0x22 #10 0xc0bcf944 at syscall+0x2b4 #11 0xc0bb1ca0 at Xint0x80_syscall+0x20 REF 0 vput #0 0xc0923a5d at v_record_ref+0x5d #1 0xc0927d5b at vput+0x9b #2 0xc092a2d3 at kern_unlinkat+0x1c3 #3 0xc092a367 at kern_unlink+0x27 #4 0xc092a392 at unlink+0x22 #5 0xc0bcf944 at syscall+0x2b4 #6 0xc0bb1ca0 at Xint0x80_syscall+0x20 REF 1 vref #0 0xc0923a5d at v_record_ref+0x5d #1 0xc0923afd at vref+0x4d #2 0xc0b0092f at vm_object_reference_locked+0x3f #3 0xc0b07e6f at vm_pageout+0xbcf #4 0xc0867558 at fork_exit+0xb8 #5 0xc0bb1cb0 at fork_trampoline+0x8 REF 2 vget #0 0xc0923a5d at v_record_ref+0x5d #1 0xc09260a1 at vget+0x1a1 #2 0xc0917fed at vfs_hash_get+0xed #3 0xc0ad04d9 at ffs_vgetf+0x49 #4 0xc0ad0a7e at ffs_vget+0x2e #5 0xc0ab17a6 at ffs_valloc+0x596 #6 0xc0ae4213 at ufs_makeinode+0xa3 #7 0xc0ae4a00 at ufs_create+0x30 #8 0xc0be98c5 at VOP_CREATE_APV+0xc5 #9 0xc0931c35 at vn_open_cred+0x205 #10 0xc093202b at vn_open+0x3b #11 0xc092fcef at kern_openat+0x11f #12 0xc0930255 at kern_open+0x35 #13 0xc0930290 at open+0x30 #14 0xc0bcf944 at syscall+0x2b4 #15 0xc0bb1ca0 at Xint0x80_syscall+0x20 REF 3 vref #0 0xc0923a5d at v_record_ref+0x5d #1 0xc0923afd at vref+0x4d #2 0xc0b0e4e2 at vnode_pager_alloc+0x1a2 #3 0xc0b0e9d8 at vnode_create_vobject+0x1c8 #4 0xc0ae3dcd at ufs_open+0x6d #5 0xc0be6f75 at VOP_OPEN_APV+0xc5 #6 0xc0931ef1 at vn_open_cred+0x4c1 #7 0xc093202b at vn_open+0x3b #8 0xc092fcef at kern_openat+0x11f #9 0xc0930255 at kern_open+0x35 #10 0xc0930290 at open+0x30 #11 0xc0bcf944 at syscall+0x2b4 #12 0xc0bb1ca0 at Xint0x80_syscall+0x20 REF 2 vrele #0 0xc0923a5d at v_record_ref+0x5d #1 0xc0926348 at vrele+0x98 #2 0xc0b0ea26 at vnode_create_vobject+0x216 #3 0xc0ae3dcd at ufs_open+0x6d #4 0xc0be6f75 at VOP_OPEN_APV+0xc5 #5 0xc0931ef1 at vn_open_cred+0x4c1 #6 0xc093202b at vn_open+0x3b #7 0xc092fcef at kern_openat+0x11f #8 0xc0930255 at kern_open+0x35 #9 0xc0930290 at open+0x30 #10 0xc0bcf944 at syscall+0x2b4 #11 0xc0bb1ca0 at Xint0x80_syscall+0x20 REF 3 vget #0 0xc0923a5d at v_record_ref+0x5d #1 0xc09260a1 at vget+0x1a1 #2 0xc0afd705 at vm_mmap+0x245 #3 0xc0afe32e at mmap+0x3ae #4 0xc0bcf944 at syscall+0x2b4 #5 0xc0bb1ca0 at Xint0x80_syscall+0x20 REF 4 vref #0 0xc0923a5d at v_record_ref+0x5d #1 0xc0923afd at vref+0x4d #2 0xc0b0e4e2 at vnode_pager_alloc+0x1a2 #3 0xc0b086b7 at vm_pager_allocate+0x57 #4 0xc0afd8e9 at vm_mmap+0x429 #5 0xc0afe32e at mmap+0x3ae #6 0xc0bcf944 at syscall+0x2b4 #7 0xc0bb1ca0 at Xint0x80_syscall+0x20 REF 3 vput #0 0xc0923a5d at v_record_ref+0x5d #1 0xc0927d5b at vput+0x9b #2 0xc0afd921 at vm_mmap+0x461 #3 0xc0afe32e at mmap+0x3ae #4 0xc0bcf944 at syscall+0x2b4 #5 0xc0bb1ca0 at Xint0x80_syscall+0x20 REF 4 vref #0 0xc0923a5d at v_record_ref+0x5d #1 0xc0923afd at vref+0x4d #2 0xc0b0092f at vm_object_reference_locked+0x3f #3 0xc0af2e86 at vm_fault+0x176 #4 0xc0bcf59d at trap_pfault+0x10d #5 0xc0bcfe60 at trap+0x2d0 #6 0xc0bb1c3b at calltrap+0x6 REF 5 vget #0 0xc0923a5d at v_record_ref+0x5d #1 0xc09260a1 at vget+0x1a1 #2 0xc0af36e4 at vm_fault+0x9d4 #3 0xc0bcf59d at trap_pfault+0x10d #4 0xc0bcfe60 at trap+0x2d0 #5 0xc0bb1c3b at calltrap+0x6 REF 4 vrele #0 0xc0923a5d at v_record_ref+0x5d #1 0xc0926348 at vrele+0x98 #2 0xc0b022fc at vm_object_deallocate+0x1cc #3 0xc0af2c96 at unlock_and_deallocate+0x106 #4 0xc0af4921 at vm_fault+0x1c11 #5 0xc0bcf59d at trap_pfault+0x10d #6 0xc0bcfe60 at trap+0x2d0 #7 0xc0bb1c3b at calltrap+0x6 REF 3 vput #0 0xc0923a5d at v_record_ref+0x5d #1 0xc0927d5b at vput+0x9b #2 0xc0af2cd2 at unlock_and_deallocate+0x142 #3 0xc0af4921 at vm_fault+0x1c11 #4 0xc0bcf59d at trap_pfault+0x10d #5 0xc0bcfe60 at trap+0x2d0 #6 0xc0bb1c3b at calltrap+0x6 REF 4 vref #0 0xc0923a5d at v_record_ref+0x5d #1 0xc0923afd at vref+0x4d #2 0xc0b0092f at vm_object_reference_locked+0x3f #3 0xc0af2e86 at vm_fault+0x176 #4 0xc0bcf59d at trap_pfault+0x10d #5 0xc0bcfe60 at trap+0x2d0 #6 0xc0bb1c3b at calltrap+0x6 REF 5 vget #0 0xc0923a5d at v_record_ref+0x5d #1 0xc09260a1 at vget+0x1a1 #2 0xc0af36e4 at vm_fault+0x9d4 #3 0xc0bcf59d at trap_pfault+0x10d #4 0xc0bcfe60 at trap+0x2d0 #5 0xc0bb1c3b at calltrap+0x6 REF 4 vrele #0 0xc0923a5d at v_record_ref+0x5d #1 0xc0926348 at vrele+0x98 #2 0xc0b022fc at vm_object_deallocate+0x1cc #3 0xc0af2c96 at unlock_and_deallocate+0x106 #4 0xc0af4921 at vm_fault+0x1c11 #5 0xc0bcf59d at trap_pfault+0x10d #6 0xc0bcfe60 at trap+0x2d0 #7 0xc0bb1c3b at calltrap+0x6 REF 3 vput #0 0xc0923a5d at v_record_ref+0x5d #1 0xc0927d5b at vput+0x9b #2 0xc0af2cd2 at unlock_and_deallocate+0x142 #3 0xc0af4921 at vm_fault+0x1c11 #4 0xc0bcf59d at trap_pfault+0x10d #5 0xc0bcfe60 at trap+0x2d0 #6 0xc0bb1c3b at calltrap+0x6 REF 4 vref #0 0xc0923a5d at v_record_ref+0x5d #1 0xc0923afd at vref+0x4d #2 0xc0b0092f at vm_object_reference_locked+0x3f #3 0xc0af2e86 at vm_fault+0x176 #4 0xc0bcf59d at trap_pfault+0x10d #5 0xc0bcfe60 at trap+0x2d0 #6 0xc0bb1c3b at calltrap+0x6 REF 5 vget #0 0xc0923a5d at v_record_ref+0x5d #1 0xc09260a1 at vget+0x1a1 #2 0xc0af36e4 at vm_fault+0x9d4 #3 0xc0bcf59d at trap_pfault+0x10d #4 0xc0bcfe60 at trap+0x2d0 #5 0xc0bb1c3b at calltrap+0x6 REF 4 vrele #0 0xc0923a5d at v_record_ref+0x5d #1 0xc0926348 at vrele+0x98 #2 0xc0b022fc at vm_object_deallocate+0x1cc #3 0xc0af2c96 at unlock_and_deallocate+0x106 #4 0xc0af4921 at vm_fault+0x1c11 #5 0xc0bcf59d at trap_pfault+0x10d #6 0xc0bcfe60 at trap+0x2d0 #7 0xc0bb1c3b at calltrap+0x6 REF 3 vput #0 0xc0923a5d at v_record_ref+0x5d #1 0xc0927d5b at vput+0x9b #2 0xc0af2cd2 at unlock_and_deallocate+0x142 #3 0xc0af4921 at vm_fault+0x1c11 #4 0xc0bcf59d at trap_pfault+0x10d #5 0xc0bcfe60 at trap+0x2d0 #6 0xc0bb1c3b at calltrap+0x6 REF 4 vref #0 0xc0923a5d at v_record_ref+0x5d #1 0xc0923afd at vref+0x4d #2 0xc0b0092f at vm_object_reference_locked+0x3f #3 0xc0af2e86 at vm_fault+0x176 #4 0xc0bcf59d at trap_pfault+0x10d #5 0xc0bcfe60 at trap+0x2d0 #6 0xc0bb1c3b at calltrap+0x6 REF 3 vrele #0 0xc0923a5d at v_record_ref+0x5d #1 0xc0926348 at vrele+0x98 #2 0xc0b022fc at vm_object_deallocate+0x1cc #3 0xc0af2c96 at unlock_and_deallocate+0x106 #4 0xc0af4921 at vm_fault+0x1c11 #5 0xc0bcf59d at trap_pfault+0x10d #6 0xc0bcfe60 at trap+0x2d0 #7 0xc0bb1c3b at calltrap+0x6 REF 2 vrele #0 0xc0923a5d at v_record_ref+0x5d #1 0xc0926348 at vrele+0x98 #2 0xc0b022fc at vm_object_deallocate+0x1cc #3 0xc0af9476 at _vm_map_unlock+0x76 #4 0xc0afe618 at munmap+0x188 #5 0xc0bcf944 at syscall+0x2b4 #6 0xc0bb1ca0 at Xint0x80_syscall+0x20 REF 1 vput #0 0xc0923a5d at v_record_ref+0x5d #1 0xc0927d5b at vput+0x9b #2 0xc0932b3a at vn_close+0x19a #3 0xc0932c34 at vn_closefile+0xe4 #4 0xc0858543 at _fdrop+0x43 #5 0xc085a270 at closef+0x290 #6 0xc085a617 at kern_close+0x117 #7 0xc085a7ba at close+0x1a #8 0xc0bcf944 at syscall+0x2b4 #9 0xc0bb1ca0 at Xint0x80_syscall+0x20 REF 2 vget #0 0xc0923a5d at v_record_ref+0x5d #1 0xc09260a1 at vget+0x1a1 #2 0xc0917fed at vfs_hash_get+0xed #3 0xc0ad04d9 at ffs_vgetf+0x49 #4 0xc0ad0a7e at ffs_vget+0x2e #5 0xc0ade081 at ufs_lookup_+0x7f1 #6 0xc0ade3ce at ufs_lookup+0x1e #7 0xc0be70c5 at VOP_CACHEDLOOKUP_APV+0xc5 #8 0xc0911de6 at vfs_cache_lookup+0xd6 #9 0xc0be9a75 at VOP_LOOKUP_APV+0xe5 #10 0xc091925b at lookup+0x67b #11 0xc091a09f at namei+0x57f #12 0xc092a164 at kern_unlinkat+0x54 #13 0xc092a367 at kern_unlink+0x27 #14 0xc092a392 at unlink+0x22 #15 0xc0bcf944 at syscall+0x2b4 #16 0xc0bb1ca0 at Xint0x80_syscall+0x20 REF 3 vget #0 0xc0923a5d at v_record_ref+0x5d #1 0xc09260a1 at vget+0x1a1 #2 0xc0917fed at vfs_hash_get+0xed #3 0xc0ad04d9 at ffs_vgetf+0x49 #4 0xc0ac5ca5 at handle_workitem_remove+0x45 #5 0xc0ac6a94 at softdep_setup_remove+0x124 #6 0xc0ade6aa at ufs_dirremove+0x16a #7 0xc0ae55ae at ufs_remove+0x6e #8 0xc0be9206 at VOP_REMOVE_APV+0xf6 #9 0xc092a291 at kern_unlinkat+0x181 #10 0xc092a367 at kern_unlink+0x27 #11 0xc092a392 at unlink+0x22 #12 0xc0bcf944 at syscall+0x2b4 #13 0xc0bb1ca0 at Xint0x80_syscall+0x20 REF 2 vput #0 0xc0923a5d at v_record_ref+0x5d #1 0xc0927d5b at vput+0x9b #2 0xc0ac5dae at handle_workitem_remove+0x14e #3 0xc0ac6a94 at softdep_setup_remove+0x124 #4 0xc0ade6aa at ufs_dirremove+0x16a #5 0xc0ae55ae at ufs_remove+0x6e #6 0xc0be9206 at VOP_REMOVE_APV+0xf6 #7 0xc092a291 at kern_unlinkat+0x181 #8 0xc092a367 at kern_unlink+0x27 #9 0xc092a392 at unlink+0x22 #10 0xc0bcf944 at syscall+0x2b4 #11 0xc0bb1ca0 at Xint0x80_syscall+0x20 REF 1 vput #0 0xc0923a5d at v_record_ref+0x5d #1 0xc0927d5b at vput+0x9b #2 0xc092a2d3 at kern_unlinkat+0x1c3 #3 0xc092a367 at kern_unlink+0x27 #4 0xc092a392 at unlink+0x22 #5 0xc0bcf944 at syscall+0x2b4 #6 0xc0bb1ca0 at Xint0x80_syscall+0x20 REF 2 vget #0 0xc0923a5d at v_record_ref+0x5d #1 0xc09260a1 at vget+0x1a1 #2 0xc0b07eff at vm_pageout+0xc5f #3 0xc0867558 at fork_exit+0xb8 #4 0xc0bb1cb0 at fork_trampoline+0x8 REF 1 vput #0 0xc0923a5d at v_record_ref+0x5d #1 0xc0927d5b at vput+0x9b #2 0xc0b0809d at vm_pageout+0xdfd #3 0xc0867558 at fork_exit+0xb8 #4 0xc0bb1cb0 at fork_trampoline+0x8 REF 2 vref #0 0xc0923a5d at v_record_ref+0x5d #1 0xc0923afd at vref+0x4d #2 0xc0b0092f at vm_object_reference_locked+0x3f #3 0xc0b07e6f at vm_pageout+0xbcf #4 0xc0867558 at fork_exit+0xb8 #5 0xc0bb1cb0 at fork_trampoline+0x8 REF 3 vget #0 0xc0923a5d at v_record_ref+0x5d #1 0xc09260a1 at vget+0x1a1 #2 0xc0b07eff at vm_pageout+0xc5f #3 0xc0867558 at fork_exit+0xb8 #4 0xc0bb1cb0 at fork_trampoline+0x8 REF 2 vput #0 0xc0923a5d at v_record_ref+0x5d #1 0xc0927d5b at vput+0x9b #2 0xc0b0809d at vm_pageout+0xdfd #3 0xc0867558 at fork_exit+0xb8 #4 0xc0bb1cb0 at fork_trampoline+0x8 REF 1 vrele #0 0xc0923a5d at v_record_ref+0x5d #1 0xc0926348 at vrele+0x98 #2 0xc0b022fc at vm_object_deallocate+0x1cc #3 0xc0b080d2 at vm_pageout+0xe32 #4 0xc0867558 at fork_exit+0xb8 #5 0xc0bb1cb0 at fork_trampoline+0x8 REF 2 vget #0 0xc0923a5d at v_record_ref+0x5d #1 0xc09260a1 at vget+0x1a1 #2 0xc0927ff5 at vfs_msync+0xf5 #3 0xc09282cb at sync_fsync+0x17b #4 0xc0be64f5 at VOP_FSYNC_APV+0xc5 #5 0xc092663b at sync_vnode+0x16b #6 0xc0926983 at sched_sync+0x273 #7 0xc0867558 at fork_exit+0xb8 #8 0xc0bb1cb0 at fork_trampoline+0x8 REF 1 vput #0 0xc0923a5d at v_record_ref+0x5d #1 0xc0927d5b at vput+0x9b #2 0xc092800e at vfs_msync+0x10e #3 0xc09282cb at sync_fsync+0x17b #4 0xc0be64f5 at VOP_FSYNC_APV+0xc5 #5 0xc092663b at sync_vnode+0x16b #6 0xc0926983 at sched_sync+0x273 #7 0xc0867558 at fork_exit+0xb8 #8 0xc0bb1cb0 at fork_trampoline+0x8 REF 2 vget #0 0xc0923a5d at v_record_ref+0x5d #1 0xc09260a1 at vget+0x1a1 #2 0xc0ad13f6 at ffs_sync+0x216 #3 0xc09282df at sync_fsync+0x18f #4 0xc0be64f5 at VOP_FSYNC_APV+0xc5 #5 0xc092663b at sync_vnode+0x16b #6 0xc0926983 at sched_sync+0x273 #7 0xc0867558 at fork_exit+0xb8 #8 0xc0bb1cb0 at fork_trampoline+0x8 REF 1 vput #0 0xc0923a5d at v_record_ref+0x5d #1 0xc0927d5b at vput+0x9b #2 0xc0ad145e at ffs_sync+0x27e #3 0xc09282df at sync_fsync+0x18f #4 0xc0be64f5 at VOP_FSYNC_APV+0xc5 #5 0xc092663b at sync_vnode+0x16b #6 0xc0926983 at sched_sync+0x273 #7 0xc0867558 at fork_exit+0xb8 #8 0xc0bb1cb0 at fork_trampoline+0x8 REF 2 vget #0 0xc0923a5d at v_record_ref+0x5d #1 0xc09260a1 at vget+0x1a1 #2 0xc0927ff5 at vfs_msync+0xf5 #3 0xc09282cb at sync_fsync+0x17b #4 0xc0be64f5 at VOP_FSYNC_APV+0xc5 #5 0xc092663b at sync_vnode+0x16b #6 0xc0926983 at sched_sync+0x273 #7 0xc0867558 at fork_exit+0xb8 #8 0xc0bb1cb0 at fork_trampoline+0x8 REF 1 vput #0 0xc0923a5d at v_record_ref+0x5d #1 0xc0927d5b at vput+0x9b #2 0xc092800e at vfs_msync+0x10e #3 0xc09282cb at sync_fsync+0x17b #4 0xc0be64f5 at VOP_FSYNC_APV+0xc5 #5 0xc092663b at sync_vnode+0x16b #6 0xc0926983 at sched_sync+0x273 #7 0xc0867558 at fork_exit+0xb8 #8 0xc0bb1cb0 at fork_trampoline+0x8 REF 2 vget #0 0xc0923a5d at v_record_ref+0x5d #1 0xc09260a1 at vget+0x1a1 #2 0xc0927ff5 at vfs_msync+0xf5 #3 0xc09282cb at sync_fsync+0x17b #4 0xc0be64f5 at VOP_FSYNC_APV+0xc5 #5 0xc092663b at sync_vnode+0x16b #6 0xc0926983 at sched_sync+0x273 #7 0xc0867558 at fork_exit+0xb8 #8 0xc0bb1cb0 at fork_trampoline+0x8 REF 1 vput #0 0xc0923a5d at v_record_ref+0x5d #1 0xc0927d5b at vput+0x9b #2 0xc092800e at vfs_msync+0x10e #3 0xc09282cb at sync_fsync+0x17b #4 0xc0be64f5 at VOP_FSYNC_APV+0xc5 #5 0xc092663b at sync_vnode+0x16b #6 0xc0926983 at sched_sync+0x273 #7 0xc0867558 at fork_exit+0xb8 #8 0xc0bb1cb0 at fork_trampoline+0x8 REF 2 vget #0 0xc0923a5d at v_record_ref+0x5d #1 0xc09260a1 at vget+0x1a1 #2 0xc0927ff5 at vfs_msync+0xf5 #3 0xc09282cb at sync_fsync+0x17b #4 0xc0be64f5 at VOP_FSYNC_APV+0xc5 #5 0xc092663b at sync_vnode+0x16b #6 0xc0926983 at sched_sync+0x273 #7 0xc0867558 at fork_exit+0xb8 #8 0xc0bb1cb0 at fork_trampoline+0x8 REF 1 vput #0 0xc0923a5d at v_record_ref+0x5d #1 0xc0927d5b at vput+0x9b #2 0xc092800e at vfs_msync+0x10e #3 0xc09282cb at sync_fsync+0x17b #4 0xc0be64f5 at VOP_FSYNC_APV+0xc5 #5 0xc092663b at sync_vnode+0x16b #6 0xc0926983 at sched_sync+0x273 #7 0xc0867558 at fork_exit+0xb8 #8 0xc0bb1cb0 at fork_trampoline+0x8 REF 2 vget #0 0xc0923a5d at v_record_ref+0x5d #1 0xc09260a1 at vget+0x1a1 #2 0xc0927ff5 at vfs_msync+0xf5 #3 0xc09282cb at sync_fsync+0x17b #4 0xc0be64f5 at VOP_FSYNC_APV+0xc5 #5 0xc092663b at sync_vnode+0x16b #6 0xc0926983 at sched_sync+0x273 #7 0xc0867558 at fork_exit+0xb8 #8 0xc0bb1cb0 at fork_trampoline+0x8 REF 1 vput #0 0xc0923a5d at v_record_ref+0x5d #1 0xc0927d5b at vput+0x9b #2 0xc092800e at vfs_msync+0x10e #3 0xc09282cb at sync_fsync+0x17b #4 0xc0be64f5 at VOP_FSYNC_APV+0xc5 #5 0xc092663b at sync_vnode+0x16b #6 0xc0926983 at sched_sync+0x273 #7 0xc0867558 at fork_exit+0xb8 #8 0xc0bb1cb0 at fork_trampoline+0x8 REF 2 vget #0 0xc0923a5d at v_record_ref+0x5d #1 0xc09260a1 at vget+0x1a1 #2 0xc0927ff5 at vfs_msync+0xf5 #3 0xc09282cb at sync_fsync+0x17b #4 0xc0be64f5 at VOP_FSYNC_APV+0xc5 #5 0xc092663b at sync_vnode+0x16b #6 0xc0926983 at sched_sync+0x273 #7 0xc0867558 at fork_exit+0xb8 #8 0xc0bb1cb0 at fork_trampoline+0x8 REF 1 vput #0 0xc0923a5d at v_record_ref+0x5d #1 0xc0927d5b at vput+0x9b #2 0xc092800e at vfs_msync+0x10e #3 0xc09282cb at sync_fsync+0x17b #4 0xc0be64f5 at VOP_FSYNC_APV+0xc5 #5 0xc092663b at sync_vnode+0x16b #6 0xc0926983 at sched_sync+0x273 #7 0xc0867558 at fork_exit+0xb8 #8 0xc0bb1cb0 at fork_trampoline+0x8 REF 2 vget #0 0xc0923a5d at v_record_ref+0x5d #1 0xc09260a1 at vget+0x1a1 #2 0xc0927ff5 at vfs_msync+0xf5 #3 0xc09282cb at sync_fsync+0x17b #4 0xc0be64f5 at VOP_FSYNC_APV+0xc5 #5 0xc092663b at sync_vnode+0x16b #6 0xc0926983 at sched_sync+0x273 #7 0xc0867558 at fork_exit+0xb8 #8 0xc0bb1cb0 at fork_trampoline+0x8 REF 1 vput #0 0xc0923a5d at v_record_ref+0x5d #1 0xc0927d5b at vput+0x9b #2 0xc092800e at vfs_msync+0x10e #3 0xc09282cb at sync_fsync+0x17b #4 0xc0be64f5 at VOP_FSYNC_APV+0xc5 #5 0xc092663b at sync_vnode+0x16b #6 0xc0926983 at sched_sync+0x273 #7 0xc0867558 at fork_exit+0xb8 #8 0xc0bb1cb0 at fork_trampoline+0x8 REF 2 vget #0 0xc0923a5d at v_record_ref+0x5d #1 0xc09260a1 at vget+0x1a1 #2 0xc0927ff5 at vfs_msync+0xf5 #3 0xc09282cb at sync_fsync+0x17b #4 0xc0be64f5 at VOP_FSYNC_APV+0xc5 #5 0xc092663b at sync_vnode+0x16b #6 0xc0926983 at sched_sync+0x273 #7 0xc0867558 at fork_exit+0xb8 #8 0xc0bb1cb0 at fork_trampoline+0x8 REF 1 vput #0 0xc0923a5d at v_record_ref+0x5d #1 0xc0927d5b at vput+0x9b #2 0xc092800e at vfs_msync+0x10e #3 0xc09282cb at sync_fsync+0x17b #4 0xc0be64f5 at VOP_FSYNC_APV+0xc5 #5 0xc092663b at sync_vnode+0x16b #6 0xc0926983 at sched_sync+0x273 #7 0xc0867558 at fork_exit+0xb8 #8 0xc0bb1cb0 at fork_trampoline+0x8 REF 2 vget #0 0xc0923a5d at v_record_ref+0x5d #1 0xc09260a1 at vget+0x1a1 #2 0xc0927ff5 at vfs_msync+0xf5 #3 0xc09282cb at sync_fsync+0x17b #4 0xc0be64f5 at VOP_FSYNC_APV+0xc5 #5 0xc092663b at sync_vnode+0x16b #6 0xc0926983 at sched_sync+0x273 #7 0xc0867558 at fork_exit+0xb8 #8 0xc0bb1cb0 at fork_trampoline+0x8 REF 1 vput #0 0xc0923a5d at v_record_ref+0x5d #1 0xc0927d5b at vput+0x9b #2 0xc092800e at vfs_msync+0x10e #3 0xc09282cb at sync_fsync+0x17b #4 0xc0be64f5 at VOP_FSYNC_APV+0xc5 #5 0xc092663b at sync_vnode+0x16b #6 0xc0926983 at sched_sync+0x273 #7 0xc0867558 at fork_exit+0xb8 #8 0xc0bb1cb0 at fork_trampoline+0x8 REF 2 vget #0 0xc0923a5d at v_record_ref+0x5d #1 0xc09260a1 at vget+0x1a1 #2 0xc0927ff5 at vfs_msync+0xf5 #3 0xc09282cb at sync_fsync+0x17b #4 0xc0be64f5 at VOP_FSYNC_APV+0xc5 #5 0xc092663b at sync_vnode+0x16b #6 0xc0926983 at sched_sync+0x273 #7 0xc0867558 at fork_exit+0xb8 #8 0xc0bb1cb0 at fork_trampoline+0x8 REF 1 vput #0 0xc0923a5d at v_record_ref+0x5d #1 0xc0927d5b at vput+0x9b #2 0xc092800e at vfs_msync+0x10e #3 0xc09282cb at sync_fsync+0x17b #4 0xc0be64f5 at VOP_FSYNC_APV+0xc5 #5 0xc092663b at sync_vnode+0x16b #6 0xc0926983 at sched_sync+0x273 #7 0xc0867558 at fork_exit+0xb8 #8 0xc0bb1cb0 at fork_trampoline+0x8 REF 2 vget #0 0xc0923a5d at v_record_ref+0x5d #1 0xc09260a1 at vget+0x1a1 #2 0xc0927ff5 at vfs_msync+0xf5 #3 0xc09282cb at sync_fsync+0x17b #4 0xc0be64f5 at VOP_FSYNC_APV+0xc5 #5 0xc092663b at sync_vnode+0x16b #6 0xc0926983 at sched_sync+0x273 #7 0xc0867558 at fork_exit+0xb8 #8 0xc0bb1cb0 at fork_trampoline+0x8 REF 1 vput #0 0xc0923a5d at v_record_ref+0x5d #1 0xc0927d5b at vput+0x9b #2 0xc092800e at vfs_msync+0x10e #3 0xc09282cb at sync_fsync+0x17b #4 0xc0be64f5 at VOP_FSYNC_APV+0xc5 #5 0xc092663b at sync_vnode+0x16b #6 0xc0926983 at sched_sync+0x273 #7 0xc0867558 at fork_exit+0xb8 #8 0xc0bb1cb0 at fork_trampoline+0x8 REF 2 vget #0 0xc0923a5d at v_record_ref+0x5d #1 0xc09260a1 at vget+0x1a1 #2 0xc0927ff5 at vfs_msync+0xf5 #3 0xc09282cb at sync_fsync+0x17b #4 0xc0be64f5 at VOP_FSYNC_APV+0xc5 #5 0xc092663b at sync_vnode+0x16b #6 0xc0926983 at sched_sync+0x273 #7 0xc0867558 at fork_exit+0xb8 #8 0xc0bb1cb0 at fork_trampoline+0x8 REF 1 vput #0 0xc0923a5d at v_record_ref+0x5d #1 0xc0927d5b at vput+0x9b #2 0xc092800e at vfs_msync+0x10e #3 0xc09282cb at sync_fsync+0x17b #4 0xc0be64f5 at VOP_FSYNC_APV+0xc5 #5 0xc092663b at sync_vnode+0x16b #6 0xc0926983 at sched_sync+0x273 #7 0xc0867558 at fork_exit+0xb8 #8 0xc0bb1cb0 at fork_trampoline+0x8 REF 2 vget #0 0xc0923a5d at v_record_ref+0x5d #1 0xc09260a1 at vget+0x1a1 #2 0xc0927ff5 at vfs_msync+0xf5 #3 0xc092b7e1 at sync+0x131 #4 0xc0bcf944 at syscall+0x2b4 #5 0xc0bb1ca0 at Xint0x80_syscall+0x20 REF 1 vput #0 0xc0923a5d at v_record_ref+0x5d #1 0xc0927d5b at vput+0x9b #2 0xc092800e at vfs_msync+0x10e #3 0xc092b7e1 at sync+0x131 #4 0xc0bcf944 at syscall+0x2b4 #5 0xc0bb1ca0 at Xint0x80_syscall+0x20 REF 2 vget #0 0xc0923a5d at v_record_ref+0x5d #1 0xc09260a1 at vget+0x1a1 #2 0xc0927ff5 at vfs_msync+0xf5 #3 0xc092b7e1 at sync+0x131 #4 0xc0bcf944 at syscall+0x2b4 #5 0xc0bb1ca0 at Xint0x80_syscall+0x20 REF 1 vput #0 0xc0923a5d at v_record_ref+0x5d #1 0xc0927d5b at vput+0x9b #2 0xc092800e at vfs_msync+0x10e #3 0xc092b7e1 at sync+0x131 #4 0xc0bcf944 at syscall+0x2b4 #5 0xc0bb1ca0 at Xint0x80_syscall+0x20 REF 2 vget #0 0xc0923a5d at v_record_ref+0x5d #1 0xc09260a1 at vget+0x1a1 #2 0xc0927ff5 at vfs_msync+0xf5 #3 0xc092b7e1 at sync+0x131 #4 0xc0bcf944 at syscall+0x2b4 #5 0xc0bb1ca0 at Xint0x80_syscall+0x20 REF 1 vput #0 0xc0923a5d at v_record_ref+0x5d #1 0xc0927d5b at vput+0x9b #2 0xc092800e at vfs_msync+0x10e #3 0xc092b7e1 at sync+0x131 #4 0xc0bcf944 at syscall+0x2b4 #5 0xc0bb1ca0 at Xint0x80_syscall+0x20 REF 2 vget #0 0xc0923a5d at v_record_ref+0x5d #1 0xc09260a1 at vget+0x1a1 #2 0xc0927ff5 at vfs_msync+0xf5 #3 0xc092b7e1 at sync+0x131 #4 0xc0bcf944 at syscall+0x2b4 #5 0xc0bb1ca0 at Xint0x80_syscall+0x20 REF 1 vput #0 0xc0923a5d at v_record_ref+0x5d #1 0xc0927d5b at vput+0x9b #2 0xc092800e at vfs_msync+0x10e #3 0xc092b7e1 at sync+0x131 #4 0xc0bcf944 at syscall+0x2b4 #5 0xc0bb1ca0 at Xint0x80_syscall+0x20 REF 2 vget #0 0xc0923a5d at v_record_ref+0x5d #1 0xc09260a1 at vget+0x1a1 #2 0xc0927ff5 at vfs_msync+0xf5 #3 0xc091cb03 at dounmount+0x353 #4 0xc091d1af at unmount+0x2ff #5 0xc0bcf944 at syscall+0x2b4 #6 0xc0bb1ca0 at Xint0x80_syscall+0x20 REF 1 vput #0 0xc0923a5d at v_record_ref+0x5d #1 0xc0927d5b at vput+0x9b #2 0xc092800e at vfs_msync+0x10e #3 0xc091cb03 at dounmount+0x353 #4 0xc091d1af at unmount+0x2ff #5 0xc0bcf944 at syscall+0x2b4 #6 0xc0bb1ca0 at Xint0x80_syscall+0x20 REF 2 vget #0 0xc0923a5d at v_record_ref+0x5d #1 0xc09260a1 at vget+0x1a1 #2 0xc0927ff5 at vfs_msync+0xf5 #3 0xc09282cb at sync_fsync+0x17b #4 0xc0be64f5 at VOP_FSYNC_APV+0xc5 #5 0xc092663b at sync_vnode+0x16b #6 0xc0926983 at sched_sync+0x273 #7 0xc0867558 at fork_exit+0xb8 #8 0xc0bb1cb0 at fork_trampoline+0x8 REF 1 vput #0 0xc0923a5d at v_record_ref+0x5d #1 0xc0927d5b at vput+0x9b #2 0xc092800e at vfs_msync+0x10e #3 0xc09282cb at sync_fsync+0x17b #4 0xc0be64f5 at VOP_FSYNC_APV+0xc5 #5 0xc092663b at sync_vnode+0x16b #6 0xc0926983 at sched_sync+0x273 #7 0xc0867558 at fork_exit+0xb8 #8 0xc0bb1cb0 at fork_trampoline+0x8 REF 2 vget #0 0xc0923a5d at v_record_ref+0x5d #1 0xc09260a1 at vget+0x1a1 #2 0xc0927ff5 at vfs_msync+0xf5 #3 0xc09282cb at sync_fsync+0x17b #4 0xc0be64f5 at VOP_FSYNC_APV+0xc5 #5 0xc092663b at sync_vnode+0x16b #6 0xc0926983 at sched_sync+0x273 #7 0xc0867558 at fork_exit+0xb8 #8 0xc0bb1cb0 at fork_trampoline+0x8 REF 1 vput #0 0xc0923a5d at v_record_ref+0x5d #1 0xc0927d5b at vput+0x9b #2 0xc092800e at vfs_msync+0x10e #3 0xc09282cb at sync_fsync+0x17b #4 0xc0be64f5 at VOP_FSYNC_APV+0xc5 #5 0xc092663b at sync_vnode+0x16b #6 0xc0926983 at sched_sync+0x273 #7 0xc0867558 at fork_exit+0xb8 #8 0xc0bb1cb0 at fork_trampoline+0x8 REF 2 vget #0 0xc0923a5d at v_record_ref+0x5d #1 0xc09260a1 at vget+0x1a1 #2 0xc0927ff5 at vfs_msync+0xf5 #3 0xc09282cb at sync_fsync+0x17b #4 0xc0be64f5 at VOP_FSYNC_APV+0xc5 #5 0xc092663b at sync_vnode+0x16b #6 0xc0926983 at sched_sync+0x273 #7 0xc0867558 at fork_exit+0xb8 #8 0xc0bb1cb0 at fork_trampoline+0x8 REF 1 vput #0 0xc0923a5d at v_record_ref+0x5d #1 0xc0927d5b at vput+0x9b #2 0xc092800e at vfs_msync+0x10e #3 0xc09282cb at sync_fsync+0x17b #4 0xc0be64f5 at VOP_FSYNC_APV+0xc5 #5 0xc092663b at sync_vnode+0x16b #6 0xc0926983 at sched_sync+0x273 #7 0xc0867558 at fork_exit+0xb8 #8 0xc0bb1cb0 at fork_trampoline+0x8 vnode 0xc7977b80: tag ufs, type VREG usecount 1, writecount 0, refcount 3 mountedhere 0 flags (VV_NOSYNC|VV(0x2000)) v_object 0xc7ad1000 ref 0 pages 4 lock type ufs: UNLOCKED #0 0xc087a1be at __lockmgr_args+0xbfe #1 0xc0ad5e51 at ffs_lock+0xa1 #2 0xc0be88f5 at VOP_LOCK1_APV+0xb5 #3 0xc0932378 at _vn_lock+0x78 #4 0xc0925fbb at vget+0xbb #5 0xc0927ff5 at vfs_msync+0xf5 #6 0xc09282cb at sync_fsync+0x17b #7 0xc0be64f5 at VOP_FSYNC_APV+0xc5 #8 0xc092663b at sync_vnode+0x16b #9 0xc0926983 at sched_sync+0x273 #10 0xc0867558 at fork_exit+0xb8 #11 0xc0bb1cb0 at fork_trampoline+0x8 ino 6052921, on dev ad4s1e REF 2 vref #0 0xc0923a5d at v_record_ref+0x5d #1 0xc0923afd at vref+0x4d #2 0xc0b0e4e2 at vnode_pager_alloc+0x1a2 #3 0xc0b0e9d8 at vnode_create_vobject+0x1c8 #4 0xc0ae3dcd at ufs_open+0x6d #5 0xc0be6f75 at VOP_OPEN_APV+0xc5 #6 0xc0931ef1 at vn_open_cred+0x4c1 #7 0xc093202b at vn_open+0x3b #8 0xc092fcef at kern_openat+0x11f #9 0xc0930255 at kern_open+0x35 #10 0xc0930290 at open+0x30 #11 0xc0bcf944 at syscall+0x2b4 #12 0xc0bb1ca0 at Xint0x80_syscall+0x20 REF 1 vrele #0 0xc0923a5d at v_record_ref+0x5d #1 0xc0926348 at vrele+0x98 #2 0xc0b0ea26 at vnode_create_vobject+0x216 #3 0xc0ae3dcd at ufs_open+0x6d #4 0xc0be6f75 at VOP_OPEN_APV+0xc5 #5 0xc0931ef1 at vn_open_cred+0x4c1 #6 0xc093202b at vn_open+0x3b #7 0xc092fcef at kern_openat+0x11f #8 0xc0930255 at kern_open+0x35 #9 0xc0930290 at open+0x30 #10 0xc0bcf944 at syscall+0x2b4 #11 0xc0bb1ca0 at Xint0x80_syscall+0x20 REF 2 vget #0 0xc0923a5d at v_record_ref+0x5d #1 0xc09260a1 at vget+0x1a1 #2 0xc0afd705 at vm_mmap+0x245 #3 0xc0afe32e at mmap+0x3ae #4 0xc0bcf944 at syscall+0x2b4 #5 0xc0bb1ca0 at Xint0x80_syscall+0x20 REF 3 vref #0 0xc0923a5d at v_record_ref+0x5d #1 0xc0923afd at vref+0x4d #2 0xc0b0e4e2 at vnode_pager_alloc+0x1a2 #3 0xc0b086b7 at vm_pager_allocate+0x57 #4 0xc0afd8e9 at vm_mmap+0x429 #5 0xc0afe32e at mmap+0x3ae #6 0xc0bcf944 at syscall+0x2b4 #7 0xc0bb1ca0 at Xint0x80_syscall+0x20 REF 2 vput #0 0xc0923a5d at v_record_ref+0x5d #1 0xc0927d5b at vput+0x9b #2 0xc0afd921 at vm_mmap+0x461 #3 0xc0afe32e at mmap+0x3ae #4 0xc0bcf944 at syscall+0x2b4 #5 0xc0bb1ca0 at Xint0x80_syscall+0x20 REF 3 vref #0 0xc0923a5d at v_record_ref+0x5d #1 0xc0923afd at vref+0x4d #2 0xc0b0092f at vm_object_reference_locked+0x3f #3 0xc0af2e86 at vm_fault+0x176 #4 0xc0bcf59d at trap_pfault+0x10d #5 0xc0bcfe60 at trap+0x2d0 #6 0xc0bb1c3b at calltrap+0x6 REF 4 vget #0 0xc0923a5d at v_record_ref+0x5d #1 0xc09260a1 at vget+0x1a1 #2 0xc0af36e4 at vm_fault+0x9d4 #3 0xc0bcf59d at trap_pfault+0x10d #4 0xc0bcfe60 at trap+0x2d0 #5 0xc0bb1c3b at calltrap+0x6 REF 3 vrele #0 0xc0923a5d at v_record_ref+0x5d #1 0xc0926348 at vrele+0x98 #2 0xc0b022fc at vm_object_deallocate+0x1cc #3 0xc0af2c96 at unlock_and_deallocate+0x106 #4 0xc0af4921 at vm_fault+0x1c11 #5 0xc0bcf59d at trap_pfault+0x10d #6 0xc0bcfe60 at trap+0x2d0 #7 0xc0bb1c3b at calltrap+0x6 REF 2 vput #0 0xc0923a5d at v_record_ref+0x5d #1 0xc0927d5b at vput+0x9b #2 0xc0af2cd2 at unlock_and_deallocate+0x142 #3 0xc0af4921 at vm_fault+0x1c11 #4 0xc0bcf59d at trap_pfault+0x10d #5 0xc0bcfe60 at trap+0x2d0 #6 0xc0bb1c3b at calltrap+0x6 REF 3 vref #0 0xc0923a5d at v_record_ref+0x5d #1 0xc0923afd at vref+0x4d #2 0xc0b0092f at vm_object_reference_locked+0x3f #3 0xc0af2e86 at vm_fault+0x176 #4 0xc0bcf59d at trap_pfault+0x10d #5 0xc0bcfe60 at trap+0x2d0 #6 0xc0bb1c3b at calltrap+0x6 REF 4 vget #0 0xc0923a5d at v_record_ref+0x5d #1 0xc09260a1 at vget+0x1a1 #2 0xc0af36e4 at vm_fault+0x9d4 #3 0xc0bcf59d at trap_pfault+0x10d #4 0xc0bcfe60 at trap+0x2d0 #5 0xc0bb1c3b at calltrap+0x6 REF 3 vrele #0 0xc0923a5d at v_record_ref+0x5d #1 0xc0926348 at vrele+0x98 #2 0xc0b022fc at vm_object_deallocate+0x1cc #3 0xc0af2c96 at unlock_and_deallocate+0x106 #4 0xc0af4921 at vm_fault+0x1c11 #5 0xc0bcf59d at trap_pfault+0x10d #6 0xc0bcfe60 at trap+0x2d0 #7 0xc0bb1c3b at calltrap+0x6 REF 2 vput #0 0xc0923a5d at v_record_ref+0x5d #1 0xc0927d5b at vput+0x9b #2 0xc0af2cd2 at unlock_and_deallocate+0x142 #3 0xc0af4921 at vm_fault+0x1c11 #4 0xc0bcf59d at trap_pfault+0x10d #5 0xc0bcfe60 at trap+0x2d0 #6 0xc0bb1c3b at calltrap+0x6 REF 3 vref #0 0xc0923a5d at v_record_ref+0x5d #1 0xc0923afd at vref+0x4d #2 0xc0b0092f at vm_object_reference_locked+0x3f #3 0xc0af2e86 at vm_fault+0x176 #4 0xc0bcf59d at trap_pfault+0x10d #5 0xc0bcfe60 at trap+0x2d0 #6 0xc0bb1c3b at calltrap+0x6 REF 4 vget #0 0xc0923a5d at v_record_ref+0x5d #1 0xc09260a1 at vget+0x1a1 #2 0xc0af36e4 at vm_fault+0x9d4 #3 0xc0bcf59d at trap_pfault+0x10d #4 0xc0bcfe60 at trap+0x2d0 #5 0xc0bb1c3b at calltrap+0x6 REF 3 vrele #0 0xc0923a5d at v_record_ref+0x5d #1 0xc0926348 at vrele+0x98 #2 0xc0b022fc at vm_object_deallocate+0x1cc #3 0xc0af2c96 at unlock_and_deallocate+0x106 #4 0xc0af4921 at vm_fault+0x1c11 #5 0xc0bcf59d at trap_pfault+0x10d #6 0xc0bcfe60 at trap+0x2d0 #7 0xc0bb1c3b at calltrap+0x6 REF 2 vput #0 0xc0923a5d at v_record_ref+0x5d #1 0xc0927d5b at vput+0x9b #2 0xc0af2cd2 at unlock_and_deallocate+0x142 #3 0xc0af4921 at vm_fault+0x1c11 #4 0xc0bcf59d at trap_pfault+0x10d #5 0xc0bcfe60 at trap+0x2d0 #6 0xc0bb1c3b at calltrap+0x6 REF 3 vref #0 0xc0923a5d at v_record_ref+0x5d #1 0xc0923afd at vref+0x4d #2 0xc0b0092f at vm_object_reference_locked+0x3f #3 0xc0af2e86 at vm_fault+0x176 #4 0xc0bcf59d at trap_pfault+0x10d #5 0xc0bcfe60 at trap+0x2d0 #6 0xc0bb1c3b at calltrap+0x6 REF 2 vrele #0 0xc0923a5d at v_record_ref+0x5d #1 0xc0926348 at vrele+0x98 #2 0xc0b022fc at vm_object_deallocate+0x1cc #3 0xc0af2c96 at unlock_and_deallocate+0x106 #4 0xc0af4921 at vm_fault+0x1c11 #5 0xc0bcf59d at trap_pfault+0x10d #6 0xc0bcfe60 at trap+0x2d0 #7 0xc0bb1c3b at calltrap+0x6 REF 1 vrele #0 0xc0923a5d at v_record_ref+0x5d #1 0xc0926348 at vrele+0x98 #2 0xc0b022fc at vm_object_deallocate+0x1cc #3 0xc0af9476 at _vm_map_unlock+0x76 #4 0xc0afe618 at munmap+0x188 #5 0xc0bcf944 at syscall+0x2b4 #6 0xc0bb1ca0 at Xint0x80_syscall+0x20 REF 0 vput #0 0xc0923a5d at v_record_ref+0x5d #1 0xc0927d5b at vput+0x9b #2 0xc0932b3a at vn_close+0x19a #3 0xc0932c34 at vn_closefile+0xe4 #4 0xc0858543 at _fdrop+0x43 #5 0xc085a270 at closef+0x290 #6 0xc085a617 at kern_close+0x117 #7 0xc085a7ba at close+0x1a #8 0xc0bcf944 at syscall+0x2b4 #9 0xc0bb1ca0 at Xint0x80_syscall+0x20 REF 1 vget #0 0xc0923a5d at v_record_ref+0x5d #1 0xc09260a1 at vget+0x1a1 #2 0xc0917fed at vfs_hash_get+0xed #3 0xc0ad04d9 at ffs_vgetf+0x49 #4 0xc0ad0a7e at ffs_vget+0x2e #5 0xc0ade081 at ufs_lookup_+0x7f1 #6 0xc0ade3ce at ufs_lookup+0x1e #7 0xc0be70c5 at VOP_CACHEDLOOKUP_APV+0xc5 #8 0xc0911de6 at vfs_cache_lookup+0xd6 #9 0xc0be9a75 at VOP_LOOKUP_APV+0xe5 #10 0xc091925b at lookup+0x67b #11 0xc091a09f at namei+0x57f #12 0xc092a164 at kern_unlinkat+0x54 #13 0xc092a367 at kern_unlink+0x27 #14 0xc092a392 at unlink+0x22 #15 0xc0bcf944 at syscall+0x2b4 #16 0xc0bb1ca0 at Xint0x80_syscall+0x20 REF 2 vget #0 0xc0923a5d at v_record_ref+0x5d #1 0xc09260a1 at vget+0x1a1 #2 0xc0917fed at vfs_hash_get+0xed #3 0xc0ad04d9 at ffs_vgetf+0x49 #4 0xc0ac5ca5 at handle_workitem_remove+0x45 #5 0xc0ac6a94 at softdep_setup_remove+0x124 #6 0xc0ade6aa at ufs_dirremove+0x16a #7 0xc0ae55ae at ufs_remove+0x6e #8 0xc0be9206 at VOP_REMOVE_APV+0xf6 #9 0xc092a291 at kern_unlinkat+0x181 #10 0xc092a367 at kern_unlink+0x27 #11 0xc092a392 at unlink+0x22 #12 0xc0bcf944 at syscall+0x2b4 #13 0xc0bb1ca0 at Xint0x80_syscall+0x20 REF 1 vput #0 0xc0923a5d at v_record_ref+0x5d #1 0xc0927d5b at vput+0x9b #2 0xc0ac5dae at handle_workitem_remove+0x14e #3 0xc0ac6a94 at softdep_setup_remove+0x124 #4 0xc0ade6aa at ufs_dirremove+0x16a #5 0xc0ae55ae at ufs_remove+0x6e #6 0xc0be9206 at VOP_REMOVE_APV+0xf6 #7 0xc092a291 at kern_unlinkat+0x181 #8 0xc092a367 at kern_unlink+0x27 #9 0xc092a392 at unlink+0x22 #10 0xc0bcf944 at syscall+0x2b4 #11 0xc0bb1ca0 at Xint0x80_syscall+0x20 REF 0 vput #0 0xc0923a5d at v_record_ref+0x5d #1 0xc0927d5b at vput+0x9b #2 0xc092a2d3 at kern_unlinkat+0x1c3 #3 0xc092a367 at kern_unlink+0x27 #4 0xc092a392 at unlink+0x22 #5 0xc0bcf944 at syscall+0x2b4 #6 0xc0bb1ca0 at Xint0x80_syscall+0x20 REF 1 vref #0 0xc0923a5d at v_record_ref+0x5d #1 0xc0923afd at vref+0x4d #2 0xc0b0092f at vm_object_reference_locked+0x3f #3 0xc0b07e6f at vm_pageout+0xbcf #4 0xc0867558 at fork_exit+0xb8 #5 0xc0bb1cb0 at fork_trampoline+0x8 REF 2 vget #0 0xc0923a5d at v_record_ref+0x5d #1 0xc09260a1 at vget+0x1a1 #2 0xc0917fed at vfs_hash_get+0xed #3 0xc0ad04d9 at ffs_vgetf+0x49 #4 0xc0ad0a7e at ffs_vget+0x2e #5 0xc0ab17a6 at ffs_valloc+0x596 #6 0xc0ae4213 at ufs_makeinode+0xa3 #7 0xc0ae4a00 at ufs_create+0x30 #8 0xc0be98c5 at VOP_CREATE_APV+0xc5 #9 0xc0931c35 at vn_open_cred+0x205 #10 0xc093202b at vn_open+0x3b #11 0xc092fcef at kern_openat+0x11f #12 0xc0930255 at kern_open+0x35 #13 0xc0930290 at open+0x30 #14 0xc0bcf944 at syscall+0x2b4 #15 0xc0bb1ca0 at Xint0x80_syscall+0x20 REF 3 vref #0 0xc0923a5d at v_record_ref+0x5d #1 0xc0923afd at vref+0x4d #2 0xc0b0e4e2 at vnode_pager_alloc+0x1a2 #3 0xc0b0e9d8 at vnode_create_vobject+0x1c8 #4 0xc0ae3dcd at ufs_open+0x6d #5 0xc0be6f75 at VOP_OPEN_APV+0xc5 #6 0xc0931ef1 at vn_open_cred+0x4c1 #7 0xc093202b at vn_open+0x3b #8 0xc092fcef at kern_openat+0x11f #9 0xc0930255 at kern_open+0x35 #10 0xc0930290 at open+0x30 #11 0xc0bcf944 at syscall+0x2b4 #12 0xc0bb1ca0 at Xint0x80_syscall+0x20 REF 2 vrele #0 0xc0923a5d at v_record_ref+0x5d #1 0xc0926348 at vrele+0x98 #2 0xc0b0ea26 at vnode_create_vobject+0x216 #3 0xc0ae3dcd at ufs_open+0x6d #4 0xc0be6f75 at VOP_OPEN_APV+0xc5 #5 0xc0931ef1 at vn_open_cred+0x4c1 #6 0xc093202b at vn_open+0x3b #7 0xc092fcef at kern_openat+0x11f #8 0xc0930255 at kern_open+0x35 #9 0xc0930290 at open+0x30 #10 0xc0bcf944 at syscall+0x2b4 #11 0xc0bb1ca0 at Xint0x80_syscall+0x20 REF 3 vget #0 0xc0923a5d at v_record_ref+0x5d #1 0xc09260a1 at vget+0x1a1 #2 0xc0afd705 at vm_mmap+0x245 #3 0xc0afe32e at mmap+0x3ae #4 0xc0bcf944 at syscall+0x2b4 #5 0xc0bb1ca0 at Xint0x80_syscall+0x20 REF 4 vref #0 0xc0923a5d at v_record_ref+0x5d #1 0xc0923afd at vref+0x4d #2 0xc0b0e4e2 at vnode_pager_alloc+0x1a2 #3 0xc0b086b7 at vm_pager_allocate+0x57 #4 0xc0afd8e9 at vm_mmap+0x429 #5 0xc0afe32e at mmap+0x3ae #6 0xc0bcf944 at syscall+0x2b4 #7 0xc0bb1ca0 at Xint0x80_syscall+0x20 REF 3 vput #0 0xc0923a5d at v_record_ref+0x5d #1 0xc0927d5b at vput+0x9b #2 0xc0afd921 at vm_mmap+0x461 #3 0xc0afe32e at mmap+0x3ae #4 0xc0bcf944 at syscall+0x2b4 #5 0xc0bb1ca0 at Xint0x80_syscall+0x20 REF 4 vref #0 0xc0923a5d at v_record_ref+0x5d #1 0xc0923afd at vref+0x4d #2 0xc0b0092f at vm_object_reference_locked+0x3f #3 0xc0af2e86 at vm_fault+0x176 #4 0xc0bcf59d at trap_pfault+0x10d #5 0xc0bcfe60 at trap+0x2d0 #6 0xc0bb1c3b at calltrap+0x6 REF 5 vget #0 0xc0923a5d at v_record_ref+0x5d #1 0xc09260a1 at vget+0x1a1 #2 0xc0af36e4 at vm_fault+0x9d4 #3 0xc0bcf59d at trap_pfault+0x10d #4 0xc0bcfe60 at trap+0x2d0 #5 0xc0bb1c3b at calltrap+0x6 REF 4 vrele #0 0xc0923a5d at v_record_ref+0x5d #1 0xc0926348 at vrele+0x98 #2 0xc0b022fc at vm_object_deallocate+0x1cc #3 0xc0af2c96 at unlock_and_deallocate+0x106 #4 0xc0af4921 at vm_fault+0x1c11 #5 0xc0bcf59d at trap_pfault+0x10d #6 0xc0bcfe60 at trap+0x2d0 #7 0xc0bb1c3b at calltrap+0x6 REF 3 vput #0 0xc0923a5d at v_record_ref+0x5d #1 0xc0927d5b at vput+0x9b #2 0xc0af2cd2 at unlock_and_deallocate+0x142 #3 0xc0af4921 at vm_fault+0x1c11 #4 0xc0bcf59d at trap_pfault+0x10d #5 0xc0bcfe60 at trap+0x2d0 #6 0xc0bb1c3b at calltrap+0x6 REF 4 vref #0 0xc0923a5d at v_record_ref+0x5d #1 0xc0923afd at vref+0x4d #2 0xc0b0092f at vm_object_reference_locked+0x3f #3 0xc0af2e86 at vm_fault+0x176 #4 0xc0bcf59d at trap_pfault+0x10d #5 0xc0bcfe60 at trap+0x2d0 #6 0xc0bb1c3b at calltrap+0x6 REF 5 vget #0 0xc0923a5d at v_record_ref+0x5d #1 0xc09260a1 at vget+0x1a1 #2 0xc0af36e4 at vm_fault+0x9d4 #3 0xc0bcf59d at trap_pfault+0x10d #4 0xc0bcfe60 at trap+0x2d0 #5 0xc0bb1c3b at calltrap+0x6 REF 4 vrele #0 0xc0923a5d at v_record_ref+0x5d #1 0xc0926348 at vrele+0x98 #2 0xc0b022fc at vm_object_deallocate+0x1cc #3 0xc0af2c96 at unlock_and_deallocate+0x106 #4 0xc0af4921 at vm_fault+0x1c11 #5 0xc0bcf59d at trap_pfault+0x10d #6 0xc0bcfe60 at trap+0x2d0 #7 0xc0bb1c3b at calltrap+0x6 REF 3 vput #0 0xc0923a5d at v_record_ref+0x5d #1 0xc0927d5b at vput+0x9b #2 0xc0af2cd2 at unlock_and_deallocate+0x142 #3 0xc0af4921 at vm_fault+0x1c11 #4 0xc0bcf59d at trap_pfault+0x10d #5 0xc0bcfe60 at trap+0x2d0 #6 0xc0bb1c3b at calltrap+0x6 REF 4 vref #0 0xc0923a5d at v_record_ref+0x5d #1 0xc0923afd at vref+0x4d #2 0xc0b0092f at vm_object_reference_locked+0x3f #3 0xc0af2e86 at vm_fault+0x176 #4 0xc0bcf59d at trap_pfault+0x10d #5 0xc0bcfe60 at trap+0x2d0 #6 0xc0bb1c3b at calltrap+0x6 REF 5 vget #0 0xc0923a5d at v_record_ref+0x5d #1 0xc09260a1 at vget+0x1a1 #2 0xc0af36e4 at vm_fault+0x9d4 #3 0xc0bcf59d at trap_pfault+0x10d #4 0xc0bcfe60 at trap+0x2d0 #5 0xc0bb1c3b at calltrap+0x6 REF 4 vrele #0 0xc0923a5d at v_record_ref+0x5d #1 0xc0926348 at vrele+0x98 #2 0xc0b022fc at vm_object_deallocate+0x1cc #3 0xc0af2c96 at unlock_and_deallocate+0x106 #4 0xc0af4921 at vm_fault+0x1c11 #5 0xc0bcf59d at trap_pfault+0x10d #6 0xc0bcfe60 at trap+0x2d0 #7 0xc0bb1c3b at calltrap+0x6 REF 3 vput #0 0xc0923a5d at v_record_ref+0x5d #1 0xc0927d5b at vput+0x9b #2 0xc0af2cd2 at unlock_and_deallocate+0x142 #3 0xc0af4921 at vm_fault+0x1c11 #4 0xc0bcf59d at trap_pfault+0x10d #5 0xc0bcfe60 at trap+0x2d0 #6 0xc0bb1c3b at calltrap+0x6 REF 4 vref #0 0xc0923a5d at v_record_ref+0x5d #1 0xc0923afd at vref+0x4d #2 0xc0b0092f at vm_object_reference_locked+0x3f #3 0xc0af2e86 at vm_fault+0x176 #4 0xc0bcf59d at trap_pfault+0x10d #5 0xc0bcfe60 at trap+0x2d0 #6 0xc0bb1c3b at calltrap+0x6 REF 3 vrele #0 0xc0923a5d at v_record_ref+0x5d #1 0xc0926348 at vrele+0x98 #2 0xc0b022fc at vm_object_deallocate+0x1cc #3 0xc0af2c96 at unlock_and_deallocate+0x106 #4 0xc0af4921 at vm_fault+0x1c11 #5 0xc0bcf59d at trap_pfault+0x10d #6 0xc0bcfe60 at trap+0x2d0 #7 0xc0bb1c3b at calltrap+0x6 REF 2 vrele #0 0xc0923a5d at v_record_ref+0x5d #1 0xc0926348 at vrele+0x98 #2 0xc0b022fc at vm_object_deallocate+0x1cc #3 0xc0af9476 at _vm_map_unlock+0x76 #4 0xc0afe618 at munmap+0x188 #5 0xc0bcf944 at syscall+0x2b4 #6 0xc0bb1ca0 at Xint0x80_syscall+0x20 REF 1 vput #0 0xc0923a5d at v_record_ref+0x5d #1 0xc0927d5b at vput+0x9b #2 0xc0932b3a at vn_close+0x19a #3 0xc0932c34 at vn_closefile+0xe4 #4 0xc0858543 at _fdrop+0x43 #5 0xc085a270 at closef+0x290 #6 0xc085a617 at kern_close+0x117 #7 0xc085a7ba at close+0x1a #8 0xc0bcf944 at syscall+0x2b4 #9 0xc0bb1ca0 at Xint0x80_syscall+0x20 REF 2 vget #0 0xc0923a5d at v_record_ref+0x5d #1 0xc09260a1 at vget+0x1a1 #2 0xc0917fed at vfs_hash_get+0xed #3 0xc0ad04d9 at ffs_vgetf+0x49 #4 0xc0ad0a7e at ffs_vget+0x2e #5 0xc0ade081 at ufs_lookup_+0x7f1 #6 0xc0ade3ce at ufs_lookup+0x1e #7 0xc0be70c5 at VOP_CACHEDLOOKUP_APV+0xc5 #8 0xc0911de6 at vfs_cache_lookup+0xd6 #9 0xc0be9a75 at VOP_LOOKUP_APV+0xe5 #10 0xc091925b at lookup+0x67b #11 0xc091a09f at namei+0x57f #12 0xc092a164 at kern_unlinkat+0x54 #13 0xc092a367 at kern_unlink+0x27 #14 0xc092a392 at unlink+0x22 #15 0xc0bcf944 at syscall+0x2b4 #16 0xc0bb1ca0 at Xint0x80_syscall+0x20 REF 3 vget #0 0xc0923a5d at v_record_ref+0x5d #1 0xc09260a1 at vget+0x1a1 #2 0xc0917fed at vfs_hash_get+0xed #3 0xc0ad04d9 at ffs_vgetf+0x49 #4 0xc0ac5ca5 at handle_workitem_remove+0x45 #5 0xc0ac6a94 at softdep_setup_remove+0x124 #6 0xc0ade6aa at ufs_dirremove+0x16a #7 0xc0ae55ae at ufs_remove+0x6e #8 0xc0be9206 at VOP_REMOVE_APV+0xf6 #9 0xc092a291 at kern_unlinkat+0x181 #10 0xc092a367 at kern_unlink+0x27 #11 0xc092a392 at unlink+0x22 #12 0xc0bcf944 at syscall+0x2b4 #13 0xc0bb1ca0 at Xint0x80_syscall+0x20 REF 2 vput #0 0xc0923a5d at v_record_ref+0x5d #1 0xc0927d5b at vput+0x9b #2 0xc0ac5dae at handle_workitem_remove+0x14e #3 0xc0ac6a94 at softdep_setup_remove+0x124 #4 0xc0ade6aa at ufs_dirremove+0x16a #5 0xc0ae55ae at ufs_remove+0x6e #6 0xc0be9206 at VOP_REMOVE_APV+0xf6 #7 0xc092a291 at kern_unlinkat+0x181 #8 0xc092a367 at kern_unlink+0x27 #9 0xc092a392 at unlink+0x22 #10 0xc0bcf944 at syscall+0x2b4 #11 0xc0bb1ca0 at Xint0x80_syscall+0x20 REF 1 vput #0 0xc0923a5d at v_record_ref+0x5d #1 0xc0927d5b at vput+0x9b #2 0xc092a2d3 at kern_unlinkat+0x1c3 #3 0xc092a367 at kern_unlink+0x27 #4 0xc092a392 at unlink+0x22 #5 0xc0bcf944 at syscall+0x2b4 #6 0xc0bb1ca0 at Xint0x80_syscall+0x20 REF 2 vget #0 0xc0923a5d at v_record_ref+0x5d #1 0xc09260a1 at vget+0x1a1 #2 0xc0b07eff at vm_pageout+0xc5f #3 0xc0867558 at fork_exit+0xb8 #4 0xc0bb1cb0 at fork_trampoline+0x8 REF 1 vput #0 0xc0923a5d at v_record_ref+0x5d #1 0xc0927d5b at vput+0x9b #2 0xc0b0809d at vm_pageout+0xdfd #3 0xc0867558 at fork_exit+0xb8 #4 0xc0bb1cb0 at fork_trampoline+0x8 REF 2 vget #0 0xc0923a5d at v_record_ref+0x5d #1 0xc09260a1 at vget+0x1a1 #2 0xc0927ff5 at vfs_msync+0xf5 #3 0xc09282cb at sync_fsync+0x17b #4 0xc0be64f5 at VOP_FSYNC_APV+0xc5 #5 0xc092663b at sync_vnode+0x16b #6 0xc0926983 at sched_sync+0x273 #7 0xc0867558 at fork_exit+0xb8 #8 0xc0bb1cb0 at fork_trampoline+0x8 REF 1 vput #0 0xc0923a5d at v_record_ref+0x5d #1 0xc0927d5b at vput+0x9b #2 0xc092800e at vfs_msync+0x10e #3 0xc09282cb at sync_fsync+0x17b #4 0xc0be64f5 at VOP_FSYNC_APV+0xc5 #5 0xc092663b at sync_vnode+0x16b #6 0xc0926983 at sched_sync+0x273 #7 0xc0867558 at fork_exit+0xb8 #8 0xc0bb1cb0 at fork_trampoline+0x8 REF 2 vget #0 0xc0923a5d at v_record_ref+0x5d #1 0xc09260a1 at vget+0x1a1 #2 0xc0ad13f6 at ffs_sync+0x216 #3 0xc09282df at sync_fsync+0x18f #4 0xc0be64f5 at VOP_FSYNC_APV+0xc5 #5 0xc092663b at sync_vnode+0x16b #6 0xc0926983 at sched_sync+0x273 #7 0xc0867558 at fork_exit+0xb8 #8 0xc0bb1cb0 at fork_trampoline+0x8 REF 1 vput #0 0xc0923a5d at v_record_ref+0x5d #1 0xc0927d5b at vput+0x9b #2 0xc0ad145e at ffs_sync+0x27e #3 0xc09282df at sync_fsync+0x18f #4 0xc0be64f5 at VOP_FSYNC_APV+0xc5 #5 0xc092663b at sync_vnode+0x16b #6 0xc0926983 at sched_sync+0x273 #7 0xc0867558 at fork_exit+0xb8 #8 0xc0bb1cb0 at fork_trampoline+0x8 REF 2 vget #0 0xc0923a5d at v_record_ref+0x5d #1 0xc09260a1 at vget+0x1a1 #2 0xc0927ff5 at vfs_msync+0xf5 #3 0xc09282cb at sync_fsync+0x17b #4 0xc0be64f5 at VOP_FSYNC_APV+0xc5 #5 0xc092663b at sync_vnode+0x16b #6 0xc0926983 at sched_sync+0x273 #7 0xc0867558 at fork_exit+0xb8 #8 0xc0bb1cb0 at fork_trampoline+0x8 REF 1 vput #0 0xc0923a5d at v_record_ref+0x5d #1 0xc0927d5b at vput+0x9b #2 0xc092800e at vfs_msync+0x10e #3 0xc09282cb at sync_fsync+0x17b #4 0xc0be64f5 at VOP_FSYNC_APV+0xc5 #5 0xc092663b at sync_vnode+0x16b #6 0xc0926983 at sched_sync+0x273 #7 0xc0867558 at fork_exit+0xb8 #8 0xc0bb1cb0 at fork_trampoline+0x8 REF 2 vget #0 0xc0923a5d at v_record_ref+0x5d #1 0xc09260a1 at vget+0x1a1 #2 0xc0927ff5 at vfs_msync+0xf5 #3 0xc09282cb at sync_fsync+0x17b #4 0xc0be64f5 at VOP_FSYNC_APV+0xc5 #5 0xc092663b at sync_vnode+0x16b #6 0xc0926983 at sched_sync+0x273 #7 0xc0867558 at fork_exit+0xb8 #8 0xc0bb1cb0 at fork_trampoline+0x8 REF 1 vput #0 0xc0923a5d at v_record_ref+0x5d #1 0xc0927d5b at vput+0x9b #2 0xc092800e at vfs_msync+0x10e #3 0xc09282cb at sync_fsync+0x17b #4 0xc0be64f5 at VOP_FSYNC_APV+0xc5 #5 0xc092663b at sync_vnode+0x16b #6 0xc0926983 at sched_sync+0x273 #7 0xc0867558 at fork_exit+0xb8 #8 0xc0bb1cb0 at fork_trampoline+0x8 REF 2 vget #0 0xc0923a5d at v_record_ref+0x5d #1 0xc09260a1 at vget+0x1a1 #2 0xc0927ff5 at vfs_msync+0xf5 #3 0xc09282cb at sync_fsync+0x17b #4 0xc0be64f5 at VOP_FSYNC_APV+0xc5 #5 0xc092663b at sync_vnode+0x16b #6 0xc0926983 at sched_sync+0x273 #7 0xc0867558 at fork_exit+0xb8 #8 0xc0bb1cb0 at fork_trampoline+0x8 REF 1 vput #0 0xc0923a5d at v_record_ref+0x5d #1 0xc0927d5b at vput+0x9b #2 0xc092800e at vfs_msync+0x10e #3 0xc09282cb at sync_fsync+0x17b #4 0xc0be64f5 at VOP_FSYNC_APV+0xc5 #5 0xc092663b at sync_vnode+0x16b #6 0xc0926983 at sched_sync+0x273 #7 0xc0867558 at fork_exit+0xb8 #8 0xc0bb1cb0 at fork_trampoline+0x8 REF 2 vget #0 0xc0923a5d at v_record_ref+0x5d #1 0xc09260a1 at vget+0x1a1 #2 0xc0927ff5 at vfs_msync+0xf5 #3 0xc09282cb at sync_fsync+0x17b #4 0xc0be64f5 at VOP_FSYNC_APV+0xc5 #5 0xc092663b at sync_vnode+0x16b #6 0xc0926983 at sched_sync+0x273 #7 0xc0867558 at fork_exit+0xb8 #8 0xc0bb1cb0 at fork_trampoline+0x8 REF 1 vput #0 0xc0923a5d at v_record_ref+0x5d #1 0xc0927d5b at vput+0x9b #2 0xc092800e at vfs_msync+0x10e #3 0xc09282cb at sync_fsync+0x17b #4 0xc0be64f5 at VOP_FSYNC_APV+0xc5 #5 0xc092663b at sync_vnode+0x16b #6 0xc0926983 at sched_sync+0x273 #7 0xc0867558 at fork_exit+0xb8 #8 0xc0bb1cb0 at fork_trampoline+0x8 REF 2 vget #0 0xc0923a5d at v_record_ref+0x5d #1 0xc09260a1 at vget+0x1a1 #2 0xc0927ff5 at vfs_msync+0xf5 #3 0xc09282cb at sync_fsync+0x17b #4 0xc0be64f5 at VOP_FSYNC_APV+0xc5 #5 0xc092663b at sync_vnode+0x16b #6 0xc0926983 at sched_sync+0x273 #7 0xc0867558 at fork_exit+0xb8 #8 0xc0bb1cb0 at fork_trampoline+0x8 REF 1 vput #0 0xc0923a5d at v_record_ref+0x5d #1 0xc0927d5b at vput+0x9b #2 0xc092800e at vfs_msync+0x10e #3 0xc09282cb at sync_fsync+0x17b #4 0xc0be64f5 at VOP_FSYNC_APV+0xc5 #5 0xc092663b at sync_vnode+0x16b #6 0xc0926983 at sched_sync+0x273 #7 0xc0867558 at fork_exit+0xb8 #8 0xc0bb1cb0 at fork_trampoline+0x8 REF 2 vget #0 0xc0923a5d at v_record_ref+0x5d #1 0xc09260a1 at vget+0x1a1 #2 0xc0927ff5 at vfs_msync+0xf5 #3 0xc09282cb at sync_fsync+0x17b #4 0xc0be64f5 at VOP_FSYNC_APV+0xc5 #5 0xc092663b at sync_vnode+0x16b #6 0xc0926983 at sched_sync+0x273 #7 0xc0867558 at fork_exit+0xb8 #8 0xc0bb1cb0 at fork_trampoline+0x8 REF 1 vput #0 0xc0923a5d at v_record_ref+0x5d #1 0xc0927d5b at vput+0x9b #2 0xc092800e at vfs_msync+0x10e #3 0xc09282cb at sync_fsync+0x17b #4 0xc0be64f5 at VOP_FSYNC_APV+0xc5 #5 0xc092663b at sync_vnode+0x16b #6 0xc0926983 at sched_sync+0x273 #7 0xc0867558 at fork_exit+0xb8 #8 0xc0bb1cb0 at fork_trampoline+0x8 REF 2 vref #0 0xc0923a5d at v_record_ref+0x5d #1 0xc0923afd at vref+0x4d #2 0xc0b0092f at vm_object_reference_locked+0x3f #3 0xc0b07e6f at vm_pageout+0xbcf #4 0xc0867558 at fork_exit+0xb8 #5 0xc0bb1cb0 at fork_trampoline+0x8 REF 3 vget #0 0xc0923a5d at v_record_ref+0x5d #1 0xc09260a1 at vget+0x1a1 #2 0xc0b07eff at vm_pageout+0xc5f #3 0xc0867558 at fork_exit+0xb8 #4 0xc0bb1cb0 at fork_trampoline+0x8 REF 2 vput #0 0xc0923a5d at v_record_ref+0x5d #1 0xc0927d5b at vput+0x9b #2 0xc0b0809d at vm_pageout+0xdfd #3 0xc0867558 at fork_exit+0xb8 #4 0xc0bb1cb0 at fork_trampoline+0x8 REF 1 vrele #0 0xc0923a5d at v_record_ref+0x5d #1 0xc0926348 at vrele+0x98 #2 0xc0b022fc at vm_object_deallocate+0x1cc #3 0xc0b080d2 at vm_pageout+0xe32 #4 0xc0867558 at fork_exit+0xb8 #5 0xc0bb1cb0 at fork_trampoline+0x8 REF 2 vget #0 0xc0923a5d at v_record_ref+0x5d #1 0xc09260a1 at vget+0x1a1 #2 0xc0927ff5 at vfs_msync+0xf5 #3 0xc09282cb at sync_fsync+0x17b #4 0xc0be64f5 at VOP_FSYNC_APV+0xc5 #5 0xc092663b at sync_vnode+0x16b #6 0xc0926983 at sched_sync+0x273 #7 0xc0867558 at fork_exit+0xb8 #8 0xc0bb1cb0 at fork_trampoline+0x8 REF 1 vput #0 0xc0923a5d at v_record_ref+0x5d #1 0xc0927d5b at vput+0x9b #2 0xc092800e at vfs_msync+0x10e #3 0xc09282cb at sync_fsync+0x17b #4 0xc0be64f5 at VOP_FSYNC_APV+0xc5 #5 0xc092663b at sync_vnode+0x16b #6 0xc0926983 at sched_sync+0x273 #7 0xc0867558 at fork_exit+0xb8 #8 0xc0bb1cb0 at fork_trampoline+0x8 REF 2 vget #0 0xc0923a5d at v_record_ref+0x5d #1 0xc09260a1 at vget+0x1a1 #2 0xc0ad13f6 at ffs_sync+0x216 #3 0xc09282df at sync_fsync+0x18f #4 0xc0be64f5 at VOP_FSYNC_APV+0xc5 #5 0xc092663b at sync_vnode+0x16b #6 0xc0926983 at sched_sync+0x273 #7 0xc0867558 at fork_exit+0xb8 #8 0xc0bb1cb0 at fork_trampoline+0x8 REF 1 vput #0 0xc0923a5d at v_record_ref+0x5d #1 0xc0927d5b at vput+0x9b #2 0xc0ad145e at ffs_sync+0x27e #3 0xc09282df at sync_fsync+0x18f #4 0xc0be64f5 at VOP_FSYNC_APV+0xc5 #5 0xc092663b at sync_vnode+0x16b #6 0xc0926983 at sched_sync+0x273 #7 0xc0867558 at fork_exit+0xb8 #8 0xc0bb1cb0 at fork_trampoline+0x8 REF 2 vget #0 0xc0923a5d at v_record_ref+0x5d #1 0xc09260a1 at vget+0x1a1 #2 0xc0927ff5 at vfs_msync+0xf5 #3 0xc09282cb at sync_fsync+0x17b #4 0xc0be64f5 at VOP_FSYNC_APV+0xc5 #5 0xc092663b at sync_vnode+0x16b #6 0xc0926983 at sched_sync+0x273 #7 0xc0867558 at fork_exit+0xb8 #8 0xc0bb1cb0 at fork_trampoline+0x8 REF 1 vput #0 0xc0923a5d at v_record_ref+0x5d #1 0xc0927d5b at vput+0x9b #2 0xc092800e at vfs_msync+0x10e #3 0xc09282cb at sync_fsync+0x17b #4 0xc0be64f5 at VOP_FSYNC_APV+0xc5 #5 0xc092663b at sync_vnode+0x16b #6 0xc0926983 at sched_sync+0x273 #7 0xc0867558 at fork_exit+0xb8 #8 0xc0bb1cb0 at fork_trampoline+0x8 REF 2 vget #0 0xc0923a5d at v_record_ref+0x5d #1 0xc09260a1 at vget+0x1a1 #2 0xc0927ff5 at vfs_msync+0xf5 #3 0xc09282cb at sync_fsync+0x17b #4 0xc0be64f5 at VOP_FSYNC_APV+0xc5 #5 0xc092663b at sync_vnode+0x16b #6 0xc0926983 at sched_sync+0x273 #7 0xc0867558 at fork_exit+0xb8 #8 0xc0bb1cb0 at fork_trampoline+0x8 REF 1 vput #0 0xc0923a5d at v_record_ref+0x5d #1 0xc0927d5b at vput+0x9b #2 0xc092800e at vfs_msync+0x10e #3 0xc09282cb at sync_fsync+0x17b #4 0xc0be64f5 at VOP_FSYNC_APV+0xc5 #5 0xc092663b at sync_vnode+0x16b #6 0xc0926983 at sched_sync+0x273 #7 0xc0867558 at fork_exit+0xb8 #8 0xc0bb1cb0 at fork_trampoline+0x8 REF 2 vget #0 0xc0923a5d at v_record_ref+0x5d #1 0xc09260a1 at vget+0x1a1 #2 0xc0927ff5 at vfs_msync+0xf5 #3 0xc09282cb at sync_fsync+0x17b #4 0xc0be64f5 at VOP_FSYNC_APV+0xc5 #5 0xc092663b at sync_vnode+0x16b #6 0xc0926983 at sched_sync+0x273 #7 0xc0867558 at fork_exit+0xb8 #8 0xc0bb1cb0 at fork_trampoline+0x8 REF 1 vput #0 0xc0923a5d at v_record_ref+0x5d #1 0xc0927d5b at vput+0x9b #2 0xc092800e at vfs_msync+0x10e #3 0xc09282cb at sync_fsync+0x17b #4 0xc0be64f5 at VOP_FSYNC_APV+0xc5 #5 0xc092663b at sync_vnode+0x16b #6 0xc0926983 at sched_sync+0x273 #7 0xc0867558 at fork_exit+0xb8 #8 0xc0bb1cb0 at fork_trampoline+0x8 REF 2 vget #0 0xc0923a5d at v_record_ref+0x5d #1 0xc09260a1 at vget+0x1a1 #2 0xc0927ff5 at vfs_msync+0xf5 #3 0xc092b7e1 at sync+0x131 #4 0xc0bcf944 at syscall+0x2b4 #5 0xc0bb1ca0 at Xint0x80_syscall+0x20 REF 1 vput #0 0xc0923a5d at v_record_ref+0x5d #1 0xc0927d5b at vput+0x9b #2 0xc092800e at vfs_msync+0x10e #3 0xc092b7e1 at sync+0x131 #4 0xc0bcf944 at syscall+0x2b4 #5 0xc0bb1ca0 at Xint0x80_syscall+0x20 REF 2 vget #0 0xc0923a5d at v_record_ref+0x5d #1 0xc09260a1 at vget+0x1a1 #2 0xc0927ff5 at vfs_msync+0xf5 #3 0xc092b7e1 at sync+0x131 #4 0xc0bcf944 at syscall+0x2b4 #5 0xc0bb1ca0 at Xint0x80_syscall+0x20 REF 1 vput #0 0xc0923a5d at v_record_ref+0x5d #1 0xc0927d5b at vput+0x9b #2 0xc092800e at vfs_msync+0x10e #3 0xc092b7e1 at sync+0x131 #4 0xc0bcf944 at syscall+0x2b4 #5 0xc0bb1ca0 at Xint0x80_syscall+0x20 REF 2 vget #0 0xc0923a5d at v_record_ref+0x5d #1 0xc09260a1 at vget+0x1a1 #2 0xc0927ff5 at vfs_msync+0xf5 #3 0xc092b7e1 at sync+0x131 #4 0xc0bcf944 at syscall+0x2b4 #5 0xc0bb1ca0 at Xint0x80_syscall+0x20 REF 1 vput #0 0xc0923a5d at v_record_ref+0x5d #1 0xc0927d5b at vput+0x9b #2 0xc092800e at vfs_msync+0x10e #3 0xc092b7e1 at sync+0x131 #4 0xc0bcf944 at syscall+0x2b4 #5 0xc0bb1ca0 at Xint0x80_syscall+0x20 REF 2 vget #0 0xc0923a5d at v_record_ref+0x5d #1 0xc09260a1 at vget+0x1a1 #2 0xc0927ff5 at vfs_msync+0xf5 #3 0xc092b7e1 at sync+0x131 #4 0xc0bcf944 at syscall+0x2b4 #5 0xc0bb1ca0 at Xint0x80_syscall+0x20 REF 1 vput #0 0xc0923a5d at v_record_ref+0x5d #1 0xc0927d5b at vput+0x9b #2 0xc092800e at vfs_msync+0x10e #3 0xc092b7e1 at sync+0x131 #4 0xc0bcf944 at syscall+0x2b4 #5 0xc0bb1ca0 at Xint0x80_syscall+0x20 REF 2 vget #0 0xc0923a5d at v_record_ref+0x5d #1 0xc09260a1 at vget+0x1a1 #2 0xc0927ff5 at vfs_msync+0xf5 #3 0xc091cb03 at dounmount+0x353 #4 0xc091d1af at unmount+0x2ff #5 0xc0bcf944 at syscall+0x2b4 #6 0xc0bb1ca0 at Xint0x80_syscall+0x20 REF 1 vput #0 0xc0923a5d at v_record_ref+0x5d #1 0xc0927d5b at vput+0x9b #2 0xc092800e at vfs_msync+0x10e #3 0xc091cb03 at dounmount+0x353 #4 0xc091d1af at unmount+0x2ff #5 0xc0bcf944 at syscall+0x2b4 #6 0xc0bb1ca0 at Xint0x80_syscall+0x20 REF 2 vget #0 0xc0923a5d at v_record_ref+0x5d #1 0xc09260a1 at vget+0x1a1 #2 0xc0927ff5 at vfs_msync+0xf5 #3 0xc09282cb at sync_fsync+0x17b #4 0xc0be64f5 at VOP_FSYNC_APV+0xc5 #5 0xc092663b at sync_vnode+0x16b #6 0xc0926983 at sched_sync+0x273 #7 0xc0867558 at fork_exit+0xb8 #8 0xc0bb1cb0 at fork_trampoline+0x8 REF 1 vput #0 0xc0923a5d at v_record_ref+0x5d #1 0xc0927d5b at vput+0x9b #2 0xc092800e at vfs_msync+0x10e #3 0xc09282cb at sync_fsync+0x17b #4 0xc0be64f5 at VOP_FSYNC_APV+0xc5 #5 0xc092663b at sync_vnode+0x16b #6 0xc0926983 at sched_sync+0x273 #7 0xc0867558 at fork_exit+0xb8 #8 0xc0bb1cb0 at fork_trampoline+0x8 REF 2 vget #0 0xc0923a5d at v_record_ref+0x5d #1 0xc09260a1 at vget+0x1a1 #2 0xc0927ff5 at vfs_msync+0xf5 #3 0xc09282cb at sync_fsync+0x17b #4 0xc0be64f5 at VOP_FSYNC_APV+0xc5 #5 0xc092663b at sync_vnode+0x16b #6 0xc0926983 at sched_sync+0x273 #7 0xc0867558 at fork_exit+0xb8 #8 0xc0bb1cb0 at fork_trampoline+0x8 REF 1 vput #0 0xc0923a5d at v_record_ref+0x5d #1 0xc0927d5b at vput+0x9b #2 0xc092800e at vfs_msync+0x10e #3 0xc09282cb at sync_fsync+0x17b #4 0xc0be64f5 at VOP_FSYNC_APV+0xc5 #5 0xc092663b at sync_vnode+0x16b #6 0xc0926983 at sched_sync+0x273 #7 0xc0867558 at fork_exit+0xb8 #8 0xc0bb1cb0 at fork_trampoline+0x8 REF 2 vget #0 0xc0923a5d at v_record_ref+0x5d #1 0xc09260a1 at vget+0x1a1 #2 0xc0927ff5 at vfs_msync+0xf5 #3 0xc09282cb at sync_fsync+0x17b #4 0xc0be64f5 at VOP_FSYNC_APV+0xc5 #5 0xc092663b at sync_vnode+0x16b #6 0xc0926983 at sched_sync+0x273 #7 0xc0867558 at fork_exit+0xb8 #8 0xc0bb1cb0 at fork_trampoline+0x8 REF 1 vput #0 0xc0923a5d at v_record_ref+0x5d #1 0xc0927d5b at vput+0x9b #2 0xc092800e at vfs_msync+0x10e #3 0xc09282cb at sync_fsync+0x17b #4 0xc0be64f5 at VOP_FSYNC_APV+0xc5 #5 0xc092663b at sync_vnode+0x16b #6 0xc0926983 at sched_sync+0x273 #7 0xc0867558 at fork_exit+0xb8 #8 0xc0bb1cb0 at fork_trampoline+0x8 vnode 0xc7b0d450: tag syncer, type VNON usecount 1, writecount 0, refcount 1 mountedhere 0 flags () lock type syncer: UNLOCKED #0 0xc087a1be at __lockmgr_args+0xbfe #1 0xc0914595 at vop_stdlock+0x65 #2 0xc0be88f5 at VOP_LOCK1_APV+0xb5 #3 0xc0932378 at _vn_lock+0x78 #4 0xc0926612 at sync_vnode+0x142 #5 0xc0926983 at sched_sync+0x273 #6 0xc0867558 at fork_exit+0xb8 #7 0xc0bb1cb0 at fork_trampoline+0x8 db> show alllocks db> show lockedvnods Locked vnodes db> ps pid ppid pgrp uid state wmesg wchan cmd 21 1 21 0 Ss+ ttyin 0xc73c2870 sh 20 0 0 0 SL flowclea 0xc0f6ce08 [flowcleaner] 19 0 0 0 SL sdflush 0xc0f78560 [softdepflush] 18 0 0 0 SL syncer 0xc0f6cc18 [syncer] 17 0 0 0 SL vlruwt 0xc7796aa0 [vnlru] 16 0 0 0 SL psleep 0xc0f6c948 [bufdaemon] 15 0 0 0 SL pgzero 0xc0f79398 [pagezero] 9 0 0 0 SL psleep 0xc0f78fc4 [vmdaemon] 8 0 0 0 SL psleep 0xc0f78f8c [pagedaemon] 7 0 0 0 SL - 0xc73c263c [fdc0] 6 0 0 0 SL - 0xc73f6000 [fw0_probe] 14 0 0 0 SL (threaded) [usb] 100058 D - 0xc73d6d0c [usbus5] 100057 D - 0xc73d6cdc [usbus5] 100056 D - 0xc73d6cac [usbus5] 100055 D - 0xc73d6c7c [usbus5] 100053 D - 0xc73c8b5c [usbus4] 100052 D - 0xc73c8b2c [usbus4] 100051 D - 0xc73c8afc [usbus4] 100050 D - 0xc73c8acc [usbus4] 100049 D - 0xc73c4b5c [usbus3] 100048 D - 0xc73c4b2c [usbus3] 100047 D - 0xc73c4afc [usbus3] 100046 D - 0xc73c4acc [usbus3] 100045 D - 0xc73bdb5c [usbus2] 100044 D - 0xc73bdb2c [usbus2] 100043 D - 0xc73bdafc [usbus2] 100042 D - 0xc73bdacc [usbus2] 100040 D - 0xc73b8b5c [usbus1] 100039 D - 0xc73b8b2c [usbus1] 100038 D - 0xc73b8afc [usbus1] 100037 D - 0xc73b8acc [usbus1] 100035 D - 0xc73a9b5c [usbus0] 100034 D - 0xc73a9b2c [usbus0] 100033 D - 0xc73a9afc [usbus0] 100032 D - 0xc73a9acc [usbus0] 5 0 0 0 SL ccb_scan 0xc0dcc4d4 [xpt_thrd] 13 0 0 0 SL - 0xc0e00124 [yarrow] 4 0 0 0 SL - 0xc0dfdee4 [g_down] 3 0 0 0 SL - 0xc0dfdee0 [g_up] 2 0 0 0 SL - 0xc0dfded8 [g_event] 12 0 0 0 WL (threaded) [intr] 100066 I [irq12: psm0] 100065 I [irq1: atkbd0] 100063 I [swi0: uart] 100060 I [irq20: fwohci0] 100059 I [irq14: ata0] 100054 I [irq19: ehci0] 100041 I [irq18: ohci2 ohci4] 100036 I [irq17: ohci1 ohci3] 100031 I [irq16: hdac1 ohci0] 100030 I [irq22: atapci0] 100029 I [irq256: hdac0] 100028 I [irq9: acpi0] 100024 I [swi2: cambio] 100022 I [swi6: task queue] 100021 I [swi6: Giant taskq] 100019 I [swi5: +] 100012 I [swi3: vm] 100011 I [swi1: netisr 0] 100010 I [swi4: clock] 100009 I [swi4: clock] 100008 I [swi4: clock] 100007 I [swi4: clock] 11 0 0 0 RL (threaded) [idle] 100006 Run CPU 0 [idle: cpu0] 100005 Run CPU 1 [idle: cpu1] 100004 Run CPU 2 [idle: cpu2] 100003 Run CPU 3 [idle: cpu3] 1 0 1 0 SLs wait 0xc7179d48 [init] 10 0 0 0 SL audit_wo 0xc0f77e80 [audit] 0 0 0 0 SLs (threaded) [kernel] 100061 D - 0xc73a3940 [fw0_taskq] 100027 D - 0xc7346080 [acpi_task_2] 100026 D - 0xc7346080 [acpi_task_1] 100025 D - 0xc7346080 [acpi_task_0] 100020 D - 0xc7346300 [thread taskq] 100018 D - 0xc7346580 [kqueue taskq] 100016 D - 0xc7160e40 [firmware taskq] 100000 D sched 0xc0dfdfc0 [swapper] db> set $lines 0 db> allt Tracing command sh pid 21 tid 100075 td 0xc7806000 sched_switch(c7806000,0,104,191,a3677b47,...) at sched_switch+0x406 mi_switch(104,0,c0ca73ce,1eb,0,...) at mi_switch+0x200 sleepq_switch(c7806000,0,c0ca73ce,1a0,0,...) at sleepq_switch+0x15f sleepq_catch_signals(c08818fa,c73c2804,0,c0ca1569,c7806000,...) at sleepq_catch_signals+0xb7 sleepq_wait_sig(c73c2870,0,f6431b0c,101,0,...) at sleepq_wait_sig+0x17 _cv_wait_sig(c73c2870,c73c2804,c0cab375,511,0,...) at _cv_wait_sig+0x240 tty_wait(c73c2800,c73c2870,3ff,f6431b87,c0d9d580,...) at tty_wait+0x71 ttydisc_read(c73c2800,f6431c58,0,9f,0,...) at ttydisc_read+0xef ttydev_read(c7168800,f6431c58,0,0,3ff,...) at ttydev_read+0xaa devfs_read_f(c780b000,f6431c58,c7177100,0,c7806000,...) at devfs_read_f+0x7e dofileread(f6431c58,ffffffff,ffffffff,0,c780b000,...) at dofileread+0x96 kern_readv(c7806000,0,f6431c58,f6431c78,1,...) at kern_readv+0x58 read(c7806000,f6431cf8,c,c0c8ac2d,c0d8e654,...) at read+0x4f syscall(f6431d38) at syscall+0x2b4 Xint0x80_syscall() at Xint0x80_syscall+0x20 --- syscall (3, FreeBSD ELF32, read), eip = 0x281eaec3, esp = 0xbfbfedbc, ebp = 0xbfbfedf8 --- Tracing command flowcleaner pid 20 tid 100074 td 0xc74e96c0 sched_switch(c74e96c0,0,104,191,7ea10b71,...) at sched_switch+0x406 mi_switch(104,0,c0ca73ce,1eb,0,...) at mi_switch+0x200 sleepq_switch(c74e96c0,0,c0ca73ce,283,c74e96c0,...) at sleepq_switch+0x15f sleepq_timedwait(c0f6ce08,0,f4241cc4,1,0,...) at sleepq_timedwait+0x6b _cv_timedwait(c0f6ce08,c0f6ce10,2710,3f0,0,...) at _cv_timedwait+0x250 flowtable_cleaner(0,f4241d38,c0c9e2f4,343,c77962a8,...) at flowtable_cleaner+0x1bf fork_exit(c093bc90,0,f4241d38) at fork_exit+0xb8 fork_trampoline() at fork_trampoline+0x8 --- trap 0, eip = 0, esp = 0xf4241d70, ebp = 0 --- Tracing command softdepflush pid 19 tid 100073 td 0xc74e9900 sched_switch(c74e9900,0,104,191,f502b07d,...) at sched_switch+0x406 mi_switch(104,0,c0ca73ce,1eb,44,...) at mi_switch+0x200 sleepq_switch(c74e9900,0,c0ca73ce,283,0,...) at sleepq_switch+0x15f sleepq_timedwait(c0f78560,44,c0cca4a8,0,0,...) at sleepq_timedwait+0x6b _sleep(c0f78560,c0f78504,44,c0cca4a8,3e8,...) at _sleep+0x339 softdep_flush(0,f423ed38,c0c9e2f4,343,c7796550,...) at softdep_flush+0x244 fork_exit(c0acbc90,0,f423ed38) at fork_exit+0xb8 fork_trampoline() at fork_trampoline+0x8 --- trap 0, eip = 0, esp = 0xf423ed70, ebp = 0 --- Tracing command syncer pid 18 tid 100072 td 0xc74e9b40 sched_switch(c74e9b40,0,104,191,dfa6ad79,...) at sched_switch+0x406 mi_switch(104,0,c0ca73ce,1eb,0,...) at mi_switch+0x200 sleepq_switch(c74e9b40,0,c0ca73ce,283,c74e9b40,...) at sleepq_switch+0x15f sleepq_timedwait(c0f6cc18,0,f423bc88,1,0,...) at sleepq_timedwait+0x6b _cv_timedwait(c0f6cc18,c0f6cc04,3e8,6ed,4e20,...) at _cv_timedwait+0x250 sched_sync(0,f423bd38,c0c9e2f4,343,c77967f8,...) at sched_sync+0x502 fork_exit(c0926710,0,f423bd38) at fork_exit+0xb8 fork_trampoline() at fork_trampoline+0x8 --- trap 0, eip = 0, esp = 0xf423bd70, ebp = 0 --- Tracing command vnlru pid 17 tid 100071 td 0xc74e9d80 sched_switch(c74e9d80,0,104,191,bd50e64b,...) at sched_switch+0x406 mi_switch(104,0,c0ca73ce,1eb,50,...) at mi_switch+0x200 sleepq_switch(c74e9d80,0,c0ca73ce,283,0,...) at sleepq_switch+0x15f sleepq_timedwait(c7796aa0,50,c0cb13f9,0,0,...) at sleepq_timedwait+0x6b _sleep(c7796aa0,c0f6cbd8,250,c0cb13f9,3e8,...) at _sleep+0x339 vnlru_proc(0,f4238d38,c0c9e2f4,343,c7796aa0,...) at vnlru_proc+0xe7 fork_exit(c0927300,0,f4238d38) at fork_exit+0xb8 fork_trampoline() at fork_trampoline+0x8 --- trap 0, eip = 0, esp = 0xf4238d70, ebp = 0 --- Tracing command bufdaemon pid 16 tid 100070 td 0xc74eb000 sched_switch(c74eb000,0,104,191,ea634f9c,...) at sched_switch+0x406 mi_switch(104,0,c0ca73ce,1eb,44,...) at mi_switch+0x200 sleepq_switch(c74eb000,0,c0ca73ce,283,0,...) at sleepq_switch+0x15f sleepq_timedwait(c0f6c948,44,c0cae95e,0,0,...) at sleepq_timedwait+0x6b _sleep(c0f6c948,c0f6c94c,44,c0cae95e,3e8,...) at _sleep+0x339 buf_daemon(0,f4235d38,c0c9e2f4,343,c7796d48,...) at buf_daemon+0x138 fork_exit(c090e720,0,f4235d38) at fork_exit+0xb8 fork_trampoline() at fork_trampoline+0x8 --- trap 0, eip = 0, esp = 0xf4235d70, ebp = 0 --- Tracing command pagezero pid 15 tid 100069 td 0xc74eb240 sched_switch(c74eb240,0,104,191,e825986c,...) at sched_switch+0x406 mi_switch(104,0,c0ca73ce,1eb,0,...) at mi_switch+0x200 sleepq_switch(c74eb240,0,c0ca73ce,283,0,...) at sleepq_switch+0x15f sleepq_timedwait(c0f79398,0,c0cd055d,0,0,...) at sleepq_timedwait+0x6b _sleep(c0f79398,c0f78e80,0,c0cd055d,493e0,...) at _sleep+0x339 vm_pagezero(0,f4232d38,c0c9e2f4,343,c717a2a8,...) at vm_pagezero+0xdc fork_exit(c0b0dc20,0,f4232d38) at fork_exit+0xb8 fork_trampoline() at fork_trampoline+0x8 --- trap 0, eip = 0, esp = 0xf4232d70, ebp = 0 --- Tracing command vmdaemon pid 9 tid 100068 td 0xc74eb480 sched_switch(c74eb480,0,104,191,355905b7,...) at sched_switch+0x406 mi_switch(104,0,c0ca73ce,1eb,68,...) at mi_switch+0x200 sleepq_switch(c74eb480,0,c0ca73ce,260,0,...) at sleepq_switch+0x15f sleepq_wait(c0f78fc4,68,c0cae95e,0,0,...) at sleepq_wait+0x63 _sleep(c0f78fc4,c0f78fc8,68,c0cae95e,0,...) at _sleep+0x36b vm_daemon(0,f422fd38,c0c9e2f4,343,c717a550,...) at vm_daemon+0x59 fork_exit(c0b063f0,0,f422fd38) at fork_exit+0xb8 fork_trampoline() at fork_trampoline+0x8 --- trap 0, eip = 0, esp = 0xf422fd70, ebp = 0 --- Tracing command pagedaemon pid 8 tid 100067 td 0xc74eb6c0 sched_switch(c74eb6c0,0,104,191,c5403272,...) at sched_switch+0x406 mi_switch(104,0,c0ca73ce,1eb,44,...) at mi_switch+0x200 sleepq_switch(c74eb6c0,0,c0ca73ce,283,0,...) at sleepq_switch+0x15f sleepq_timedwait(c0f78f8c,44,c0cae95e,0,0,...) at sleepq_timedwait+0x6b _sleep(c0f78f8c,c0f78e80,44,c0cae95e,1388,...) at _sleep+0x339 vm_pageout(0,f422cd38,c0c9e2f4,343,c717a7f8,...) at vm_pageout+0x2bb fork_exit(c0b072a0,0,f422cd38) at fork_exit+0xb8 fork_trampoline() at fork_trampoline+0x8 --- trap 0, eip = 0, esp = 0xf422cd70, ebp = 0 --- Tracing command fdc0 pid 7 tid 100064 td 0xc74ebd80 sched_switch(c74ebd80,0,104,191,da2dcaf8,...) at sched_switch+0x406 mi_switch(104,0,c0ca73ce,1eb,4c,...) at mi_switch+0x200 sleepq_switch(c74ebd80,0,c0ca73ce,283,0,...) at sleepq_switch+0x15f sleepq_timedwait(c73c263c,4c,c0c9877a,0,0,...) at sleepq_timedwait+0x6b _sleep(c73c263c,c73c26f0,4c,c0c9877a,3e8,...) at _sleep+0x339 fdc_thread(c73c2600,f41c3d38,c0c9e2f4,343,c717aaa0,...) at fdc_thread+0x27d fork_exit(c0b8b250,c73c2600,f41c3d38) at fork_exit+0xb8 fork_trampoline() at fork_trampoline+0x8 --- trap 0, eip = 0, esp = 0xf41c3d70, ebp = 0 --- Tracing command fw0_probe pid 6 tid 100062 td 0xc73bc480 sched_switch(c73bc480,0,104,191,549c3aba,...) at sched_switch+0x406 mi_switch(104,0,c0ca73ce,1eb,5c,...) at mi_switch+0x200 sleepq_switch(c73bc480,0,c0ca73ce,1a0,5c,...) at sleepq_switch+0x15f sleepq_catch_signals(c0ca73ce,160,0,100,100,...) at sleepq_catch_signals+0xb7 sleepq_wait_sig(c73f6000,5c,c0c9877a,100,0,...) at sleepq_wait_sig+0x17 _sleep(c73f6000,c73fa488,15c,c0c9877a,0,...) at _sleep+0x354 fw_bus_probe_thread(c73f6000,f41b3d38,c0c9e2f4,343,c717ad48,...) at fw_bus_probe_thread+0xa08 fork_exit(c065ba00,c73f6000,f41b3d38) at fork_exit+0xb8 fork_trampoline() at fork_trampoline+0x8 --- trap 0, eip = 0, esp = 0xf41b3d70, ebp = 0 --- Tracing command usb pid 14 tid 100058 td 0xc73bcd80 sched_switch(c73bcd80,0,104,191,ea1290ad,...) at sched_switch+0x406 mi_switch(104,0,c0ca73ce,1eb,0,...) at mi_switch+0x200 sleepq_switch(c73bcd80,0,c0ca73ce,260,c73bcd80,...) at sleepq_switch+0x15f sleepq_wait(c73d6d0c,0,f419ccbc,1,0,...) at sleepq_wait+0x63 _cv_wait(c73d6d0c,c73d6dac,c0c9146a,6c,c73d6d14,...) at _cv_wait+0x240 usb_process(c73d6d04,f419cd38,c0c9e2f4,343,c7348000,...) at usb_process+0x193 fork_exit(c07c2120,c73d6d04,f419cd38) at fork_exit+0xb8 fork_trampoline() at fork_trampoline+0x8 --- trap 0, eip = 0, esp = 0xf419cd70, ebp = 0 --- Tracing command usb pid 14 tid 100057 td 0xc73ce000 sched_switch(c73ce000,0,104,191,2eb8b94d,...) at sched_switch+0x406 mi_switch(104,0,c0ca73ce,1eb,0,...) at mi_switch+0x200 sleepq_switch(c73ce000,0,c0ca73ce,260,c73ce000,...) at sleepq_switch+0x15f sleepq_wait(c73d6cdc,0,f4199cbc,1,0,...) at sleepq_wait+0x63 _cv_wait(c73d6cdc,c73d6dac,c0c9146a,6c,c73d6ce4,...) at _cv_wait+0x240 usb_process(c73d6cd4,f4199d38,c0c9e2f4,343,c7348000,...) at usb_process+0x193 fork_exit(c07c2120,c73d6cd4,f4199d38) at fork_exit+0xb8 fork_trampoline() at fork_trampoline+0x8 --- trap 0, eip = 0, esp = 0xf4199d70, ebp = 0 --- Tracing command usb pid 14 tid 100056 td 0xc73ce240 sched_switch(c73ce240,0,104,191,e9ac199d,...) at sched_switch+0x406 mi_switch(104,0,c0ca73ce,1eb,0,...) at mi_switch+0x200 sleepq_switch(c73ce240,0,c0ca73ce,260,c73ce240,...) at sleepq_switch+0x15f sleepq_wait(c73d6cac,0,f4196cbc,1,0,...) at sleepq_wait+0x63 _cv_wait(c73d6cac,c73d6dac,c0c9146a,6c,c73d6cb4,...) at _cv_wait+0x240 usb_process(c73d6ca4,f4196d38,c0c9e2f4,343,c7348000,...) at usb_process+0x193 fork_exit(c07c2120,c73d6ca4,f4196d38) at fork_exit+0xb8 fork_trampoline() at fork_trampoline+0x8 --- trap 0, eip = 0, esp = 0xf4196d70, ebp = 0 --- Tracing command usb pid 14 tid 100055 td 0xc73ce480 sched_switch(c73ce480,0,104,191,e9ac089c,...) at sched_switch+0x406 mi_switch(104,0,c0ca73ce,1eb,0,...) at mi_switch+0x200 sleepq_switch(c73ce480,0,c0ca73ce,260,c73ce480,...) at sleepq_switch+0x15f sleepq_wait(c73d6c7c,0,f4193cbc,1,0,...) at sleepq_wait+0x63 _cv_wait(c73d6c7c,c73d6dac,c0c9146a,6c,c73d6c84,...) at _cv_wait+0x240 usb_process(c73d6c74,f4193d38,c0c9e2f4,343,c7348000,...) at usb_process+0x193 fork_exit(c07c2120,c73d6c74,f4193d38) at fork_exit+0xb8 fork_trampoline() at fork_trampoline+0x8 --- trap 0, eip = 0, esp = 0xf4193d70, ebp = 0 --- Tracing command usb pid 14 tid 100053 td 0xc73ce900 sched_switch(c73ce900,0,104,191,e9abf2ce,...) at sched_switch+0x406 mi_switch(104,0,c0ca73ce,1eb,0,...) at mi_switch+0x200 sleepq_switch(c73ce900,0,c0ca73ce,260,c73ce900,...) at sleepq_switch+0x15f sleepq_wait(c73c8b5c,0,f418bcbc,1,0,...) at sleepq_wait+0x63 _cv_wait(c73c8b5c,c73c8bfc,c0c9146a,6c,c73c8b64,...) at _cv_wait+0x240 usb_process(c73c8b54,f418bd38,c0c9e2f4,343,c7348000,...) at usb_process+0x193 fork_exit(c07c2120,c73c8b54,f418bd38) at fork_exit+0xb8 fork_trampoline() at fork_trampoline+0x8 --- trap 0, eip = 0, esp = 0xf418bd70, ebp = 0 --- Tracing command usb pid 14 tid 100052 td 0xc73ceb40 sched_switch(c73ceb40,0,104,191,25bb8884,...) at sched_switch+0x406 mi_switch(104,0,c0ca73ce,1eb,0,...) at mi_switch+0x200 sleepq_switch(c73ceb40,0,c0ca73ce,260,c73ceb40,...) at sleepq_switch+0x15f sleepq_wait(c73c8b2c,0,f4188cbc,1,0,...) at sleepq_wait+0x63 _cv_wait(c73c8b2c,c73c8bfc,c0c9146a,6c,c73c8b34,...) at _cv_wait+0x240 usb_process(c73c8b24,f4188d38,c0c9e2f4,343,c7348000,...) at usb_process+0x193 fork_exit(c07c2120,c73c8b24,f4188d38) at fork_exit+0xb8 fork_trampoline() at fork_trampoline+0x8 --- trap 0, eip = 0, esp = 0xf4188d70, ebp = 0 --- Tracing command usb pid 14 tid 100051 td 0xc73ced80 sched_switch(c73ced80,0,104,191,e94886d6,...) at sched_switch+0x406 mi_switch(104,0,c0ca73ce,1eb,0,...) at mi_switch+0x200 sleepq_switch(c73ced80,0,c0ca73ce,260,c73ced80,...) at sleepq_switch+0x15f sleepq_wait(c73c8afc,0,f4185cbc,1,0,...) at sleepq_wait+0x63 _cv_wait(c73c8afc,c73c8bfc,c0c9146a,6c,c73c8b04,...) at _cv_wait+0x240 usb_process(c73c8af4,f4185d38,c0c9e2f4,343,c7348000,...) at usb_process+0x193 fork_exit(c07c2120,c73c8af4,f4185d38) at fork_exit+0xb8 fork_trampoline() at fork_trampoline+0x8 --- trap 0, eip = 0, esp = 0xf4185d70, ebp = 0 --- Tracing command usb pid 14 tid 100050 td 0xc736e6c0 sched_switch(c736e6c0,0,104,191,e9487507,...) at sched_switch+0x406 mi_switch(104,0,c0ca73ce,1eb,0,...) at mi_switch+0x200 sleepq_switch(c736e6c0,0,c0ca73ce,260,c736e6c0,...) at sleepq_switch+0x15f sleepq_wait(c73c8acc,0,f4182cbc,1,0,...) at sleepq_wait+0x63 _cv_wait(c73c8acc,c73c8bfc,c0c9146a,6c,c73c8ad4,...) at _cv_wait+0x240 usb_process(c73c8ac4,f4182d38,c0c9e2f4,343,c7348000,...) at usb_process+0x193 fork_exit(c07c2120,c73c8ac4,f4182d38) at fork_exit+0xb8 fork_trampoline() at fork_trampoline+0x8 --- trap 0, eip = 0, esp = 0xf4182d70, ebp = 0 --- Tracing command usb pid 14 tid 100049 td 0xc736e900 sched_switch(c736e900,0,104,191,e9486132,...) at sched_switch+0x406 mi_switch(104,0,c0ca73ce,1eb,0,...) at mi_switch+0x200 sleepq_switch(c736e900,0,c0ca73ce,260,c736e900,...) at sleepq_switch+0x15f sleepq_wait(c73c4b5c,0,f417ecbc,1,0,...) at sleepq_wait+0x63 _cv_wait(c73c4b5c,c73c4bfc,c0c9146a,6c,c73c4b64,...) at _cv_wait+0x240 usb_process(c73c4b54,f417ed38,c0c9e2f4,343,c7348000,...) at usb_process+0x193 fork_exit(c07c2120,c73c4b54,f417ed38) at fork_exit+0xb8 fork_trampoline() at fork_trampoline+0x8 --- trap 0, eip = 0, esp = 0xf417ed70, ebp = 0 --- Tracing command usb pid 14 tid 100048 td 0xc736eb40 sched_switch(c736eb40,0,104,191,25626928,...) at sched_switch+0x406 mi_switch(104,0,c0ca73ce,1eb,0,...) at mi_switch+0x200 sleepq_switch(c736eb40,0,c0ca73ce,260,c736eb40,...) at sleepq_switch+0x15f sleepq_wait(c73c4b2c,0,f417bcbc,1,0,...) at sleepq_wait+0x63 _cv_wait(c73c4b2c,c73c4bfc,c0c9146a,6c,c73c4b34,...) at _cv_wait+0x240 usb_process(c73c4b24,f417bd38,c0c9e2f4,343,c7348000,...) at usb_process+0x193 fork_exit(c07c2120,c73c4b24,f417bd38) at fork_exit+0xb8 fork_trampoline() at fork_trampoline+0x8 --- trap 0, eip = 0, esp = 0xf417bd70, ebp = 0 --- Tracing command usb pid 14 tid 100047 td 0xc736ed80 sched_switch(c736ed80,0,104,191,e8e4e252,...) at sched_switch+0x406 mi_switch(104,0,c0ca73ce,1eb,0,...) at mi_switch+0x200 sleepq_switch(c736ed80,0,c0ca73ce,260,c736ed80,...) at sleepq_switch+0x15f sleepq_wait(c73c4afc,0,f4178cbc,1,0,...) at sleepq_wait+0x63 _cv_wait(c73c4afc,c73c4bfc,c0c9146a,6c,c73c4b04,...) at _cv_wait+0x240 usb_process(c73c4af4,f4178d38,c0c9e2f4,343,c7348000,...) at usb_process+0x193 fork_exit(c07c2120,c73c4af4,f4178d38) at fork_exit+0xb8 fork_trampoline() at fork_trampoline+0x8 --- trap 0, eip = 0, esp = 0xf4178d70, ebp = 0 --- Tracing command usb pid 14 tid 100046 td 0xc73bb000 sched_switch(c73bb000,0,104,191,e8e4d164,...) at sched_switch+0x406 mi_switch(104,0,c0ca73ce,1eb,0,...) at mi_switch+0x200 sleepq_switch(c73bb000,0,c0ca73ce,260,c73bb000,...) at sleepq_switch+0x15f sleepq_wait(c73c4acc,0,f4175cbc,1,0,...) at sleepq_wait+0x63 _cv_wait(c73c4acc,c73c4bfc,c0c9146a,6c,c73c4ad4,...) at _cv_wait+0x240 usb_process(c73c4ac4,f4175d38,c0c9e2f4,343,c7348000,...) at usb_process+0x193 fork_exit(c07c2120,c73c4ac4,f4175d38) at fork_exit+0xb8 fork_trampoline() at fork_trampoline+0x8 --- trap 0, eip = 0, esp = 0xf4175d70, ebp = 0 --- Tracing command usb pid 14 tid 100045 td 0xc73bb240 sched_switch(c73bb240,0,104,191,e8e4bebf,...) at sched_switch+0x406 mi_switch(104,0,c0ca73ce,1eb,0,...) at mi_switch+0x200 sleepq_switch(c73bb240,0,c0ca73ce,260,c73bb240,...) at sleepq_switch+0x15f sleepq_wait(c73bdb5c,0,f4171cbc,1,0,...) at sleepq_wait+0x63 _cv_wait(c73bdb5c,c73bdbfc,c0c9146a,6c,c73bdb64,...) at _cv_wait+0x240 usb_process(c73bdb54,f4171d38,c0c9e2f4,343,c7348000,...) at usb_process+0x193 fork_exit(c07c2120,c73bdb54,f4171d38) at fork_exit+0xb8 fork_trampoline() at fork_trampoline+0x8 --- trap 0, eip = 0, esp = 0xf4171d70, ebp = 0 --- Tracing command usb pid 14 tid 100044 td 0xc73bb480 sched_switch(c73bb480,0,104,191,252b7914,...) at sched_switch+0x406 mi_switch(104,0,c0ca73ce,1eb,0,...) at mi_switch+0x200 sleepq_switch(c73bb480,0,c0ca73ce,260,c73bb480,...) at sleepq_switch+0x15f sleepq_wait(c73bdb2c,0,f416ecbc,1,0,...) at sleepq_wait+0x63 _cv_wait(c73bdb2c,c73bdbfc,c0c9146a,6c,c73bdb34,...) at _cv_wait+0x240 usb_process(c73bdb24,f416ed38,c0c9e2f4,343,c7348000,...) at usb_process+0x193 fork_exit(c07c2120,c73bdb24,f416ed38) at fork_exit+0xb8 fork_trampoline() at fork_trampoline+0x8 --- trap 0, eip = 0, esp = 0xf416ed70, ebp = 0 --- Tracing command usb pid 14 tid 100043 td 0xc73bb6c0 sched_switch(c73bb6c0,0,104,191,e88118a2,...) at sched_switch+0x406 mi_switch(104,0,c0ca73ce,1eb,0,...) at mi_switch+0x200 sleepq_switch(c73bb6c0,0,c0ca73ce,260,c73bb6c0,...) at sleepq_switch+0x15f sleepq_wait(c73bdafc,0,f416bcbc,1,0,...) at sleepq_wait+0x63 _cv_wait(c73bdafc,c73bdbfc,c0c9146a,6c,c73bdb04,...) at _cv_wait+0x240 usb_process(c73bdaf4,f416bd38,c0c9e2f4,343,c7348000,...) at usb_process+0x193 fork_exit(c07c2120,c73bdaf4,f416bd38) at fork_exit+0xb8 fork_trampoline() at fork_trampoline+0x8 --- trap 0, eip = 0, esp = 0xf416bd70, ebp = 0 --- Tracing command usb pid 14 tid 100042 td 0xc73bb900 sched_switch(c73bb900,0,104,191,e8810700,...) at sched_switch+0x406 mi_switch(104,0,c0ca73ce,1eb,0,...) at mi_switch+0x200 sleepq_switch(c73bb900,0,c0ca73ce,260,c73bb900,...) at sleepq_switch+0x15f sleepq_wait(c73bdacc,0,f4168cbc,1,0,...) at sleepq_wait+0x63 _cv_wait(c73bdacc,c73bdbfc,c0c9146a,6c,c73bdad4,...) at _cv_wait+0x240 usb_process(c73bdac4,f4168d38,c0c9e2f4,343,c7348000,...) at usb_process+0x193 fork_exit(c07c2120,c73bdac4,f4168d38) at fork_exit+0xb8 fork_trampoline() at fork_trampoline+0x8 --- trap 0, eip = 0, esp = 0xf4168d70, ebp = 0 --- Tracing command usb pid 14 tid 100040 td 0xc73bbd80 sched_switch(c73bbd80,0,104,191,e880f376,...) at sched_switch+0x406 mi_switch(104,0,c0ca73ce,1eb,0,...) at mi_switch+0x200 sleepq_switch(c73bbd80,0,c0ca73ce,260,c73bbd80,...) at sleepq_switch+0x15f sleepq_wait(c73b8b5c,0,f4161cbc,1,0,...) at sleepq_wait+0x63 _cv_wait(c73b8b5c,c73b8bfc,c0c9146a,6c,c73b8b64,...) at _cv_wait+0x240 usb_process(c73b8b54,f4161d38,c0c9e2f4,343,c7348000,...) at usb_process+0x193 fork_exit(c07c2120,c73b8b54,f4161d38) at fork_exit+0xb8 fork_trampoline() at fork_trampoline+0x8 --- trap 0, eip = 0, esp = 0xf4161d70, ebp = 0 --- Tracing command usb pid 14 tid 100039 td 0xc73bc000 sched_switch(c73bc000,0,104,191,24d92523,...) at sched_switch+0x406 mi_switch(104,0,c0ca73ce,1eb,0,...) at mi_switch+0x200 sleepq_switch(c73bc000,0,c0ca73ce,260,c73bc000,...) at sleepq_switch+0x15f sleepq_wait(c73b8b2c,0,f415ecbc,1,0,...) at sleepq_wait+0x63 _cv_wait(c73b8b2c,c73b8bfc,c0c9146a,6c,c73b8b34,...) at _cv_wait+0x240 usb_process(c73b8b24,f415ed38,c0c9e2f4,343,c7348000,...) at usb_process+0x193 fork_exit(c07c2120,c73b8b24,f415ed38) at fork_exit+0xb8 fork_trampoline() at fork_trampoline+0x8 --- trap 0, eip = 0, esp = 0xf415ed70, ebp = 0 --- Tracing command usb pid 14 tid 100038 td 0xc7352d80 sched_switch(c7352d80,0,104,191,e81d040d,...) at sched_switch+0x406 mi_switch(104,0,c0ca73ce,1eb,0,...) at mi_switch+0x200 sleepq_switch(c7352d80,0,c0ca73ce,260,c7352d80,...) at sleepq_switch+0x15f sleepq_wait(c73b8afc,0,f415bcbc,1,0,...) at sleepq_wait+0x63 _cv_wait(c73b8afc,c73b8bfc,c0c9146a,6c,c73b8b04,...) at _cv_wait+0x240 usb_process(c73b8af4,f415bd38,c0c9e2f4,343,c7348000,...) at usb_process+0x193 fork_exit(c07c2120,c73b8af4,f415bd38) at fork_exit+0xb8 fork_trampoline() at fork_trampoline+0x8 --- trap 0, eip = 0, esp = 0xf415bd70, ebp = 0 --- Tracing command usb pid 14 tid 100037 td 0xc736c000 sched_switch(c736c000,0,104,191,e81cf168,...) at sched_switch+0x406 mi_switch(104,0,c0ca73ce,1eb,0,...) at mi_switch+0x200 sleepq_switch(c736c000,0,c0ca73ce,260,c736c000,...) at sleepq_switch+0x15f sleepq_wait(c73b8acc,0,f4158cbc,1,0,...) at sleepq_wait+0x63 _cv_wait(c73b8acc,c73b8bfc,c0c9146a,6c,c73b8ad4,...) at _cv_wait+0x240 usb_process(c73b8ac4,f4158d38,c0c9e2f4,343,c7348000,...) at usb_process+0x193 fork_exit(c07c2120,c73b8ac4,f4158d38) at fork_exit+0xb8 fork_trampoline() at fork_trampoline+0x8 --- trap 0, eip = 0, esp = 0xf4158d70, ebp = 0 --- Tracing command usb pid 14 tid 100035 td 0xc736c480 sched_switch(c736c480,0,104,191,e81cdd82,...) at sched_switch+0x406 mi_switch(104,0,c0ca73ce,1eb,0,...) at mi_switch+0x200 sleepq_switch(c736c480,0,c0ca73ce,260,c736c480,...) at sleepq_switch+0x15f sleepq_wait(c73a9b5c,0,f4151cbc,1,0,...) at sleepq_wait+0x63 _cv_wait(c73a9b5c,c73a9bfc,c0c9146a,6c,c73a9b64,...) at _cv_wait+0x240 usb_process(c73a9b54,f4151d38,c0c9e2f4,343,c7348000,...) at usb_process+0x193 fork_exit(c07c2120,c73a9b54,f4151d38) at fork_exit+0xb8 fork_trampoline() at fork_trampoline+0x8 --- trap 0, eip = 0, esp = 0xf4151d70, ebp = 0 --- Tracing command usb pid 14 tid 100034 td 0xc736c6c0 sched_switch(c736c6c0,0,104,191,24a23994,...) at sched_switch+0x406 mi_switch(104,0,c0ca73ce,1eb,0,...) at mi_switch+0x200 sleepq_switch(c736c6c0,0,c0ca73ce,260,c736c6c0,...) at sleepq_switch+0x15f sleepq_wait(c73a9b2c,0,f414ecbc,1,0,...) at sleepq_wait+0x63 _cv_wait(c73a9b2c,c73a9bfc,c0c9146a,6c,c73a9b34,...) at _cv_wait+0x240 usb_process(c73a9b24,f414ed38,c0c9e2f4,343,c7348000,...) at usb_process+0x193 fork_exit(c07c2120,c73a9b24,f414ed38) at fork_exit+0xb8 fork_trampoline() at fork_trampoline+0x8 --- trap 0, eip = 0, esp = 0xf414ed70, ebp = 0 --- Tracing command usb pid 14 tid 100033 td 0xc736c900 sched_switch(c736c900,0,104,191,e7b37025,...) at sched_switch+0x406 mi_switch(104,0,c0ca73ce,1eb,0,...) at mi_switch+0x200 sleepq_switch(c736c900,0,c0ca73ce,260,c736c900,...) at sleepq_switch+0x15f sleepq_wait(c73a9afc,0,f414bcbc,1,0,...) at sleepq_wait+0x63 _cv_wait(c73a9afc,c73a9bfc,c0c9146a,6c,c73a9b04,...) at _cv_wait+0x240 usb_process(c73a9af4,f414bd38,c0c9e2f4,343,c7348000,...) at usb_process+0x193 fork_exit(c07c2120,c73a9af4,f414bd38) at fork_exit+0xb8 fork_trampoline() at fork_trampoline+0x8 --- trap 0, eip = 0, esp = 0xf414bd70, ebp = 0 --- Tracing command usb pid 14 tid 100032 td 0xc736cb40 sched_switch(c736cb40,0,104,191,e7b35d11,...) at sched_switch+0x406 mi_switch(104,0,c0ca73ce,1eb,0,...) at mi_switch+0x200 sleepq_switch(c736cb40,0,c0ca73ce,260,c736cb40,...) at sleepq_switch+0x15f sleepq_wait(c73a9acc,0,f4148cbc,1,0,...) at sleepq_wait+0x63 _cv_wait(c73a9acc,c73a9bfc,c0c9146a,6c,c73a9ad4,...) at _cv_wait+0x240 usb_process(c73a9ac4,f4148d38,c0c9e2f4,343,c7348000,...) at usb_process+0x193 fork_exit(c07c2120,c73a9ac4,f4148d38) at fork_exit+0xb8 fork_trampoline() at fork_trampoline+0x8 --- trap 0, eip = 0, esp = 0xf4148d70, ebp = 0 --- Tracing command xpt_thrd pid 5 tid 100023 td 0xc7352000 sched_switch(c7352000,0,104,191,e7b343a1,...) at sched_switch+0x406 mi_switch(104,0,c0ca73ce,1eb,4c,...) at mi_switch+0x200 sleepq_switch(c7352000,0,c0ca73ce,260,0,...) at sleepq_switch+0x15f sleepq_wait(c0dcc4d4,4c,c0c3ce3a,0,0,...) at sleepq_wait+0x63 _sleep(c0dcc4d4,c0dcc4ec,4c,c0c3ce3a,0,...) at _sleep+0x36b xpt_scanner_thread(0,c6e41d38,c0c9e2f4,343,c73482a8,...) at xpt_scanner_thread+0x4a fork_exit(c04849a0,0,c6e41d38) at fork_exit+0xb8 fork_trampoline() at fork_trampoline+0x8 --- trap 0, eip = 0, esp = 0xc6e41d70, ebp = 0 --- Tracing command yarrow pid 13 tid 100017 td 0xc717d240 sched_switch(c717d240,0,104,191,fff28da9,...) at sched_switch+0x406 mi_switch(104,0,c0ca73ce,1eb,0,...) at mi_switch+0x200 sleepq_switch(c717d240,0,c0ca73ce,283,2,...) at sleepq_switch+0x15f sleepq_timedwait(c0e00124,0,c0c9877a,2,0,...) at sleepq_timedwait+0x6b _sleep(c0e00124,0,0,c0c9877a,64,...) at _sleep+0x339 pause(c0c9877a,64,c0c85165,111,0,...) at pause+0x47 random_kthread(0,c6e2fd38,c0c9e2f4,343,c7348550,...) at random_kthread+0x1ef fork_exit(c0738c80,0,c6e2fd38) at fork_exit+0xb8 fork_trampoline() at fork_trampoline+0x8 --- trap 0, eip = 0, esp = 0xc6e2fd70, ebp = 0 --- Tracing command g_down pid 4 tid 100015 td 0xc717d6c0 sched_switch(c717d6c0,0,104,191,a33a188f,...) at sched_switch+0x406 mi_switch(104,0,c0ca73ce,1eb,4c,...) at mi_switch+0x200 sleepq_switch(c717d6c0,0,c0ca73ce,260,0,...) at sleepq_switch+0x15f sleepq_wait(c0dfdee4,4c,c0c9877a,0,0,...) at sleepq_wait+0x63 _sleep(c0dfdee4,c0dfde48,24c,c0c9877a,0,...) at _sleep+0x36b g_io_schedule_down(c717d6c0,0,c0c99e42,74,0,...) at g_io_schedule_down+0x56 g_down_procbody(0,c6e29d38,c0c9e2f4,343,c7179000,...) at g_down_procbody+0x8d fork_exit(c082e660,0,c6e29d38) at fork_exit+0xb8 fork_trampoline() at fork_trampoline+0x8 --- trap 0, eip = 0, esp = 0xc6e29d70, ebp = 0 --- Tracing command g_up pid 3 tid 100014 td 0xc717d900 sched_switch(c717d900,0,104,191,a3637359,...) at sched_switch+0x406 mi_switch(104,0,c0ca73ce,1eb,4c,...) at mi_switch+0x200 sleepq_switch(c717d900,0,c0ca73ce,260,0,...) at sleepq_switch+0x15f sleepq_wait(c0dfdee0,4c,c0c9877a,0,0,...) at sleepq_wait+0x63 _sleep(c0dfdee0,c0dfde68,24c,c0c9877a,0,...) at _sleep+0x36b g_io_schedule_up(c717d900,0,c0c99e42,5d,0,...) at g_io_schedule_up+0x11e g_up_procbody(0,c6e26d38,c0c9e2f4,343,c71792a8,...) at g_up_procbody+0x8d fork_exit(c082e6f0,0,c6e26d38) at fork_exit+0xb8 fork_trampoline() at fork_trampoline+0x8 --- trap 0, eip = 0, esp = 0xc6e26d70, ebp = 0 --- Tracing command g_event pid 2 tid 100013 td 0xc717db40 sched_switch(c717db40,0,104,191,fefd2f21,...) at sched_switch+0x406 mi_switch(104,0,c0ca73ce,1eb,4c,...) at mi_switch+0x200 sleepq_switch(c717db40,0,c0ca73ce,283,0,...) at sleepq_switch+0x15f sleepq_timedwait(c0dfded8,4c,c0c9877a,0,0,...) at sleepq_timedwait+0x6b _sleep(c0dfded8,0,4c,c0c9877a,64,...) at _sleep+0x339 g_event_procbody(0,c6e23d38,c0c9e2f4,343,c7179550,...) at g_event_procbody+0xcb fork_exit(c082e780,0,c6e23d38) at fork_exit+0xb8 fork_trampoline() at fork_trampoline+0x8 --- trap 0, eip = 0, esp = 0xc6e23d70, ebp = 0 --- Tracing command intr pid 12 tid 100066 td 0xc74eb900 fork_trampoline() at fork_trampoline Tracing command intr pid 12 tid 100065 td 0xc74ebb40 sched_switch(c74ebb40,0,109,191,e7aee2d6,...) at sched_switch+0x406 mi_switch(109,0,c0c9e573,52d,c7177070,...) at mi_switch+0x200 ithread_loop(c74e24b0,f41c6d38,c0c9e2f4,343,c71797f8,...) at ithread_loop+0x1f6 fork_exit(c086a540,c74e24b0,f41c6d38) at fork_exit+0xb8 fork_trampoline() at fork_trampoline+0x8 --- trap 0, eip = 0, esp = 0xf41c6d70, ebp = 0 --- Tracing command intr pid 12 tid 100063 td 0xc73bc240 sched_switch(c73bc240,0,109,191,a36764c7,...) at sched_switch+0x406 mi_switch(109,0,c0c9e573,52d,c74dc7f0,...) at mi_switch+0x200 ithread_loop(c74e2760,f41b6d38,c0c9e2f4,343,c71797f8,...) at ithread_loop+0x1f6 fork_exit(c086a540,c74e2760,f41b6d38) at fork_exit+0xb8 fork_trampoline() at fork_trampoline+0x8 --- trap 0, eip = 0, esp = 0xf41b6d70, ebp = 0 --- Tracing command intr pid 12 tid 100060 td 0xc73bc900 sched_switch(c73bc900,0,109,191,e771e6d9,...) at sched_switch+0x406 mi_switch(109,0,c0c9e573,52d,c71c00f0,...) at mi_switch+0x200 ithread_loop(c73edc00,f41aad38,c0c9e2f4,343,c71797f8,...) at ithread_loop+0x1f6 fork_exit(c086a540,c73edc00,f41aad38) at fork_exit+0xb8 fork_trampoline() at fork_trampoline+0x8 --- trap 0, eip = 0, esp = 0xf41aad70, ebp = 0 --- Tracing command intr pid 12 tid 100059 td 0xc73bcb40 sched_switch(c73bcb40,0,109,191,5739e94d,...) at sched_switch+0x406 mi_switch(109,0,c0c9e573,52d,c71c03f0,...) at mi_switch+0x200 ithread_loop(c73ed460,f41a2d38,c0c9e2f4,343,c71797f8,...) at ithread_loop+0x1f6 fork_exit(c086a540,c73ed460,f41a2d38) at fork_exit+0xb8 fork_trampoline() at fork_trampoline+0x8 --- trap 0, eip = 0, esp = 0xf41a2d70, ebp = 0 --- Tracing command intr pid 12 tid 100054 td 0xc73ce6c0 fork_trampoline() at fork_trampoline Tracing command intr pid 12 tid 100041 td 0xc73bbb40 sched_switch(c73bbb40,0,109,191,d300ea9,...) at sched_switch+0x406 mi_switch(109,0,c0c9e573,52d,c71c01f0,...) at mi_switch+0x200 ithread_loop(c73a1720,f4165d38,c0c9e2f4,343,c71797f8,...) at ithread_loop+0x1f6 fork_exit(c086a540,c73a1720,f4165d38) at fork_exit+0xb8 fork_trampoline() at fork_trampoline+0x8 --- trap 0, eip = 0, esp = 0xf4165d70, ebp = 0 --- Tracing command intr pid 12 tid 100036 td 0xc736c240 sched_switch(c736c240,0,109,191,c7e2f2c,...) at sched_switch+0x406 mi_switch(109,0,c0c9e573,52d,c71c0270,...) at mi_switch+0x200 ithread_loop(c73a1a40,f4155d38,c0c9e2f4,343,c71797f8,...) at ithread_loop+0x1f6 fork_exit(c086a540,c73a1a40,f4155d38) at fork_exit+0xb8 fork_trampoline() at fork_trampoline+0x8 --- trap 0, eip = 0, esp = 0xf4155d70, ebp = 0 --- Tracing command intr pid 12 tid 100031 td 0xc736cd80 sched_switch(c736cd80,0,109,191,649c42d9,...) at sched_switch+0x406 mi_switch(109,0,c0c9e573,52d,c71c02f0,...) at mi_switch+0x200 ithread_loop(c73af120,f4145d38,c0c9e2f4,343,c71797f8,...) at ithread_loop+0x1f6 fork_exit(c086a540,c73af120,f4145d38) at fork_exit+0xb8 fork_trampoline() at fork_trampoline+0x8 --- trap 0, eip = 0, esp = 0xf4145d70, ebp = 0 --- Tracing command intr pid 12 tid 100030 td 0xc736e000 sched_switch(c736e000,0,109,191,a3628196,...) at sched_switch+0x406 mi_switch(109,0,c0c9e573,52d,c71bfef0,...) at mi_switch+0x200 ithread_loop(c73a1510,c6f87d38,c0c9e2f4,343,c71797f8,...) at ithread_loop+0x1f6 fork_exit(c086a540,c73a1510,c6f87d38) at fork_exit+0xb8 fork_trampoline() at fork_trampoline+0x8 --- trap 0, eip = 0, esp = 0xc6f87d70, ebp = 0 --- Tracing command intr pid 12 tid 100029 td 0xc736e240 sched_switch(c736e240,0,109,191,5da4a963,...) at sched_switch+0x406 mi_switch(109,0,c0c9e573,52d,c738e170,...) at mi_switch+0x200 ithread_loop(c738f8f0,c6e81d38,c0c9e2f4,343,c71797f8,...) at ithread_loop+0x1f6 fork_exit(c086a540,c738f8f0,c6e81d38) at fork_exit+0xb8 fork_trampoline() at fork_trampoline+0x8 --- trap 0, eip = 0, esp = 0xc6e81d70, ebp = 0 --- Tracing command intr pid 12 tid 100028 td 0xc736e480 sched_switch(c736e480,0,109,191,e7af87af,...) at sched_switch+0x406 mi_switch(109,0,c0c9e573,52d,c7176b70,...) at mi_switch+0x200 ithread_loop(c7178610,c6e77d38,c0c9e2f4,343,c71797f8,...) at ithread_loop+0x1f6 fork_exit(c086a540,c7178610,c6e77d38) at fork_exit+0xb8 fork_trampoline() at fork_trampoline+0x8 --- trap 0, eip = 0, esp = 0xc6e77d70, ebp = 0 --- Tracing command intr pid 12 tid 100024 td 0xc7201d80 sched_switch(c7201d80,0,109,191,dc00f49,...) at sched_switch+0x406 mi_switch(109,0,c0c9e573,52d,c73537f0,...) at mi_switch+0x200 ithread_loop(c71783c0,c6e44d38,c0c9e2f4,343,c71797f8,...) at ithread_loop+0x1f6 fork_exit(c086a540,c71783c0,c6e44d38) at fork_exit+0xb8 fork_trampoline() at fork_trampoline+0x8 --- trap 0, eip = 0, esp = 0xc6e44d70, ebp = 0 --- Tracing command intr pid 12 tid 100022 td 0xc7352240 sched_switch(c7352240,0,109,191,5ce67ec3,...) at sched_switch+0x406 mi_switch(109,0,c0c9e573,52d,c7353970,...) at mi_switch+0x200 ithread_loop(c710ea10,c6e3ed38,c0c9e2f4,343,c71797f8,...) at ithread_loop+0x1f6 fork_exit(c086a540,c710ea10,c6e3ed38) at fork_exit+0xb8 fork_trampoline() at fork_trampoline+0x8 --- trap 0, eip = 0, esp = 0xc6e3ed70, ebp = 0 --- Tracing command intr pid 12 tid 100021 td 0xc7352480 fork_trampoline() at fork_trampoline Tracing command intr pid 12 tid 100019 td 0xc7352900 fork_trampoline() at fork_trampoline Tracing command intr pid 12 tid 100012 td 0xc717dd80 fork_trampoline() at fork_trampoline Tracing command intr pid 12 tid 100011 td 0xc7201000 fork_trampoline() at fork_trampoline Tracing command intr pid 12 tid 100010 td 0xc7201240 sched_switch(c7201240,0,109,191,c54034b5,...) at sched_switch+0x406 mi_switch(109,0,c0c9e573,52d,c71bfc70,...) at mi_switch+0x200 ithread_loop(c71781e0,c6e1ad38,c0c9e2f4,343,c71797f8,...) at ithread_loop+0x1f6 fork_exit(c086a540,c71781e0,c6e1ad38) at fork_exit+0xb8 fork_trampoline() at fork_trampoline+0x8 --- trap 0, eip = 0, esp = 0xc6e1ad70, ebp = 0 --- Tracing command intr pid 12 tid 100009 td 0xc7201480 sched_switch(c7201480,0,109,191,f9b6d51a,...) at sched_switch+0x406 mi_switch(109,0,c0c9e573,52d,c71bfcf0,...) at mi_switch+0x200 ithread_loop(c71781f0,c6e17d38,c0c9e2f4,343,c71797f8,...) at ithread_loop+0x1f6 fork_exit(c086a540,c71781f0,c6e17d38) at fork_exit+0xb8 fork_trampoline() at fork_trampoline+0x8 --- trap 0, eip = 0, esp = 0xc6e17d70, ebp = 0 --- Tracing command intr pid 12 tid 100008 td 0xc717b000 sched_switch(c717b000,0,109,191,fefd2dd1,...) at sched_switch+0x406 mi_switch(109,0,c0c9e573,52d,c71bfd70,...) at mi_switch+0x200 ithread_loop(c7178200,c6e14d38,c0c9e2f4,343,c71797f8,...) at ithread_loop+0x1f6 fork_exit(c086a540,c7178200,c6e14d38) at fork_exit+0xb8 fork_trampoline() at fork_trampoline+0x8 --- trap 0, eip = 0, esp = 0xc6e14d70, ebp = 0 --- Tracing command intr pid 12 tid 100007 td 0xc717b240 sched_switch(c717b240,0,109,191,5be7aee,...) at sched_switch+0x406 mi_switch(109,0,c0c9e573,52d,c71bfdf0,...) at mi_switch+0x200 ithread_loop(c7178210,c6e11d38,c0c9e2f4,343,c71797f8,...) at ithread_loop+0x1f6 fork_exit(c086a540,c7178210,c6e11d38) at fork_exit+0xb8 fork_trampoline() at fork_trampoline+0x8 --- trap 0, eip = 0, esp = 0xc6e11d70, ebp = 0 --- Tracing command idle pid 11 tid 100006 td 0xc717b480 cpustop_handler(1,c6e0dc20,c0bcfbc6,c089e868,0,...) at cpustop_handler+0x32 ipi_nmi_handler(c089e868,0,80000000,369e99,c7179aa0,...) at ipi_nmi_handler+0x2f trap(c6e0dc2c) at trap+0x36 calltrap() at calltrap+0x6 --- trap 0x13, eip = 0xc0ba6425, esp = 0xc6e0dc6c, ebp = 0xc6e0dc6c --- acpi_cpu_c1(0,c6e0dcd4,0,ffffffff,c6e0dcb4,...) at acpi_cpu_c1+0x5 acpi_cpu_idle(ffffffff,0,c6e0dcb4,c0bbdb7b,0,...) at acpi_cpu_idle+0x11c cpu_idle_amdc1e(0,c6e0dcf8,c08b520e,0,c6e0dcd4,...) at cpu_idle_amdc1e+0x56 cpu_idle(0,c6e0dcd4,c0ca49c0,a09,c717b480,...) at cpu_idle+0x1b sched_idletd(0,c6e0dd38,c0c9e2f4,343,c7179aa0,...) at sched_idletd+0x23e fork_exit(c08b4fd0,0,c6e0dd38) at fork_exit+0xb8 fork_trampoline() at fork_trampoline+0x8 --- trap 0, eip = 0, esp = 0xc6e0dd70, ebp = 0 --- Tracing command idle pid 11 tid 100005 td 0xc717b6c0 kdb_enter(c0c4b649,c0c8be33,c6e0abd4,c74ce180,0,...) at kdb_enter+0x3a uart_intr(c74ce100,c717b6c0,c71598d0,c7176d80,4,...) at uart_intr+0x126 intr_event_handle(c7176d80,c6e0ac2c,c0f89aac,1f4,c73c2000,...) at intr_event_handle+0x5c intr_execute_handlers(c71598d0,c6e0ac2c,1,c6e0ac6c,c0bb2004,...) at intr_execute_handlers+0x49 lapic_handle_intr(30,c6e0ac2c) at lapic_handle_intr+0x4c Xapic_isr1() at Xapic_isr1+0x34 --- interrupt, eip = 0xc0ba6425, esp = 0xc6e0ac6c, ebp = 0xc6e0ac6c --- acpi_cpu_c1(c0bb221f,c6e0acd4,1,ffffffff,c6e0acb4,...) at acpi_cpu_c1+0x5 acpi_cpu_idle(ffffffff,0,c6e0acb4,c0bbdb7b,1,...) at acpi_cpu_idle+0x11c cpu_idle_amdc1e(1,c6e0acf8,c08b520e,1,c6e0acd4,...) at cpu_idle_amdc1e+0x56 cpu_idle(1,c6e0acd4,c0ca49c0,a09,c717b6c0,...) at cpu_idle+0x1b sched_idletd(0,c6e0ad38,c0c9e2f4,343,c7179aa0,...) at sched_idletd+0x23e fork_exit(c08b4fd0,0,c6e0ad38) at fork_exit+0xb8 fork_trampoline() at fork_trampoline+0x8 --- trap 0, eip = 0, esp = 0xc6e0ad70, ebp = 0 --- Tracing command idle pid 11 tid 100004 td 0xc717b900 cpustop_handler(4,c6e07c20,c0bcfbc6,c6e07bb0,c0881544,...) at cpustop_handler+0x32 ipi_nmi_handler(c6e07bb0,c0881544,c0e00378,4,c7179aa0,...) at ipi_nmi_handler+0x2f trap(c6e07c2c) at trap+0x36 calltrap() at calltrap+0x6 --- trap 0x13, eip = 0xc0ba6425, esp = 0xc6e07c6c, ebp = 0xc6e07c6c --- acpi_cpu_c1(2,c6e07cd4,2,ffffffff,c6e07cb4,...) at acpi_cpu_c1+0x5 acpi_cpu_idle(ffffffff,0,c6e07cb4,c0bbdb7b,0,...) at acpi_cpu_idle+0x11c cpu_idle_amdc1e(0,c6e07cf8,c08b520e,0,c6e07cd4,...) at cpu_idle_amdc1e+0x56 cpu_idle(0,c6e07cd4,c0ca49c0,a09,c717b900,...) at cpu_idle+0x1b sched_idletd(0,c6e07d38,c0c9e2f4,343,c7179aa0,...) at sched_idletd+0x23e fork_exit(c08b4fd0,0,c6e07d38) at fork_exit+0xb8 fork_trampoline() at fork_trampoline+0x8 --- trap 0, eip = 0, esp = 0xc6e07d70, ebp = 0 --- Tracing command idle pid 11 tid 100003 td 0xc717bb40 cpustop_handler(8,c6e04c20,c0bcfbc6,c6e04bb0,c0881544,...) at cpustop_handler+0x32 ipi_nmi_handler(c6e04bb0,c0881544,c0e003b4,4,c7179aa0,...) at ipi_nmi_handler+0x2f trap(c6e04c2c) at trap+0x36 calltrap() at calltrap+0x6 --- trap 0x13, eip = 0xc0ba6425, esp = 0xc6e04c6c, ebp = 0xc6e04c6c --- acpi_cpu_c1(c0bb221f,c6e04cd4,3,ffffffff,c6e04cb4,...) at acpi_cpu_c1+0x5 acpi_cpu_idle(ffffffff,0,c6e04cb4,c0bbdb7b,0,...) at acpi_cpu_idle+0x11c cpu_idle_amdc1e(0,c6e04cf8,c08b520e,0,c6e04cd4,...) at cpu_idle_amdc1e+0x56 cpu_idle(0,c6e04cd4,c0ca49c0,a09,c717bb40,...) at cpu_idle+0x1b sched_idletd(0,c6e04d38,c0c9e2f4,343,c7179aa0,...) at sched_idletd+0x23e fork_exit(c08b4fd0,0,c6e04d38) at fork_exit+0xb8 fork_trampoline() at fork_trampoline+0x8 --- trap 0, eip = 0, esp = 0xc6e04d70, ebp = 0 --- Tracing command init pid 1 tid 100002 td 0xc717bd80 sched_switch(c717bd80,0,104,191,1d44db4e,...) at sched_switch+0x406 mi_switch(104,0,c0ca73ce,1eb,5c,...) at mi_switch+0x200 sleepq_switch(c717bd80,0,c0ca73ce,1a0,5c,...) at sleepq_switch+0x15f sleepq_catch_signals(c0ca73ce,160,0,100,100,...) at sleepq_catch_signals+0xb7 sleepq_wait_sig(c7179d48,5c,c0ca9bdb,100,0,...) at sleepq_wait_sig+0x17 _sleep(c7179d48,c7179dd0,15c,c0ca9bdb,0,...) at _sleep+0x354 kern_wait(c717bd80,ffffffff,c6e00c74,2,0,...) at kern_wait+0xb76 wait4(c717bd80,c6e00cf8,10,c717bd80,c0d8e6c4,...) at wait4+0x3b syscall(c6e00d38) at syscall+0x2b4 Xint0x80_syscall() at Xint0x80_syscall+0x20 --- syscall (7, FreeBSD ELF32, wait4), eip = 0x8054eaf, esp = 0xbfbfe86c, ebp = 0xbfbfe888 --- Tracing command audit pid 10 tid 100001 td 0xc717d000 sched_switch(c717d000,0,104,191,e7b0dd48,...) at sched_switch+0x406 mi_switch(104,0,c0ca73ce,1eb,0,...) at mi_switch+0x200 sleepq_switch(c717d000,0,c0ca73ce,260,c717d000,...) at sleepq_switch+0x15f sleepq_wait(c0f77e80,0,c6dfdc9c,1,0,...) at sleepq_wait+0x63 _cv_wait(c0f77e80,c0f77e64,c0cc7709,194,0,...) at _cv_wait+0x240 audit_worker(0,c6dfdd38,c0c9e2f4,343,c717a000,...) at audit_worker+0x84 fork_exit(c0a9afd0,0,c6dfdd38) at fork_exit+0xb8 fork_trampoline() at fork_trampoline+0x8 --- trap 0, eip = 0, esp = 0xc6dfdd70, ebp = 0 --- Tracing command kernel pid 0 tid 100061 td 0xc73bc6c0 sched_switch(c73bc6c0,0,104,191,fd290893,...) at sched_switch+0x406 mi_switch(104,0,c0ca73ce,1eb,0,...) at mi_switch+0x200 sleepq_switch(c73bc6c0,0,c0ca73ce,260,c73bc6c0,...) at sleepq_switch+0x15f sleepq_wait(c73a3940,0,c0ca3a27,c0c9877a,0,...) at sleepq_wait+0x63 msleep_spin(c73a3940,c73a3958,c0c9877a,0,c0ca1569,...) at msleep_spin+0x21d taskqueue_thread_loop(c73fa49c,f41b0d38,c0c9e2f4,343,c0dfdfc0,...) at taskqueue_thread_loop+0x94 fork_exit(c08ce8f0,c73fa49c,f41b0d38) at fork_exit+0xb8 fork_trampoline() at fork_trampoline+0x8 --- trap 0, eip = 0, esp = 0xf41b0d70, ebp = 0 --- Tracing command kernel pid 0 tid 100027 td 0xc72016c0 sched_switch(c72016c0,0,104,191,54a7ce52,...) at sched_switch+0x406 mi_switch(104,0,c0ca73ce,1eb,0,...) at mi_switch+0x200 sleepq_switch(c72016c0,0,c0ca73ce,260,c72016c0,...) at sleepq_switch+0x15f sleepq_wait(c7346080,0,c0ca3a27,c0c9877a,0,...) at sleepq_wait+0x63 msleep_spin(c7346080,c7346098,c0c9877a,0,c0ca1569,...) at msleep_spin+0x21d taskqueue_thread_loop(c0dcf320,c6e4dd38,c0c9e2f4,343,c0dfdfc0,...) at taskqueue_thread_loop+0x94 fork_exit(c08ce8f0,c0dcf320,c6e4dd38) at fork_exit+0xb8 fork_trampoline() at fork_trampoline+0x8 --- trap 0, eip = 0, esp = 0xc6e4dd70, ebp = 0 --- Tracing command kernel pid 0 tid 100026 td 0xc7201900 sched_switch(c7201900,0,104,191,54a7c044,...) at sched_switch+0x406 mi_switch(104,0,c0ca73ce,1eb,0,...) at mi_switch+0x200 sleepq_switch(c7201900,0,c0ca73ce,260,c7201900,...) at sleepq_switch+0x15f sleepq_wait(c7346080,0,c0ca3a27,c0c9877a,0,...) at sleepq_wait+0x63 msleep_spin(c7346080,c7346098,c0c9877a,0,c0ca1569,...) at msleep_spin+0x21d taskqueue_thread_loop(c0dcf320,c6e4ad38,c0c9e2f4,343,c0dfdfc0,...) at taskqueue_thread_loop+0x94 fork_exit(c08ce8f0,c0dcf320,c6e4ad38) at fork_exit+0xb8 fork_trampoline() at fork_trampoline+0x8 --- trap 0, eip = 0, esp = 0xc6e4ad70, ebp = 0 --- Tracing command kernel pid 0 tid 100025 td 0xc7201b40 sched_switch(c7201b40,0,104,191,54a7adf4,...) at sched_switch+0x406 mi_switch(104,0,c0ca73ce,1eb,0,...) at mi_switch+0x200 sleepq_switch(c7201b40,0,c0ca73ce,260,c7201b40,...) at sleepq_switch+0x15f sleepq_wait(c7346080,0,c0ca3a27,c0c9877a,0,...) at sleepq_wait+0x63 msleep_spin(c7346080,c7346098,c0c9877a,0,c0ca1569,...) at msleep_spin+0x21d taskqueue_thread_loop(c0dcf320,c6e47d38,c0c9e2f4,343,c0dfdfc0,...) at taskqueue_thread_loop+0x94 fork_exit(c08ce8f0,c0dcf320,c6e47d38) at fork_exit+0xb8 fork_trampoline() at fork_trampoline+0x8 --- trap 0, eip = 0, esp = 0xc6e47d70, ebp = 0 --- Tracing command kernel pid 0 tid 100020 td 0xc73526c0 sched_switch(c73526c0,0,104,191,dc1f50a,...) at sched_switch+0x406 mi_switch(104,0,c0ca73ce,1eb,0,...) at mi_switch+0x200 sleepq_switch(c73526c0,0,c0ca73ce,260,0,...) at sleepq_switch+0x15f sleepq_wait(c7346300,0,c0c9877a,0,0,...) at sleepq_wait+0x63 _sleep(c7346300,c7346318,0,c0c9877a,0,...) at _sleep+0x36b taskqueue_thread_loop(c0e12b48,c6e38d38,c0c9e2f4,343,c0dfdfc0,...) at taskqueue_thread_loop+0xba fork_exit(c08ce8f0,c0e12b48,c6e38d38) at fork_exit+0xb8 fork_trampoline() at fork_trampoline+0x8 --- trap 0, eip = 0, esp = 0xc6e38d70, ebp = 0 --- Tracing command kernel pid 0 tid 100018 td 0xc7352b40 sched_switch(c7352b40,0,104,191,549c7f6a,...) at sched_switch+0x406 mi_switch(104,0,c0ca73ce,1eb,0,...) at mi_switch+0x200 sleepq_switch(c7352b40,0,c0ca73ce,260,0,...) at sleepq_switch+0x15f sleepq_wait(c7346580,0,c0c9877a,0,0,...) at sleepq_wait+0x63 _sleep(c7346580,c7346598,0,c0c9877a,0,...) at _sleep+0x36b taskqueue_thread_loop(c0dfe850,c6e32d38,c0c9e2f4,343,c0dfdfc0,...) at taskqueue_thread_loop+0xba fork_exit(c08ce8f0,c0dfe850,c6e32d38) at fork_exit+0xb8 fork_trampoline() at fork_trampoline+0x8 --- trap 0, eip = 0, esp = 0xc6e32d70, ebp = 0 --- Tracing command kernel pid 0 tid 100016 td 0xc717d480 sched_switch(c717d480,0,104,191,159f55cb,...) at sched_switch+0x406 mi_switch(104,0,c0ca73ce,1eb,0,...) at mi_switch+0x200 sleepq_switch(c717d480,0,c0ca73ce,260,0,...) at sleepq_switch+0x15f sleepq_wait(c7160e40,0,c0c9877a,0,0,...) at sleepq_wait+0x63 _sleep(c7160e40,c7160e58,0,c0c9877a,0,...) at _sleep+0x36b taskqueue_thread_loop(c0e115e0,c6e2cd38,c0c9e2f4,343,c0dfdfc0,...) at taskqueue_thread_loop+0xba fork_exit(c08ce8f0,c0e115e0,c6e2cd38) at fork_exit+0xb8 fork_trampoline() at fork_trampoline+0x8 --- trap 0, eip = 0, esp = 0xc6e2cd70, ebp = 0 --- Tracing command kernel pid 0 tid 100000 td 0xc0dfe270 sched_switch(c0dfe270,0,104,191,29c88d25,...) at sched_switch+0x406 mi_switch(104,0,c0ca73ce,1eb,44,...) at mi_switch+0x200 sleepq_switch(c0dfe270,0,c0ca73ce,283,0,...) at sleepq_switch+0x15f sleepq_timedwait(c0dfdfc0,44,c0ca5235,0,0,...) at sleepq_timedwait+0x6b _sleep(c0dfdfc0,0,44,c0ca5235,2710,...) at _sleep+0x339 scheduler(0,141ec00,141ec00,141e000,1425000,...) at scheduler+0x23e mi_startup() at mi_startup+0x96 begin() at begin+0x2c db> call doadump Physical memory: 3439 MB Dumping 123 MB: 108 92 76 60 44 28 12 Dump complete = 0xf db> reset cpu_reset: Restarting BSP cpu_reset_proxy: Stopped CPU 1 \|/-\|/-\|/-\|/-\|/-\|/-\|/-\|/-\|/-\|/-\|/-\|/-\|/-\|/-\|/-\|/-\|/-\|/-\|/-\|/-\|/-\|/-\|/-\|/-\|/-\|//boot/kernel/kernel text=0x8e629c -\|/-\|/-\|/-\|/-\|/-\|/-\|/-\|/-\|/-\|/-\|/-\|/-\|/-\|/-\|/-\|/-\|/-\|/-\|/-\|/-\|/-\|/-\|/-\|/-\|/-\|/-\|/-\|/-\|/-\|/-\|/-\|/-\|/-\|/-\|/-\|/-\|/-\|/-\|/-\|/-\|/-\|/-\|/-\|/-\|/-\|/-\|/-\|/-\|/-\|/-\|/-\|/-\|/-\|/-\|/-\|/-\|/-\|/-\|/-\|/-\|/-\|/-\|/-\|/-\|/-\|/-\|/-\|/-\|/-\|/-\|/-\|/-\|/-\|/-\|/-\|/-\|/-\|/-\|/-\|/-\|/-\|/-\|/-\|/-\|/-\|/-\|/-\|/-\|/-\|/-\|/-\|/-\|/-\|/-\|/-\|/-\|/-\|/-\|/-\|/-\|/-\|/-\|/-\|/-\|/-\|/-\|/-\|/-\|/-\|/-\|/-\|/-\|/-\|/-\|/-\|/-\|/-\|/-\|/-\|/-\|/-\|/-\|/-\|/-\|/-\|/-\|/-\|/-\|/-\|/-\|/-\|/-\|/-\|/-\|/-\|/-\|/-\|/-\|/-\|/-\|/-\|/-\data=0xe51d4+0x201320 |/-\|/-\|/-\|/-\|/-\|/-\|/-\|/-\|/-\|/-\|/-\|/-\|/-\|/-\|/-syms=[0x4+0x9fee0\|/-\|/-\|/-\|/-\|/-\|/-\|/-\|/-\|/-\|/+0x4+0xda906-\|/-\|/-\|/-\|/-\|/-\|/-\|/-\|/-\|/-\|/-\|/-\|/-\|/-\|] /-\|/-\|/-\|/-\|/-\|/-\|/-\|/boot/kernel/snd_hda.ko text=0x18038 /-\|/-data=0x3c4+0x4 syms=[0x4+0x12c0+0x4+0x1562] loading required module 'sound' \|/-\|/-\|/-\|/-\|/-\|/-\|/-/boot/kernel/sound.ko text=0x4b798 \|/-\|/-\|/-\|/-\|/data=0xa464+0x164 -\|syms=[0x4+0x53a0/+0x4+0x6087-\] |/-\|/-\|/-\|/-\|/-\|/-\|/-\|/-\|/-\|/-\|/-\|/-\|/-\|/-\|/-\|/-\|/-\|/-\|/-\|/-\|/-\|/-\|/-\|/-\|/-\|/-\|/-\|/-\|/-\|/-\|/-\|/-\|/-\|/-\|/-\|/-\|/-\|/-\|/-\|/-\|/-\|/-\|/-\|/-\|/-\|/-\|/-\|/-\|/-\|/-\|/-\|/-\|/-\|/-\|/-\|/-\|/-\|/-\|/-\|/-\|/-\|/-\|/-\|/-\|/-\|/-\|/-\|/-\|/-\|/-\|/-\|/-\|/-\|/-\|/-\|/ ______ | ____| __ ___ ___  | |__ | '__/ _ \/ _ \ | __|| | | __/ __/ | | | | | | | |_| |_| \___|\___| ____ _____ _____ | _ \ / ____| __ \ | |_) | (___ | | | | | _ < \___ \| | | | | |_) |____) | |__| | | | | | |____/|_____/|_____/³³³³³³³³³³³³³³³³³³³³³³³³³³³³³³³³³³³³³³ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÚÀ¿ÙWelcome to FreeBSD!1 . Boot FreeBSD [default]2 . Boot FreeBSD with ACPI disabled3 . Boot FreeBSD in Safe Mode4 . Boot FreeBSD in single user mode5 . Boot FreeBSD with verbose logging6 . Escape to loader prompt7 . RebootSelect option, [Enter] for defaultor [Space] to pause timer 10 10 10 10 10 10 10 10 10 10 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 5 5 5 5 5 5 5 5 5 5 5 -\|/-\|GDB: no debug ports present git diff master diff --git a/sys/conf/files b/sys/conf/files index 31d277a..151b41a 100644 --- a/sys/conf/files +++ b/sys/conf/files @@ -2040,6 +2040,7 @@ kern/kern_poll.c optional device_polling kern/kern_priv.c standard kern/kern_proc.c standard kern/kern_prot.c standard +kern/kern_rangelock.c standard kern/kern_resource.c standard kern/kern_rmlock.c standard kern/kern_rwlock.c standard @@ -2731,6 +2732,7 @@ vm/vm_page.c standard vm/vm_pageout.c standard vm/vm_pager.c standard vm/vm_phys.c standard +vm/vm_readwrite.c standard vm/vm_reserv.c standard vm/vm_unix.c standard vm/vm_zeroidle.c standard diff --git a/sys/dev/md/md.c b/sys/dev/md/md.c index 2006099..d3eb99d 100644 --- a/sys/dev/md/md.c +++ b/sys/dev/md/md.c @@ -85,6 +85,7 @@ #include #include #include +#include #include #include #include @@ -587,7 +588,7 @@ mdstart_swap(struct md_s *sc, struct bio *bp) { struct sf_buf *sf; int rv, offs, len, lastend; - vm_pindex_t i, lastp; + vm_pindex_t i, firstp, lastp; vm_page_t m; u_char *p; @@ -610,18 +611,26 @@ mdstart_swap(struct md_s *sc, struct bio *bp) * we're operating on complete aligned pages). */ offs = bp->bio_offset % PAGE_SIZE; + firstp = bp->bio_offset / PAGE_SIZE; lastp = (bp->bio_offset + bp->bio_length - 1) / PAGE_SIZE; lastend = (bp->bio_offset + bp->bio_length - 1) % PAGE_SIZE + 1; + vm_page_t ma[lastp - firstp + 1]; + rv = VM_PAGER_OK; VM_OBJECT_LOCK(sc->object); vm_object_pip_add(sc->object, 1); - for (i = bp->bio_offset / PAGE_SIZE; i <= lastp; i++) { + for (i = firstp; i <= lastp; i++) { len = ((i == lastp) ? lastend : PAGE_SIZE) - offs; - m = vm_page_grab(sc->object, i, - VM_ALLOC_NORMAL|VM_ALLOC_RETRY); + /* + * Write cleans pages of the buffer, give it a + * priority. + */ + m = vm_page_grab(sc->object, i, (bp->bio_cmd == BIO_WRITE ? + VM_ALLOC_SYSTEM : VM_ALLOC_NORMAL) | VM_ALLOC_RETRY); VM_OBJECT_UNLOCK(sc->object); + ma[i - firstp] = m; sched_pin(); sf = sf_buf_alloc(m, SFB_CPUPRIVATE); VM_OBJECT_LOCK(sc->object); @@ -683,6 +692,12 @@ printf("wire_count %d busy %d flags %x hold_count %d act_count %d queue %d valid } vm_object_pip_subtract(sc->object, 1); vm_object_set_writeable_dirty(sc->object); + if (rv != VM_PAGER_ERROR && bp->bio_cmd == BIO_WRITE && + vm_page_count_severe()) { + vm_page_lock_queues(); + vm_pageout_flush(ma, lastp - firstp + 1, IO_SYNC); + vm_page_unlock_queues(); + } VM_OBJECT_UNLOCK(sc->object); return (rv != VM_PAGER_ERROR ? 0 : ENOSPC); } diff --git a/sys/kern/kern_rangelock.c b/sys/kern/kern_rangelock.c new file mode 100644 index 0000000..86f0869 --- /dev/null +++ b/sys/kern/kern_rangelock.c @@ -0,0 +1,186 @@ +/*- + * Copyright (c) 2009 Konstantin Belousov + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice unmodified, this list of conditions, and the following + * disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include +__FBSDID("$FreeBSD$"); + +#include +#include +#include +#include +#include + +uma_zone_t rl_entry_zone; + +static void +rangelock_sys_init(void) +{ + + rl_entry_zone = uma_zcreate("rl_entry", sizeof(struct rl_q_entry), + NULL, NULL, NULL, NULL, UMA_ALIGN_PTR, 0); +} +SYSINIT(vfs, SI_SUB_VFS, SI_ORDER_ANY, rangelock_sys_init, NULL); + +void +rangelock_init(struct rangelock *lock) +{ + + TAILQ_INIT(&lock->rl_waiters); + lock->rl_currdep = NULL; +} + +void +rangelock_destroy(struct rangelock *lock) +{ + + KASSERT(TAILQ_EMPTY(&lock->rl_waiters), ("Dangling waiters")); +} + +static int +rangelock_incompatible(const struct rl_q_entry *e1, + const struct rl_q_entry *e2) +{ + + if ((e1->rl_q_flags & RL_LOCK_TYPE_MASK) == RL_LOCK_READ && + (e2->rl_q_flags & RL_LOCK_TYPE_MASK) == RL_LOCK_READ) + return (0); +#define IN_RANGE(a, e) (a >= e->rl_q_start && a < e->rl_q_end) + if (IN_RANGE(e1->rl_q_start, e2) || IN_RANGE(e2->rl_q_start, e1) || + IN_RANGE(e1->rl_q_end, e2) || IN_RANGE(e2->rl_q_end, e1)) + return (1); +#undef IN_RANGE + return (0); +} + +static void +rangelock_calc_block(struct rangelock *lock) +{ + struct rl_q_entry *entry, *entry1, *whead; + + if (lock->rl_currdep == TAILQ_FIRST(&lock->rl_waiters) && + lock->rl_currdep != NULL) + lock->rl_currdep = TAILQ_NEXT(lock->rl_currdep, rl_q_link); + for (entry = lock->rl_currdep; entry; + entry = TAILQ_NEXT(entry, rl_q_link)) { + TAILQ_FOREACH(entry1, &lock->rl_waiters, rl_q_link) { + if (rangelock_incompatible(entry, entry1)) + goto out; + if (entry1 == entry) + break; + } + } +out: + lock->rl_currdep = entry; + TAILQ_FOREACH(whead, &lock->rl_waiters, rl_q_link) { + if (whead == lock->rl_currdep) + break; + if (!(whead->rl_q_flags & RL_LOCK_GRANTED)) { + whead->rl_q_flags |= RL_LOCK_GRANTED; + wakeup(whead); + } + } +} + +static void +rangelock_unlock_vp_locked(struct vnode *vp, struct rl_q_entry *entry) +{ + + ASSERT_VI_LOCKED(vp, "rangelock"); + KASSERT(entry != vp->v_rl.rl_currdep, ("stuck currdep")); + TAILQ_REMOVE(&vp->v_rl.rl_waiters, entry, rl_q_link); + rangelock_calc_block(&vp->v_rl); + VI_UNLOCK(vp); + uma_zfree(rl_entry_zone, entry); +} + +void +rangelock_unlock(struct vnode *vp, void *cookie) +{ + struct rl_q_entry *entry; + + entry = cookie; + VI_LOCK(vp); + rangelock_unlock_vp_locked(vp, entry); +} + +void * +rangelock_unlock_range(struct vnode *vp, void *cookie, off_t base, size_t len) +{ + struct rl_q_entry *entry; + + entry = cookie; + VI_LOCK(vp); + KASSERT(entry->rl_q_flags & RL_LOCK_GRANTED, ("XXX")); + KASSERT(entry->rl_q_start == base, ("XXX")); + KASSERT(entry->rl_q_end >= base + len, ("XXX")); + if (entry->rl_q_end == base + len) { + rangelock_unlock_vp_locked(vp, cookie); + return (NULL); + } + entry->rl_q_end = base + len; + rangelock_calc_block(&vp->v_rl); + VI_UNLOCK(vp); + return (cookie); +} + +static void * +rangelock_enqueue(struct vnode *vp, struct rl_q_entry *entry) +{ + + VI_LOCK(vp); + TAILQ_INSERT_TAIL(&vp->v_rl.rl_waiters, entry, rl_q_link); + if (vp->v_rl.rl_currdep == NULL) + vp->v_rl.rl_currdep = entry; + rangelock_calc_block(&vp->v_rl); + while (!(entry->rl_q_flags & RL_LOCK_GRANTED)) + msleep(entry, &vp->v_interlock, 0, "range", 0); + VI_UNLOCK(vp); + return (entry); +} + +void * +rangelock_rlock(struct vnode *vp, off_t base, size_t len) +{ + struct rl_q_entry *entry; + + entry = uma_zalloc(rl_entry_zone, M_WAITOK); + entry->rl_q_flags = RL_LOCK_READ; + entry->rl_q_start = base; + entry->rl_q_end = base + len; + return (rangelock_enqueue(vp, entry)); +} + +void * +rangelock_wlock(struct vnode *vp, off_t base, size_t len) +{ + struct rl_q_entry *entry; + + entry = uma_zalloc(rl_entry_zone, M_WAITOK); + entry->rl_q_flags = RL_LOCK_WRITE; + entry->rl_q_start = base; + entry->rl_q_end = base + len; + return (rangelock_enqueue(vp, entry)); +} diff --git a/sys/kern/vfs_cluster.c b/sys/kern/vfs_cluster.c index 1ab263c..d249e44 100644 --- a/sys/kern/vfs_cluster.c +++ b/sys/kern/vfs_cluster.c @@ -71,8 +71,8 @@ static int write_behind = 1; SYSCTL_INT(_vfs, OID_AUTO, write_behind, CTLFLAG_RW, &write_behind, 0, "Cluster write-behind; 0: disable, 1: enable, 2: backed off"); -static int read_max = 8; -SYSCTL_INT(_vfs, OID_AUTO, read_max, CTLFLAG_RW, &read_max, 0, +int vfs_read_max = 8; +SYSCTL_INT(_vfs, OID_AUTO, read_max, CTLFLAG_RW, &vfs_read_max, 0, "Cluster read-ahead max block count"); /* Page expended to mark partially backed buffers */ @@ -109,7 +109,7 @@ cluster_read(vp, filesize, lblkno, size, cred, totread, seqcount, bpp) */ racluster = vp->v_mount->mnt_iosize_max / size; maxra = seqcount; - maxra = min(read_max, maxra); + maxra = min(vfs_read_max, maxra); maxra = min(nbuf/8, maxra); if (((u_quad_t)(lblkno + maxra + 1) * size) > filesize) maxra = (filesize / size) - lblkno; @@ -803,7 +803,9 @@ cluster_wbuild(vp, size, start_lbn, len) (tbp->b_bcount != tbp->b_bufsize) || (tbp->b_bcount != size) || (len == 1) || - ((bp = getpbuf(&cluster_pbuf_freecnt)) == NULL)) { + ((bp = (vp->v_vflag & VV_MD) ? + trypbuf(&cluster_pbuf_freecnt) : + getpbuf(&cluster_pbuf_freecnt)) == NULL)) { totalwritten += tbp->b_bufsize; bawrite(tbp); ++start_lbn; diff --git a/sys/kern/vfs_default.c b/sys/kern/vfs_default.c index b80d03d..3636360 100644 --- a/sys/kern/vfs_default.c +++ b/sys/kern/vfs_default.c @@ -77,6 +77,8 @@ static int dirent_exists(struct vnode *vp, const char *dirname, #define DIRENT_MINSIZE (sizeof(struct dirent) - (MAXNAMLEN+1) + 4) +static int vop_stdextend(struct vop_extend_args *ap); + /* * This vnode table stores what we want to do if the filesystem doesn't * implement a particular VOP. @@ -118,6 +120,7 @@ struct vop_vector default_vnodeops = { .vop_unlock = vop_stdunlock, .vop_vptocnp = vop_stdvptocnp, .vop_vptofh = vop_stdvptofh, + .vop_extend = vop_stdextend, }; /* @@ -825,6 +828,23 @@ out: return (error); } +static int +vop_stdextend(struct vop_extend_args *ap) +{ + struct vattr vattr, oattr; + int error; + + + error = VOP_GETATTR(ap->a_vp, &oattr, ap->a_cred); + if (error != 0) + return (error); + if (oattr.va_size >= ap->a_size) + return (0); + VATTR_NULL(&vattr); + vattr.va_size = ap->a_size; + return (VOP_SETATTR(ap->a_vp, &vattr, ap->a_cred)); +} + /* * vfs default ops * used to fill the vfs function table to get reasonable default return values. diff --git a/sys/kern/vfs_subr.c b/sys/kern/vfs_subr.c index 87328c1..fd975ec 100644 --- a/sys/kern/vfs_subr.c +++ b/sys/kern/vfs_subr.c @@ -66,6 +66,7 @@ __FBSDID("$FreeBSD$"); #include #include #include +#include #include #include #include @@ -823,6 +824,23 @@ static struct kproc_desc vnlru_kp = { SYSINIT(vnlru, SI_SUB_KTHREAD_UPDATE, SI_ORDER_FIRST, kproc_start, &vnlru_kp); +MALLOC_DEFINE(M_RECORD_REF, "recordref", "recordref"); +static void +v_record_ref(struct vnode *vp, int val, const char *op) +{ + struct debug_ref *r; + + if ((vp->v_type != VREG && vp->v_type != VBAD) || + (vp->v_vflag & VV_DEBUGVREF) == 0) + return; + r = malloc(sizeof(struct debug_ref), M_RECORD_REF, M_NOWAIT | + M_USE_RESERVE); + r->val = val; + r->op = op; + stack_save(&r->stack); + TAILQ_INSERT_TAIL(&vp->v_debug_ref, r, link); +} + /* * Routines having to do with the management of the vnode table. */ @@ -831,6 +849,7 @@ void vdestroy(struct vnode *vp) { struct bufobj *bo; + struct debug_ref *r, *r1; CTR2(KTR_VFS, "%s: vp %p", __func__, vp); mtx_lock(&vnode_free_list_mtx); @@ -861,9 +880,13 @@ vdestroy(struct vnode *vp) /* XXX Elsewhere we can detect an already freed vnode via NULL v_op. */ vp->v_op = NULL; #endif + rangelock_destroy(&vp->v_rl); lockdestroy(vp->v_vnlock); mtx_destroy(&vp->v_interlock); mtx_destroy(BO_MTX(bo)); + TAILQ_FOREACH_SAFE(r, &vp->v_debug_ref, link, r1) { + free(r, M_RECORD_REF); + } uma_zfree(vnode_zone, vp); } @@ -1015,6 +1038,8 @@ alloc: if ((mp->mnt_kern_flag & MNTK_NOKNOTE) != 0) vp->v_vflag |= VV_NOKNOTE; } + rangelock_init(&vp->v_rl); + TAILQ_INIT(&vp->v_debug_ref); *vpp = vp; return (0); @@ -2111,6 +2136,7 @@ vget(struct vnode *vp, int flags, struct thread *td) vinactive(vp, td); vp->v_iflag &= ~VI_OWEINACT; } + v_record_ref(vp, 1, "vget"); VI_UNLOCK(vp); return (0); } @@ -2125,6 +2151,7 @@ vref(struct vnode *vp) CTR2(KTR_VFS, "%s: vp %p", __func__, vp); VI_LOCK(vp); v_incr_usecount(vp); + v_record_ref(vp, 1, "vref"); VI_UNLOCK(vp); } @@ -2163,6 +2190,7 @@ vrele(struct vnode *vp) VFS_ASSERT_GIANT(vp->v_mount); VI_LOCK(vp); + v_record_ref(vp, -1, "vrele"); /* Skip this v_writecount check if we're going to panic below. */ VNASSERT(vp->v_writecount < vp->v_usecount || vp->v_usecount < 1, vp, @@ -2224,6 +2252,7 @@ vput(struct vnode *vp) VFS_ASSERT_GIANT(vp->v_mount); CTR2(KTR_VFS, "%s: vp %p", __func__, vp); VI_LOCK(vp); + v_record_ref(vp, -1, "vput"); /* Skip this v_writecount check if we're going to panic below. */ VNASSERT(vp->v_writecount < vp->v_usecount || vp->v_usecount < 1, vp, ("vput: missed vn_close")); @@ -2650,6 +2679,8 @@ vn_printf(struct vnode *vp, const char *fmt, ...) va_list ap; char buf[256], buf2[16]; u_long flags; + int ref; + struct debug_ref *r; va_start(ap, fmt); vprintf(fmt, ap); @@ -2718,6 +2749,13 @@ vn_printf(struct vnode *vp, const char *fmt, ...) lockmgr_printinfo(vp->v_vnlock); if (vp->v_data != NULL) VOP_PRINT(vp); + /* Getnewvnode() initial reference is not recorded due to VNON */ + ref = 1; + TAILQ_FOREACH(r, &vp->v_debug_ref, link) { + ref += r->val; + printf("REF %d %s\n", ref, r->op); + stack_print(&r->stack); + } } #ifdef DDB diff --git a/sys/kern/vfs_vnops.c b/sys/kern/vfs_vnops.c index d0b713c..454f4c8 100644 --- a/sys/kern/vfs_vnops.c +++ b/sys/kern/vfs_vnops.c @@ -37,12 +37,14 @@ #include __FBSDID("$FreeBSD$"); +#include #include #include #include #include #include #include +#include #include #include #include @@ -62,6 +64,13 @@ __FBSDID("$FreeBSD$"); #include +#include +#include + +static int vmio_enabled = 1; +SYSCTL_INT(_vfs, OID_AUTO, vmio_enabled, CTLFLAG_RW, &vmio_enabled, 0, + "Use vm pages copyin/out instead of vops for read/write"); + static fo_rdwr_t vn_read; static fo_rdwr_t vn_write; static fo_truncate_t vn_truncate; @@ -83,6 +92,9 @@ struct fileops vnops = { .fo_flags = DFLAG_PASSABLE | DFLAG_SEEKABLE }; +static int vn_write_chunk(struct vnode *, struct uio *, struct ucred *, + struct ucred *, int); + int vn_open(ndp, flagp, cmode, fp) struct nameidata *ndp; @@ -333,7 +345,7 @@ sequential_heuristic(struct uio *uio, struct file *fp) * closely related to the best I/O size for real disks than * to any block size used by software. */ - fp->f_seqcount += howmany(uio->uio_resid, 16384); + fp->f_seqcount += howmany(uio->uio_resid, FRA_BLOCK_SZ); if (fp->f_seqcount > IO_SEQMAX) fp->f_seqcount = IO_SEQMAX; return (fp->f_seqcount << IO_SEQSHIFT); @@ -351,76 +363,71 @@ sequential_heuristic(struct uio *uio, struct file *fp) * Package up an I/O request on a vnode into a uio and do it. */ int -vn_rdwr(rw, vp, base, len, offset, segflg, ioflg, active_cred, file_cred, - aresid, td) - enum uio_rw rw; - struct vnode *vp; - void *base; - int len; - off_t offset; - enum uio_seg segflg; - int ioflg; - struct ucred *active_cred; - struct ucred *file_cred; - int *aresid; - struct thread *td; +vn_rdwr(enum uio_rw rw, struct vnode *vp, void *base, int len, off_t offset, + enum uio_seg segflg, int ioflg, struct ucred *active_cred, + struct ucred *file_cred, int *aresid, struct thread *td) { struct uio auio; struct iovec aiov; struct mount *mp; struct ucred *cred; + void *rl_cookie; int error, lock_flags; VFS_ASSERT_GIANT(vp->v_mount); + auio.uio_iov = &aiov; + auio.uio_iovcnt = 1; + aiov.iov_base = base; + aiov.iov_len = len; + auio.uio_resid = len; + auio.uio_offset = offset; + auio.uio_segflg = segflg; + auio.uio_rw = rw; + auio.uio_td = td; + error = 0; + if ((ioflg & IO_NODELOCKED) == 0) { + if (rw == UIO_READ) + rl_cookie = rangelock_rlock(vp, offset, len); + else + rl_cookie = rangelock_wlock(vp, offset, len); mp = NULL; if (rw == UIO_WRITE) { if (vp->v_type != VCHR && (error = vn_start_write(vp, &mp, V_WAIT | PCATCH)) != 0) - return (error); + goto out; if (MNT_SHARED_WRITES(mp) || - ((mp == NULL) && MNT_SHARED_WRITES(vp->v_mount))) { + ((mp == NULL) && MNT_SHARED_WRITES(vp->v_mount))) lock_flags = LK_SHARED; - } else { + else lock_flags = LK_EXCLUSIVE; - } - vn_lock(vp, lock_flags | LK_RETRY); } else - vn_lock(vp, LK_SHARED | LK_RETRY); + lock_flags = LK_SHARED; + vn_lock(vp, lock_flags | LK_RETRY); + } else + rl_cookie = NULL; - } ASSERT_VOP_LOCKED(vp, "IO_NODELOCKED with no vp lock held"); - auio.uio_iov = &aiov; - auio.uio_iovcnt = 1; - aiov.iov_base = base; - aiov.iov_len = len; - auio.uio_resid = len; - auio.uio_offset = offset; - auio.uio_segflg = segflg; - auio.uio_rw = rw; - auio.uio_td = td; - error = 0; #ifdef MAC if ((ioflg & IO_NOMACCHECK) == 0) { - if (rw == UIO_READ) - error = mac_vnode_check_read(active_cred, file_cred, - vp); - else + if (rw == UIO_WRITE) error = mac_vnode_check_write(active_cred, file_cred, vp); } #endif if (error == 0) { - if (file_cred) + if (file_cred != NULL) cred = file_cred; else cred = active_cred; if (rw == UIO_READ) - error = VOP_READ(vp, &auio, ioflg, cred); + error = vn_read_chunk(vp, &auio, active_cred, cred, + ioflg | IO_NODELOCKED); else - error = VOP_WRITE(vp, &auio, ioflg, cred); + error = vn_write_chunk(vp, &auio, active_cred, cred, + ioflg | IO_NODELOCKED); } if (aresid) *aresid = auio.uio_resid; @@ -428,10 +435,13 @@ vn_rdwr(rw, vp, base, len, offset, segflg, ioflg, active_cred, file_cred, if (auio.uio_resid && error == 0) error = EIO; if ((ioflg & IO_NODELOCKED) == 0) { - if (rw == UIO_WRITE && vp->v_type != VCHR) - vn_finished_write(mp); VOP_UNLOCK(vp, 0); + if (mp != NULL) + vn_finished_write(mp); } + out: + if (rl_cookie != NULL) + rangelock_unlock(vp, rl_cookie); return (error); } @@ -493,68 +503,148 @@ vn_rdwr_inchunks(rw, vp, base, len, offset, segflg, ioflg, active_cred, return (error); } +static struct mtx * +vn_lock_foffset(struct file *fp) +{ + struct mtx *mtxp; + + mtxp = mtx_pool_find(mtxpool_sleep, fp); + mtx_lock(mtxp); + while (fp->f_vnread_flags & FOFFSET_LOCKED) { + fp->f_vnread_flags |= FOFFSET_LOCK_WAITING; + msleep(&fp->f_vnread_flags, mtxp, PUSER -1, + "vnread offlock", 0); + } + fp->f_vnread_flags |= FOFFSET_LOCKED; + mtx_unlock(mtxp); + return (mtxp); +} + +static void +vn_unlock_foffset(struct file *fp, struct mtx *mtxp) +{ + + mtx_lock(mtxp); + if (fp->f_vnread_flags & FOFFSET_LOCK_WAITING) + wakeup(&fp->f_vnread_flags); + fp->f_vnread_flags = 0; + mtx_unlock(mtxp); +} + +int +vn_read_chunk(struct vnode *vp, struct uio *uio, struct ucred *active_cred, + struct ucred *fcred, int ioflag) +{ + int error, vfslocked; + + error = 0; + vfslocked = 0; /* gcc */ + + if ((ioflag & IO_NODELOCKED) == 0) { + vfslocked = VFS_LOCK_GIANT(vp->v_mount); + vn_lock(vp, LK_SHARED | LK_RETRY); + } + +#ifdef MAC + if ((ioflag & IO_NOMACCHECK) == 0) + error = mac_vnode_check_read(active_cred, fcred, vp); +#endif + if (error == 0) { + if (!vmio_enabled || + (error = vnode_pager_read(vp, uio, ioflag)) == EOPNOTSUPP) + error = VOP_READ(vp, uio, ioflag, fcred); + } + if ((ioflag & IO_NODELOCKED) == 0) { + VOP_UNLOCK(vp, 0); + VFS_UNLOCK_GIANT(vfslocked); + } + return (error); +} + /* * File table vnode read routine. */ static int -vn_read(fp, uio, active_cred, flags, td) - struct file *fp; - struct uio *uio; - struct ucred *active_cred; - struct thread *td; - int flags; +vn_read(struct file *fp, struct uio *uio, struct ucred *active_cred, int flags, + struct thread *td) { struct vnode *vp; - int error, ioflag; struct mtx *mtxp; - int vfslocked; + void *rl_cookie; + int ioflag; + int error; KASSERT(uio->uio_td == td, ("uio_td %p is not td %p", uio->uio_td, td)); - mtxp = NULL; - vp = fp->f_vnode; ioflag = 0; if (fp->f_flag & FNONBLOCK) ioflag |= IO_NDELAY; if (fp->f_flag & O_DIRECT) ioflag |= IO_DIRECT; - vfslocked = VFS_LOCK_GIANT(vp->v_mount); + vp = fp->f_vnode; + /* * According to McKusick the vn lock was protecting f_offset here. * It is now protected by the FOFFSET_LOCKED flag. */ if ((flags & FOF_OFFSET) == 0) { - mtxp = mtx_pool_find(mtxpool_sleep, fp); - mtx_lock(mtxp); - while(fp->f_vnread_flags & FOFFSET_LOCKED) { - fp->f_vnread_flags |= FOFFSET_LOCK_WAITING; - msleep(&fp->f_vnread_flags, mtxp, PUSER -1, - "vnread offlock", 0); - } - fp->f_vnread_flags |= FOFFSET_LOCKED; - mtx_unlock(mtxp); - vn_lock(vp, LK_SHARED | LK_RETRY); + mtxp = vn_lock_foffset(fp); uio->uio_offset = fp->f_offset; } else - vn_lock(vp, LK_SHARED | LK_RETRY); - + mtxp = NULL; /* gcc */ + if (vp->v_type == VREG) + rl_cookie = rangelock_rlock(vp, uio->uio_offset, + uio->uio_resid); + else + rl_cookie = NULL; ioflag |= sequential_heuristic(uio, fp); + error = vn_read_chunk(vp, uio, active_cred, fp->f_cred, ioflag); + fp->f_nextoff = uio->uio_offset; + if (rl_cookie != NULL) + rangelock_unlock(vp, rl_cookie); + if ((flags & FOF_OFFSET) == 0) { + fp->f_offset = uio->uio_offset; + vn_unlock_foffset(fp, mtxp); + } + return (error); +} + +static int +vn_write_chunk(struct vnode *vp, struct uio *uio, struct ucred *active_cred, + struct ucred *fcred, int ioflag) +{ + struct mount *mp, *mp1; + int error, lock_flags, vfslocked; + + mp = NULL; + vfslocked = VFS_LOCK_GIANT(vp->v_mount); + if (vp->v_type == VREG) + bwillwrite(); + if (vp->v_type != VCHR && + (error = vn_start_write(vp, &mp, V_WAIT | PCATCH)) != 0) + goto unlock; + if (MNT_SHARED_WRITES(mp) || + (mp == NULL && (mp1 = vp->v_mount) != NULL && + MNT_SHARED_WRITES(mp1))) + lock_flags = LK_SHARED; + else + lock_flags = LK_EXCLUSIVE; + vn_lock(vp, lock_flags | LK_RETRY); #ifdef MAC - error = mac_vnode_check_read(active_cred, fp->f_cred, vp); - if (error == 0) + error = mac_vnode_check_write(active_cred, fcred, vp); +#else + error = 0; #endif - error = VOP_READ(vp, uio, ioflag, fp->f_cred); - if ((flags & FOF_OFFSET) == 0) { - fp->f_offset = uio->uio_offset; - mtx_lock(mtxp); - if (fp->f_vnread_flags & FOFFSET_LOCK_WAITING) - wakeup(&fp->f_vnread_flags); - fp->f_vnread_flags = 0; - mtx_unlock(mtxp); + if (error == 0) { + if (!vmio_enabled || + (error = vnode_pager_write(vp, uio, ioflag)) == EOPNOTSUPP) + error = VOP_WRITE(vp, uio, ioflag, fcred); } - fp->f_nextoff = uio->uio_offset; VOP_UNLOCK(vp, 0); + if (vp->v_type != VCHR) + vn_finished_write(mp); +unlock: VFS_UNLOCK_GIANT(vfslocked); return (error); } @@ -563,24 +653,17 @@ vn_read(fp, uio, active_cred, flags, td) * File table vnode write routine. */ static int -vn_write(fp, uio, active_cred, flags, td) - struct file *fp; - struct uio *uio; - struct ucred *active_cred; - struct thread *td; - int flags; +vn_write(struct file *fp, struct uio *uio, struct ucred *active_cred, int flags, + struct thread *td) { struct vnode *vp; - struct mount *mp; - int error, ioflag, lock_flags; - int vfslocked; + struct mtx *mtxp; + void *rl_cookie; + int error, ioflag; KASSERT(uio->uio_td == td, ("uio_td %p is not td %p", uio->uio_td, td)); vp = fp->f_vnode; - vfslocked = VFS_LOCK_GIANT(vp->v_mount); - if (vp->v_type == VREG) - bwillwrite(); ioflag = IO_UNIT; if (vp->v_type == VREG && (fp->f_flag & O_APPEND)) ioflag |= IO_APPEND; @@ -591,36 +674,32 @@ vn_write(fp, uio, active_cred, flags, td) if ((fp->f_flag & O_FSYNC) || (vp->v_mount && (vp->v_mount->mnt_flag & MNT_SYNCHRONOUS))) ioflag |= IO_SYNC; - mp = NULL; - if (vp->v_type != VCHR && - (error = vn_start_write(vp, &mp, V_WAIT | PCATCH)) != 0) - goto unlock; - - if ((MNT_SHARED_WRITES(mp) || - ((mp == NULL) && MNT_SHARED_WRITES(vp->v_mount))) && - (flags & FOF_OFFSET) != 0) { - lock_flags = LK_SHARED; - } else { - lock_flags = LK_EXCLUSIVE; - } - - vn_lock(vp, lock_flags | LK_RETRY); - if ((flags & FOF_OFFSET) == 0) + if ((flags & FOF_OFFSET) == 0) { + mtxp = vn_lock_foffset(fp); uio->uio_offset = fp->f_offset; + } else + mtxp = NULL; /* gcc */ ioflag |= sequential_heuristic(uio, fp); -#ifdef MAC - error = mac_vnode_check_write(active_cred, fp->f_cred, vp); - if (error == 0) -#endif - error = VOP_WRITE(vp, uio, ioflag, fp->f_cred); - if ((flags & FOF_OFFSET) == 0) + if (vp->v_type == VREG) { + if ((ioflag & IO_APPEND) || !(flags & FOF_OFFSET)) + /* + * For appenders, punt and lock the whole + * range. It also protects f_offset. + */ + rl_cookie = rangelock_wlock(vp, 0, (size_t)-1); + else + rl_cookie = rangelock_wlock(vp, uio->uio_offset, + uio->uio_resid); + } else + rl_cookie = NULL; + error = vn_write_chunk(vp, uio, active_cred, fp->f_cred, ioflag); + if (rl_cookie != NULL) + rangelock_unlock(vp, rl_cookie); + if ((flags & FOF_OFFSET) == 0) { fp->f_offset = uio->uio_offset; + vn_unlock_foffset(fp, mtxp); + } fp->f_nextoff = uio->uio_offset; - VOP_UNLOCK(vp, 0); - if (vp->v_type != VCHR) - vn_finished_write(mp); -unlock: - VFS_UNLOCK_GIANT(vfslocked); return (error); } @@ -628,25 +707,29 @@ unlock: * File table truncate routine. */ static int -vn_truncate(fp, length, active_cred, td) - struct file *fp; - off_t length; - struct ucred *active_cred; - struct thread *td; +vn_truncate(struct file *fp, off_t length, struct ucred *active_cred, + struct thread *td) { struct vattr vattr; struct mount *mp; struct vnode *vp; + void *rl_cookie; int vfslocked; int error; vp = fp->f_vnode; + + /* + * Lock the range where the shortening take place. Increase of + * file size does not need rangelock, but it is faster to lock + * the range then call VOP_GETATTR to get the current size and + * deal with races. + */ + rl_cookie = rangelock_wlock(vp, length, -1); vfslocked = VFS_LOCK_GIANT(vp->v_mount); error = vn_start_write(vp, &mp, V_WAIT | PCATCH); - if (error) { - VFS_UNLOCK_GIANT(vfslocked); - return (error); - } + if (error) + goto out1; vn_lock(vp, LK_EXCLUSIVE | LK_RETRY); if (vp->v_type == VDIR) { error = EISDIR; @@ -666,7 +749,9 @@ vn_truncate(fp, length, active_cred, td) out: VOP_UNLOCK(vp, 0); vn_finished_write(mp); +out1: VFS_UNLOCK_GIANT(vfslocked); + rangelock_unlock(vp, rl_cookie); return (error); } diff --git a/sys/kern/vnode_if.src b/sys/kern/vnode_if.src index c9f20e3..27e298c 100644 --- a/sys/kern/vnode_if.src +++ b/sys/kern/vnode_if.src @@ -611,3 +611,12 @@ vop_vptocnp { INOUT char *buf; INOUT int *buflen; }; + +%% extend vp L L L + +vop_extend { + IN struct vnode *vp; + IN struct ucred *cred; + IN u_quad_t size; + IN int flags; +}; diff --git a/sys/sys/buf.h b/sys/sys/buf.h index 8f3b1b2..e6fdf7e 100644 --- a/sys/sys/buf.h +++ b/sys/sys/buf.h @@ -257,6 +257,8 @@ extern const char *buf_wmesg; /* Default buffer lock message */ #include /* XXX for curthread */ #include +extern int vfs_read_max; + /* * Initialize a lock. */ diff --git a/sys/sys/file.h b/sys/sys/file.h index 8ad30a5..b9f52ae 100644 --- a/sys/sys/file.h +++ b/sys/sys/file.h @@ -141,6 +141,8 @@ struct file { #define FOFFSET_LOCKED 0x1 #define FOFFSET_LOCK_WAITING 0x2 +#define FRA_BLOCK_SZ 16384 + #endif /* _KERNEL || _WANT_FILE */ /* diff --git a/sys/sys/proc.h b/sys/sys/proc.h index d8e9fc8..44fd9b0 100644 --- a/sys/sys/proc.h +++ b/sys/sys/proc.h @@ -352,7 +352,7 @@ do { \ #define TDP_COWINPROGRESS 0x00000010 /* Snapshot copy-on-write in progress. */ #define TDP_ALTSTACK 0x00000020 /* Have alternate signal stack. */ #define TDP_DEADLKTREAT 0x00000040 /* Lock aquisition - deadlock treatment. */ -#define TDP_UNUSED80 0x00000080 /* available. */ +#define TDP_VMIO 0x00000080 /* Busied pages for vnode_pager io. */ #define TDP_NOSLEEPING 0x00000100 /* Thread is not allowed to sleep on a sq. */ #define TDP_OWEUPC 0x00000200 /* Call addupc() at next AST. */ #define TDP_ITHREAD 0x00000400 /* Thread is an interrupt thread. */ diff --git a/sys/sys/rangelock.h b/sys/sys/rangelock.h new file mode 100644 index 0000000..5ec6433 --- /dev/null +++ b/sys/sys/rangelock.h @@ -0,0 +1,48 @@ +/*- + * Copyright (c) 2009 Konstantin Belousov + * All rights reserved. + * + * $FreeBSD$ + */ + +#ifndef _SYS_RANGELOCK_H +#define _SYS_RANGELOCK_H + +#include +#include +#include +#include +#include + +#ifdef _KERNEL + +struct vnode; + +struct rl_q_entry +{ + TAILQ_ENTRY(rl_q_entry) rl_q_link; + size_t rl_q_start, rl_q_end; + int rl_q_flags; +}; + +#define RL_LOCK_READ 0x0001 +#define RL_LOCK_WRITE 0x0002 +#define RL_LOCK_TYPE_MASK 0x0003 +#define RL_LOCK_GRANTED 0x0004 + +struct rangelock +{ + TAILQ_HEAD(, rl_q_entry) rl_waiters; + struct rl_q_entry *rl_currdep; +}; + +void rangelock_init(struct rangelock *lock); +void rangelock_destroy(struct rangelock *lock); +void rangelock_unlock(struct vnode *vp, void *cookie); +void *rangelock_unlock_range(struct vnode *vp, void *cookie, off_t base, + size_t len); +void *rangelock_rlock(struct vnode *vp, off_t base, size_t len); +void *rangelock_wlock(struct vnode *vp, off_t base, size_t len); +#endif + +#endif diff --git a/sys/sys/vnode.h b/sys/sys/vnode.h index fc919a9..5cb102c 100644 --- a/sys/sys/vnode.h +++ b/sys/sys/vnode.h @@ -38,6 +38,7 @@ #include #include #include +#include #include #include #include @@ -96,6 +97,13 @@ struct vpollinfo { #if defined(_KERNEL) || defined(_KVM_VNODE) +struct debug_ref { + TAILQ_ENTRY(debug_ref) link; + int val; + const char *op; + struct stack stack; +}; + struct vnode { /* * Fields which define the identity of the vnode. These fields are @@ -168,7 +176,9 @@ struct vnode { */ struct vpollinfo *v_pollinfo; /* G Poll events, p for *v_pi */ struct label *v_label; /* MAC label for vnode */ - struct lockf *v_lockf; /* Byte-level lock list */ + struct lockf *v_lockf; /* Byte-level adv lock list */ + struct rangelock v_rl; /* Byte-range lock */ + TAILQ_HEAD(, debug_ref) v_debug_ref; }; #endif /* defined(_KERNEL) || defined(_KVM_VNODE) */ @@ -252,6 +262,7 @@ struct xvnode { #define VV_DELETED 0x0400 /* should be removed */ #define VV_MD 0x0800 /* vnode backs the md device */ #define VV_FORCEINSMQ 0x1000 /* force the insmntque to succeed */ +#define VV_DEBUGVREF 0x2000 /* * Vnode attributes. A field value of VNOVAL represents a field whose value @@ -654,6 +665,8 @@ int vn_rdwr_inchunks(enum uio_rw rw, struct vnode *vp, void *base, size_t len, off_t offset, enum uio_seg segflg, int ioflg, struct ucred *active_cred, struct ucred *file_cred, size_t *aresid, struct thread *td); +int vn_read_chunk(struct vnode *vp, struct uio *uio, + struct ucred *active_cred, struct ucred *f_cred, int ioflag); int vn_stat(struct vnode *vp, struct stat *sb, struct ucred *active_cred, struct ucred *file_cred, struct thread *td); int vn_start_write(struct vnode *vp, struct mount **mpp, int flags); diff --git a/sys/ufs/ffs/ffs_balloc.c b/sys/ufs/ffs/ffs_balloc.c index a12f96e..9aca6c1 100644 --- a/sys/ufs/ffs/ffs_balloc.c +++ b/sys/ufs/ffs/ffs_balloc.c @@ -634,7 +634,7 @@ ffs_balloc_ufs2(struct vnode *vp, off_t startoffset, int size, if (lastlbn < NDADDR && lastlbn < lbn) { nb = lastlbn; osize = blksize(fs, ip, nb); - if (osize < fs->fs_bsize && osize > 0) { + if (osize < fs->fs_bsize && osize > 0 && dp->di_db[nb] != 0) { UFS_LOCK(ump); error = ffs_realloccg(ip, nb, dp->di_db[nb], ffs_blkpref_ufs2(ip, lastlbn, (int)nb, @@ -701,9 +701,17 @@ ffs_balloc_ufs2(struct vnode *vp, off_t startoffset, int size, nsize, osize, bp); } } else { - if (ip->i_size < smalllblktosize(fs, lbn + 1)) + if (ip->i_size < smalllblktosize(fs, lbn)) nsize = fragroundup(fs, size); - else + else if (ip->i_size < smalllblktosize(fs, lbn + 1)) { + /* + * Allocate entire tail of the file. + * Write may cover subpart of the extended + * area. + */ + nsize = fragroundup(fs, max(size, + blkoff(fs, ip->i_size))); + } else nsize = fs->fs_bsize; UFS_LOCK(ump); error = ffs_alloc(ip, lbn, diff --git a/sys/ufs/ffs/ffs_softdep.c b/sys/ufs/ffs/ffs_softdep.c index 4d652c1..a3e890e 100644 --- a/sys/ufs/ffs/ffs_softdep.c +++ b/sys/ufs/ffs/ffs_softdep.c @@ -1651,7 +1651,7 @@ softdep_setup_allocdirect(ip, lbn, newblkno, oldblkno, newsize, oldsize, bp) ufs2_daddr_t newblkno; /* disk block number being added */ ufs2_daddr_t oldblkno; /* previous block number, 0 unless frag */ long newsize; /* size of new block */ - long oldsize; /* size of new block */ + long oldsize; /* size of old block */ struct buf *bp; /* bp for allocated block */ { struct allocdirect *adp, *oldadp; @@ -1765,8 +1765,8 @@ allocdirect_merge(adphead, newadp, oldadp) if (newadp->ad_oldblkno != oldadp->ad_newblkno || newadp->ad_oldsize != oldadp->ad_newsize || newadp->ad_lbn >= NDADDR) - panic("%s %jd != new %jd || old size %ld != new %ld", - "allocdirect_merge: old blkno", + panic("allocdirect_merge: old blkno" + " %jd != new %jd || old size %ld != new %ld", (intmax_t)newadp->ad_oldblkno, (intmax_t)oldadp->ad_newblkno, newadp->ad_oldsize, oldadp->ad_newsize); @@ -2813,7 +2813,11 @@ handle_workitem_freeblocks(freeblks, flags) #ifdef INVARIANTS if (freeblks->fb_chkcnt != blocksreleased && ((fs->fs_flags & FS_UNCLEAN) == 0 || (flags & LK_NOWAIT) != 0)) - printf("handle_workitem_freeblocks: block count\n"); + printf("handle_workitem_freeblocks: ino %jd block count " + "check %jd real %jd diff %jd\n", + (intmax_t)freeblks->fb_previousinum, + (intmax_t)freeblks->fb_chkcnt, (intmax_t)blocksreleased, + (intmax_t)(freeblks->fb_chkcnt - blocksreleased)); if (allerror) softdep_error("handle_workitem_freeblks", allerror); #endif /* INVARIANTS */ diff --git a/sys/ufs/ffs/ffs_vfsops.c b/sys/ufs/ffs/ffs_vfsops.c index 6eb8964..3a9ce21 100644 --- a/sys/ufs/ffs/ffs_vfsops.c +++ b/sys/ufs/ffs/ffs_vfsops.c @@ -1602,6 +1602,8 @@ ffs_vgetf(mp, ino, flags, vpp, ffs_flags) } #endif + if (!fs->fs_ronly) + vp->v_vflag |= VV_DEBUGVREF; *vpp = vp; return (0); } diff --git a/sys/ufs/ffs/ffs_vnops.c b/sys/ufs/ffs/ffs_vnops.c index 464a761..e864692 100644 --- a/sys/ufs/ffs/ffs_vnops.c +++ b/sys/ufs/ffs/ffs_vnops.c @@ -119,7 +119,7 @@ static vop_listextattr_t ffs_listextattr; static vop_openextattr_t ffs_openextattr; static vop_setextattr_t ffs_setextattr; static vop_vptofh_t ffs_vptofh; - +static vop_extend_t ffs_extend; /* Global vfs data structures for ufs. */ struct vop_vector ffs_vnodeops1 = { @@ -131,6 +131,7 @@ struct vop_vector ffs_vnodeops1 = { .vop_reallocblks = ffs_reallocblks, .vop_write = ffs_write, .vop_vptofh = ffs_vptofh, + .vop_extend = ffs_extend, }; struct vop_vector ffs_fifoops1 = { @@ -156,6 +157,7 @@ struct vop_vector ffs_vnodeops2 = { .vop_openextattr = ffs_openextattr, .vop_setextattr = ffs_setextattr, .vop_vptofh = ffs_vptofh, + .vop_extend = ffs_extend, }; struct vop_vector ffs_fifoops2 = { @@ -1783,3 +1785,66 @@ vop_vptofh { ufhp->ufid_gen = ip->i_gen; return (0); } + +static int +ffs_extend(struct vop_extend_args *ap) +{ + struct vnode *vp; + struct inode *ip; + struct buf *bp; + struct fs *fs; + off_t osize, xosize; + u_quad_t size; + ufs_lbn_t lastlbn; + ufs2_daddr_t nb; + int error, flags; + + vp = ap->a_vp; + ip = VTOI(vp); + size = ap->a_size; + osize = ip->i_size; + if (osize >= size) + return (0); + + vnode_pager_setsize(vp, size); + fs = ip->i_fs; + flags = ap->a_flags & IO_SYNC; + if (flags != 0) + goto slow; + + lastlbn = lblkno(fs, osize); + if (lastlbn < NDADDR) { + xosize = fragroundup(fs, blkoff(fs, osize)); + if (xosize < fs->fs_bsize && xosize > 0) { + if (ip->i_ump->um_fstype == UFS1) + nb = ip->i_din1->di_db[lastlbn]; + else + nb = ip->i_din2->di_db[lastlbn]; + /* Need to extend fragment */ + if (nb != 0) + goto slow; + } + } + ip->i_size = size; + DIP_SET(ip, i_size, size); + ip->i_flag |= IN_CHANGE | IN_UPDATE; + return (0); + + slow: + error = UFS_BALLOC(vp, size - 1, 1, ap->a_cred, flags|BA_CLRBUF, &bp); + if (error) { + vnode_pager_setsize(vp, osize); + return (error); + } + ip->i_size = size; + DIP_SET(ip, i_size, size); + ip->i_flag |= IN_CHANGE | IN_UPDATE; + if (bp->b_bufsize == fs->fs_bsize) + bp->b_flags |= B_CLUSTEROK; + if (flags & IO_SYNC) { + bwrite(bp); + error = ffs_update(vp, 1); + } else + bawrite(bp); + return (error); +} diff --git a/sys/ufs/ufs/ufs_vnops.c b/sys/ufs/ufs/ufs_vnops.c index 2d8f276..982e6d0 100644 --- a/sys/ufs/ufs/ufs_vnops.c +++ b/sys/ufs/ufs/ufs_vnops.c @@ -2006,7 +2006,8 @@ ufs_readdir(ap) uio->uio_iov->iov_len = count; # if (BYTE_ORDER == LITTLE_ENDIAN) if (ap->a_vp->v_mount->mnt_maxsymlinklen > 0) { - error = VOP_READ(ap->a_vp, uio, 0, ap->a_cred); + error = vn_read_chunk(ap->a_vp, uio, ap->a_cred, + ap->a_cred, IO_NODELOCKED); } else { struct dirent *dp, *edp; struct uio auio; @@ -2022,7 +2023,8 @@ ufs_readdir(ap) aiov.iov_len = count; dirbuf = malloc(count, M_TEMP, M_WAITOK); aiov.iov_base = dirbuf; - error = VOP_READ(ap->a_vp, &auio, 0, ap->a_cred); + error = vn_read_chunk(ap->a_vp, &auio, ap->a_cred, + ap->a_cred, IO_NODELOCKED); if (error == 0) { readcnt = count - auio.uio_resid; edp = (struct dirent *)&dirbuf[readcnt]; @@ -2044,7 +2046,8 @@ ufs_readdir(ap) free(dirbuf, M_TEMP); } # else - error = VOP_READ(ap->a_vp, uio, 0, ap->a_cred); + error = vn_read_chunk(ap->a_vp, uio, ap->a_cred, + ap->a_cred, IO_NODELOCKED); # endif if (!error && ap->a_ncookies != NULL) { struct dirent* dpStart; diff --git a/sys/vm/vm_extern.h b/sys/vm/vm_extern.h index ad6087e..e24c62b 100644 --- a/sys/vm/vm_extern.h +++ b/sys/vm/vm_extern.h @@ -84,5 +84,8 @@ void vm_thread_dispose(struct thread *td); int vm_thread_new(struct thread *td, int pages); void vm_thread_swapin(struct thread *td); void vm_thread_swapout(struct thread *td); +int vnode_pager_read(struct vnode *vp, struct uio *uio, int ioflags); +int vnode_pager_write(struct vnode *vp, struct uio *uio, int ioflags); + #endif /* _KERNEL */ #endif /* !_VM_EXTERN_H_ */ diff --git a/sys/vm/vm_fault.c b/sys/vm/vm_fault.c index 0a5a412..fca7d5a 100644 --- a/sys/vm/vm_fault.c +++ b/sys/vm/vm_fault.c @@ -157,18 +157,22 @@ static void unlock_and_deallocate(struct faultstate *fs) { - vm_object_pip_wakeup(fs->object); - VM_OBJECT_UNLOCK(fs->object); - if (fs->object != fs->first_object) { - VM_OBJECT_LOCK(fs->first_object); - vm_page_lock_queues(); - vm_page_free(fs->first_m); - vm_page_unlock_queues(); - vm_object_pip_wakeup(fs->first_object); - VM_OBJECT_UNLOCK(fs->first_object); - fs->first_m = NULL; + if (fs->object != NULL) { + vm_object_pip_wakeup(fs->object); + VM_OBJECT_UNLOCK(fs->object); + if (fs->object != fs->first_object && + fs->first_object != NULL) { + VM_OBJECT_LOCK(fs->first_object); + vm_page_lock_queues(); + vm_page_free(fs->first_m); + vm_page_unlock_queues(); + vm_object_pip_wakeup(fs->first_object); + VM_OBJECT_UNLOCK(fs->first_object); + fs->first_m = NULL; + } + vm_object_deallocate(fs->first_object); + fs->object = fs->first_object = NULL; } - vm_object_deallocate(fs->first_object); unlock_map(fs); if (fs->vp != NULL) { vput(fs->vp); @@ -219,14 +223,15 @@ vm_fault(vm_map_t map, vm_offset_t vaddr, vm_prot_t fault_type, int faultcount, ahead, behind; struct faultstate fs; struct vnode *vp; + struct thread *td; int locked, error; hardfault = 0; growstack = TRUE; PCPU_INC(cnt.v_vm_faults); - fs.vp = NULL; - fs.vfslocked = 0; + memset(&fs, 0, sizeof(fs)); faultcount = behind = 0; + td = curthread; RetryFault:; @@ -241,11 +246,14 @@ RetryFault:; if (growstack && result == KERN_INVALID_ADDRESS && map != kernel_map) { result = vm_map_growstack(curproc, vaddr); - if (result != KERN_SUCCESS) + if (result != KERN_SUCCESS) { + unlock_and_deallocate(&fs); return (KERN_FAILURE); + } growstack = FALSE; goto RetryFault; } + unlock_and_deallocate(&fs); return (result); } @@ -367,7 +375,8 @@ RetryFault:; */ vm_page_busy(fs.m); if (fs.m->valid != VM_PAGE_BITS_ALL && - fs.m->object != kernel_object && fs.m->object != kmem_object) { + fs.m->object != kernel_object && + fs.m->object != kmem_object) { goto readrest; } @@ -523,7 +532,7 @@ vnode_lock: locked = LK_SHARED; /* Do not sleep for vnode lock while fs.m is busy */ error = vget(vp, locked | LK_CANRECURSE | - LK_NOWAIT, curthread); + LK_NOWAIT, td); if (error != 0) { int vfslocked; @@ -533,7 +542,7 @@ vnode_lock: release_page(&fs); unlock_and_deallocate(&fs); error = vget(vp, locked | LK_RETRY | - LK_CANRECURSE, curthread); + LK_CANRECURSE, td); vdrop(vp); fs.vp = vp; fs.vfslocked = vfslocked; @@ -937,9 +946,9 @@ vnode_locked: */ unlock_and_deallocate(&fs); if (hardfault) - curthread->td_ru.ru_majflt++; + td->td_ru.ru_majflt++; else - curthread->td_ru.ru_minflt++; + td->td_ru.ru_minflt++; return (KERN_SUCCESS); } diff --git a/sys/vm/vm_pageout.c b/sys/vm/vm_pageout.c index 19edce1..ccf595a 100644 --- a/sys/vm/vm_pageout.c +++ b/sys/vm/vm_pageout.c @@ -349,7 +349,7 @@ more: } vm_page_test_dirty(p); if (p->dirty == 0 || - p->queue != PQ_INACTIVE || + (p->queue != PQ_INACTIVE && p->queue != PQ_ACTIVE) || p->wire_count != 0 || /* may be held by buf cache */ p->hold_count != 0) { /* may be undergoing I/O */ ib = 0; @@ -377,7 +377,7 @@ more: } vm_page_test_dirty(p); if (p->dirty == 0 || - p->queue != PQ_INACTIVE || + (p->queue != PQ_INACTIVE && p->queue != PQ_ACTIVE) || p->wire_count != 0 || /* may be held by buf cache */ p->hold_count != 0) { /* may be undergoing I/O */ break; @@ -484,7 +484,7 @@ vm_pageout_flush(vm_page_t *mc, int count, int flags) if (pageout_status[i] != VM_PAGER_PEND) { vm_object_pip_wakeup(object); vm_page_io_finish(mt); - if (vm_page_count_severe()) + if (mt->queue == PQ_INACTIVE && vm_page_count_severe()) vm_page_try_to_cache(mt); } } @@ -1394,7 +1394,7 @@ vm_pageout() * when paging. */ if (cnt.v_page_count > 1024) - cnt.v_free_min = 4 + (cnt.v_page_count - 1024) / 200; + cnt.v_free_min = 4 + (cnt.v_page_count - 1024) / 100; else cnt.v_free_min = 4; cnt.v_pageout_free_min = (2*MAXBSIZE)/PAGE_SIZE + diff --git a/sys/vm/vm_readwrite.c b/sys/vm/vm_readwrite.c new file mode 100644 index 0000000..ee623cb --- /dev/null +++ b/sys/vm/vm_readwrite.c @@ -0,0 +1,753 @@ +/*- + * Copyright (c) 2008 Jeffrey Roberson + * Copyright (c) 2009 Konstantin Belousov + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice unmodified, this list of conditions, and the following + * disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include +__FBSDID("$FreeBSD$"); + +#include "opt_vm.h" + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include + +/* + * XXXKIB TODO + * + * 1. Backpressure for writes + * 2. VOP_REALLOCBLKS + * 3. Unset setuid/setgid bits after write. + * + */ + +static int vmio_run = 0; +SYSCTL_INT(_debug, OID_AUTO, vmio_run, CTLFLAG_RW, &vmio_run, 0, + "Calculate the max sequential run for vnode_pager_read_cluster"); +static int vmio_read_pack = 16; +SYSCTL_INT(_vfs, OID_AUTO, vmio_read_pack, CTLFLAG_RW, &vmio_read_pack, 0, + "Length of the page pack for read"); +static int vmio_write_pack = 16; +SYSCTL_INT(_vfs, OID_AUTO, vmio_write_pack, CTLFLAG_RW, &vmio_write_pack, 0, + "Length of the page pack for write"); + +static u_int +io_page_bits(int i, vm_offset_t off, ssize_t size) +{ + int start, chunk; + + if (i == 0) { + start = off; + chunk = min(PAGE_SIZE - off, size); + } else if (i * PAGE_SIZE < off + size) { + start = 0; + chunk = PAGE_SIZE; + } else if ((i - 1) * PAGE_SIZE < off + size) { + start = 0; + chunk = (size - off) % PAGE_SIZE; + } else + return (0); + return (vm_page_bits(start, chunk)); +} + +#define VN_GRAB_NO_VMWAIT 0x0001 + +/* + * Grab a page, waiting until we are woken up due to the page + * changing state. We keep on waiting, if the page continues + * to be in the object. If the page doesn't exist allocate it. + * + * This routine may block, either waiting for busy vnode page, or for + * a page allocation. Later may be disabled with VN_GRAB_NO_VMWAIT + * flag, when vnode lock is held. To ensure progress, reserve page is + * used for ma[0] when wait is disabled and system cannot provide a + * page. + * + * Returns updated page run length in *wp, and filled in ma page + * array. + */ +static void +vnode_grab_pages(struct vnode *vp, vm_page_t *ma, int *wp, vm_pindex_t pindex, + int flags, vm_page_t *reserv) +{ + vm_object_t object; + vm_page_t m; + vm_pindex_t pi; + int i; + + KASSERT((flags & VN_GRAB_NO_VMWAIT) || reserv == NULL, + ("vnode_grab_pages: NO_VMWAIT and no reserve")); + + object = vp->v_object; + redo: + VM_OBJECT_LOCK_ASSERT(object, MA_OWNED); + m = NULL; + for (i = 0, pi = pindex; i < *wp; ) { + if (i > 0) { + m = TAILQ_NEXT(ma[i - 1], listq); + if (m && m->pindex != pi) + m = NULL; + } + if (m == NULL) + m = vm_page_lookup(object, pi); + if (m != NULL) { + if (vm_page_sleep_if_busy(m, TRUE, "pgrnbwt")) + goto redo; + } else { + m = vm_page_alloc(object, pi, VM_ALLOC_NORMAL | + VM_ALLOC_NOBUSY); + } + if (m != NULL) { + ma[i] = m; + i++; + pi++; + continue; + } + if (flags & VN_GRAB_NO_VMWAIT) { + if (i == 0) { + m = *reserv; + *reserv = NULL; + if (object->memattr != VM_MEMATTR_DEFAULT) + pmap_page_set_memattr(m, + object->memattr); + vm_page_insert(m, object, pindex); + ma[i] = m; + i++; + } + break; + } + VM_OBJECT_UNLOCK(object); + VM_WAIT; + VM_OBJECT_LOCK(object); + goto redo; + } + *wp = i; +} + +/* + * Read a cluster starting at 'ma'. Note that we need to always redo + * page grab because our caller dropped object lock while not holding + * vnode lock. + */ +static int +vnode_pager_read_cluster(struct vnode *vp, vm_page_t ma[], vm_pindex_t idx, + int *maxrun, int flags, vm_page_t *reserv) +{ + vm_object_t obj; + daddr_t blkno; + int bsize; + int error; + int run; + int i; + + obj = vp->v_object; + bsize = vp->v_mount->mnt_stat.f_iosize; + error = 0; + blkno = 0; + + if (vmio_run) { + VM_OBJECT_UNLOCK(obj); + error = VOP_BMAP(vp, IDX_TO_OFF(idx)/bsize, NULL, &blkno, &run, + NULL); + VM_OBJECT_LOCK(obj); + run = MIN(run, *maxrun); + if (error || run == 0 || blkno == -1) { +/* printf("vnode_pager_read_cluster short\n"); */ + *maxrun = 1; + vnode_grab_pages(vp, ma, maxrun, idx, + VN_GRAB_NO_VMWAIT, reserv); + error = vm_pager_get_pages(obj, ma, 1, 0); + if (error != VM_PAGER_OK) + return (EIO); + return (0); + } + run = (run + 1) * bsize / PAGE_SIZE; + run = MIN(run, vp->v_mount->mnt_iosize_max / PAGE_SIZE); + } else { + if (*maxrun == 0) + *maxrun = 1; + run = MIN(*maxrun, vp->v_mount->mnt_iosize_max / PAGE_SIZE); + } + if (IDX_TO_OFF(idx) + run * PAGE_SIZE > obj->un_pager.vnp.vnp_size) { + run = (obj->un_pager.vnp.vnp_size - IDX_TO_OFF(idx)) / + PAGE_SIZE; + } + if (run == 0) + run = 1; + vnode_grab_pages(vp, ma, &run, idx, VN_GRAB_NO_VMWAIT, reserv); + for (i = 0; i < run; i++) { + if (i > 0 && ma[i]->valid != 0) { + run = i; + break; + } + vm_page_busy(ma[i]); + } + +/* printf("vnode_pager_read_cluster %d %p %p\n", run, ma, ma[0]); */ + error = vm_pager_get_pages(obj, ma, run, 0); + if (error != VM_PAGER_OK) { + vm_page_lock_queues(); + for (i = 0; i < run; i++) + vm_page_free(ma[i]); + vm_page_unlock_queues(); + return (EIO); + } + KASSERT(ma[0]->valid == VM_PAGE_BITS_ALL, + ("ma[0]->valid %x", ma[0]->valid)); + vm_page_wakeup(ma[0]); + for (i = 1; i < run; i++) { + if (ma[i]->object != obj || + ma[i]->pindex != ma[0]->pindex + i || + !ma[i]->valid) { +/* printf("run %d ma[%d]: obj %p %p pindex %jd p+i %jd valid %x\n", + run, i, obj, ma[i]->object, ma[i]->pindex, ma[0]->pindex + i, ma[i]->valid); */ + break; + } + } + *maxrun = i; + return (0); +} + +int +vnode_pager_read(struct vnode *vp, struct uio *uio, int ioflags) +{ + vm_object_t obj; + vm_offset_t off; + vm_pindex_t idx; + vm_page_t reserv; + ssize_t size; + int error, seqcount, wpmax, wp, i; + u_int bits; + boolean_t obj_locked; + struct thread *td; + + if (ioflags & (IO_EXT|IO_DIRECT)) + return (EOPNOTSUPP); + + ASSERT_VOP_LOCKED(vp, "vnode_pager_read"); + if (vp->v_iflag & VI_DOOMED) + return (EBADF); + + /* + * Ignore non-regular files. + */ + if (vp->v_type != VREG) + return (EOPNOTSUPP); + obj = vp->v_object; + if (obj == NULL) + return (EOPNOTSUPP); + + seqcount = (ioflags >> IO_SEQSHIFT) * FRA_BLOCK_SZ / PAGE_SIZE; + seqcount = min(vfs_read_max, seqcount); + seqcount = min(vp->v_mount->mnt_iosize_max / PAGE_SIZE, seqcount); + VOP_UNLOCK(vp, 0); + + wpmax = vmio_read_pack; + vm_page_t ma[wpmax + 1]; + + error = 0; + obj_locked = FALSE; + reserv = NULL; + td = uio->uio_td; + /* XXXKIB This should be disallowed. */ + if (td == NULL) + td = curthread; + + while (uio->uio_resid > 0) { + wp = wpmax; + if (!obj_locked) { + VM_OBJECT_LOCK(obj); + obj_locked = TRUE; + } + + size = obj->un_pager.vnp.vnp_size - uio->uio_offset; + if (size <= 0) + break; + idx = OFF_TO_IDX(uio->uio_offset); + off = uio->uio_offset - IDX_TO_OFF(idx); + size = MIN(MIN(PAGE_SIZE * wp - off, uio->uio_resid), size); + + wp = (size + off + PAGE_SIZE - 1) / PAGE_SIZE; + vnode_grab_pages(vp, ma, &wp, idx, 0, NULL); + find_valid: + for (i = 0; i < wp; i++) { + bits = io_page_bits(i, off, size); + + /* + * Only do read if first page of array is not + * valid for us. We have to drop object lock + * to obtain vnode lock, that allows the pages + * to change identity or validity bits, and we + * can guarantee allocation of only one + * (reserved) page. + */ + if ((ma[i]->valid & bits) != bits) { + if (i != 0) { + wp = i; + break; + } + if (reserv == NULL) { + reserv = vm_page_alloc(NULL, 0, + VM_ALLOC_NORMAL | VM_ALLOC_NOOBJ); + } + if (obj_locked) { + VM_OBJECT_UNLOCK(obj); + obj_locked = FALSE; + } + if (reserv == NULL) { + while (reserv == NULL) { + VM_WAIT; + reserv = vm_page_alloc(NULL, 0, + VM_ALLOC_NORMAL | + VM_ALLOC_NOOBJ); + } + } + error = vn_lock(vp, LK_SHARED); + if (error != 0) { + error = EBADF; + break; + } + VM_OBJECT_LOCK(obj); + obj_locked = TRUE; + + /* + * Read page, honouring read-ahead settings + * for filedescriptor. + */ + error = vnode_pager_read_cluster(vp, ma, idx, + &wp, VN_GRAB_NO_VMWAIT, &reserv); + VOP_UNLOCK(vp, 0); + if (error != 0) + break; + /* + * No need to redo size calculation. + * Despite both vnode and object locks + * were possibly dropped, range lock shall + * keep file from truncation. + */ + goto find_valid; + } + } + if (error != 0) + break; + KASSERT(wp > 0, ("wp == 0")); +/* printf("vp %p wp %d size %d\n", vp, wp, size); */ + + /* + * Prevent object deallocation and pages swap-out. + */ + vm_object_pip_add(obj, 1); + vm_page_lock_queues(); + for (i = 0; i < wp; i++) + vm_page_hold(ma[i]); + vm_page_unlock_queues(); + VM_OBJECT_UNLOCK(obj); + + /* + * Recalculate i/o size, since vnode_grab_pages() + * might shortened the page run. + */ + size = MIN(MIN(PAGE_SIZE * wp - off, uio->uio_resid), size); + + /* + * Access user map pages, vnode lock is dropped. + * Possible page fault is safe at this point. Vnode + * rangelock is held, protecting from parallel + * writers. + */ +/* printf("size %d %d %ju\n", size, uio->uio_resid, (uintmax_t)off); */ + KASSERT((td->td_pflags & TDP_VMIO) == 0, + ("Recursed vnode_pager_read")); + td->td_pflags |= TDP_VMIO; + error = uiomove_fromphys(ma, off, size, uio); + td->td_pflags &= ~TDP_VMIO; + + VM_OBJECT_LOCK(obj); + vm_page_lock_queues(); + for (i = 0; i < wp; i++) + vm_page_unhold(ma[i]); + vm_page_unlock_queues(); + vm_object_pip_wakeup(obj); + VM_OBJECT_UNLOCK(obj); + obj_locked = FALSE; + if (error != 0) + break; + } + if (obj_locked) + VM_OBJECT_UNLOCK(obj); + if (reserv != NULL) + vm_page_free(reserv); + vn_lock(vp, LK_SHARED | LK_RETRY); + if (error == 0) + vfs_mark_atime(vp, td->td_ucred); + + return (error); +} + +int +vnode_pager_write(struct vnode *vp, struct uio *uio, int ioflags) +{ + vm_object_t obj; + vm_offset_t off; + vm_pindex_t idx, clean_start, clean_end; + vm_page_t reserv; + struct vattr vattr; + ssize_t size, size1, osize, osize1, resid, sresid; + int error, vn_locked, wpmax, wp, i; + boolean_t obj_locked, vnode_locked; + struct thread *td; + + if (ioflags & (IO_EXT|IO_INVAL|IO_DIRECT)) + return (EOPNOTSUPP); + ASSERT_VOP_LOCKED(vp, "vnode_pager_write"); + if (vp->v_iflag & VI_DOOMED) + return (EBADF); + if (vp->v_type != VREG) + return (EOPNOTSUPP); + obj = vp->v_object; + if (obj == NULL) + return (EOPNOTSUPP); + vn_locked = VOP_ISLOCKED(vp); + vnode_locked = TRUE; + obj_locked = FALSE; + error = 0; + + for (reserv = NULL; reserv == NULL; ) { + reserv = vm_page_alloc(NULL, 0, + VM_ALLOC_NORMAL | VM_ALLOC_NOOBJ); + if (reserv == NULL) { + if (vnode_locked) { + VOP_UNLOCK(vp, 0); + vnode_locked = FALSE; + } + VM_WAIT; + } + } + if (!vnode_locked) { + vn_lock(vp, vn_locked | LK_RETRY); + if (vp->v_iflag & VI_DOOMED) { + if (reserv != NULL) + vm_page_free(reserv); + return (EBADF); + } + vnode_locked = TRUE; + } + + if (ioflags & IO_APPEND) + uio->uio_offset = obj->un_pager.vnp.vnp_size; + + clean_start = OFF_TO_IDX(uio->uio_offset); + clean_end = OFF_TO_IDX(uio->uio_offset + uio->uio_resid + + PAGE_SIZE - 1); + wpmax = vmio_write_pack; + vm_page_t ma[wpmax + 1]; + + td = uio->uio_td; + if (td == NULL) + td = curthread; + + /* + * Enforce the RLIMIT_FSIZE there too. + * XXXKIB the check for the file type is kept on purpose. + */ + if (vp->v_type == VREG) { + PROC_LOCK(td->td_proc); + if (uio->uio_offset + uio->uio_resid > + lim_cur(td->td_proc, RLIMIT_FSIZE)) { + psignal(td->td_proc, SIGXFSZ); + PROC_UNLOCK(td->td_proc); + return (EFBIG); + } + PROC_UNLOCK(td->td_proc); + } + osize = osize1 = obj->un_pager.vnp.vnp_size; + resid = uio->uio_resid; + + io_loop: + while (uio->uio_resid > 0) { + wp = wpmax; + size = uio->uio_resid; + idx = OFF_TO_IDX(uio->uio_offset); + off = uio->uio_offset - IDX_TO_OFF(idx); + size = MIN(PAGE_SIZE * wp - off, uio->uio_resid); + if (!vnode_locked) { + error = vn_lock(vp, LK_EXCLUSIVE); + if (error != 0) { + error = EBADF; + break; + } + vnode_locked = TRUE; + } + osize1 = obj->un_pager.vnp.vnp_size; + + /* + * Extend the file if writing past end. + */ + if (osize1 < uio->uio_offset + size) { + if (VOP_ISLOCKED(vp) != LK_EXCLUSIVE) { + VOP_UNLOCK(vp, 0); + vnode_locked = FALSE; + } + if (!vnode_locked) { + if (obj_locked) { + VM_OBJECT_UNLOCK(obj); + obj_locked = FALSE; + } + error = vn_lock(vp, LK_EXCLUSIVE); + if (error != 0) { + error = EBADF; + break; + } + vnode_locked = TRUE; + } + vattr.va_size = uio->uio_offset + size; + error = VOP_EXTEND(vp, td->td_ucred, uio->uio_offset + + size, ioflags); + } + if (error != 0) + break; + if (!obj_locked) { + VM_OBJECT_LOCK(obj); + obj_locked = TRUE; + } + wp = (size + off + PAGE_SIZE - 1) / PAGE_SIZE; + + /* + * Use VN_GRAB_NO_VMWAIT since vnode lock is held. + */ + vnode_grab_pages(vp, ma, &wp, idx, VN_GRAB_NO_VMWAIT, &reserv); + find_valid: + for (i = 0; i < wp; i++) { + /* + * Pages need to be fully valid, because we + * can only hold them during uiomove later. + * + * The page fault happening in other thread + * after uiomove finished but before valid + * bits are corrected below would cause lost + * of newly written data if page is not fully + * valid. + */ + if (ma[i]->valid != VM_PAGE_BITS_ALL) { + if (i != 0) { + wp = i; + break; + } + if (reserv == NULL) + reserv = vm_page_alloc(NULL, 0, + VM_ALLOC_NORMAL | VM_ALLOC_NOOBJ); + if (reserv == NULL) { + if (obj_locked) { + VM_OBJECT_UNLOCK(obj); + obj_locked = FALSE; + } + /* + * Truncate the file back to + * the original size to + * prevent mmap from seeing + * invalid pages. We are going + * to drop vnode lock. + */ + if (osize1 < uio->uio_offset + size) { + VATTR_NULL(&vattr); + vattr.va_size = osize1; + error = VOP_SETATTR(vp, &vattr, + td->td_ucred); + if (error != 0) + break; + } + KASSERT(vnode_locked, + ("lost vnode lock 1")); + VOP_UNLOCK(vp, 0); + vnode_locked = FALSE; + while (reserv == NULL) { + VM_WAIT; + reserv = vm_page_alloc(NULL, 0, + VM_ALLOC_NORMAL | + VM_ALLOC_NOOBJ); + } + goto io_loop; + } + + error = vnode_pager_read_cluster(vp, ma, idx, + &wp, VN_GRAB_NO_VMWAIT, &reserv); + if (error != 0) + break; + goto find_valid; + } + } + if (error != 0) + break; + KASSERT(wp > 0, ("wp == 0")); + + /* + * Prevent the object deallocation and hold the pages. + * Held page can be removed from object, but cannot be + * reused. Range lock taken in vn_truncate() prevents + * most typical race. + * + * XXXKIB Busying the pages there would cause deadlock + * with vm_object_page_remove() or self-lock with + * vm_fault(), but would allow to not require the + * pages to be fully valid before uiomove. + * + * The mmap could see zeroed pages that are inserted + * into extended area after we dropped object lock. + * This could be considered an application race. + */ + vm_object_pip_add(obj, 1); + vm_page_lock_queues(); + for (i = 0; i < wp; i++) + vm_page_hold(ma[i]); + vm_page_unlock_queues(); + VM_OBJECT_UNLOCK(obj); + obj_locked = FALSE; + + /* + * Recalculate i/o size, since vnode_grab_pages() + * might have shortened the page run. Save previous + * resid to correctly mark written pages regions as + * dirty. + */ + sresid = uio->uio_resid; + size1 = MIN(MIN(PAGE_SIZE * wp - off, sresid), size); + + /* + * Shrunk file in case we allocated less pages then + * the estimation that was used to VOP_EXTEND. + */ + KASSERT(vnode_locked, ("lost vnode lock 2")); + if (size1 < size && osize1 < uio->uio_offset + size) { + VATTR_NULL(&vattr); + vattr.va_size = uio->uio_offset + size1; + error = VOP_SETATTR(vp, &vattr, td->td_ucred); + if (error != 0) { + VM_OBJECT_LOCK(obj); + obj_locked = TRUE; + vm_page_lock_queues(); + for (i = 0; i < wp; i++) + vm_page_unhold(ma[i]); + vm_page_unlock_queues(); + vm_object_pip_wakeup(obj); + break; + } + } + size = size1; + + VOP_UNLOCK(vp, 0); + vnode_locked = FALSE; + + KASSERT((td->td_pflags & TDP_VMIO) == 0, + ("Recursed vnode_pager_write")); +/* printf("W: vp %p off %jd %jd size %jd\n", + vp, (intmax_t)uio->uio_offset, (intmax_t)off, (intmax_t)size); */ + td->td_pflags |= TDP_VMIO; + error = uiomove_fromphys(ma, off, size, uio); + td->td_pflags &= ~TDP_VMIO; + + VM_OBJECT_LOCK(obj); + obj_locked = TRUE; + vm_page_lock_queues(); + for (i = 0; i < wp; i++) { + if (error == 0) { + /* Note that the page is dirty. */ + ma[i]->dirty |= io_page_bits(i, off, sresid - + uio->uio_resid); + } + vm_page_unhold(ma[i]); + } + vm_page_unlock_queues(); + if (error == 0) + vm_object_set_writeable_dirty(obj); + vm_object_pip_wakeup(obj); + VM_OBJECT_UNLOCK(obj); + obj_locked = FALSE; + if (error != 0) + break; + KASSERT(!vnode_locked, ("vnode leak 3")); + + /* + * Re-fill reserv while vnode lock is dropped. + */ + if (uio->uio_resid != 0) { + while (reserv == NULL) { + reserv = vm_page_alloc(NULL, 0, + VM_ALLOC_NORMAL | VM_ALLOC_NOOBJ); + if (reserv == NULL) + VM_WAIT; + } + } + } + + if (obj_locked) + VM_OBJECT_UNLOCK(obj); + if (!vnode_locked) + vn_lock(vp, vn_locked | LK_RETRY); + if (reserv != NULL) + vm_page_free(reserv); + if (vp->v_iflag & VI_DOOMED) { + if (error == 0) + error = EBADF; + return (error); + } + if (error == 0 && (ioflags & IO_SYNC) && !(vp->v_vflag & VV_NOSYNC)) { + VM_OBJECT_LOCK(obj); + vm_object_page_clean(obj, clean_start, clean_end, OBJPC_SYNC); + error = VOP_FSYNC(vp, MNT_WAIT, td); + VM_OBJECT_UNLOCK(obj); + } + if (error != 0) { + /* + * Roll back on error if atomic write was requested. + */ + VATTR_NULL(&vattr); + vattr.va_size = (ioflags & IO_UNIT) ? osize : osize1; + VOP_SETATTR(vp, &vattr, td->td_ucred); + if (ioflags & IO_UNIT) { + uio->uio_offset -= resid - uio->uio_resid; + uio->uio_resid = resid; + } + } + + return (error); +} diff --git a/sys/vm/vnode_pager.c b/sys/vm/vnode_pager.c index faa6f37..a2bef62 100644 --- a/sys/vm/vnode_pager.c +++ b/sys/vm/vnode_pager.c @@ -692,6 +692,7 @@ vnode_pager_generic_getpages(vp, m, bytecount, reqpage) object = vp->v_object; count = bytecount / PAGE_SIZE; +/* printf("vpgg: %p %jd %x %d\n", vp, m[0]->pindex, count, reqpage); */ KASSERT(vp->v_type != VCHR && vp->v_type != VBLK, ("vnode_pager_generic_getpages does not support devices")); @@ -1076,6 +1077,7 @@ vnode_pager_generic_putpages(vp, m, bytecount, flags, rtvals) object = vp->v_object; count = bytecount / PAGE_SIZE; +/* printf("vpgp: %p %jd %x %d\n", vp, m[0]->pindex, m[0]->dirty, count); */ for (i = 0; i < count; i++) rtvals[i] = VM_PAGER_AGAIN; diff --git a/tools/regression/file/uio/uio.c b/tools/regression/file/uio/uio.c new file mode 100644 index 0000000..d857605 --- /dev/null +++ b/tools/regression/file/uio/uio.c @@ -0,0 +1,116 @@ +/*- + * Copyright (c) 2009 Konstantin Belousov + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * $FreeBSD$ + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +int chunk_cnt = 1024; +int chunk_size = 1024; + +int +main(int argc, char *argv[]) +{ + struct iovec *wiov, *riov; + char **wdata, **rdata; + int fd, i; + ssize_t io_error; + + if (argc < 2) { + fprintf(stderr, "Usage: uio file [chunk count [chunk size]]\n"); + return (2); + } + fd = open(argv[1], O_RDWR | O_CREAT | O_TRUNC, S_IRUSR | S_IWUSR); + if (fd == -1) { + fprintf(stderr, "Failed to create %s: %s\n", + argv[1], strerror(errno)); + return (1); + } + + if (argc > 2) + chunk_cnt = atoi(argv[2]); + if (argc > 3) + chunk_size = atoi(argv[3]); + + wiov = calloc(chunk_cnt, sizeof(*wiov)); + wdata = calloc(chunk_cnt, sizeof(*wdata)); + + riov = calloc(chunk_cnt, sizeof(*riov)); + rdata = calloc(chunk_cnt, sizeof(*rdata)); + + for (i = 0; i < chunk_cnt; i++) { + rdata[i] = malloc(chunk_size); + riov[i].iov_base = rdata[i]; + riov[i].iov_len = chunk_size; + + wdata[i] = malloc(chunk_size); + memset(wdata[i], i, chunk_size); + wiov[i].iov_base = wdata[i]; + wiov[i].iov_len = chunk_size; + } + + io_error = writev(fd, wiov, chunk_cnt); + if (io_error == -1) { + fprintf(stderr, "write failed: %s\n", strerror(errno)); + return (1); + } else if (io_error != chunk_cnt * chunk_size) { + fprintf(stderr, "truncated write: %d %d\n", + io_error, chunk_cnt * chunk_size); + return (1); + } + + if (lseek(fd, 0, SEEK_SET) == -1) { + fprintf(stderr, "lseek failed: %s\n", strerror(errno)); + return (1); + } + + io_error = readv(fd, riov, chunk_cnt); + if (io_error == -1) { + fprintf(stderr, "read failed: %s\n", strerror(errno)); + return (1); + } else if (io_error != chunk_cnt * chunk_size) { + fprintf(stderr, "truncated read: %d %d\n", + io_error, chunk_cnt * chunk_size); + return (1); + } + + for (i = 0; i < chunk_cnt; i++) { + if (memcmp(rdata[i], wdata[i], chunk_size) != 0) { + fprintf(stderr, "chunk %d differs\n", i); + return (1); + } + } + + return (0); +} diff --git a/tools/regression/ufs/ba_clrbuf/ba_clrbuf.c b/tools/regression/ufs/ba_clrbuf/ba_clrbuf.c new file mode 100644 index 0000000..1b0acbe --- /dev/null +++ b/tools/regression/ufs/ba_clrbuf/ba_clrbuf.c @@ -0,0 +1,129 @@ +/*- + * Copyright (c) 2009 Konstantin Belousov + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * $FreeBSD$ + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +static const int blks = 2; + +static void +flush_buffers(int fd) +{ + struct stat st; + char *addr; + int error; + + printf("Flushing buffers\n"); + error = fstat(fd, &st); + if (error == -1) + err(2, "stat"); + fsync(fd); + addr = mmap(NULL, st.st_size, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0); + if (addr == (char *)-1) + err(2, "mmap"); + error = msync(addr, st.st_size, MS_SYNC | MS_INVALIDATE); + if (error == -1) + err(2, "msync"); + munmap(addr, st.st_size); +} + +int +main(int argc, char *argv[]) +{ + struct statfs fst; + char *data, *vrfy; + size_t sz; + int fd, i, error, ret; + + if (argc < 2) + errx(2, "Usage: ba_clrbuf file"); + + fd = open(argv[1], O_RDWR | O_CREAT | O_TRUNC, S_IRUSR | S_IWUSR); + if (fd == -1) + err(2, "Failed to create %s", argv[1]); + + if (fstatfs(fd, &fst) == -1) + err(2, "stat"); + + sz = fst.f_iosize * blks; + data = malloc(sz); + if (data == NULL) + err(2, "malloc"); + vrfy = malloc(sz); + if (vrfy == NULL) + err(2, "malloc"); + for (i = 0; i < (int)sz; i++) + data[i] = i; + error = write(fd, data, sz); + if (error == -1) + err(2, "write"); + else if (error != (int)sz) + errx(2, "Short write %d %d", error, sz); + + flush_buffers(fd); + + error = lseek(fd, 0, SEEK_SET); + if (error == -1) + err(2, "lseek 0"); + else if (error != 0) + errx(2, "lseek 0 returned %d", error); + error = write(fd, NULL, fst.f_iosize); + printf("faulty write, error %s\n", strerror(errno)); + + error = lseek(fd, 0, SEEK_SET); + if (error == -1) + err(2, "lseek 0/2"); + else if (error != 0) + errx(2, "lseek 0/2 returned %d", error); + error = read(fd, vrfy, sz); + if (error == -1) + err(2, "read"); + else if (error != (int)sz) + errx(2, "short read %d %d", error, sz); + + if (memcmp(data, vrfy, fst.f_iosize) != 0) { + printf("Zero block corrupted, byte at 0 is %x\n", + (unsigned char)vrfy[0]); + ret = 1; + } else { + printf("No corruption\n"); + ret = 0; + } + + return (ret); +}