GENERIC HEAD from 2011-05-14 05:43:33 UTC, r221878M, vmcore.136 KDB: debugger backends: ddb KDB: current backend: ddb 524288K of memory above 4GB ignored Copyright (c) 1992-2011 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 r221878M: Sat May 14 14:04:10 CEST 2011 pho@x4.osted.lan:/usr/src/sys/i386/compile/PHO i386 WARNING: WITNESS option enabled, expect reduced performance. WARNING: DIAGNOSTIC option enabled, expect reduced performance. CPU: AMD Phenom(tm) 9150e Quad-Core Processor (1800.02-MHz 686-class CPU) Origin = "AuthenticAMD" Id = 0x100f23 Family = 10 Model = 2 Stepping = 3 Features=0x178bfbff Features2=0x802009 AMD Features=0xee500800 AMD Features2=0x7ff TSC: P-state invariant real memory = 4294967296 (4096 MB) avail memory = 3536019456 (3372 MB) : Trying to mount root from ufs:/dev/ad4s1a [rw]... WARNING: / was not properly dismounted Setting hostuuid: 00000000-0000-0000-0000-00218515337d. Setting hostid: 0x6b64ac17. Starting ddb. Entropy harvesting: interrupts ethernet point_to_point kickstart. Starting file system checks: /dev/ad4s1a: 3672 files, 801145 used, 211870 free (1502 frags, 26296 blocks, 0.1% fragmentation) /dev/ad4s1f: 15565 files, 821408 used, 191607 free (4215 frags, 23424 blocks, 0.4% fragmentation) /dev/label/tmp: 301342 files, 26977106 used, 91336875 free (3155 frags, 11416715 blocks, 0.0% fragmentation) /dev/ad4s1d: 764621 files, 7658578 used, 2495621 free (230125 frags, 283187 blocks, 2.3% fragmentation) /dev/ad4s1e: 552971 files, 13416476 used, 11972041 free (56609 frags, 1489429 blocks, 0.2% fragmentation) Mounting local file systems:. Setting hostname: x4.osted.lan. re0: link state changed to DOWN Starting Network: lo0 re0 fwe0 fwip0. lo0: flags=8049 metric 0 mtu 16384 options=3 inet 127.0.0.1 netmask 0xff000000 inet6 ::1 prefixlen 128 inet6 fe80::1%lo0 prefixlen 64 scopeid 0xa nd6 options=21 re0: flags=8843 metric 0 mtu 1500 options=389b ether 00:21:85:15:33:7d inet 192.168.1.101 netmask 0xffffff00 broadcast 192.168.1.255 inet6 fe80::221:85ff:fe15:337d%re0 prefixlen 64 tentative scopeid 0x1 nd6 options=29 media: Ethernet autoselect (none) status: no carrier fwe0: flags=8802 metric 0 mtu 1500 options=8 ether 02:dc:10:62:ad:eb ch 1 dma -1 fwip0: flags=8802 metric 0 mtu 1500 lladdr 0.dc.10.0.1.62.ad.eb.a.2.ff.fe.0.0.0.0 Starting devd. Starting Network: usbus0. Starting Network: usbus1. Starting Network: usbus2. Starting Network: usbus3. Starting Network: usbus4. Starting Network: usbus5. Starting Network: fwe0. fwe0: flags=8802 metric 0 mtu 1500 options=8 ether 02:dc:10:62:ad:eb ch 1 dma -1 re0: link state changed to UP Starting Network: fwip0. fwip0: flags=8802 metric 0 mtu 1500 lladdr 0.dc.10.0.1.62.ad.eb.a.2.ff.fe.0.0.0.0 add net default: gateway 192.168.1.1 add net ::ffff:0.0.0.0: gateway ::1 add net ::0.0.0.0: gateway ::1 add net fe80::: gateway ::1 add net ff02::: gateway ::1 ELF ldconfig path: /lib /usr/lib /usr/lib/compat /usr/local/lib /usr/local/lib/compat/pkg /usr/local/kde4/lib /usr/local/lib /usr/local/lib/compat /usr/local/lib/compat/pkg /usr/local/lib/nss /usr/local/lib/qt4 /usr/local/lib/virtualbox /usr/local/lib/wine a.out ldconfig path: /usr/lib/aout /usr/lib/compat/aout Creating and/or trimming log files. Starting syslogd. savecore: reboot after panic: halock ordndle_jwork: Unkner reverown type bmsafemsal: ap May 14 20:18 1st 0xe0718380 :51 x4 savecore:bufwait (bufwait) @ kern reboot after pa/vfs_bio.c:2658nic: handle_jwor k: Unknown type 2nd 0xc79bd200 bmsafemap dirhash (dirhash) @ ufs/ufs/ufs_dirhash.c:284 KDB: stack backtrace: db_trace_self_wrapper(c0e89a56,2e687361,38323a63,a0d34,a7a,...) at db_trace_self_wrapper+0x26 kdb_backtrace(c09e0e4b,c0e8d373,c6d5e2a0,c6d61ec0,ef1b77e8,...) at kdb_backtrace+0x2a _witness_debugger(c0e8d373,c79bd200,c0ebc15a,c6d61ec0,c0ebbdec,...) at _witness_debugger+0x25 witness_checkorder(c79bd200,9,c0ebbde3,11c,0,...) at witness_checkorder+0x839 _sx_xlock(c79bd200,0,c0ebbde3,11c,c79b9414,...) at _sx_xlock+0x85 ufsdirhash_acquire(e0718320,e1306054,1ac,e130606c,ef1b78b8,...) at ufsdirhash_acquire+0x48 ufsdirhash_add(c79b9414,ef1b7914,206c,ef1b78a4,ef1b78a8,...) at ufsdirhash_add+0x13 ufs_direnter(c79b3000,c79c1828,ef1b7914,ef1b7ba4,0,...) at ufs_direnter+0x749 ufs_makeinode(ef1b7ba4,c0fbb8e0,ef1b7b00,ef1b7a5c,c0cf5d65,...) at ufs_makeinode+0x5c5 ufs_create(ef1b7b00,c0ed9f5b,0,0,ef1b7b78,...) at ufs_create+0x30 VOP_CREATE_APV(c0fbb3e0,ef1b7b00,ef1b7ba4,ef1b7a98,0,...) at VOP_CREATE_APV+0xc5 vn_open_cred(ef1b7b78,ef1b7c2c,180,0,c6d9ee80,...) at vn_open_cred+0x205 vn_open(ef1b7b78,ef1b7c2c,180,c7433ce8,0,...) at vn_open+0x3b kern_openat(c74865c0,ffffff9c,28450000,0,602,...) at kern_openat+0x12f kern_open(c74865c0,28450000,0,601,180,...) at kern_open+0x35 open(c74865c0,ef1b7cec,ef1b7d80,ef1b7c88,0,...) at open+0x30 syscallenter(c74865c0,ef1b7ce4,c0cd2b06,0,0,...) at syscallenter+0x263 syscall(ef1b7d28) at syscall+0x4f Xint0x80_syscall() at Xint0x80_syscall+0x21 --- syscall (5, FreeBSD ELF32, open), eip = 0x28189683, esp = 0xbfbfe2ac, ebp = 0xbfbfedb8 --- savecore: writing core to vmcore.135 Writing crash summary to /var/crash/core.txt.135. Additional ABI support: linux. Starting rpcbind. NFS access cache time=60 sysctl: unknown oid 'vfs.nfs.access_cache_timeout' /etc/rc: WARNING: failed to set access cache timeout Clearing /tmp (X related). Starting mountd. Starting nfsd. Recovering vi editor sessions:. Updating motd:. Starting ntpd. Starting default moused. Configuring syscons: keymap blanktime. Starting sshd. Starting cron. Local package initialization: backuplock order reversal: 1st 0xc7493df0 ufs (ufs) @ kern/vfs_subr.c:2134 2nd 0xe07defa0 bufwait (bufwait) @ ufs/ffs/ffs_softdep.c:12653 3rd 0xc74931b4 ufs (ufs) @ kern/vfs_subr.c:2134 KDB: stack backtrace: db_trace_self_wrapper(c0e89a56,2e706564,32313a63,d333536,c09f000a,...) at db_trace_self_wrapper+0x26 kdb_backtrace(c09e0e4b,c0e8d38c,c6d5e2a0,c6d61e58,ef2bd88c,...) at kdb_backtrace+0x2a _witness_debugger(c0e8d38c,c74931b4,c0e7c870,c6d61e58,c0e94f9b,...) at _witness_debugger+0x25 witness_checkorder(c74931b4,9,c0e94f92,856,0,...) at witness_checkorder+0x839 __lockmgr_args(c74931b4,80100,c7493220,0,0,...) at __lockmgr_args+0x814 ffs_lock(ef2bd9b0,c09f23db,c0e942f7,80100,c749315c,...) at ffs_lock+0xa1 VOP_LOCK1_APV(c0fbb3e0,ef2bd9b0,109,c0fd63a0,c749315c,...) at VOP_LOCK1_APV+0xb5 _vn_lock(c749315c,80100,c0e94f92,856,4,...) at _vn_lock+0x78 vget(c749315c,80100,c7c882e0,50,0,...) at vget+0xbb vfs_hash_get(c77955a8,3f400,80000,c7c882e0,ef2bdb08,...) at vfs_hash_get+0xed ffs_vgetf(c77955a8,3f400,80000,ef2bdb08,1,...) at ffs_vgetf+0x49 softdep_sync_metadata(c7493d98,0,c0ebb8d9,144,0,...) at softdep_sync_metadata+0xae3 ffs_syncvnode(c7493d98,1,c7c882e0,566,0,...) at ffs_syncvnode+0x3e2 ffs_sync(c77955a8,1,ef2bdc14,4ee,0,...) at ffs_sync+0x26f dounmount(c77955a8,8080000,c7c882e0,473,5b85c5ea,...) at dounmount+0x447 unmount(c7c882e0,ef2bdcec,281766e5,1,0,...) at unmount+0x310 syscallenter(c7c882e0,ef2bdce4,c0cd2e4d,c1011070,0,...) at syscallenter+0x263 syscall(ef2bdd28) at syscall+0x4f Xint0x80_syscall() at Xint0x80_syscall+0x21 --- syscall (22, FreeBSD ELF32, unmount), eip = 0x280dcd6b, esp = 0xbfbfe64c, ebp = 0xbfbfe718 --- lock order reversal: 1st 0xc7532724 ufs (ufs) @ kern/vfs_mount.c:1193 2nd 0xc74529dc devfs (devfs) @ ufs/ffs/ffs_vfsops.c:1418 KDB: stack backtrace: db_trace_self_wrapper(c0e89a56,3134313a,a0d38,ef2bd900,ef2bd9a0,...) at db_trace_self_wrapper+0x26 kdb_backtrace(c09e0e4b,c0e8d373,c6d61e58,c6d61d88,ef2bda38,...) at kdb_backtrace+0x2a _witness_debugger(c0e8d373,c74529dc,c0e74a27,c6d61d88,c0ebb2d5,...) at _witness_debugger+0x25 witness_checkorder(c74529dc,9,c0ebb2cc,58a,c7452a48,...) at witness_checkorder+0x839 __lockmgr_args(c74529dc,80400,c7452a48,0,0,...) at __lockmgr_args+0x814 vop_stdlock(ef2bdb58,c115b238,c7c88390,80400,c7452984,...) at vop_stdlock+0x65 VOP_LOCK1_APV(c0f91180,ef2bdb58,ef2bdb78,c0fd63a0,c7452984,...) at VOP_LOCK1_APV+0xb5 _vn_lock(c7452984,80400,c0ebb2cc,58a,0,...) at _vn_lock+0x78 ffs_sync(c77955a8,1,ef2bdc14,4ee,0,...) at ffs_sync+0x3d5 dounmount(c77955a8,8080000,c7c882e0,473,5b85c5ea,...) at dounmount+0x447 unmount(c7c882e0,ef2bdcec,281766e5,1,0,...) at unmount+0x310 syscallenter(c7c882e0,ef2bdce4,c0cd2e4d,c1011070,0,...) at syscallenter+0x263 syscall(ef2bdd28) at syscall+0x4f Xint0x80_syscall() at Xint0x80_syscall+0x21 --- syscall (22, FreeBSD ELF32, unmount), eip = 0x280dcd6b, esp = 0xbfbfe64c, ebp = 0xbfbfe718 --- fsck -y /tmp watchdogd. Starting inetd. Sat May 14 20:19:22 CEST 2011 FreeBSD/i386 (x4.osted.lan) (console) login: Expensive timeout(9) function: 0xc07fb7a0(0xc11b1280) 0.014004674 s May 14 20:19:32 x4 su: pho to root on /dev/pts/0 GEOM_NOP: Device md5.nop created. GEOM_NOP: Device md5.nop removed. lock order reversal: 1st 0xe0984f80 bufwait (bufwait) @ kern/vfs_bio.c:2658 2nd 0xc10112a4 proctree (proctree) @ kern/subr_prf.c:140 KDB: stack backtrace: db_trace_self_wrapper(c0e89a56,34313a63,a0d30,0,0,...) at db_trace_self_wrapper+0x26 kdb_backtrace(c09e0e4b,c0e8d373,c6d5e2a0,c6d5a068,ef54b7b4,...) at kdb_backtrace+0x2a _witness_debugger(c0e8d373,c10112a4,c0e84c7b,c6d5a068,c0e8a211,...) at _witness_debugger+0x25 witness_checkorder(c10112a4,1,c0e8a208,8c,0,...) at witness_checkorder+0x839 _sx_slock(c10112a4,0,c0e8a208,8c,c0bb01c9,...) at _sx_slock+0x85 uprintf(c0eb7872,c74010d4,1,e1,1,...) at uprintf+0x42 ffs_alloc(cMay 14 20:49:33 80c45x4 kernel: pid 67624 (rw), uid 100,32,0,1444,0,.01 inumber 2164 ..) at on /mnt: filesysffs_alloc+tem full 0x469 ffs_balloc_ufs2(c8275c3c,c8000,0,1000,ca253580,...) at ffs_balloc_ufs2+0x1b5a ffs_write(ef54bb94,c0ed9e91,c8275c3c,0,c8275c3c,...) at ffs_write+0x2ad VOP_WRITE_APV(c0fbb3e0,ef54bb94,c8275c3c,264,0,...) at VOP_WRITE_APV+0x136 vn_write(c79126c8,ef54bc28,ca253580,0,cb2608a0,...) at vn_write+0x1ca dofilewrite(ef54bc28,ffffffff,ffffffff,0,c79126c8,...) at dofilewrite+0x95 kern_writev(cb2608a0,4,ef54bc28,ef54bc48,1,...) at kern_writev+0x58 write(cb2608a0,ef54bcec,c09cd78c,c10209b0,0,...) at write+0x4f syscallenter(cb2608a0,ef54bce4,ef54bcc0,c09cfe08,c1020980,...) at syscallenter+0x263 syscall(ef54bd28) at syscall+0x4f Xint0x80_syscall() at Xint0x80_syscall+0x21 --- syscall (4, FreeBSD ELF32, write), eip = 0x28195603, esp = 0xbfbfd68c, ebp = 0xbfbfe748 --- May 14 20:49:34 x4 kernel: pid 6592 (rw), uid 1001 inumber 2195 on /mnt: filesystem full May 14 20:49:36 x4 kernel: pid 6596 (rw), uid 1001 inumber 2167 on /mnt: filesystem full May 14 20:49:37 x4 kernel: pid 6626 (rw), uid 1001 inumber 2220 on /mnt: filesystem full May 14 20:49:38 x4 kernel: pid 6595 (rw), uid 1001 inumber 2234 on /mnt: filesystem full May 14 20:49:40 x4 kernel: pid 6595 (rw), uid 1001 inumber 2250 on /mnt: filesystem full May 14 20:49:41 x4 kernel: pid 6625 (rw), uid 1001 inumber 2247 on /mnt: filesystem full May 14 20:49:44 x4 kernel: pid 6627 (rw), uid 1001 inumber 2100 on /mnt: filesystem full May 14 20:49:46 x4 kernel: pid 6599 (rw), uid 1001 inumber 2085 on /mnt: filesystem full May 14 20:49:47 x4 kernel: pid 6596 (rw), uid 1001 inumber 2106 on /mnt: filesystem full May 14 20:49:48 x4 kernel: pid 6597 (rw), uid 1001 inumber 2166 on /mnt: filesystem full May 14 20:49:49 x4 kernel: pid 6628 (rw), uid 1001 inumber 2149 on /mnt: filesystem full May 14 20:49:53 x4 kernel: pid 6624 (rw), uid 1001 inumber 2320 on /mnt: filesystem full May 14 20:49:55 x4 kernel: pid 6628 (rw), uid 1001 inumber 2126 on /mnt: filesystem full May 14 20:49:56 x4 kernel: pid 6629 (rw), uid 1001 inumber 2125 on /mnt: filesystem full May 14 20:49:58 x4 kernel: pid 6627 (rw), uid 1001 inumber 2123 on /mnt: filesystem full May 14 20:49:59 x4 kernel: pid 6595 (rw), uid 1001 inumber 2194 on /mnt: filesystem full May 14 20:50:01 x4 kernel: pid 6596 (rw), uid 1001 inumber 2080 on /mnt: filesystem full May 14 20:50:02 x4 kernel: pid 6598 (rw), uid 1001 inumber 2097 on /mnt: filesystem full May 14 20:50:03 x4 kernel: pid 6594 (rw), uid 1001 inumber 2121 on /mnt: filesystem full May 14 20:50:05 x4 kernel: pid 6629 (rw), uid 1001 inumber 2092 on /mnt: filesystem full May 14 20:50:06 x4 kernel: pid 6625 (rw), uid 1001 inumber 2362 on /mnt: filesystem full May 14 20:50:09 x4 kernel: pid 6630 (rw), uid 1001 inumber 2104 on /mnt: filesystem full May 14 20:50:10 x4 kernel: pid 6594 (rw), uid 1001 inumber 2255 on /mnt: filesystem full May 14 20:50:14 x4 kernel: pid 6626 (rw), uid 1001 inumber 2143 on /mnt: filesystem full May 14 20:50:15 x4 kernel: pid 6630 (rw), uid 1001 inumber 2080 on /mnt: filesystem full May 14 20:50:17 x4 kernel: pid 6624 (rw), uid 1001 inumber 2316 on /mnt: filesystem full May 14 20:50:19 x4 kernel: pid 6614 (rw), uid 1001 inumber 2297 on /mnt: filesystem full May 14 20:50:20 x4 kernel: pid 6626 (rw), uid 1001 inumber 2094 on /mnt: filesystem full May 14 20:50:21 x4 kernel: pid 6599 (rw), uid 1001 inumber 2226 on /mnt: filesystem full May 14 20:50:23 x4 kernel: pid 6629 (rw), uid 1001 inumber 2178 on /mnt: filesystem full May 14 20:50:25 x4 kernel: pid 6595 (rw), uid 1001 inumber 2328 on /mnt: filesystem full May 14 20:50:27 x4 kernel: pid 6627 (rw), uid 1001 inumber 2204 on /mnt: filesystem full May 14 20:50:28 x4 kernel: pid 6598 (rw), uid 1001 inumber 2175 on /mnt: filesystem full May 14 20:50:29 x4 kernel: pid 6596 (rw), uid 1001 inumber 2161 on /mnt: filesystem full May 14 20:50:30 x4 kernel: pid 6598 (rw), uid 1001 inumber 2211 on /mnt: filesystem full May 14 20:50:31 x4 kernel: pid 6592 (rw), uid 1001 inumber 2353 on /mnt: filesystem full May 14 20:50:33 x4 kernel: pid 6630 (rw), uid 1001 inumber 2186 on /mnt: filesystem full May 14 20:50:35 x4 kernel: pid 6627 (rw), uid 1001 inumber 2209 on /mnt: filesystem full May 14 20:50:36 x4 kernel: pid 6628 (rw), uid 1001 inumber 2127 on /mnt: filesystem full lock order reversal: 1st 0xcba8746c ufs (ufs) @ kern/vfs_vnops.c:612 2nd 0xc10112a4 proctree (proctree) @ kern/subr_prf.c:140 KDB: stack backtrace: db_trace_self_wrapper(c0e89a56,34313a63,a0d30,0,0,...) at db_trace_self_wrapper+0x26 kdb_backtrace(c09e0e4b,c0e8d373,c6d61e58,c6d5a068,ef527730,...) at kdb_backtrace+0x2a May 14 20:50:36 _witnx4 kernel: pid 6ess628 (rw), uid 10_01 inumber 2096 don /mnt: filesysetem full bugger(c0e8d373,c10112a4,c0e84c7b,c6d5a068,c0e8a211,...) at _witness_debugger+0x25 witness_checkorder(c10112a4,1,c0e8a208,8c,0,...) at witness_checkorder+0x839 _sx_slock(c10112a4,0,c0e8a208,8c,c0bb01c9,...) at _sx_slock+0x85 uprintf(c0eb7872,c74010d4,1,1b0,1,...) at uprintf+0x42 ffs_realloccg(c959a3a0,9,0,5920,0,...) at ffs_realloccg+0xdc4 ffs_balloc_ufs2(cba87414,25000,0,1000,ca253580,...) at ffs_balloc_ufs2+0xf85 ffs_write(ef527b94,c0ed9e91,cba87414,0,cba87414,...) at ffs_write+0x2ad VOP_WRITE_APV(c0fbb3e0,ef527b94,cba87414,264,0,...) at VOP_WRITE_APV+0x136 vn_write(c7931e00,ef527c28,ca253580,0,cb2618a0,...) at vn_write+0x1ca dofilewrite(May 14 20:50:37 ef52x4 kernel: pid 67599 (rw), uid 10c01 inumber 2099 2on /mnt: filesys8tem full ,ffffffff,ffffffff,0,c7931e00,...) at dofilewrite+0x95 kern_writev(cb2618a0,4,ef527c28,ef527c48,1,...) at kern_writev+0x58 write(cb2618a0,ef527cec,ef527d28,c0e8bbbe,0,...) at write+0x4f syscallenter(cb2618a0,ef527ce4,ef527ce4,0,c1020300,...) at syscallenter+0x263 syscall(ef527d28) at syscall+0x4f Xint0x80_syscall() at Xint0x80_syscall+0x21 --- syscall (4, FreeBSD ELF32, write), eip = 0x28195603, esp = 0xbfbfd68c, ebp = 0xbfbfe748 --- May 14 20:50:45 x4 kernel: pid 6626 (rw), uid 1001 inumber 2149 on /mnt: filesystem full May 14 20:50:48 x4 kernel: pid 6595 (rw), uid 1001 inumber 2373 on /mnt: filesystem full May 14 20:56:07 x4 kernel: pid 7872 (creat), uid 1001 inumber 4119 on /mnt: out of inodes May 14 20:56:14 x4 kernel: pid 7884 (creat), uid 1001 inumber 4294 on /mnt: out of inodes May 14 20:56:16 x4 kernel: pid 7883 (creat), uid 1001 inumber 4121 on /mnt: out of inodes May 14 20:56:24 x4 kernel: pid 7882 (creat), uid 1001 inumber 4123 on /mnt: out of inodes May 14 20:56:47 x4 kernel: pid 7879 (creat), uid 1001 inumber 4124 on /mnt: out of inodes May 14 20:56:57 x4 kernel: pid 7872 (creat), uid 1001 inumber 4119 on /mnt: out of inodes May 14 20:57:04 x4 kernel: pid 7879 (creat), uid 1001 inumber 4124 on /mnt: out of inodes May 14 20:57:12 x4 kernel: pid 7884 (creat), uid 1001 inumber 4294 on /mnt: out of inodes May 14 20:57:32 x4 kernel: pid 7879 (creat), uid 1001 inumber 4124 on /mnt: out of inodes May 14 20:57:40 x4 kernel: pid 7876 (creat), uid 1001 inumber 4122 on /mnt: out of inodes May 14 20:57:52 x4 kernel: pid 8208 (rw), uid 1001 inumber 5016 on /mnt: filesystem full May 14 20:57:52 x4 kernel: pid 8228 (rw), uid 1001 inumber 6936 on /mnt: filesystem full May 14 20:57:54 x4 kernel: pid 8235 (rw), uid 1001 inumber 4372 on /mnt: filesystem full May 14 21:02:10 x4 kernel: pid 8800 (rw), uid 1001 inumber 5584 on /mnt: filesystem full May 14 21:02:11 x4 kernel: pid 8811 (rw), uid 1001 inumber 6071 on /mnt: filesystem full May 14 21:02:11 x4 kernel: pid 8793 (rw), uid 1001 inumber 6018 on /mnt: filesystem full May 14 21:02:13 x4 kernel: pid 8802 (rw), uid 1001 inumber 1626 on /mnt: filesystem full May 14 21:04:18 x4 kernel: pid 9109 (rw), uid 1001 inumber 4402 on /mnt: filesystem full May 14 21:04:18 x4 kernel: pid 9140 (rw), uid 1001 inumber 4403 on /mnt: filesystem full May 14 21:04:49 x4 kernel: pid 9137 (rw), uid 1001 inumber 5339 on /mnt: filesystem full May 14 21:04:49 x4 kernel: pid 9177 (link), uid 1001 inumber 4108 on /mnt: filesystem full May 14 21:06:34 x4 kernel: pid 9478 (rw), uid 1001 inumber 7227 on /mnt: filesystem full May 14 21:06:34 x4 kernel: pid 9473 (rw), uid 1001 inumber 7239 on /mnt: filesystem full May 14 21:06:35 x4 kernel: pid 9455 (link), uid 1001 inumber 6209 on /mnt: filesystem full May 14 21:06:36 x4 kernel: pid 9441 (openat), uid 1001 inumber 6147 on /mnt: out of inodes May 14 21:06:40 x4 kernel: pid 9472 (rw), uid 1001 inumber 1215 on /mnt: filesystem full May 14 21:06:40 x4 kernel: pid 9484 (rw), uid 1001 inumber 1376 on /mnt: filesystem full May 14 21:06:43 x4 kernel: pid 9521 (openat), uid 1001 inumber 6173 on /mnt: out of inodes May 14 21:06:52 x4 kernel: pid 9443 (openat), uid 1001 inumber 6194 on /mnt: out of inodes May 14 21:06:56 x4 kernel: pid 9503 (openat), uid 1001 inumber 6181 on /mnt: out of inodes May 14 21:07:02 x4 kernel: pid 9487 (openat), uid 1001 inumber 6160 on /mnt: out of inodes May 14 21:07:08 x4 kernel: pid 9524 (openat), uid 1001 inumber 6184 on /mnt: out of inodes May 14 21:07:13 x4 kernel: pid 9508 (openat), uid 1001 inumber 6186 on /mnt: out of inodes May 14 21:07:18 x4 kernel: pid 9461 (creat), uid 1001 inumber 6213 on /mnt: out of inodes May 14 21:07:22 x4 kernel: pid 9471 (creat), uid 1001 inumber 6231 on /mnt: out of inodes May 14 21:07:25 x4 kernel: pid 9517 (openat), uid 1001 inumber 6177 on /mnt: out of inodes May 14 21:07:27 x4 kernel: pid 9449 (creat), uid 1001 inumber 6159 on /mnt: out of inodes May 14 21:07:30 x4 kernel: pid 9471 (creat), uid 1001 inumber 6231 on /mnt: out of inodes May 14 21:07:33 x4 kernel: pid 9474 (creat), uid 1001 inumber 6211 on /mnt: out of inodes May 14 21:07:36 x4 kernel: pid 9500 (openat), uid 1001 inumber 6170 on /mnt: out of inodes May 14 21:07:46 x4 kernel: pid 9450 (creat), uid 1001 inumber 6224 on /mnt: out of inodes May 14 21:07:48 x4 kernel: pid 9462 (creat), uid 1001 inumber 6228 on /mnt: out of inodes May 14 21:07:50 x4 kernel: pid 9459 (creat), uid 1001 inumber 6198 on /mnt: out of inodes May 14 21:07:54 x4 kernel: pid 9458 (creat), uid 1001 inumber 6212 on /mnt: out of inodes May 14 21:07:56 x4 kernel: pid 9461 (creat), uid 1001 inumber 6213 on /mnt: out of inodes May 14 21:07:58 x4 kernel: pid 9451 (creat), uid 1001 inumber 6201 on /mnt: out of inodes May 14 21:08:02 x4 kernel: pid 9458 (creat), uid 1001 inumber 6212 on /mnt: out of inodes May 14 21:08:05 x4 kernel: pid 9450 (creat), uid 1001 inumber 6224 on /mnt: out of inodes May 14 21:08:10 x4 kernel: pid 9469 (creat), uid 1001 inumber 6205 on /mnt: out of inodes May 14 21:08:14 x4 kernel: pid 9486 (mkdir), uid 1001 inumber 5996 on /mnt: out of inodes May 14 21:08:19 x4 kernel: pid 9514 (openat), uid 1001 inumber 6167 on /mnt: out of inodes May 14 21:08:22 x4 kernel: pid 9465 (creat), uid 1001 inumber 6207 on /mnt: out of inodes May 14 21:08:24 x4 kernel: pid 9489 (openat), uid 1001 inumber 6157 on /mnt: out of inodes May 14 21:08:25 x4 kernel: pid 9494 (openat), uid 1001 inumber 6175 on /mnt: out of inodes May 14 21:08:37 x4 kernel: pid 10365 (rw), uid 1001 inumber 6155 on /mnt: filesystem full May 14 21:08:43 x4 kernel: pid 10385 (rw), uid 1001 inumber 6475 on /mnt: filesystem full May 14 21:08:47 x4 kernel: pid 10363 (rw), uid 1001 inumber 5896 on /mnt: filesystem full May 14 21:08:51 x4 kernel: pid 10379 (rw), uid 1001 inumber 6826 on /mnt: filesystem full May 14 21:12:59 x4 kernel: pid 11467 (cp), uid 0 inumber 272310 on /mnt: filesystem full May 14 21:13:00 x4 kernel: pid 11467 (cp), uid 0 inumber 272326 on /mnt: filesystem full May 14 21:13:01 x4 kernel: pid 11469 (cp), uid 0 inumber 272341 on /mnt: filesystem full fsync: giving up on dirty 0xc8d03828: tag devfs, type VCHR usecount 1, writecount 0, refcount 141 mountedhere 0xc7937500 flags () v_object 0xcad05aa0 ref 0 pages 550 lock type devfs: EXCL by thread 0xc997c2e0 (pid 11554) #0 0xc0990a4e at __lockmgr_args+0xbfe #1 0xc0a300c5 at vop_stdlock+0x65 #2 0xc0cf4d95 at VOP_LOCK1_APV+0xb5 #3 0xc0a50038 at _vn_lock+0x78 #4 0xc0bd8477 at softdep_flushworklist+0x47 #5 0xc0bdc47d at ffs_sync+0x2fd #6 0xc0a4fe12 at vfs_write_suspend+0x122 #7 0xc0bc1a11 at ffs_snapshot+0xc91 #8 0xc0bde350 at ffs_mount+0x1590 #9 0xc0a39857 at vfs_donmount+0x1147 #10 0xc0a39ec4 at nmount+0x84 #11 0xc09eada3 at syscallenter+0x263 #12 0xc0cd25ef at syscall+0x4f #13 0xc0cbbab1 at Xint0x80_syscall+0x21 dev md5a lock order reversal: 1st 0xe0973e80 bufwait (bufwait) @ kern/vfs_bio.c:2658 2nd 0xc700491c snaplk (snaplk) @ ufs/ffs/ffs_snapshot.c:817 KDB: stack backtrace: db_trace_self_wrapper(c0e89a56,632e746f,3731383a,ef000a0d,c09f23db,...) at db_trace_self_wrapper+0x26 kdb_backtrace(c09e0e4b,c0e8d373,c6d5e2a0,c6d625a8,ef5e350c,...) at kdb_backtrace+0x2a _witness_debugger(c0e8d373,c700491c,c0eb80c1,c6d625a8,c0eb804b,...) at _witness_debugger+0x25 witness_checkorder(c700491c,9,c0eb8042,331,c8f00220,...) at witness_checkorder+0x839 __lockmgr_args(c700491c,80400,c8f00220,0,0,...) at __lockmgr_args+0x814 ffs_lock(ef5e3630,e0700740,100000,80400,c8f0015c,...) at ffs_lock+0xa1 VOP_LOCK1_APV(c0fbb3e0,ef5e3630,e07007e8,c0fd63a0,c8f0015c,...) at VOP_LOCK1_APV+0xb5 _vn_lock(c8f0015c,80400,c0eb8042,331,0,...) at _vn_lock+0x78 ffs_snapshot(c73f6000,c7954d00,c0ebb2cc,174,ef5e3980,...) at ffs_snapshot+0x2946 ffs_mount(c73f6000,cb5d0800,ff,393,0,...) at ffs_mount+0x1590 vfs_donmount(c7484b80,211300,cfe47e80,cfe47e80,ca01a2bc,...) at vfs_donmount+0x1147 nmount(c7484b80,ef5e3cec,ef5e3d28,c0e8bbbe,0,...) at nmount+0x84 syscallenter(c7484b80,ef5e3ce4,ef5e3ce4,0,0,...) at syscallenter+0x263 syscall(ef5e3d28) at syscall+0x4f Xint0x80_syscall() at Xint0x80_syscall+0x21 --- syscall (378, FreeBSD ELF32, nmount), eip = 0x280da9eb, esp = 0xbfbfe0bc, ebp = 0xbfbfe838 --- lock order reversal: 1st 0xc700491c snaplk (snaplk) @ kern/vfs_vnops.c:301 2nd 0xc8f001b4 ufs (ufs) @ ufs/ffs/ffs_snapshot.c:1617 KDB: stack backtrace: db_trace_self_wrapper(c0e89a56,d373136,c0cb000a,8,28,...) at db_trace_self_wrapper+0x26 kdb_backtrace(c09e0e4b,c0e8d373,c6d625a8,c6d61e58,ef4db630,...) at kdb_backtrace+0x2a _witness_debugger(c0e8d373,c8f001b4,c0e7c870,c6d61e58,c0eb804b,...) at _witness_debugger+0x25 witness_checkorder(c8f001b4,9,c0eb8042,651,0,...) at witness_checkorder+0x839 __lockmgr_args(c8f001b4,80000,0,0,0,...) at __lockmgr_args+0x814 ffs_snapremove(c8f0015c,c0eb7f80,ef4db780,3,c99c02e0,...) at ffs_snapremove+0x11f ffs_truncate(c8f0015c,0,0,c00,0,...) at ffs_truncate+0x69f ufs_inactive(ef4dba18,c0ed946b,c8f00220,c8f00220,c8f0015c,...) at ufs_inactive+0x21d VOP_INACTIVE_APV(c0fbb3e0,ef4dba18,c0e94f92,94e,c0fd6360,...) at VOP_INACTIVE_APV+0xc5 vinactive(c0fbb3e0,ef4dba4c,c0e94f92,8a5,0,...) at vinactive+0xb1 vputx(ef4dbab4,c0a50b5a,c8f0015c,ef4dba90,c0e96798,...) at vputx+0x36c vput(c8f0015c,ef4dba90,c0e96798,12d,0,...) at vput+0x10 vn_close(c8f0015c,1,c981d800,c99c02e0,ef4dbb08,...) at vn_close+0x19a vn_closefile(c7434348,c99c02e0,3,0,c7434348,...) at vn_closefile+0xe4 _fdrop(c7434348,c99c02e0,ef4dbb5c,c09f247c,0,c99c0390,c0fa1da0,c1158098,c0e7f609,c99c02e0,c740002c,754,ef4dbb84,c09b05d7,c740002c,8,c0e7f600,754) at _fdrop+0x43 closef(c7434348,c99c02e0,754,751,c99c0390,...) at closef+0x290 fdfree(c99c02e0,0,c0e8022d,104,c99c0390,...) at fdfree+0x46a exit1(c99c02e0,0,ef4dbc7c,c09eada3,c99c02e0,...) at exit1+0x573 sys_exit(c99c02e0,ef4dbcec,ef4dbd80,ef4dbc88,0,...) at sys_exit+0x1d syscallenter(c99c02e0,ef4dbce4,c0cd2b06,c1011070,0,...) at syscallenter+0x263 syscall(ef4dbd28) at syscall+0x4f Xint0x80_syscall() at Xint0x80_syscall+0x21 --- syscall (1, FreeBSD ELF32, sys_exit), eip = 0x2810f98f, esp = 0xbfbfdefc, ebp = 0xbfbfdf08 --- fsync: giving up on dirty 0xc8d03828: tag devfs, type VCHR usecount 1, writecount 0, refcount 211 mountedhere 0xc7937500 flags () v_object 0xcad05aa0 ref 0 pages 830 lock type devfs: EXCL by thread 0xcae732e0 (pid 11618) #0 0xc0990a4e at __lockmgr_args+0xbfe #1 0xc0a300c5 at vop_stdlock+0x65 #2 0xc0cf4d95 at VOP_LOCK1_APV+0xb5 #3 0xc0a50038 at _vn_lock+0x78 #4 0xc0bd8477 at softdep_flushworklist+0x47 #5 0xc0bdc47d at ffs_sync+0x2fd #6 0xc0a4fe12 at vfs_write_suspend+0x122 #7 0xc0bc1a11 at ffs_snapshot+0xc91 #8 0xc0bde350 at ffs_mount+0x1590 #9 0xc0a39857 at vfs_donmount+0x1147 #10 0xc0a39ec4 at nmount+0x84 #11 0xc09eada3 at syscallenter+0x263 #12 0xc0cd25ef at syscall+0x4f #13 0xc0cbbab1 at Xint0x80_syscall+0x21 dev md5a fsync: giving up on dirty 0xc8d03828: tag devfs, type VCHR usecount 1, writecount 0, refcount 216 mountedhere 0xc7937500 flags () v_object 0xcad05aa0 ref 0 pages 850 lock type devfs: EXCL by thread 0xcb01a000 (pid 11636) #0 0xc0990a4e at __lockmgr_args+0xbfe #1 0xc0a300c5 at vop_stdlock+0x65 #2 0xc0cf4d95 at VOP_LOCK1_APV+0xb5 #3 0xc0a50038 at _vn_lock+0x78 #4 0xc0bd8477 at softdep_flushworklist+0x47 #5 0xc0bdc47d at ffs_sync+0x2fd #6 0xc0a4fe12 at vfs_write_suspend+0x122 #7 0xc0bc1a11 at ffs_snapshot+0xc91 #8 0xc0bde350 at ffs_mount+0x1590 #9 0xc0a39857 at vfs_donmount+0x1147 #10 0xc0a39ec4 at nmount+0x84 #11 0xc09eada3 at syscallenter+0x263 #12 0xc0cd25ef at syscall+0x4f #13 0xc0cbbab1 at Xint0x80_syscall+0x21 dev md5a fsync: giving up on dirty 0xc8d03828: tag devfs, type VCHR usecount 1, writecount 0, refcount 216 mountedhere 0xc7937500 flags () v_object 0xcad05aa0 ref 0 pages 850 lock type devfs: EXCL by thread 0xc74a25c0 (pid 11654) #0 0xc0990a4e at __lockmgr_args+0xbfe #1 0xc0a300c5 at vop_stdlock+0x65 #2 0xc0cf4d95 at VOP_LOCK1_APV+0xb5 #3 0xc0a50038 at _vn_lock+0x78 #4 0xc0bd8477 at softdep_flushworklist+0x47 #5 0xc0bdc47d at ffs_sync+0x2fd #6 0xc0a4fe12 at vfs_write_suspend+0x122 #7 0xc0bc1a11 at ffs_snapshot+0xc91 #8 0xc0bde350 at ffs_mount+0x1590 #9 0xc0a39857 at vfs_donmount+0x1147 #10 0xc0a39ec4 at nmount+0x84 #11 0xc09eada3 at syscallenter+0x263 #12 0xc0cd25ef at syscall+0x4f #13 0xc0cbbab1 at Xint0x80_syscall+0x21 dev md5a fsync: giving up on dirty 0xc8d03828: tag devfs, type VCHR usecount 1, writecount 0, refcount 216 mountedhere 0xc7937500 flags () v_object 0xcad05aa0 ref 0 pages 850 lock type devfs: EXCL by thread 0xc997ab80 (pid 11674) #0 0xc0990a4e at __lockmgr_args+0xbfe #1 0xc0a300c5 at vop_stdlock+0x65 #2 0xc0cf4d95 at VOP_LOCK1_APV+0xb5 #3 0xc0a50038 at _vn_lock+0x78 #4 0xc0bd8477 at softdep_flushworklist+0x47 #5 0xc0bdc47d at ffs_sync+0x2fd #6 0xc0a4fe12 at vfs_write_suspend+0x122 #7 0xc0bc1a11 at ffs_snapshot+0xc91 #8 0xc0bde350 at ffs_mount+0x1590 #9 0xc0a39857 at vfs_donmount+0x1147 #10 0xc0a39ec4 at nmount+0x84 #11 0xc09eada3 at syscallenter+0x263 #12 0xc0cd25ef at syscall+0x4f #13 0xc0cbbab1 at Xint0x80_syscall+0x21 dev md5a fsync: giving up on dirty 0xc8d03828: tag devfs, type VCHR usecount 1, writecount 0, refcount 225 mountedhere 0xc7937500 flags () v_object 0xcad05aa0 ref 0 pages 886 lock type devfs: EXCL by thread 0xca1bf2e0 (pid 11737) #0 0xc0990a4e at __lockmgr_args+0xbfe #1 0xc0a300c5 at vop_stdlock+0x65 #2 0xc0cf4d95 at VOP_LOCK1_APV+0xb5 #3 0xc0a50038 at _vn_lock+0x78 #4 0xc0bd8477 at softdep_flushworklist+0x47 #5 0xc0bdc47d at ffs_sync+0x2fd #6 0xc0a4fe12 at vfs_write_suspend+0x122 #7 0xc0bc1a11 at ffs_snapshot+0xc91 #8 0xc0bde350 at ffs_mount+0x1590 #9 0xc0a39857 at vfs_donmount+0x1147 #10 0xc0a39ec4 at nmount+0x84 #11 0xc09eada3 at syscallenter+0x263 #12 0xc0cd25ef at syscall+0x4f #13 0xc0cbbab1 at Xint0x80_syscall+0x21 dev md5a fsync: giving up on dirty 0xc8d03828: tag devfs, type VCHR usecount 1, writecount 0, refcount 235 mountedhere 0xc7937500 flags () v_object 0xcad05aa0 ref 0 pages 926 lock type devfs: EXCL by thread 0xc731f8a0 (pid 11757) #0 0xc0990a4e at __lockmgr_args+0xbfe #1 0xc0a300c5 at vop_stdlock+0x65 #2 0xc0cf4d95 at VOP_LOCK1_APV+0xb5 #3 0xc0a50038 at _vn_lock+0x78 #4 0xc0bd8477 at softdep_flushworklist+0x47 #5 0xc0bdc47d at ffs_sync+0x2fd #6 0xc0a4fe12 at vfs_write_suspend+0x122 #7 0xc0bc1a11 at ffs_snapshot+0xc91 #8 0xc0bde350 at ffs_mount+0x1590 #9 0xc0a39857 at vfs_donmount+0x1147 #10 0xc0a39ec4 at nmount+0x84 #11 0xc09eada3 at syscallenter+0x263 #12 0xc0cd25ef at syscall+0x4f #13 0xc0cbbab1 at Xint0x80_syscall+0x21 dev md5a fsync: giving up on dirty 0xc8d03828: tag devfs, type VCHR usecount 1, writecount 0, refcount 272 mountedhere 0xc7937500 flags () v_object 0xcad05aa0 ref 0 pages 1074 lock type devfs: EXCL by thread 0xc9993000 (pid 11801) #0 0xc0990a4e at __lockmgr_args+0xbfe #1 0xc0a300c5 at vop_stdlock+0x65 #2 0xc0cf4d95 at VOP_LOCK1_APV+0xb5 #3 0xc0a50038 at _vn_lock+0x78 #4 0xc0bdc555 at ffs_sync+0x3d5 #5 0xc0a4fe12 at vfs_write_suspend+0x122 #6 0xc0bc1a11 at ffs_snapshot+0xc91 #7 0xc0bde350 at ffs_mount+0x1590 #8 0xc0a39857 at vfs_donmount+0x1147 #9 0xc0a39ec4 at nmount+0x84 #10 0xc09eada3 at syscallenter+0x263 #11 0xc0cd25ef at syscall+0x4f #12 0xc0cbbab1 at Xint0x80_syscall+0x21 dev md5a Memory modified after free 0xc9482e80(124) val=dea5c0de @ 0xc9482e8c panic: Most recently used by newblk cpuid = 3 KDB: enter: panic [ thread pid 11784 tid 100289 ] Stopped at kdb_enter+0x3a: movl $0,kdb_why db> run pho db:0:pho> bt Tracing pid 11784 tid 100289 td 0xc997a000 kdb_enter(c0e85b53,c0e85b53,c0ebdc5d,ef4e95ac,3,...) at kdb_enter+0x3a panic(c0ebdc5d,c0ebc450,7c,dea5c0de,c9482e8c,...) at panic+0x134 mtrash_ctor(c9482e80,80,0,102,c0e7bad2,...) at mtrash_ctor+0x77 uma_zalloc_arg(c15b2700,0,102,2,e6784,...) at uma_zalloc_arg+0x137 malloc(60,c0fb8bf8,102,829,c73f6000,...) at malloc+0x118 newblk_lookup(1,ef4e9694,c0eb861c,11dd,c7345000,...) at newblk_lookup+0xb2 softdep_setup_blkmapdep(e081ff40,c73f6000,e6784,0,1,...) at softdep_setup_blkmapdep+0xbf ffs_alloccg(ca9e0000,a,e5b58,0,800,...) at ffs_alloccg+0x49c ffs_hashalloc(e5b58,0,800,800,c0bb2a10,...) at ffs_hashalloc+0x85 ffs_alloc(ca9e0000,0,0,e5b58,0,...) at ffs_alloc+0x2ef ffs_balloc_ufs2(c8b0c15c,0,0,200,c981d680,...) at ffs_balloc_ufs2+0x110c ufs_mkdir(ef4e9bf8,c0ed9d95,0,0,ef4e9b3c,...) at ufs_mkdir+0x6da VOP_MKDIR_APV(c0fbb3e0,ef4e9bf8,ef4e9bd0,ef4e9b3c,0,...) at VOP_MKDIR_APV+0xc5 kern_mkdirat(c997a000,ffffff9c,bfbe520b,0,1f8,...) at kern_mkdirat+0x225 kern_mkdir(c997a000,bfbe520b,0,1f8,ef4e9c7c,...) at kern_mkdir+0x2e mkdir(c997a000,ef4e9cec,ef4e9d28,c0e8bbbe,0,...) at mkdir+0x29 syscallenter(c997a000,ef4e9ce4,ef4e9ce4,0,c101f600,...) at syscallenter+0x263 syscall(ef4e9d28) at syscall+0x4f Xint0x80_syscall() at Xint0x80_syscall+0x21 --- syscall (136, FreeBSD ELF32, mkdir), eip = 0x28186643, esp = 0xbfbe4dbc, ebp = 0xbfbe51e8 --- db:0:bt> show allpcpu Current CPU: 3 cpuid = 0 dynamic pcpu = 0x44e500 curthread = 0xc6dbf000: pid 11 "idle: cpu0" curpcb = 0xc6b33d80 fpcurthread = none idlethread = 0xc6dbf000: tid 100006 "idle: cpu0" APIC ID = 0 currentldt = 0x50 spin locks held: cpuid = 1 dynamic pcpu = 0x5b43500 curthread = 0xcb2648a0: pid 11798 "mkdir" curpcb = 0xef592d80 fpcurthread = none idlethread = 0xc6dbf2e0: tid 100005 "idle: cpu1" APIC ID = 1 currentldt = 0x50 spin locks held: cpuid = 2 dynamic pcpu = 0x5b46500 curthread = 0xc98918a0: pid 11799 "mkdir" curpcb = 0xef351d80 fpcurthread = none idlethread = 0xc6dbf5c0: tid 100004 "idle: cpu2" APIC ID = 2 currentldt = 0x50 spin locks held: cpuid = 3 dynamic pcpu = 0x5b49500 curthread = 0xc997a000: pid 11784 "mkdir" curpcb = 0xef4e9d80 fpcurthread = none idlethread = 0xc6dbf8a0: tid 100003 "idle: cpu3" APIC ID = 3 currentldt = 0x50 spin locks held: db:0:allpcpu> show alllocks Process 11798 (mkdir) thread 0xcb2648a0 (100330) exclusive sleep mutex Softdep Lock (Softdep Lock) r = 0 (0xc118f028) locked @ ufs/ffs/ffs_softdep.c:8201 exclusive lockmgr bufwait (bufwait) r = 0 (0xe08f26a0) locked @ kern/vfs_bio.c:2658 exclusive lockmgr ufs (ufs) r = 0 (0xc985e724) locked @ kern/vfs_subr.c:2134 exclusive lockmgr ufs (ufs) r = 0 (0xc8ece1b4) locked @ kern/vfs_lookup.c:501 Process 11797 (mkdir) thread 0xc777a2e0 (100105) exclusive lockmgr ufs (ufs) r = 0 (0xc8e0bc94) locked @ ufs/ffs/ffs_vfsops.c:1521 exclusive lockmgr ufs (ufs) r = 0 (0xc86b1724) locked @ kern/vfs_lookup.c:501 Process 11794 (mkdir) thread 0xc749eb80 (100208) exclusive lockmgr ufs (ufs) r = 0 (0xc9f7dc94) locked @ kern/vfs_lookup.c:501 Process 11793 (mkdir) thread 0xc997c8a0 (100244) exclusive lockmgr ufs (ufs) r = 0 (0xc8ab4310) locked @ kern/vfs_lookup.c:501 Process 11791 (mkdir) thread 0xc7c86b80 (100152) exclusive lockmgr ufs (ufs) r = 0 (0xc86feb38) locked @ ufs/ffs/ffs_vfsops.c:1521 exclusive lockmgr ufs (ufs) r = 0 (0xc8f5bc94) locked @ kern/vfs_lookup.c:501 Process 11790 (mkdir) thread 0xc7dea2e0 (100157) exclusive lockmgr ufs (ufs) r = 0 (0xc9cab1b4) locked @ kern/vfs_lookup.c:501 Process 11788 (mkdir) thread 0xc99c1b80 (100269) exclusive lockmgr ufs (ufs) r = 0 (0xca160c94) locked @ ufs/ffs/ffs_vfsops.c:1521 exclusive lockmgr ufs (ufs) r = 0 (0xc8c07058) locked @ kern/vfs_lookup.c:501 Process 11787 (mkdir) thread 0xcb01a2e0 (100371) exclusive lockmgr ufs (ufs) r = 0 (0xc964546c) locked @ kern/vfs_lookup.c:501 Process 11786 (mkdir) thread 0xc9993b80 (100252) exclusive lockmgr bufwait (bufwait) r = 0 (0xe085ef20) locked @ kern/vfs_bio.c:1911 exclusive lockmgr bufwait (bufwait) r = 0 (0xe0885d80) locked @ ufs/ffs/ffs_softdep.c:12653 exclusive lockmgr ufs (ufs) r = 0 (0xc8ea11b4) locked @ kern/vfs_subr.c:2134 exclusive lockmgr ufs (ufs) r = 0 (0xcfd3d1b4) locked @ kern/vfs_lookup.c:501 Process 11785 (mkdir) thread 0xc98a0000 (100233) exclusive lockmgr ufs (ufs) r = 0 (0xc86d4c94) locked @ ufs/ffs/ffs_vfsops.c:1521 exclusive lockmgr ufs (ufs) r = 0 (0xc8722724) locked @ kern/vfs_lookup.c:501 Process 11784 (mkdir) thread 0xc997a000 (100289) exclusive lockmgr bufwait (bufwait) r = 0 (0xe081ffa0) locked @ kern/vfs_bio.c:2658 exclusive lockmgr ufs (ufs) r = 0 (0xc8b0c1b4) locked @ ufs/ffs/ffs_vfsops.c:1521 exclusive lockmgr ufs (ufs) r = 0 (0xc8c46724) locked @ kern/vfs_lookup.c:501 Process 11783 (mkdir) thread 0xc9954b80 (100290) exclusive lockmgr bufwait (bufwait) r = 0 (0xe0842b60) locked @ kern/vfs_bio.c:2658 exclusive lockmgr ufs (ufs) r = 0 (0xc9f9946c) locked @ kern/vfs_subr.c:2134 exclusive lockmgr ufs (ufs) r = 0 (0xcaa05b38) locked @ kern/vfs_subr.c:2134 Process 11782 (mkdir) thread 0xcae708a0 (100351) exclusive lockmgr bufwait (bufwait) r = 0 (0xe084ad60) locked @ kern/vfs_bio.c:1911 exclusive lockmgr bufwait (bufwait) r = 0 (0xe0871880) locked @ ufs/ffs/ffs_softdep.c:12653 exclusive lockmgr ufs (ufs) r = 0 (0xca203b38) locked @ kern/vfs_subr.c:2134 exclusive lockmgr ufs (ufs) r = 0 (0xc90da5c8) locked @ kern/vfs_lookup.c:501 Process 2341 (sshd) thread 0xc783eb80 (100124) exclusive sx so_rcv_sx (so_rcv_sx) r = 0 (0xc7cb156c) locked @ kern/uipc_sockbuf.c:148 Process 2340 (sshd) thread 0xc778b8a0 (100112) exclusive sx so_rcv_sx (so_rcv_sx) r = 0 (0xc7cfd56c) locked @ kern/uipc_sockbuf.c:148 Process 2339 (sshd) thread 0xc783a5c0 (100137) exclusive sx so_rcv_sx (so_rcv_sx) r = 0 (0xc7cb23cc) locked @ kern/uipc_sockbuf.c:148 Process 2327 (sshd) thread 0xc778c000 (100110) exclusive sx so_rcv_sx (so_rcv_sx) r = 0 (0xc7cf0a4c) locked @ kern/uipc_sockbuf.c:148 Process 2305 (sshd) thread 0xc778b5c0 (100114) exclusive sx so_rcv_sx (so_rcv_sx) r = 0 (0xc7cfda4c) locked @ kern/uipc_sockbuf.c:148 Process 18 (softdepflush) thread 0xc7045b80 (100075) exclusive lockmgr ufs (ufs) r = 0 (0xc9c94058) locked @ kern/vfs_subr.c:2134 db:0:alllocks> show lockedvnods Locked vnodes 0xc90da570: tag ufs, type VDIR usecount 2, writecount 0, refcount 3 mountedhere 0 flags () v_object 0xcad01a18 ref 0 pages 0 lock type ufs: EXCL by thread 0xcae708a0 (pid 11782) #0 0xc09903f5 at __lockmgr_args+0x5a5 #1 0xc0be0e71 at ffs_lock+0xa1 #2 0xc0cf4d95 at VOP_LOCK1_APV+0xb5 #3 0xc0a50038 at _vn_lock+0x78 #4 0xc0a34f06 at lookup+0x106 #5 0xc0a362e2 at namei+0x592 #6 0xc0a467b4 at kern_rmdirat+0x54 #7 0xc0a469a7 at kern_rmdir+0x27 #8 0xc0a469d2 at rmdir+0x22 #9 0xc09eada3 at syscallenter+0x263 #10 0xc0cd25ef at syscall+0x4f #11 0xc0cbbab1 at Xint0x80_syscall+0x21 ino 94234, on dev md5a 0xca203ae0: tag ufs, type VDIR usecount 0, writecount 0, refcount 2 mountedhere 0 flags (VI_DOINGINACT) v_object 0xcace62a8 ref 0 pages 0 lock type ufs: EXCL by thread 0xcae708a0 (pid 11782) #0 0xc0990a4e at __lockmgr_args+0xbfe #1 0xc0be0e71 at ffs_lock+0xa1 #2 0xc0cf4d95 at VOP_LOCK1_APV+0xb5 #3 0xc0a50038 at _vn_lock+0x78 #4 0xc0a4318b at vget+0xbb #5 0xc0a3413d at vfs_hash_get+0xed #6 0xc0bdb4e9 at ffs_vgetf+0x49 #7 0xc0bdba4e at ffs_vget+0x2e #8 0xc0be74bb at ufs_lookup_ino+0x89b #9 0xc0be786a at ufs_lookup+0x2a #10 0xc0cf4195 at VOP_CACHEDLOOKUP_APV+0xc5 #11 0xc0a2db16 at vfs_cache_lookup+0xd6 #12 0xc0cf5f15 at VOP_LOOKUP_APV+0xe5 #13 0xc0a3547b at lookup+0x67b #14 0xc0a362e2 at namei+0x592 #15 0xc0a467b4 at kern_rmdirat+0x54 #16 0xc0a469a7 at kern_rmdir+0x27 #17 0xc0a469d2 at rmdir+0x22 ino 188465, on dev md5a 0xcfd3d15c: tag ufs, type VDIR usecount 2, writecount 0, refcount 3 mountedhere 0 flags () v_object 0xc99b84c8 ref 0 pages 0 lock type ufs: EXCL by thread 0xc9993b80 (pid 11786) #0 0xc09903f5 at __lockmgr_args+0x5a5 #1 0xc0be0e71 at ffs_lock+0xa1 #2 0xc0cf4d95 at VOP_LOCK1_APV+0xb5 #3 0xc0a50038 at _vn_lock+0x78 #4 0xc0a34f06 at lookup+0x106 #5 0xc0a362e2 at namei+0x592 #6 0xc0a467b4 at kern_rmdirat+0x54 #7 0xc0a469a7 at kern_rmdir+0x27 #8 0xc0a469d2 at rmdir+0x22 #9 0xc09eada3 at syscallenter+0x263 #10 0xc0cd25ef at syscall+0x4f #11 0xc0cbbab1 at Xint0x80_syscall+0x21 ino 212089, on dev md5a 0xc8ea115c: tag ufs, type VDIR usecount 0, writecount 0, refcount 2 mountedhere 0 flags (VI_DOINGINACT) v_object 0xcaef9440 ref 0 pages 0 lock type ufs: EXCL by thread 0xc9993b80 (pid 11786) #0 0xc0990a4e at __lockmgr_args+0xbfe #1 0xc0be0e71 at ffs_lock+0xa1 #2 0xc0cf4d95 at VOP_LOCK1_APV+0xb5 #3 0xc0a50038 at _vn_lock+0x78 #4 0xc0a4318b at vget+0xbb #5 0xc0a3413d at vfs_hash_get+0xed #6 0xc0bdb4e9 at ffs_vgetf+0x49 #7 0xc0bdba4e at ffs_vget+0x2e #8 0xc0be74bb at ufs_lookup_ino+0x89b #9 0xc0be786a at ufs_lookup+0x2a #10 0xc0cf4195 at VOP_CACHEDLOOKUP_APV+0xc5 #11 0xc0a2db16 at vfs_cache_lookup+0xd6 #12 0xc0cf5f15 at VOP_LOOKUP_APV+0xe5 #13 0xc0a3547b at lookup+0x67b #14 0xc0a362e2 at namei+0x592 #15 0xc0a467b4 at kern_rmdirat+0x54 #16 0xc0a469a7 at kern_rmdir+0x27 #17 0xc0a469d2 at rmdir+0x22 ino 212013, on dev md5a 0xc9c94000: tag ufs, type VDIR usecount 0, writecount 0, refcount 1 mountedhere 0 flags (VI_DOINGINACT) v_object 0xcda45330 ref 0 pages 0 lock type ufs: EXCL by thread 0xc7045b80 (pid 18) #0 0xc0990a4e at __lockmgr_args+0xbfe #1 0xc0be0e71 at ffs_lock+0xa1 #2 0xc0cf4d95 at VOP_LOCK1_APV+0xb5 #3 0xc0a50038 at _vn_lock+0x78 #4 0xc0a4318b at vget+0xbb #5 0xc0a3413d at vfs_hash_get+0xed #6 0xc0bdb4e9 at ffs_vgetf+0x49 #7 0xc0bc88ae at process_worklist_item+0x10e #8 0xc0bd8313 at softdep_process_worklist+0x83 #9 0xc0bd88e0 at softdep_flush+0x2a0 #10 0xc097bbc8 at fork_exit+0xb8 #11 0xc0cbbac4 at fork_trampoline+0x8 ino 259345, on dev md5a 0xc8ece15c: tag ufs, type VDIR usecount 1, writecount 0, refcount 2 mountedhere 0 flags () v_object 0xca44b330 ref 0 pages 0 lock type ufs: EXCL by thread 0xcb2648a0 (pid 11798) #0 0xc09903f5 at __lockmgr_args+0x5a5 #1 0xc0be0e71 at ffs_lock+0xa1 #2 0xc0cf4d95 at VOP_LOCK1_APV+0xb5 #3 0xc0a50038 at _vn_lock+0x78 #4 0xc0a34f06 at lookup+0x106 #5 0xc0a362e2 at namei+0x592 #6 0xc0a467b4 at kern_rmdirat+0x54 #7 0xc0a469a7 at kern_rmdir+0x27 #8 0xc0a469d2 at rmdir+0x22 #9 0xc09eada3 at syscallenter+0x263 #10 0xc0cd25ef at syscall+0x4f #11 0xc0cbbab1 at Xint0x80_syscall+0x21 ino 94426, on dev md5a 0xc985e6cc: tag ufs, type VDIR usecount 0, writecount 0, refcount 0 mountedhere 0 flags (VI_FREE) v_object 0xc9ad2c38 ref 0 pages 0 lock type ufs: EXCL by thread 0xcb2648a0 (pid 11798) #0 0xc0990a4e at __lockmgr_args+0xbfe #1 0xc0be0e71 at ffs_lock+0xa1 #2 0xc0cf4d95 at VOP_LOCK1_APV+0xb5 #3 0xc0a50038 at _vn_lock+0x78 #4 0xc0a4318b at vget+0xbb #5 0xc0a3413d at vfs_hash_get+0xed #6 0xc0bdb4e9 at ffs_vgetf+0x49 #7 0xc0bdba4e at ffs_vget+0x2e #8 0xc0be74bb at ufs_lookup_ino+0x89b #9 0xc0be786a at ufs_lookup+0x2a #10 0xc0cf4195 at VOP_CACHEDLOOKUP_APV+0xc5 #11 0xc0a2db16 at vfs_cache_lookup+0xd6 #12 0xc0cf5f15 at VOP_LOOKUP_APV+0xe5 #13 0xc0a3547b at lookup+0x67b #14 0xc0a362e2 at namei+0x592 #15 0xc0a467b4 at kern_rmdirat+0x54 #16 0xc0a469a7 at kern_rmdir+0x27 #17 0xc0a469d2 at rmdir+0x22 ino 94427, on dev md5a 0xc87226cc: tag ufs, type VDIR usecount 2, writecount 0, refcount 3 mountedhere 0 flags () v_object 0xc9b167f8 ref 0 pages 0 lock type ufs: EXCL by thread 0xc98a0000 (pid 11785) #0 0xc09903f5 at __lockmgr_args+0x5a5 #1 0xc0be0e71 at ffs_lock+0xa1 #2 0xc0cf4d95 at VOP_LOCK1_APV+0xb5 #3 0xc0a50038 at _vn_lock+0x78 #4 0xc0a34f06 at lookup+0x106 #5 0xc0a362e2 at namei+0x592 #6 0xc0a46a51 at kern_mkdirat+0x71 #7 0xc0a46cce at kern_mkdir+0x2e #8 0xc0a46cf9 at mkdir+0x29 #9 0xc09eada3 at syscallenter+0x263 #10 0xc0cd25ef at syscall+0x4f #11 0xc0cbbab1 at Xint0x80_syscall+0x21 ino 259477, on dev md5a 0xc9f7dc3c: tag ufs, type VDIR usecount 2, writecount 0, refcount 3 mountedhere 0 flags () v_object 0xcaf44d48 ref 0 pages 0 lock type ufs: EXCL by thread 0xc749eb80 (pid 11794) #0 0xc09903f5 at __lockmgr_args+0x5a5 #1 0xc0be0e71 at ffs_lock+0xa1 #2 0xc0cf4d95 at VOP_LOCK1_APV+0xb5 #3 0xc0a50038 at _vn_lock+0x78 #4 0xc0a34f06 at lookup+0x106 #5 0xc0a362e2 at namei+0x592 #6 0xc0a46a51 at kern_mkdirat+0x71 #7 0xc0a46cce at kern_mkdir+0x2e #8 0xc0a46cf9 at mkdir+0x29 #9 0xc09eada3 at syscallenter+0x263 #10 0xc0cd25ef at syscall+0x4f #11 0xc0cbbab1 at Xint0x80_syscall+0x21 ino 403, on dev md5a 0xc8c07000: tag ufs, type VDIR usecount 2, writecount 0, refcount 3 mountedhere 0 flags () v_object 0xca078770 ref 0 pages 0 lock type ufs: EXCL by thread 0xc99c1b80 (pid 11788) #0 0xc09903f5 at __lockmgr_args+0x5a5 #1 0xc0be0e71 at ffs_lock+0xa1 #2 0xc0cf4d95 at VOP_LOCK1_APV+0xb5 #3 0xc0a50038 at _vn_lock+0x78 #4 0xc0a34f06 at lookup+0x106 #5 0xc0a362e2 at namei+0x592 #6 0xc0a46a51 at kern_mkdirat+0x71 #7 0xc0a46cce at kern_mkdir+0x2e #8 0xc0a46cf9 at mkdir+0x29 #9 0xc09eada3 at syscallenter+0x263 #10 0xc0cd25ef at syscall+0x4f #11 0xc0cbbab1 at Xint0x80_syscall+0x21 ino 447, on dev md5a 0xc86d4c3c: tag ufs, type VNON usecount 1, writecount 0, refcount 1 mountedhere 0 flags () lock type ufs: EXCL by thread 0xc98a0000 (pid 11785) #0 0xc0990a4e at __lockmgr_args+0xbfe #1 0xc0bdb629 at ffs_vgetf+0x189 #2 0xc0bdba4e at ffs_vget+0x2e #3 0xc0bb1620 at ffs_valloc+0x500 #4 0xc0bf1bb9 at ufs_mkdir+0xa9 #5 0xc0cf5215 at VOP_MKDIR_APV+0xc5 #6 0xc0a46c05 at kern_mkdirat+0x225 #7 0xc0a46cce at kern_mkdir+0x2e #8 0xc0a46cf9 at mkdir+0x29 #9 0xc09eada3 at syscallenter+0x263 #10 0xc0cd25ef at syscall+0x4f #11 0xc0cbbab1 at Xint0x80_syscall+0x21 ino 427, on dev md5a 0xca160c3c: tag ufs, type VDIR usecount 1, writecount 0, refcount 1 mountedhere 0 flags () lock type ufs: EXCL by thread 0xc99c1b80 (pid 11788) #0 0xc0990a4e at __lockmgr_args+0xbfe #1 0xc0bdb629 at ffs_vgetf+0x189 #2 0xc0bdba4e at ffs_vget+0x2e #3 0xc0bb1620 at ffs_valloc+0x500 #4 0xc0bf1bb9 at ufs_mkdir+0xa9 #5 0xc0cf5215 at VOP_MKDIR_APV+0xc5 #6 0xc0a46c05 at kern_mkdirat+0x225 #7 0xc0a46cce at kern_mkdir+0x2e #8 0xc0a46cf9 at mkdir+0x29 #9 0xc09eada3 at syscallenter+0x263 #10 0xc0cd25ef at syscall+0x4f #11 0xc0cbbab1 at Xint0x80_syscall+0x21 ino 23979, on dev md5a 0xc9cab15c: tag ufs, type VDIR usecount 2, writecount 0, refcount 3 mountedhere 0 flags () v_object 0xc8ee1440 ref 0 pages 0 lock type ufs: EXCL by thread 0xc7dea2e0 (pid 11790) #0 0xc09903f5 at __lockmgr_args+0x5a5 #1 0xc0be0e71 at ffs_lock+0xa1 #2 0xc0cf4d95 at VOP_LOCK1_APV+0xb5 #3 0xc0a50038 at _vn_lock+0x78 #4 0xc0a34f06 at lookup+0x106 #5 0xc0a362e2 at namei+0x592 #6 0xc0a46a51 at kern_mkdirat+0x71 #7 0xc0a46cce at kern_mkdir+0x2e #8 0xc0a46cf9 at mkdir+0x29 #9 0xc09eada3 at syscallenter+0x263 #10 0xc0cd25ef at syscall+0x4f #11 0xc0cbbab1 at Xint0x80_syscall+0x21 ino 259236, on dev md5a 0xc9645414: tag ufs, type VDIR usecount 2, writecount 0, refcount 3 mountedhere 0 flags () v_object 0xcf08caa0 ref 0 pages 0 lock type ufs: EXCL by thread 0xcb01a2e0 (pid 11787) #0 0xc09903f5 at __lockmgr_args+0x5a5 #1 0xc0be0e71 at ffs_lock+0xa1 #2 0xc0cf4d95 at VOP_LOCK1_APV+0xb5 #3 0xc0a50038 at _vn_lock+0x78 #4 0xc0a34f06 at lookup+0x106 #5 0xc0a362e2 at namei+0x592 #6 0xc0a46a51 at kern_mkdirat+0x71 #7 0xc0a46cce at kern_mkdir+0x2e #8 0xc0a46cf9 at mkdir+0x29 #9 0xc09eada3 at syscallenter+0x263 #10 0xc0cd25ef at syscall+0x4f #11 0xc0cbbab1 at Xint0x80_syscall+0x21 ino 70969, on dev md5a 0xc8ab42b8: tag ufs, type VDIR usecount 2, writecount 0, refcount 3 mountedhere 0 flags () v_object 0xcf9fbdd0 ref 0 pages 0 lock type ufs: EXCL by thread 0xc997c8a0 (pid 11793) #0 0xc09903f5 at __lockmgr_args+0x5a5 #1 0xc0be0e71 at ffs_lock+0xa1 #2 0xc0cf4d95 at VOP_LOCK1_APV+0xb5 #3 0xc0a50038 at _vn_lock+0x78 #4 0xc0a34f06 at lookup+0x106 #5 0xc0a362e2 at namei+0x592 #6 0xc0a46a51 at kern_mkdirat+0x71 #7 0xc0a46cce at kern_mkdir+0x2e #8 0xc0a46cf9 at mkdir+0x29 #9 0xc09eada3 at syscallenter+0x263 #10 0xc0cd25ef at syscall+0x4f #11 0xc0cbbab1 at Xint0x80_syscall+0x21 ino 70972, on dev md5a 0xc86b16cc: tag ufs, type VDIR usecount 2, writecount 0, refcount 3 mountedhere 0 flags () v_object 0xce5ade58 ref 0 pages 0 lock type ufs: EXCL by thread 0xc777a2e0 (pid 11797) #0 0xc09903f5 at __lockmgr_args+0x5a5 #1 0xc0be0e71 at ffs_lock+0xa1 #2 0xc0cf4d95 at VOP_LOCK1_APV+0xb5 #3 0xc0a50038 at _vn_lock+0x78 #4 0xc0a34f06 at lookup+0x106 #5 0xc0a362e2 at namei+0x592 #6 0xc0a46a51 at kern_mkdirat+0x71 #7 0xc0a46cce at kern_mkdir+0x2e #8 0xc0a46cf9 at mkdir+0x29 #9 0xc09eada3 at syscallenter+0x263 #10 0xc0cd25ef at syscall+0x4f #11 0xc0cbbab1 at Xint0x80_syscall+0x21 ino 70973, on dev md5a 0xc8e0bc3c: tag ufs, type VDIR usecount 1, writecount 0, refcount 1 mountedhere 0 flags () lock type ufs: EXCL by thread 0xc777a2e0 (pid 11797) #0 0xc0990a4e at __lockmgr_args+0xbfe #1 0xc0bdb629 at ffs_vgetf+0x189 #2 0xc0bdba4e at ffs_vget+0x2e #3 0xc0bb1620 at ffs_valloc+0x500 #4 0xc0bf1bb9 at ufs_mkdir+0xa9 #5 0xc0cf5215 at VOP_MKDIR_APV+0xc5 #6 0xc0a46c05 at kern_mkdirat+0x225 #7 0xc0a46cce at kern_mkdir+0x2e #8 0xc0a46cf9 at mkdir+0x29 #9 0xc09eada3 at syscallenter+0x263 #10 0xc0cd25ef at syscall+0x4f #11 0xc0cbbab1 at Xint0x80_syscall+0x21 ino 165149, on dev md5a 0xc8f5bc3c: tag ufs, type VDIR usecount 2, writecount 0, refcount 3 mountedhere 0 flags () v_object 0xca400220 ref 0 pages 0 lock type ufs: EXCL by thread 0xc7c86b80 (pid 11791) #0 0xc09903f5 at __lockmgr_args+0x5a5 #1 0xc0be0e71 at ffs_lock+0xa1 #2 0xc0cf4d95 at VOP_LOCK1_APV+0xb5 #3 0xc0a50038 at _vn_lock+0x78 #4 0xc0a34f06 at lookup+0x106 #5 0xc0a362e2 at namei+0x592 #6 0xc0a46a51 at kern_mkdirat+0x71 #7 0xc0a46cce at kern_mkdir+0x2e #8 0xc0a46cf9 at mkdir+0x29 #9 0xc09eada3 at syscallenter+0x263 #10 0xc0cd25ef at syscall+0x4f #11 0xc0cbbab1 at Xint0x80_syscall+0x21 ino 165229, on dev md5a 0xc86feae0: tag ufs, type VDIR usecount 1, writecount 0, refcount 1 mountedhere 0 flags () lock type ufs: EXCL by thread 0xc7c86b80 (pid 11791) #0 0xc0990a4e at __lockmgr_args+0xbfe #1 0xc0bdb629 at ffs_vgetf+0x189 #2 0xc0bdba4e at ffs_vget+0x2e #3 0xc0bb1620 at ffs_valloc+0x500 #4 0xc0bf1bb9 at ufs_mkdir+0xa9 #5 0xc0cf5215 at VOP_MKDIR_APV+0xc5 #6 0xc0a46c05 at kern_mkdirat+0x225 #7 0xc0a46cce at kern_mkdir+0x2e #8 0xc0a46cf9 at mkdir+0x29 #9 0xc09eada3 at syscallenter+0x263 #10 0xc0cd25ef at syscall+0x4f #11 0xc0cbbab1 at Xint0x80_syscall+0x21 ino 212273, on dev md5a 0xc8c466cc: tag ufs, type VDIR usecount 2, writecount 0, refcount 3 mountedhere 0 flags () v_object 0xc81a7660 ref 0 pages 0 lock type ufs: EXCL by thread 0xc997a000 (pid 11784) #0 0xc09903f5 at __lockmgr_args+0x5a5 #1 0xc0be0e71 at ffs_lock+0xa1 #2 0xc0cf4d95 at VOP_LOCK1_APV+0xb5 #3 0xc0a50038 at _vn_lock+0x78 #4 0xc0a34f06 at lookup+0x106 #5 0xc0a362e2 at namei+0x592 #6 0xc0a46a51 at kern_mkdirat+0x71 #7 0xc0a46cce at kern_mkdir+0x2e #8 0xc0a46cf9 at mkdir+0x29 #9 0xc09eada3 at syscallenter+0x263 #10 0xc0cd25ef at syscall+0x4f #11 0xc0cbbab1 at Xint0x80_syscall+0x21 ino 235733, on dev md5a 0xcaa05ae0: tag ufs, type VDIR usecount 2, writecount 0, refcount 3 mountedhere 0 flags () v_object 0xc993b5d8 ref 0 pages 0 lock type ufs: EXCL by thread 0xc9954b80 (pid 11783) #0 0xc09903f5 at __lockmgr_args+0x5a5 #1 0xc0be0e71 at ffs_lock+0xa1 #2 0xc0cf4d95 at VOP_LOCK1_APV+0xb5 #3 0xc0a50038 at _vn_lock+0x78 #4 0xc0a34f06 at lookup+0x106 #5 0xc0a362e2 at namei+0x592 #6 0xc0a467b4 at kern_rmdirat+0x54 #7 0xc0a469a7 at kern_rmdir+0x27 #8 0xc0a469d2 at rmdir+0x22 #9 0xc09eada3 at syscallenter+0x263 #10 0xc0cd25ef at syscall+0x4f #11 0xc0cbbab1 at Xint0x80_syscall+0x21 ino 259226, on dev md5a 0xc9f99414: tag ufs, type VDIR usecount 0, writecount 0, refcount 1 mountedhere 0 flags (VI_DOINGINACT) v_object 0xcab88990 ref 0 pages 0 lock type ufs: EXCL by thread 0xc9954b80 (pid 11783) #0 0xc0990a4e at __lockmgr_args+0xbfe #1 0xc0be0e71 at ffs_lock+0xa1 #2 0xc0cf4d95 at VOP_LOCK1_APV+0xb5 #3 0xc0a50038 at _vn_lock+0x78 #4 0xc0a4318b at vget+0xbb #5 0xc0a3413d at vfs_hash_get+0xed #6 0xc0bdb4e9 at ffs_vgetf+0x49 #7 0xc0bdba4e at ffs_vget+0x2e #8 0xc0be74bb at ufs_lookup_ino+0x89b #9 0xc0be786a at ufs_lookup+0x2a #10 0xc0cf4195 at VOP_CACHEDLOOKUP_APV+0xc5 #11 0xc0a2db16 at vfs_cache_lookup+0xd6 #12 0xc0cf5f15 at VOP_LOOKUP_APV+0xe5 #13 0xc0a3547b at lookup+0x67b #14 0xc0a362e2 at namei+0x592 #15 0xc0a467b4 at kern_rmdirat+0x54 #16 0xc0a469a7 at kern_rmdir+0x27 #17 0xc0a469d2 at rmdir+0x22 ino 259229, on dev md5a 0xc8b0c15c: tag ufs, type VDIR usecount 1, writecount 0, refcount 1 mountedhere 0 flags () lock type ufs: EXCL by thread 0xc997a000 (pid 11784) #0 0xc0990a4e at __lockmgr_args+0xbfe #1 0xc0bdb629 at ffs_vgetf+0x189 #2 0xc0bdba4e at ffs_vget+0x2e #3 0xc0bb1620 at ffs_valloc+0x500 #4 0xc0bf1bb9 at ufs_mkdir+0xa9 #5 0xc0cf5215 at VOP_MKDIR_APV+0xc5 #6 0xc0a46c05 at kern_mkdirat+0x225 #7 0xc0a46cce at kern_mkdir+0x2e #8 0xc0a46cf9 at mkdir+0x29 #9 0xc09eada3 at syscallenter+0x263 #10 0xc0cd25ef at syscall+0x4f #11 0xc0cbbab1 at Xint0x80_syscall+0x21 ino 235554, on dev md5a db:0:lockedvnods> show mount 0xc73f6b50 /dev/ad4s1a on / (ufs) 0xc73f7000 devfs on /dev (devfs) 0xc73f687c /dev/ad4s1f on /home (ufs) 0xc77952d4 /dev/ad4s1d on /usr (ufs) 0xc7795000 /dev/ad4s1e on /var (ufs) 0xc73f7b50 procfs on /proc (procfs) 0xc73f787c linprocfs on /usr/compat/linux/proc (linprocfs) 0xc7797000 /dev/label/tmp on /tmp (ufs) 0xc73f6000 /dev/md5a on /mnt (ufs) More info: show mount db:0:mount> ps pid ppid pgrp uid state wmesg wchan cmd 11817 2351 2347 1001 S nanslp 0xc1012984 sleep 11802 11493 11493 0 S+ nanslp 0xc1012984 sleep 11799 11781 11513 1001 R+ CPU 2 mkdir 11798 11781 11513 1001 R+ CPU 1 mkdir 11797 11781 11513 1001 R+ mkdir 11796 11781 11513 1001 R+ mkdir 11795 11781 11513 1001 R+ mkdir 11794 11781 11513 1001 R+ mkdir 11793 11781 11513 1001 R+ mkdir 11792 11781 11513 1001 R+ mkdir 11791 11781 11513 1001 R+ mkdir 11790 11781 11513 1001 R+ mkdir 11789 11781 11513 1001 R+ mkdir 11788 11781 11513 1001 R+ mkdir 11787 11781 11513 1001 R+ mkdir 11786 11781 11513 1001 R+ mkdir 11785 11781 11513 1001 R+ mkdir 11784 11781 11513 1001 R+ CPU 3 mkdir 11783 11781 11513 1001 R+ mkdir 11782 11781 11513 1001 R+ mkdir 11781 11780 11513 1001 S+ wait 0xca017000 mkdir 11780 11521 11513 1001 S+ nanslp 0xc1012984 mkdir 11521 11520 11513 1001 S+ wait 0xc9879af0 run 11520 11519 11513 1001 S+ wait 0xc9956af0 run 11519 11514 11513 1001 S+ nanslp 0xc1012984 run 11514 11513 11513 1001 S+ wait 0xc9911578 sh 11513 11511 11513 1001 S+ wait 0xc99862bc bash 11511 11493 11493 0 S+ wait 0xc987a2bc su 11506 0 0 0 DL mdwait 0xc7349800 [md5] 11493 2318 11493 0 S+ wait 0xc9985578 sh 2352 2347 2347 1001 S piperd 0xc781e000 awk 2351 2347 2347 1001 S wait 0xc749b578 sh 2350 2349 2350 1001 Ss kqread 0xc738d500 tail 2349 2341 2341 1001 S select 0xc7426e64 sshd 2348 2345 2348 1001 Ss+ select 0xc7426924 top 2347 2346 2347 1001 SWs wait 0xc79b52bc sh 2346 2340 2340 1001 S select 0xc73bd764 sshd 2345 2339 2339 1001 S select 0xc73ebda4 sshd 2341 2140 2341 0 SWs sbwait 0xc7cb1598 sshd 2340 2140 2340 0 SWs sbwait 0xc7cfd598 sshd 2339 2140 2339 0 SWs sbwait 0xc7cb23f8 sshd 2338 1 2338 1001 Ss select 0xc7426b64 vim 2330 2329 2330 1001 Ss+ ttyin 0xc9740c70 bash 2329 2327 2327 1001 S select 0xc7425064 sshd 2327 2140 2327 0 SWs sbwait 0xc7cf0a78 sshd 2318 2314 2318 0 S+ wait 0xc7cfaaf0 bash 2314 2313 2314 0 SW+ pause 0xc7cfa88c csh 2313 2308 2313 1001 SW+ wait 0xc7838578 su 2308 2307 2308 1001 SWs+ wait 0xc7837834 bash 2307 2305 2305 1001 S select 0xc74269e4 sshd 2305 2140 2305 0 SWs sbwait 0xc7cfda78 sshd 2274 1 2274 0 Ss+ ttyin 0xc7182070 getty 2273 1 2273 0 Ss+ ttyin 0xc7182270 getty 2272 1 2272 0 Ss+ ttyin 0xc7182470 getty 2271 1 2271 0 Ss+ ttyin 0xc6f52070 getty 2270 1 2270 0 Ss+ ttyin 0xc6f52270 getty 2269 1 2269 0 Ss+ ttyin 0xc6f52470 getty 2268 1 2268 0 Ss+ ttyin 0xc6f52670 getty 2267 1 2267 0 Ss+ ttyin 0xc6f52870 getty 2266 1 2266 0 Ss+ ttyin 0xc6f52a70 getty 2218 1 2218 0 Ss select 0xc7016564 inetd 2189 1 2189 0 Ss nanslp 0xc1012984 watchdogd 2162 1 2162 0 Ss nanslp 0xc1012984 cron 2154 1 2154 25 SWs pause 0xc79b5b48 sendmail 2148 1 2148 0 Ss select 0xc73bd564 sendmail 2140 1 2140 0 Ss select 0xc7426be4 sshd 2080 1 2080 0 Ss select 0xc7426c24 moused 2020 1 2020 0 Ss select 0xc73bd724 ntpd 1904 1903 1903 0 S (threaded) nfsd 100144 S rpcsvc 0xc7cf5cd0 nfsd: service 100143 S rpcsvc 0xc6f7f490 nfsd: service 100142 S rpcsvc 0xc7cf5850 nfsd: service 100081 S rpcsvc 0xc7cf5d10 nfsd: master 1903 1 1903 0 Ss select 0xc7426ca4 nfsd 1894 1 1894 0 Ss select 0xc7426c64 mountd 1795 1 1795 0 Ss select 0xc716c464 rpcbind 1715 1 1715 0 Rs syslogd 1514 1 1514 0 Ss select 0xc7426ce4 devd 18 0 0 0 DL getblk 0xe0842b60 [softdepflush] 17 0 0 0 DL syncer 0xc1188b14 [syncer] 16 0 0 0 DL vlruwt 0xc73a4834 [vnlru] 9 0 0 0 DL qsleep 0xc11887a8 [bufdaemon] 8 0 0 0 DL pgzero 0xc1190edc [pagezero] 7 0 0 0 DL psleep 0xc1190ac8 [vmdaemon] 6 0 0 0 DL psleep 0xc1190a90 [pagedaemon] 5 0 0 0 DL ccb_scan 0xc0fd7854 [xpt_thrd] 4 0 0 0 DL waiting_ 0xc118a5d8 [sctp_iterator] 3 0 0 0 DL - 0xc6fe143c [fdc0] 2 0 0 0 SL - 0xc706b000 [fw0_probe] 15 0 0 0 DL (threaded) [usb] 100057 D - 0xc704bd34 [usbus5] 100056 D - 0xc704bd04 [usbus5] 100055 D - 0xc704bcd4 [usbus5] 100054 D - 0xc704bca4 [usbus5] 100052 D - 0xc7040b5c [usbus4] 100051 D - 0xc7040b2c [usbus4] 100050 D - 0xc7040afc [usbus4] 100049 D - 0xc7040acc [usbus4] 100048 D - 0xc7039b5c [usbus3] 100047 D - 0xc7039b2c [usbus3] 100046 D - 0xc7039afc [usbus3] 100045 D - 0xc7039acc [usbus3] 100044 D - 0xc702fb5c [usbus2] 100043 D - 0xc702fb2c [usbus2] 100042 D - 0xc702fafc [usbus2] 100041 D - 0xc702facc [usbus2] 100039 D - 0xc7029b5c [usbus1] 100038 D - 0xc7029b2c [usbus1] 100037 D - 0xc7029afc [usbus1] 100036 D - 0xc7029acc [usbus1] 100034 D - 0xc7019b5c [usbus0] 100033 D - 0xc7019b2c [usbus0] 100032 D - 0xc7019afc [usbus0] 100031 D - 0xc7019acc [usbus0] 14 0 0 0 DL - 0xc1011784 [yarrow] 13 0 0 0 DL (threaded) [geom] 100015 D - 0xc100f3c8 [g_down] 100014 D - 0xc100f3c4 [g_up] 100013 D - 0xc100f3bc [g_event] 12 0 0 0 RL (threaded) [intr] 100065 I [irq12: psm0] 100064 I [irq1: atkbd0] 100062 I [swi0: uart] 100059 I [irq20: fwohci0] 100058 I [irq14: ata0] 100053 I [irq19: ehci0] 100040 I [irq18: ohci2 ohci4] 100035 I [irq17: ohci1 ohci3] 100030 I [irq16: ohci0] 100029 I [irq22: ahci0] 100028 I [irq256: re0] 100027 I [swi2: cambio] 100021 I [swi6: task queue] 100020 I [swi6: Giant taskq] 100018 I [swi5: +] 100012 I [swi4: clock] 100011 I [swi4: clock] 100010 RunQ [swi4: clock] 100009 I [swi4: clock] 100008 I [swi3: vm] 100007 I [swi1: netisr 0] 11 0 0 0 RL (threaded) [idle] 100006 Run CPU 0 [idle: cpu0] 100005 CanRun [idle: cpu1] 100004 CanRun [idle: cpu2] 100003 CanRun [idle: cpu3] 1 0 1 0 SLs wait 0xc6dbdaf0 [init] 10 0 0 0 DL audit_wo 0xc118e800 [audit] 0 0 0 0 DLs (threaded) [kernel] 100076 D - 0xc71853c0 [mca taskq] 100066 D - 0xc1011784 [deadlkres] 100060 D - 0xc7073900 [fw0_taskq] 100026 D - 0xc6d92340 [acpi_task_2] 100025 D - 0xc6d92340 [acpi_task_1] 100024 D - 0xc6d92340 [acpi_task_0] 100023 D - 0xc6d92380 [kqueue taskq] 100022 D - 0xc6d923c0 [ffs_trim taskq] 100019 D - 0xc6d92500 [thread taskq] 100016 D - 0xc6d92a80 [firmware taskq] 100000 D sched 0xc100f4a0 [swapper] db:0:ps> allt Tracing command sleep pid 11817 tid 100282 td 0xc99c0b80 sched_switch(c99c0b80,0,104,191,a283d11f,...) at sched_switch+0x3bc mi_switch(104,0,c0e8b280,1f3,6c,...) at mi_switch+0x219 sleepq_switch(c99c0b80,0,c0e8b280,1a7,6c,...) at sleepq_switch+0x162 sleepq_catch_signals(2711,c09e7470,c99c0b80,2,100,...) at sleepq_catch_signals+0xf9 sleepq_timedwait_sig(c1012984,6c,c0e87077,100,0,...) at sleepq_timedwait_sig+0x1a _sleep(c1012984,0,16c,c0e87077,2711,...) at _sleep+0x328 kern_nanosleep(c99c0b80,ef4cfc34,ef4cfc3c,a,0,...) at kern_nanosleep+0xc1 nanosleep(c99c0b80,ef4cfcec,ef4cfd28,c0e8bbbe,0,...) at nanosleep+0x6f syscallenter(c99c0b80,ef4cfce4,ef4cfce4,0,0,...) at syscallenter+0x263 syscall(ef4cfd28) at syscall+0x4f Xint0x80_syscall() at Xint0x80_syscall+0x21 --- syscall (240, FreeBSD ELF32, nanosleep), eip = 0x28165b67, esp = 0xbfbfec5c, ebp = 0xbfbfeca8 --- Tracing command sleep pid 11802 tid 100255 td 0xc99932e0 sched_switch(c99932e0,0,104,191,a8ed929e,...) at sched_switch+0x3bc mi_switch(104,0,c0e8b280,1f3,6c,...) at mi_switch+0x219 sleepq_switch(c99932e0,0,c0e8b280,1a7,6c,...) at sleepq_switch+0x162 sleepq_catch_signals(2711,c09e7470,c99932e0,1,100,...) at sleepq_catch_signals+0xf9 sleepq_timedwait_sig(c1012984,6c,c0e87077,100,0,...) at sleepq_timedwait_sig+0x1a _sleep(c1012984,0,16c,c0e87077,2711,...) at _sleep+0x328 kern_nanosleep(c99932e0,ef467c34,ef467c3c,a,0,...) at kern_nanosleep+0xc1 nanosleep(c99932e0,ef467cec,ef467d28,c0e8bbbe,0,...) at nanosleep+0x6f syscallenter(c99932e0,ef467ce4,ef467ce4,0,0,...) at syscallenter+0x263 syscall(ef467d28) at syscall+0x4f Xint0x80_syscall() at Xint0x80_syscall+0x21 --- syscall (240, FreeBSD ELF32, nanosleep), eip = 0x28165b67, esp = 0xbfbfe81c, ebp = 0xbfbfe868 --- Tracing command mkdir pid 11799 tid 100177 td 0xc98918a0 cpustop_handler(4,ef3516f4,c0cd2706,ee,0,...) at cpustop_handler+0x34 ipi_nmi_handler(ee,0,13e0ce0,c09a7fd5,c9879000,...) at ipi_nmi_handler+0x2f trap(ef351700) at trap+0x36 calltrap() at calltrap+0x6 --- trap 0x13, eip = 0xc09a7fd5, esp = 0xef351740, ebp = 0xef351764 --- panic(c0e926a9,e081ff40,e081ff40,c8d03920,e081ff40,...) at panic+0x35 bremfree(e081ff40,0,c0e925eb,a78,60,...) at bremfree+0x21 getblk(c8d03828,396e00,0,4000,0,...) at getblk+0x1cb breadn(c8d03828,396e00,0,4000,0,...) at breadn+0x44 bread(c8d03828,396e00,0,4000,0,...) at bread+0x4c ffs_nodealloccg(c99f5414,a,39800,0,41f8,...) at ffs_nodealloccg+0x113 ffs_hashalloc(39800,0,41f8,0,c0bb1930,...) at ffs_hashalloc+0x85 ffs_valloc(c9cd22b8,41f8,c981d680,ef3519e8,c981d680,...) at ffs_valloc+0x4d3 ufs_mkdir(ef351bf8,c0ed9d95,0,0,ef351b3c,...) at ufs_mkdir+0xa9 VOP_MKDIR_APV(c0fbb3e0,ef351bf8,ef351bd0,ef351b3c,0,...) at VOP_MKDIR_APV+0xc5 kern_mkdirat(c98918a0,ffffff9c,bfbd205b,0,1f8,...) at kern_mkdirat+0x225 kern_mkdir(c98918a0,bfbd205b,0,1f8,ef351c7c,...) at kern_mkdir+0x2e mkdir(c98918a0,ef351cec,ef351d28,c0e8bbbe,0,...) at mkdir+0x29 syscallenter(c98918a0,ef351ce4,ef351ce4,0,c082299c,...) at syscallenter+0x263 syscall(ef351d28) at syscall+0x4f Xint0x80_syscall() at Xint0x80_syscall+0x21 --- syscall (136, FreeBSD ELF32, mkdir), eip = 0x28186643, esp = 0xbfbd1c0c, ebp = 0xbfbd2038 --- Tracing command mkdir pid 11798 tid 100330 td 0xcb2648a0 cpustop_handler(2,ef592be4,c0cd2706,ee,0,...) at cpustop_handler+0x34 ipi_nmi_handler(ee,0,18ee980,c09a7fd5,ca019578,...) at ipi_nmi_handler+0x2f trap(ef592bf0) at trap+0x36 calltrap() at calltrap+0x6 --- trap 0x13, eip = 0xc09a7fd5, esp = 0xef592c30, ebp = 0xef592c54 --- panic(c0e8bc06,c0eda0c5,3,c0eda0c5,0,...) at panic+0x35 syscallret(cb2648a0,0,ef592ce4,0,c1020300,...) at syscallret+0xa4 syscall(ef592d28) at syscall+0x11b Xint0x80_syscall() at Xint0x80_syscall+0x21 --- syscall (0, FreeBSD ELF32, nosys), eip = 0x280ee92b, esp = 0xbfbfca6c, ebp = 0xbfbfcea8 --- Tracing command mkdir pid 11797 tid 100105 td 0xc777a2e0 sched_switch(c777a2e0,0,104,191,be1de87,...) at sched_switch+0x3bc mi_switch(104,0,c0e8b280,1f3,60,...) at mi_switch+0x219 sleepq_switch(c777a2e0,0,c0e8b280,268,60,...) at sleepq_switch+0x162 sleepq_wait(e074bd00,60,c0e7e1b0,4,0,...) at sleepq_wait+0x63 __lockmgr_args(e074bd00,81900,c8d03920,c0e7e1b0,60,...) at __lockmgr_args+0xb1f getblk(c8d03828,2833a0,0,4000,0,...) at getblk+0x167 breadn(c8d03828,2833a0,0,4000,0,...) at breadn+0x44 bread(c8d03828,2833a0,0,4000,0,...) at bread+0x4c ffs_alloccg(c9aa9984,7,a0cc0,0,800,...) at ffs_alloccg+0x123 ffs_hashalloc(a0cc0,0,800,800,c0bb2a10,...) at ffs_hashalloc+0x85 ffs_alloc(c9aa9984,0,0,a0cc0,0,...) at ffs_alloc+0x2ef ffs_balloc_ufs2(c8e0bc3c,0,0,200,c981d680,...) at ffs_balloc_ufs2+0x110c ufs_mkdir(ef208bf8,c0ed9d95,0,0,ef208b3c,...) at ufs_mkdir+0x6da VOP_MKDIR_APV(c0fbb3e0,ef208bf8,ef208bd0,ef208b3c,0,...) at VOP_MKDIR_APV+0xc5 kern_mkdirat(c777a2e0,ffffff9c,bfbe414b,0,1f8,...) at kern_mkdirat+0x225 kern_mkdir(c777a2e0,bfbe414b,0,1f8,ef208c7c,...) at kern_mkdir+0x2e mkdir(c777a2e0,ef208cec,ef208d28,c0e8bbbe,0,...) at mkdir+0x29 syscallenter(c777a2e0,ef208ce4,ef208ce4,0,c101f600,...) at syscallenter+0x263 syscall(ef208d28) at syscall+0x4f Xint0x80_syscall() at Xint0x80_syscall+0x21 --- syscall (136, FreeBSD ELF32, mkdir), eip = 0x28186643, esp = 0xbfbe3cfc, ebp = 0xbfbe4128 --- Tracing command mkdir pid 11796 tid 100113 td 0xc77762e0 sched_switch(c77762e0,0,207,18c,3a0d032,...) at sched_switch+0x3bc mi_switch(207,0,c0e8bb7d,d4,c77762e0,...) at mi_switch+0x219 ast(ef225d28) at ast+0x2b6 doreti_ast() at doreti_ast+0x17 Tracing command mkdir pid 11795 tid 100264 td 0xc99915c0 sched_switch(c99915c0,0,207,18c,4723dc2,...) at sched_switch+0x3bc mi_switch(207,0,c0e8bb7d,d4,c99915c0,...) at mi_switch+0x219 ast(ef48bd28) at ast+0x2b6 doreti_ast() at doreti_ast+0x17 Tracing command mkdir pid 11794 tid 100208 td 0xc749eb80 sched_switch(c749eb80,0,104,191,990abf2,...) at sched_switch+0x3bc mi_switch(104,0,c0e8b280,1f3,60,...) at mi_switch+0x219 sleepq_switch(c749eb80,0,c0e8b280,268,60,...) at sleepq_switch+0x162 sleepq_wait(e0827160,60,c0e7e1b0,4,0,...) at sleepq_wait+0x63 __lockmgr_args(e0827160,81900,c8d03920,c0e7e1b0,60,...) at __lockmgr_args+0xb1f getblk(c8d03828,5bee0,0,4000,0,...) at getblk+0x167 breadn(c8d03828,5bee0,0,4000,0,...) at breadn+0x44 bread(c8d03828,5bee0,0,4000,0,...) at bread+0x4c ffs_nodealloccg(cbc3fbc8,1,5c00,0,41f8,...) at ffs_nodealloccg+0x113 ffs_hashalloc(5c00,0,41f8,0,c0bb1930,...) at ffs_hashalloc+0x85 ffs_valloc(c9f7dc3c,41f8,c981d680,ef3d69e8,c981d680,...) at ffs_valloc+0x4d3 ufs_mkdir(ef3d6bf8,c0ed9d95,0,0,ef3d6b3c,...) at ufs_mkdir+0xa9 VOP_MKDIR_APV(c0fbb3e0,ef3d6bf8,ef3d6bd0,ef3d6b3c,0,...) at VOP_MKDIR_APV+0xc5 kern_mkdirat(c749eb80,ffffff9c,bfbf772b,0,1f8,...) at kern_mkdirat+0x225 kern_mkdir(c749eb80,bfbf772b,0,1f8,ef3d6c7c,...) at kern_mkdir+0x2e mkdir(c749eb80,ef3d6cec,c09cd78c,c1020330,0,...) at mkdir+0x29 syscallenter(c749eb80,ef3d6ce4,ef3d6cc0,c09cfe08,c1020300,...) at syscallenter+0x263 syscall(ef3d6d28) at syscall+0x4f Xint0x80_syscall() at Xint0x80_syscall+0x21 --- syscall (136, FreeBSD ELF32, mkdir), eip = 0x28186643, esp = 0xbfbf72dc, ebp = 0xbfbf7708 --- Tracing command mkdir pid 11793 tid 100244 td 0xc997c8a0 sched_switch(c997c8a0,0,104,191,be20b17,...) at sched_switch+0x3bc mi_switch(104,0,c0e8b280,1f3,60,...) at mi_switch+0x219 sleepq_switch(c997c8a0,0,c0e8b280,268,60,...) at sleepq_switch+0x162 sleepq_wait(e074bd00,60,c0e7e1b0,4,0,...) at sleepq_wait+0x63 __lockmgr_args(e074bd00,81900,c8d03920,c0e7e1b0,60,...) at __lockmgr_args+0xb1f getblk(c8d03828,2833a0,0,4000,0,...) at getblk+0x167 breadn(c8d03828,2833a0,0,4000,0,...) at breadn+0x44 bread(c8d03828,2833a0,0,4000,0,...) at bread+0x4c ffs_nodealloccg(ce5ff15c,7,28400,0,41f8,...) at ffs_nodealloccg+0x113 ffs_hashalloc(28400,0,41f8,0,c0bb1930,...) at ffs_hashalloc+0x85 ffs_valloc(c8ab42b8,41f8,c981d680,ef4439e8,c981d680,...) at ffs_valloc+0x4d3 ufs_mkdir(ef443bf8,c0ed9d95,0,0,ef443b3c,...) at ufs_mkdir+0xa9 VOP_MKDIR_APV(c0fbb3e0,ef443bf8,ef443bd0,ef443b3c,0,...) at VOP_MKDIR_APV+0xc5 kern_mkdirat(c997c8a0,ffffff9c,bfbf7b5b,0,1f8,...) at kern_mkdirat+0x225 kern_mkdir(c997c8a0,bfbf7b5b,0,1f8,ef443c7c,...) at kern_mkdir+0x2e mkdir(c997c8a0,ef443cec,ef443d28,c0e8bbbe,0,...) at mkdir+0x29 syscallenter(c997c8a0,ef443ce4,ef443ce4,0,c101fc80,...) at syscallenter+0x263 syscall(ef443d28) at syscall+0x4f Xint0x80_syscall() at Xint0x80_syscall+0x21 --- syscall (136, FreeBSD ELF32, mkdir), eip = 0x28186643, esp = 0xbfbf770c, ebp = 0xbfbf7b38 --- Tracing command mkdir pid 11792 tid 100147 td 0xc7c87b80 sched_switch(c7c87b80,0,207,18c,4aad8f4,...) at sched_switch+0x3bc mi_switch(207,0,c0e8bb7d,d4,c7c87b80,...) at mi_switch+0x219 ast(ef2c3d28) at ast+0x2b6 doreti_ast() at doreti_ast+0x17 Tracing command mkdir pid 11791 tid 100152 td 0xc7c86b80 sched_switch(c7c86b80,0,104,191,d37ca9e,...) at sched_switch+0x3bc mi_switch(104,0,c0e8b280,1f3,60,...) at mi_switch+0x219 sleepq_switch(c7c86b80,0,c0e8b280,268,60,...) at sleepq_switch+0x162 sleepq_wait(e0935c00,60,c0e7e1b0,4,0,...) at sleepq_wait+0x63 __lockmgr_args(e0935c00,81900,c8d03920,c0e7e1b0,60,...) at __lockmgr_args+0xb1f getblk(c8d03828,283460,0,4000,0,...) at getblk+0x167 breadn(c8d03828,283460,0,4000,0,...) at breadn+0x44 bread(c8d03828,283460,0,4000,0,...) at bread+0x4c ffs_update(c8f5bc3c,0,c981d680,0,c981d680,...) at ffs_update+0x172 ufs_mkdir(ef2d2bf8,c0ed9d95,0,0,ef2d2b3c,...) at ufs_mkdir+0x300 VOP_MKDIR_APV(c0fbb3e0,ef2d2bf8,ef2d2bd0,ef2d2b3c,0,...) at VOP_MKDIR_APV+0xc5 kern_mkdirat(c7c86b80,ffffff9c,bfbdbb4b,0,1f8,...) at kern_mkdirat+0x225 kern_mkdir(c7c86b80,bfbdbb4b,0,1f8,ef2d2c7c,...) at kern_mkdir+0x2e mkdir(c7c86b80,ef2d2cec,ef2d2d28,c0e8bbbe,0,...) at mkdir+0x29 syscallenter(c7c86b80,ef2d2ce4,ef2d2ce4,0,c101f600,...) at syscallenter+0x263 syscall(ef2d2d28) at syscall+0x4f Xint0x80_syscall() at Xint0x80_syscall+0x21 --- syscall (136, FreeBSD ELF32, mkdir), eip = 0x28186643, esp = 0xbfbdb6fc, ebp = 0xbfbdbb28 --- Tracing command mkdir pid 11790 tid 100157 td 0xc7dea2e0 sched_switch(c7dea2e0,0,104,191,b0944b5,...) at sched_switch+0x3bc mi_switch(104,0,c0e8b280,1f3,60,...) at mi_switch+0x219 sleepq_switch(c7dea2e0,0,c0e8b280,268,60,...) at sleepq_switch+0x162 sleepq_wait(c8e67df0,60,c0e7c870,4,0,...) at sleepq_wait+0x63 __lockmgr_args(c8e67df0,80100,c8e67e5c,0,0,...) at __lockmgr_args+0xb1f ffs_lock(ef2eb7e4,c09f23db,c0e942f7,80100,c8e67d98,...) at ffs_lock+0xa1 VOP_LOCK1_APV(c0fbb3e0,ef2eb7e4,c7dea390,c0fd63a0,c8e67d98,...) at VOP_LOCK1_APV+0xb5 _vn_lock(c8e67d98,80100,c0e94f92,856,4,...) at _vn_lock+0x78 vget(c8e67d98,80100,c7dea2e0,50,0,...) at vget+0xbb vfs_hash_get(c73f6000,3f403,80000,c7dea2e0,ef2eb9e8,...) at vfs_hash_get+0xed ffs_vgetf(c73f6000,3f403,80000,ef2eb9e8,0,...) at ffs_vgetf+0x49 ffs_vget(c73f6000,3f403,80000,ef2eb9e8,c0bb1930,...) at ffs_vget+0x2e ffs_valloc(c9cab15c,41f8,c981d680,ef2eb9e8,c981d680,...) at ffs_valloc+0x500 ufs_mkdir(ef2ebbf8,c0ed9d95,0,0,ef2ebb3c,...) at ufs_mkdir+0xa9 VOP_MKDIR_APV(c0fbb3e0,ef2ebbf8,ef2ebbd0,ef2ebb3c,0,...) at VOP_MKDIR_APV+0xc5 kern_mkdirat(c7dea2e0,ffffff9c,bfbd41db,0,1f8,...) at kern_mkdirat+0x225 kern_mkdir(c7dea2e0,bfbd41db,0,1f8,ef2ebc7c,...) at kern_mkdir+0x2e mkdir(c7dea2e0,ef2ebcec,ef2ebd28,c0e8bbbe,0,...) at mkdir+0x29 syscallenter(c7dea2e0,ef2ebce4,ef2ebce4,0,c101f600,...) at syscallenter+0x263 syscall(ef2ebd28) at syscall+0x4f Xint0x80_syscall() at Xint0x80_syscall+0x21 --- syscall (136, FreeBSD ELF32, mkdir), eip = 0x28186643, esp = 0xbfbd3d8c, ebp = 0xbfbd41b8 --- Tracing command mkdir pid 11789 tid 100278 td 0xc997ab80 sched_switch(c997ab80,0,207,18c,d8b6960,...) at sched_switch+0x3bc mi_switch(207,0,c0e8bb7d,d4,c997ab80,...) at mi_switch+0x219 ast(ef4c0d28) at ast+0x2b6 doreti_ast() at doreti_ast+0x17 Tracing command mkdir pid 11788 tid 100269 td 0xc99c1b80 sched_switch(c99c1b80,0,104,191,993507a,...) at sched_switch+0x3bc mi_switch(104,0,c0e8b280,1f3,60,...) at mi_switch+0x219 sleepq_switch(c99c1b80,0,c0e8b280,268,60,...) at sleepq_switch+0x162 sleepq_wait(e0827160,60,c0e7e1b0,4,0,...) at sleepq_wait+0x63 __lockmgr_args(e0827160,81900,c8d03920,c0e7e1b0,60,...) at __lockmgr_args+0xb1f getblk(c8d03828,5bee0,0,4000,0,...) at getblk+0x167 breadn(c8d03828,5bee0,0,4000,0,...) at breadn+0x44 bread(c8d03828,5bee0,0,4000,0,...) at bread+0x4c ffs_alloccg(ca612ae0,1,16f90,0,800,...) at ffs_alloccg+0x123 ffs_hashalloc(16f90,0,800,800,c0bb2a10,...) at ffs_hashalloc+0x85 ffs_alloc(ca612ae0,0,0,16f90,0,...) at ffs_alloc+0x2ef ffs_balloc_ufs2(ca160c3c,0,0,200,c981d680,...) at ffs_balloc_ufs2+0x110c ufs_mkdir(ef49fbf8,c0ed9d95,0,0,ef49fb3c,...) at ufs_mkdir+0x6da VOP_MKDIR_APV(c0fbb3e0,ef49fbf8,ef49fbd0,ef49fb3c,0,...) at VOP_MKDIR_APV+0xc5 kern_mkdirat(c99c1b80,ffffff9c,bfbec74b,0,1f8,...) at kern_mkdirat+0x225 kern_mkdir(c99c1b80,bfbec74b,0,1f8,ef49fc7c,...) at kern_mkdir+0x2e mkdir(c99c1b80,ef49fcec,ef49fd28,c0e8bbbe,0,...) at mkdir+0x29 syscallenter(c99c1b80,ef49fce4,ef49fce4,0,c101f600,...) at syscallenter+0x263 syscall(ef49fd28) at syscall+0x4f Xint0x80_syscall() at Xint0x80_syscall+0x21 --- syscall (136, FreeBSD ELF32, mkdir), eip = 0x28186643, esp = 0xbfbec2fc, ebp = 0xbfbec728 --- Tracing command mkdir pid 11787 tid 100371 td 0xcb01a2e0 sched_switch(cb01a2e0,0,104,191,b5699e0,...) at sched_switch+0x3bc mi_switch(104,0,c0e8b280,1f3,60,...) at mi_switch+0x219 sleepq_switch(cb01a2e0,0,c0e8b280,268,60,...) at sleepq_switch+0x162 sleepq_wait(e07ff7a0,60,c0e7e1b0,4,0,...) at sleepq_wait+0x63 __lockmgr_args(e07ff7a0,81900,c8d03920,c0e7e1b0,60,...) at __lockmgr_args+0xb1f getblk(c8d03828,16f940,0,4000,0,...) at getblk+0x167 breadn(c8d03828,16f940,0,4000,0,...) at breadn+0x44 bread(c8d03828,16f940,0,4000,0,...) at bread+0x4c ffs_nodealloccg(c88f7cb0,4,17000,0,41f8,...) at ffs_nodealloccg+0x113 ffs_hashalloc(17000,0,41f8,0,c0bb1930,...) at ffs_hashalloc+0x85 ffs_valloc(c9645414,41f8,c981d680,ef6319e8,c981d680,...) at ffs_valloc+0x4d3 ufs_mkdir(ef631bf8,c0ed9d95,0,0,ef631b3c,...) at ufs_mkdir+0xa9 VOP_MKDIR_APV(c0fbb3e0,ef631bf8,ef631bd0,ef631b3c,0,...) at VOP_MKDIR_APV+0xc5 kern_mkdirat(cb01a2e0,ffffff9c,bfbe414b,0,1f8,...) at kern_mkdirat+0x225 kern_mkdir(cb01a2e0,bfbe414b,0,1f8,ef631c7c,...) at kern_mkdir+0x2e mkdir(cb01a2e0,ef631cec,ef631d28,c0e8bbbe,0,...) at mkdir+0x29 syscallenter(cb01a2e0,ef631ce4,ef631ce4,0,0,...) at syscallenter+0x263 syscall(ef631d28) at syscall+0x4f Xint0x80_syscall() at Xint0x80_syscall+0x21 --- syscall (136, FreeBSD ELF32, mkdir), eip = 0x28186643, esp = 0xbfbe3cfc, ebp = 0xbfbe4128 --- Tracing command mkdir pid 11786 tid 100252 td 0xc9993b80 sched_switch(c9993b80,0,602,18c,3dbf7c9,...) at sched_switch+0x3bc mi_switch(602,0,c0e8637f,cd,0,...) at mi_switch+0x219 critical_exit(c9993b80,0,0,c9993b80,e4548000,...) at critical_exit+0xa8 ipi_bitmap_handler(8,28,28,e454c000,e4548000,...) at ipi_bitmap_handler+0x82 Xipi_intr_bitmap_handler() at Xipi_intr_bitmap_handler+0x2f --- interrupt, eip = 0xc0cc559b, esp = 0xef45c524, ebp = 0xef45c528 --- spinlock_exit(c102e0d4,4,c0e84107,109) at spinlock_exit+0x2b _mtx_unlock_spin_flags(c102e0d4,0,c0ed1f81,4be,f6) at _mtx_unlock_spin_flags+0xf4 smp_tlb_shootdown(ef45c594,c0cc9e5f,e4548000,e454c000,c6d75380,...) at smp_tlb_shootdown+0xc0 smp_invlpg_range(e4548000,e454c000,c6d75380,0,e454c000,...) at smp_invlpg_range+0x1c pmap_invalidate_range(c11b05c0,e4548000,e454c000) at pmap_invalidate_range+0x4f pmap_qremove(e4548000,4,ef45c600,246,0,...) at pmap_qremove+0x54 allocbuf(e085eec0,0,c0a256b5,c6d75380,0,...) at allocbuf+0x18d brelse(e085eec0,e085eec0,df,e085eec0,e454bfe0,...) at brelse+0x172 bufwrite(e085eec0,0,c0ebb2cc,767,d00f2cc0) at bufwrite+0x16f ffs_bufwrite(e085eec0,0,c0eb861c,c24,c09f3266,...) at ffs_bufwrite+0x290 softdep_process_journal(c0eb861c,18a7,0,c8ea115c,e0885d20,...) at softdep_process_journal+0x7a8 jwait(c118f028,4,c0eb861c,190e,800,...) at jwait+0x2a trunc_dependencies(ffffffff,ffffffff,0,800,0,...) at trunc_dependencies+0x3ec softdep_journal_freeblocks(c8bdd488,0,0,0,800,...) at softdep_journal_freeblocks+0xdfb ffs_truncate(c8ea115c,0,0,c00,0,...) at ffs_truncate+0x94e ufs_inactive(ef45cb3c,c0ed946b,c8ea1220,c8ea1220,c8ea115c,...) at ufs_inactive+0x21d VOP_INACTIVE_APV(c0fbb3e0,ef45cb3c,c0e94f92,94e,c0fd6360,...) at VOP_INACTIVE_APV+0xc5 vinactive(c0fbb3e0,ef45cb70,c0e94f92,8a5,0,...) at vinactive+0xb1 vputx(ef45cc24,c0a4692d,c8ea115c,ffffffdf,2,...) at vputx+0x36c vput(c8ea115c,ffffffdf,2,ef45cbdc,bfbdaed7,...) at vput+0x10 kern_rmdirat(c9993b80,ffffff9c,bfbdaed7,0,ef45cc50,...) at kern_rmdirat+0x1cd kern_rmdir(c9993b80,bfbdaed7,0,ef45cc7c,c09eada3,...) at kern_rmdir+0x27 rmdir(c9993b80,ef45ccec,ef45cd28,c0e8bbbe,0,...) at rmdir+0x22 syscallenter(c9993b80,ef45cce4,ef45cce4,0,c1020980,...) at syscallenter+0x263 syscall(ef45cd28) at syscall+0x4f Xint0x80_syscall() at Xint0x80_syscall+0x21 --- syscall (137, FreeBSD ELF32, rmdir), eip = 0x280ee92b, esp = 0xbfbdaa6c, ebp = 0xbfbdaea8 --- Tracing command mkdir pid 11785 tid 100233 td 0xc98a0000 sched_switch(c98a0000,0,602,18c,9914deb,...) at sched_switch+0x3bc mi_switch(602,0,c0e8637f,cd,8,...) at mi_switch+0x219 critical_exit(c98a0000,0,2,0,c87226cc,...) at critical_exit+0xa8 ipi_bitmap_handler(8,28,28,c96b3740,c87226cc,...) at ipi_bitmap_handler+0x82 Xipi_intr_bitmap_handler() at Xipi_intr_bitmap_handler+0x2f --- interrupt, eip = 0xc0bf1bd5, esp = 0xef42196c, ebp = 0xef421b04 --- ufs_mkdir(ef421bf8,c0ed9d95,0,0,ef421b3c,...) at ufs_mkdir+0xc5 VOP_MKDIR_APV(c0fbb3e0,ef421bf8,ef421bd0,ef421b3c,0,...) at VOP_MKDIR_APV+0xc5 kern_mkdirat(c98a0000,ffffff9c,bfbefdbb,0,1f8,...) at kern_mkdirat+0x225 kern_mkdir(c98a0000,bfbefdbb,0,1f8,ef421c7c,...) at kern_mkdir+0x2e mkdir(c98a0000,ef421cec,ef421d28,c0e8bbbe,0,...) at mkdir+0x29 syscallenter(c98a0000,ef421ce4,ef421ce4,0,c1020300,...) at syscallenter+0x263 syscall(ef421d28) at syscall+0x4f Xint0x80_syscall() at Xint0x80_syscall+0x21 --- syscall (136, FreeBSD ELF32, mkdir), eip = 0x28186643, esp = 0xbfbef96c, ebp = 0xbfbefd98 --- Tracing command mkdir pid 11784 tid 100289 td 0xc997a000 kdb_enter(c0e85b53,c0e85b53,c0ebdc5d,ef4e95ac,3,...) at kdb_enter+0x3a panic(c0ebdc5d,c0ebc450,7c,dea5c0de,c9482e8c,...) at panic+0x134 mtrash_ctor(c9482e80,80,0,102,c0e7bad2,...) at mtrash_ctor+0x77 uma_zalloc_arg(c15b2700,0,102,2,e6784,...) at uma_zalloc_arg+0x137 malloc(60,c0fb8bf8,102,829,c73f6000,...) at malloc+0x118 newblk_lookup(1,ef4e9694,c0eb861c,11dd,c7345000,...) at newblk_lookup+0xb2 softdep_setup_blkmapdep(e081ff40,c73f6000,e6784,0,1,...) at softdep_setup_blkmapdep+0xbf ffs_alloccg(ca9e0000,a,e5b58,0,800,...) at ffs_alloccg+0x49c ffs_hashalloc(e5b58,0,800,800,c0bb2a10,...) at ffs_hashalloc+0x85 ffs_alloc(ca9e0000,0,0,e5b58,0,...) at ffs_alloc+0x2ef ffs_balloc_ufs2(c8b0c15c,0,0,200,c981d680,...) at ffs_balloc_ufs2+0x110c ufs_mkdir(ef4e9bf8,c0ed9d95,0,0,ef4e9b3c,...) at ufs_mkdir+0x6da VOP_MKDIR_APV(c0fbb3e0,ef4e9bf8,ef4e9bd0,ef4e9b3c,0,...) at VOP_MKDIR_APV+0xc5 kern_mkdirat(c997a000,ffffff9c,bfbe520b,0,1f8,...) at kern_mkdirat+0x225 kern_mkdir(c997a000,bfbe520b,0,1f8,ef4e9c7c,...) at kern_mkdir+0x2e mkdir(c997a000,ef4e9cec,ef4e9d28,c0e8bbbe,0,...) at mkdir+0x29 syscallenter(c997a000,ef4e9ce4,ef4e9ce4,0,c101f600,...) at syscallenter+0x263 syscall(ef4e9d28) at syscall+0x4f Xint0x80_syscall() at Xint0x80_syscall+0x21 --- syscall (136, FreeBSD ELF32, mkdir), eip = 0x28186643, esp = 0xbfbe4dbc, ebp = 0xbfbe51e8 --- Tracing command mkdir pid 11783 tid 100290 td 0xc9954b80 sched_switch(c9954b80,0,602,18c,e7b322d,...) at sched_switch+0x3bc mi_switch(602,0,c0e8637f,cd,c9954b80,...) at mi_switch+0x219 critical_exit(c11e6200,0,0,c11887f4,0,...) at critical_exit+0xa8 lapic_handle_timer(ef4ec880) at lapic_handle_timer+0x95 Xtimerint() at Xtimerint+0x20 --- interrupt, eip = 0xc0998ac9, esp = 0xef4ec8c0, ebp = 0xef4ec8dc --- _mtx_lock_sleep(c11887f4,c9954b80,0,c0e925eb,615,...) at _mtx_lock_sleep+0x99 _mtx_lock_flags(c11887f4,0,c0e925eb,615,4,...) at _mtx_lock_flags+0xf7 bqrelse(e0842b00,0,c0e925eb,9cd,4,...) at bqrelse+0x1cc bdwrite(e0842b00,e0842b00,3f49d,ef4eca14,0,...) at bdwrite+0x1e9 ffs_freefile(c7004a00,c7345000,c8d03828,3f49d,41f8,...) at ffs_freefile+0x3bc handle_workitem_freefile(c118f028,0,c0eb861c,1a40,ef4eca78,...) at handle_workitem_freefile+0x120 softdep_freefile(c9f99414,3f49d,41f8,c0eb861c,2108,...) at softdep_freefile+0x8ee ffs_vfree(c9f99414,3f49d,41f8,c00,0,...) at ffs_vfree+0x2e ufs_inactive(ef4ecb3c,c0ed946b,c9f994d8,c9f994d8,c9f99414,...) at ufs_inactive+0x2d5 VOP_INACTIVE_APV(c0fbb3e0,ef4ecb3c,c0e94f92,94e,c0fd6360,...) at VOP_INACTIVE_APV+0xc5 vinactive(c0fbb3e0,ef4ecb70,c0e94f92,8a5,0,...) at vinactive+0xb1 vputx(ef4ecc24,c0a4692d,c9f99414,ffffffdf,2,...) at vputx+0x36c vput(c9f99414,ffffffdf,2,ef4ecbdc,bfbd0097,...) at vput+0x10 kern_rmdirat(c9954b80,ffffff9c,bfbd0097,0,ef4ecc50,...) at kern_rmdirat+0x1cd kern_rmdir(c9954b80,bfbd0097,0,ef4ecc7c,c09eada3,...) at kern_rmdir+0x27 rmdir(c9954b80,ef4eccec,ef4ecd28,c0e8bbbe,0,...) at rmdir+0x22 syscallenter(c9954b80,ef4ecce4,ef4ecce4,0,c101f600,...) at syscallenter+0x263 syscall(ef4ecd28) at syscall+0x4f Xint0x80_syscall() at Xint0x80_syscall+0x21 --- syscall (137, FreeBSD ELF32, rmdir), eip = 0x280ee92b, esp = 0xbfbcfc2c, ebp = 0xbfbd0068 --- Tracing command mkdir pid 11782 tid 100351 td 0xcae708a0 sched_switch(cae708a0,0,602,18c,4aa8769,...) at sched_switch+0x3bc mi_switch(602,0,c0e8637f,cd,4,...) at mi_switch+0x219 critical_exit(cae708a0,0,1,2,c115725c,...) at critical_exit+0xa8 ipi_bitmap_handler(8,28,28,c1157228,c115725c,...) at ipi_bitmap_handler+0x82 Xipi_intr_bitmap_handler() at Xipi_intr_bitmap_handler+0x2f --- interrupt, eip = 0xc09f39e2, esp = 0xef5f558c, ebp = 0xef5f55bc --- witness_warn(5,0,c0ebd9bd,c0e7a9a6,c09f23db,...) at witness_warn+0xa2 uma_zalloc_arg(c159e000,0,102,ef5f5648,c0943535,...) at uma_zalloc_arg+0x34 g_alloc_bio(1a,e084ad00,e084ad00,e084ad00,ef5f5664,...) at g_alloc_bio+0x23 g_vfs_strategy(c8d03920,e084ad00) at g_vfs_strategy+0x35 ffs_geom_strategy(c8d03920,e084ad00,df,e084ad00,e4233fe0,...) at ffs_geom_strategy+0x15f bufwrite(e084ad00,0,c0ebb2cc,767,cf9ca500) at bufwrite+0x159 ffs_bufwrite(e084ad00,0,c0eb861c,c24,c09f3266,...) at ffs_bufwrite+0x290 softdep_process_journal(c0eb861c,18a7,18a7,ca203ae0,e0871820,...) at softdep_process_journal+0x7a8 jwait(c118f028,4,c0eb861c,190e,800,...) at jwait+0x2a trunc_dependencies(ffffffff,ffffffff,0,800,0,...) at trunc_dependencies+0x3ec softdep_journal_freeblocks(cab37828,0,0,0,800,...) at softdep_journal_freeblocks+0xdfb ffs_truncate(ca203ae0,0,0,c00,0,...) at ffs_truncate+0x94e ufs_inactive(ef5f5b3c,c0ed946b,ca203ba4,ca203ba4,ca203ae0,...) at ufs_inactive+0x21d VOP_INACTIVE_APV(c0fbb3e0,ef5f5b3c,c0e94f92,94e,c0fd6360,...) at VOP_INACTIVE_APV+0xc5 vinactive(c0fbb3e0,ef5f5b70,c0e94f92,8a5,0,...) at vinactive+0xb1 vputx(ef5f5c24,c0a4692d,ca203ae0,ffffffdf,2,...) at vputx+0x36c vput(ca203ae0,ffffffdf,2,ef5f5bdc,bfbed857,...) at vput+0x10 kern_rmdirat(cae708a0,ffffff9c,bfbed857,0,ef5f5c50,...) at kern_rmdirat+0x1cd kern_rmdir(cae708a0,bfbed857,0,ef5f5c7c,c09eada3,...) at kern_rmdir+0x27 rmdir(cae708a0,ef5f5cec,ef5f5d28,c0e8bbbe,0,...) at rmdir+0x22 syscallenter(cae708a0,ef5f5ce4,ef5f5ce4,0,c101f600,...) at syscallenter+0x263 syscall(ef5f5d28) at syscall+0x4f Xint0x80_syscall() at Xint0x80_syscall+0x21 --- syscall (137, FreeBSD ELF32, rmdir), eip = 0x280ee92b, esp = 0xbfbed3ec, ebp = 0xbfbed828 --- Tracing command mkdir pid 11781 tid 100342 td 0xca1bf8a0 sched_switch(ca1bf8a0,0,104,191,9d09ac28,...) at sched_switch+0x3bc mi_switch(104,0,c0e8b280,1f3,6c,...) at mi_switch+0x219 sleepq_switch(ca1bf8a0,0,c0e8b280,1a7,6c,...) at sleepq_switch+0x162 sleepq_catch_signals(c0e8b280,160,0,100,100,...) at sleepq_catch_signals+0xf9 sleepq_wait_sig(ca017000,6c,c0e8e012,100,0,...) at sleepq_wait_sig+0x17 _sleep(ca017000,ca017088,16c,c0e8e012,0,...) at _sleep+0x35c kern_wait(ca1bf8a0,2e06,ef5c1c44,0,0,...) at kern_wait+0xbe6 wait4(ca1bf8a0,ef5c1cec,281a9d08,1,0,...) at wait4+0x3b syscallenter(ca1bf8a0,ef5c1ce4,c0cd2e4d,c1011070,0,...) at syscallenter+0x263 syscall(ef5c1d28) at syscall+0x4f Xint0x80_syscall() at Xint0x80_syscall+0x21 --- syscall (7, FreeBSD ELF32, wait4), eip = 0x2810493b, esp = 0xbfbfe7fc, ebp = 0xbfbfe818 --- Tracing command mkdir pid 11780 tid 100139 td 0xc783a000 sched_switch(c783a000,0,104,191,d01d7f88,...) at sched_switch+0x3bc mi_switch(104,0,c0e8b280,1f3,6c,...) at mi_switch+0x219 sleepq_switch(c783a000,0,c0e8b280,1a7,6c,...) at sleepq_switch+0x162 sleepq_catch_signals(3e9,c09e7470,c783a000,3,100,...) at sleepq_catch_signals+0xf9 sleepq_timedwait_sig(c1012984,6c,c0e87077,100,0,...) at sleepq_timedwait_sig+0x1a _sleep(c1012984,0,16c,c0e87077,3e9,...) at _sleep+0x328 kern_nanosleep(c783a000,ef2abc34,ef2abc3c,1,0,...) at kern_nanosleep+0xc1 nanosleep(c783a000,ef2abcec,ef2abd28,c0e8bbbe,0,...) at nanosleep+0x6f syscallenter(c783a000,ef2abce4,ef2abce4,0,0,...) at syscallenter+0x263 syscall(ef2abd28) at syscall+0x4f Xint0x80_syscall() at Xint0x80_syscall+0x21 --- syscall (240, FreeBSD ELF32, nanosleep), eip = 0x28179b67, esp = 0xbfbfe7ec, ebp = 0xbfbfe818 --- Tracing command run pid 11521 tid 100173 td 0xc98925c0 sched_switch(c98925c0,0,104,191,9c77f5a2,...) at sched_switch+0x3bc mi_switch(104,0,c0e8b280,1f3,6c,...) at mi_switch+0x219 sleepq_switch(c98925c0,0,c0e8b280,1a7,6c,...) at sleepq_switch+0x162 sleepq_catch_signals(c0e8b280,160,0,100,100,...) at sleepq_catch_signals+0xf9 sleepq_wait_sig(c9879af0,6c,c0e8e012,100,0,...) at sleepq_wait_sig+0x17 _sleep(c9879af0,c9879b78,16c,c0e8e012,0,...) at _sleep+0x35c kern_wait(c98925c0,2e04,ef341c44,0,0,...) at kern_wait+0xbe6 wait4(c98925c0,ef341cec,ef341d28,c0e8bbbe,0,...) at wait4+0x3b syscallenter(c98925c0,ef341ce4,ef341ce4,0,0,...) at syscallenter+0x263 syscall(ef341d28) at syscall+0x4f Xint0x80_syscall() at Xint0x80_syscall+0x21 --- syscall (7, FreeBSD ELF32, wait4), eip = 0x2810393b, esp = 0xbfbfe2ac, ebp = 0xbfbfe2c8 --- Tracing command run pid 11520 tid 100231 td 0xc994e8a0 sched_switch(c994e8a0,0,104,191,16a6c71e,...) at sched_switch+0x3bc mi_switch(104,0,c0e8b280,1f3,6c,...) at mi_switch+0x219 sleepq_switch(c994e8a0,0,c0e8b280,1a7,6c,...) at sleepq_switch+0x162 sleepq_catch_signals(c0e8b280,160,0,100,100,...) at sleepq_catch_signals+0xf9 sleepq_wait_sig(c9956af0,6c,c0e8e012,100,0,...) at sleepq_wait_sig+0x17 _sleep(c9956af0,c9956b78,16c,c0e8e012,0,...) at _sleep+0x35c kern_wait(c994e8a0,2d01,ef41bc44,0,0,...) at kern_wait+0xbe6 wait4(c994e8a0,ef41bcec,281a8d08,1,0,...) at wait4+0x3b syscallenter(c994e8a0,ef41bce4,c0cd2e4d,c1011070,0,...) at syscallenter+0x263 syscall(ef41bd28) at syscall+0x4f Xint0x80_syscall() at Xint0x80_syscall+0x21 --- syscall (7, FreeBSD ELF32, wait4), eip = 0x2810393b, esp = 0xbfbfe7cc, ebp = 0xbfbfe7e8 --- Tracing command run pid 11519 tid 100195 td 0xc98a3000 sched_switch(c98a3000,0,104,191,cb3bee1,...) at sched_switch+0x3bc mi_switch(104,0,c0e8b280,1f3,6c,...) at mi_switch+0x219 sleepq_switch(c98a3000,0,c0e8b280,1a7,6c,...) at sleepq_switch+0x162 sleepq_catch_signals(3e9,c09e7470,c98a3000,0,100,...) at sleepq_catch_signals+0xf9 sleepq_timedwait_sig(c1012984,6c,c0e87077,100,0,...) at sleepq_timedwait_sig+0x1a _sleep(c1012984,0,16c,c0e87077,3e9,...) at _sleep+0x328 kern_nanosleep(c98a3000,ef395c34,ef395c3c,1,0,...) at kern_nanosleep+0xc1 nanosleep(c98a3000,ef395cec,ef395d28,c0e8bbbe,0,...) at nanosleep+0x6f syscallenter(c98a3000,ef395ce4,ef395ce4,0,0,...) at syscallenter+0x263 syscall(ef395d28) at syscall+0x4f Xint0x80_syscall() at Xint0x80_syscall+0x21 --- syscall (240, FreeBSD ELF32, nanosleep), eip = 0x28178b67, esp = 0xbfbfe7bc, ebp = 0xbfbfe7e8 --- Tracing command sh pid 11514 tid 100246 td 0xc989db80 sched_switch(c989db80,0,104,191,11e90e45,...) at sched_switch+0x3bc mi_switch(104,0,c0e8b280,1f3,6c,...) at mi_switch+0x219 sleepq_switch(c989db80,0,c0e8b280,1a7,6c,...) at sleepq_switch+0x162 sleepq_catch_signals(c0e8b280,160,0,100,100,...) at sleepq_catch_signals+0xf9 sleepq_wait_sig(c9911578,6c,c0e8e012,100,0,...) at sleepq_wait_sig+0x17 _sleep(c9911578,c9911600,16c,c0e8e012,0,...) at _sleep+0x35c kern_wait(c989db80,ffffffff,ef449c44,2,0,...) at kern_wait+0xbe6 wait4(c989db80,ef449cec,ef449d28,c0e8bbbe,0,...) at wait4+0x3b syscallenter(c989db80,ef449ce4,ef449ce4,0,0,...) at syscallenter+0x263 syscall(ef449d28) at syscall+0x4f Xint0x80_syscall() at Xint0x80_syscall+0x21 --- syscall (7, FreeBSD ELF32, wait4), eip = 0x2816993b, esp = 0xbfbfe61c, ebp = 0xbfbfe638 --- Tracing command bash pid 11513 tid 100276 td 0xc997b000 sched_switch(c997b000,0,104,191,a041832,...) at sched_switch+0x3bc mi_switch(104,0,c0e8b280,1f3,6c,...) at mi_switch+0x219 sleepq_switch(c997b000,0,c0e8b280,1a7,6c,...) at sleepq_switch+0x162 sleepq_catch_signals(c0e8b280,160,0,100,100,...) at sleepq_catch_signals+0xf9 sleepq_wait_sig(c99862bc,6c,c0e8e012,100,0,...) at sleepq_wait_sig+0x17 _sleep(c99862bc,c9986344,16c,c0e8e012,0,...) at _sleep+0x35c kern_wait(c997b000,ffffffff,ef4b8c44,0,0,...) at kern_wait+0xbe6 wait4(c997b000,ef4b8cec,28368d08,1,0,...) at wait4+0x3b syscallenter(c997b000,ef4b8ce4,c0cd2e4d,c1011070,0,...) at syscallenter+0x263 syscall(ef4b8d28) at syscall+0x4f Xint0x80_syscall() at Xint0x80_syscall+0x21 --- syscall (7, FreeBSD ELF32, wait4), eip = 0x282c393b, esp = 0xbfbfe3bc, ebp = 0xbfbfe3d8 --- Tracing command su pid 11511 tid 100171 td 0xc74a42e0 sched_switch(c74a42e0,0,104,191,60da8b5,...) at sched_switch+0x3bc mi_switch(104,0,c0e8b280,1f3,6c,...) at mi_switch+0x219 sleepq_switch(c74a42e0,0,c0e8b280,1a7,6c,...) at sleepq_switch+0x162 sleepq_catch_signals(c0e8b280,160,0,100,100,...) at sleepq_catch_signals+0xf9 sleepq_wait_sig(c987a2bc,6c,c0e8e012,100,0,...) at sleepq_wait_sig+0x17 _sleep(c987a2bc,c987a344,16c,c0e8e012,0,...) at _sleep+0x35c kern_wait(c74a42e0,2cf9,ef339c44,2,0,...) at kern_wait+0xbe6 wait4(c74a42e0,ef339cec,281c8d08,1,0,...) at wait4+0x3b syscallenter(c74a42e0,ef339ce4,c0cd2e4d,c1011070,0,...) at syscallenter+0x263 syscall(ef339d28) at syscall+0x4f Xint0x80_syscall() at Xint0x80_syscall+0x21 --- syscall (7, FreeBSD ELF32, wait4), eip = 0x2812393b, esp = 0xbfbfe2fc, ebp = 0xbfbfe318 --- Tracing command md5 pid 11506 tid 100148 td 0xc7c878a0 sched_switch(c7c878a0,0,104,191,8f814eb,...) at sched_switch+0x3bc mi_switch(104,0,c0e8b280,1f3,5c,...) at mi_switch+0x219 sleepq_switch(c7c878a0,0,c0e8b280,268,0,...) at sleepq_switch+0x162 sleepq_wait(c7349800,5c,c0e31e71,0,0,...) at sleepq_wait+0x63 _sleep(c7349800,c7349820,25c,c0e31e71,0,...) at _sleep+0x372 md_kthread(c7349800,ef2c6d28,c0e8046c,390,c7cfb2bc,...) at md_kthread+0x11a fork_exit(c07276f0,c7349800,ef2c6d28) at fork_exit+0xb8 fork_trampoline() at fork_trampoline+0x8 --- trap 0, eip = 0, esp = 0xef2c6d60, ebp = 0 --- Tracing command sh pid 11493 tid 100288 td 0xc997a2e0 sched_switch(c997a2e0,0,104,191,a8b9198e,...) at sched_switch+0x3bc mi_switch(104,0,c0e8b280,1f3,6c,...) at mi_switch+0x219 sleepq_switch(c997a2e0,0,c0e8b280,1a7,6c,...) at sleepq_switch+0x162 sleepq_catch_signals(c0e8b280,160,0,100,100,...) at sleepq_catch_signals+0xf9 sleepq_wait_sig(c9985578,6c,c0e8e012,100,0,...) at sleepq_wait_sig+0x17 _sleep(c9985578,c9985600,16c,c0e8e012,0,...) at _sleep+0x35c kern_wait(c997a2e0,ffffffff,ef4e6c44,2,0,...) at kern_wait+0xbe6 wait4(c997a2e0,ef4e6cec,ef4e6d28,c0e8bbbe,0,...) at wait4+0x3b syscallenter(c997a2e0,ef4e6ce4,ef4e6ce4,0,0,...) at syscallenter+0x263 syscall(ef4e6d28) at syscall+0x4f Xint0x80_syscall() at Xint0x80_syscall+0x21 --- syscall (7, FreeBSD ELF32, wait4), eip = 0x2816993b, esp = 0xbfbfe74c, ebp = 0xbfbfe768 --- Tracing command awk pid 2352 tid 100166 td 0xc74a22e0 sched_switch(c74a22e0,0,104,191,a21a49fc,...) at sched_switch+0x3bc mi_switch(104,0,c0e8b280,1f3,5c,...) at mi_switch+0x219 sleepq_switch(c74a22e0,0,c0e8b280,1a7,5c,...) at sleepq_switch+0x162 sleepq_catch_signals(c0e8b280,160,0,100,100,...) at sleepq_catch_signals+0xf9 sleepq_wait_sig(c781e000,5c,c0e8da43,100,0,...) at sleepq_wait_sig+0x17 _sleep(c781e000,c781e170,15c,c0e8da43,0,...) at _sleep+0x35c pipe_read(c74330e0,ef325c28,c715b700,0,c74a22e0,...) at pipe_read+0x417 dofileread(ef325c28,ffffffff,ffffffff,0,c74330e0,...) at dofileread+0x9e kern_readv(c74a22e0,0,ef325c28,ef325c48,1,...) at kern_readv+0x58 read(c74a22e0,ef325cec,ef325d80,ef325c88,0,...) at read+0x4f syscallenter(c74a22e0,ef325ce4,c0cd2b06,0,0,...) at syscallenter+0x263 syscall(ef325d28) at syscall+0x4f Xint0x80_syscall() at Xint0x80_syscall+0x21 --- syscall (3, FreeBSD ELF32, read), eip = 0x281b8623, esp = 0xbfbfe93c, ebp = 0xbfbfe958 --- Tracing command sh pid 2351 tid 100164 td 0xc74a28a0 sched_switch(c74a28a0,0,104,191,a246b7b3,...) at sched_switch+0x3bc mi_switch(104,0,c0e8b280,1f3,6c,...) at mi_switch+0x219 sleepq_switch(c74a28a0,0,c0e8b280,1a7,6c,...) at sleepq_switch+0x162 sleepq_catch_signals(c0e8b280,160,0,100,100,...) at sleepq_catch_signals+0xf9 sleepq_wait_sig(c749b578,6c,c0e8e012,100,0,...) at sleepq_wait_sig+0x17 _sleep(c749b578,c749b600,16c,c0e8e012,0,...) at _sleep+0x35c kern_wait(c74a28a0,ffffffff,ef312c44,2,0,...) at kern_wait+0xbe6 wait4(c74a28a0,ef312cec,ef312d28,c0e8bbbe,0,...) at wait4+0x3b syscallenter(c74a28a0,ef312ce4,ef312ce4,0,0,...) at syscallenter+0x263 syscall(ef312d28) at syscall+0x4f Xint0x80_syscall() at Xint0x80_syscall+0x21 --- syscall (7, FreeBSD ELF32, wait4), eip = 0x2816993b, esp = 0xbfbfe98c, ebp = 0xbfbfe9a8 --- Tracing command tail pid 2350 tid 100146 td 0xc7c88000 sched_switch(c7c88000,0,104,191,e7f8d5b4,...) at sched_switch+0x3bc mi_switch(104,0,c0e8b280,1f3,68,...) at mi_switch+0x219 sleepq_switch(c7c88000,0,c0e8b280,1a7,68,...) at sleepq_switch+0x162 sleepq_catch_signals(3e9,c09e7470,c7c88000,0,100,...) at sleepq_catch_signals+0xf9 sleepq_timedwait_sig(c738d500,68,c0e80070,100,0,...) at sleepq_timedwait_sig+0x1a _sleep(c738d500,c738d500,168,c0e80070,3e9,...) at _sleep+0x328 kern_kevent(c7c88000,4,0,1,ef2c0c28,...) at kern_kevent+0x364 kevent(c7c88000,ef2c0cec,ef2c0d28,c0e8bbbe,0,...) at kevent+0x19e syscallenter(c7c88000,ef2c0ce4,ef2c0ce4,0,c1020300,...) at syscallenter+0x263 syscall(ef2c0d28) at syscall+0x4f Xint0x80_syscall() at Xint0x80_syscall+0x21 --- syscall (363, FreeBSD ELF32, kevent), eip = 0x28169c9b, esp = 0xbfbfeb1c, ebp = 0xbfbfebd8 --- Tracing command sshd pid 2349 tid 100154 td 0xc7c865c0 sched_switch(c7c865c0,0,104,191,a5a91bcf,...) at sched_switch+0x3bc mi_switch(104,0,c0e8b280,1f3,0,...) at mi_switch+0x219 sleepq_switch(c7c865c0,0,c0e8b280,1a7,0,...) at sleepq_switch+0x162 sleepq_catch_signals(c099890a,c7426e50,0,c0e84107,c7c865c0,...) at sleepq_catch_signals+0xf9 sleepq_wait_sig(c7426e64,0,ef2d8a4c,101,0,...) at sleepq_wait_sig+0x17 _cv_wait_sig(c7426e64,c7426e50,c0e8d885,627,c744acb0,...) at _cv_wait_sig+0x243 seltdwait(c744acb0,58,c7419280,c7c865c0,246,...) at seltdwait+0xa2 kern_select(c7c865c0,c,288060b8,288060dc,0,0,20,c7cfa000,c7cfa000) at kern_select+0x504 select(c7c865c0,ef2d8cec,ef2d8d28,c0e8bbbe,0,...) at select+0x66 syscallenter(c7c865c0,ef2d8ce4,ef2d8ce4,0,0,...) at syscallenter+0x263 syscall(ef2d8d28) at syscall+0x4f Xint0x80_syscall() at Xint0x80_syscall+0x21 --- syscall (93, FreeBSD ELF32, select), eip = 0x284bd5a3, esp = 0xbfbfe19c, ebp = 0xbfbfe1e8 --- Tracing command top pid 2348 tid 100130 td 0xc783bb80 sched_switch(c783bb80,0,104,191,ce3e91c8,...) at sched_switch+0x3bc mi_switch(104,0,c0e8b280,1f3,0,...) at mi_switch+0x219 sleepq_switch(c783bb80,0,c0e8b280,1a7,0,...) at sleepq_switch+0x162 sleepq_catch_signals(ef290a14,c099890a,c7426910,0,c783bb80,...) at sleepq_catch_signals+0xf9 sleepq_timedwait_sig(c7426924,0,ef290a4c,101,0,...) at sleepq_timedwait_sig+0x1a _cv_timedwait_sig(c7426924,c7426910,3e9,627,c7931e38,...) at _cv_timedwait_sig+0x252 seltdwait(ef290bf8,ef290c00,c74ba700,c783bb80,38392e36,...) at seltdwait+0x8a kern_select(c783bb80,2,bfbfebac,0,0,ef290c40,20,1,0) at kern_select+0x504 select(c783bb80,ef290cec,ef290d28,c0e8bbbe,0,...) at select+0x66 syscallenter(c783bb80,ef290ce4,ef290ce4,0,0,...) at syscallenter+0x263 syscall(ef290d28) at syscall+0x4f Xint0x80_syscall() at Xint0x80_syscall+0x21 --- syscall (93, FreeBSD ELF32, select), eip = 0x281ee5a3, esp = 0xbfbfeb4c, ebp = 0xbfbfeca8 --- Tracing command sh pid 2347 tid 100136 td 0xc783a8a0 Tracing command sshd pid 2346 tid 100140 td 0xc778cb80 sched_switch(c778cb80,0,104,191,f367639e,...) at sched_switch+0x3bc mi_switch(104,0,c0e8b280,1f3,0,...) at mi_switch+0x219 sleepq_switch(c778cb80,0,c0e8b280,1a7,0,...) at sleepq_switch+0x162 sleepq_catch_signals(c099890a,c73bd750,0,c0e84107,c778cb80,...) at sleepq_catch_signals+0xf9 sleepq_wait_sig(c73bd764,0,ef2aea4c,101,0,...) at sleepq_wait_sig+0x17 _cv_wait_sig(c73bd764,c73bd750,c0e8d885,627,c74b9118,...) at _cv_wait_sig+0x243 seltdwait(c74b9118,58,c74ba780,c778cb80,f33,...) at seltdwait+0xa2 kern_select(c778cb80,c,288060b8,288060dc,0,0,20,c7839578,c7839578) at kern_select+0x504 select(c778cb80,ef2aecec,80816b0,1,0,...) at select+0x66 syscallenter(c778cb80,ef2aece4,c0cd2e4d,c1011070,0,...) at syscallenter+0x263 syscall(ef2aed28) at syscall+0x4f Xint0x80_syscall() at Xint0x80_syscall+0x21 --- syscall (93, FreeBSD ELF32, select), eip = 0x284bd5a3, esp = 0xbfbfe19c, ebp = 0xbfbfe1e8 --- Tracing command sshd pid 2345 tid 100082 td 0xc7422b80 sched_switch(c7422b80,0,104,191,cf726059,...) at sched_switch+0x3bc mi_switch(104,0,c0e8b280,1f3,0,...) at mi_switch+0x219 sleepq_switch(c7422b80,0,c0e8b280,1a7,0,...) at sleepq_switch+0x162 sleepq_catch_signals(c099890a,c73ebd90,0,c0e84107,c7422b80,...) at sleepq_catch_signals+0xf9 sleepq_wait_sig(c73ebda4,0,ef19da4c,101,0,...) at sleepq_wait_sig+0x17 _cv_wait_sig(c73ebda4,c73ebd90,c0e8d885,627,c744ae00,...) at _cv_wait_sig+0x243 seltdwait(c744ae00,58,c791a680,c7422b80,246,...) at seltdwait+0xa2 kern_select(c7422b80,a,288060b8,288060dc,0,0,20,c73a6af0,c73a6af0) at kern_select+0x504 select(c7422b80,ef19dcec,ef19dd28,c0e8bbbe,0,...) at select+0x66 syscallenter(c7422b80,ef19dce4,ef19dce4,0,0,...) at syscallenter+0x263 syscall(ef19dd28) at syscall+0x4f Xint0x80_syscall() at Xint0x80_syscall+0x21 --- syscall (93, FreeBSD ELF32, select), eip = 0x284bd5a3, esp = 0xbfbfe19c, ebp = 0xbfbfe1e8 --- Tracing command sshd pid 2341 tid 100124 td 0xc783eb80 Tracing command sshd pid 2340 tid 100112 td 0xc778b8a0 Tracing command sshd pid 2339 tid 100137 td 0xc783a5c0 Tracing command vim pid 2338 tid 100159 td 0xc7de9b80 sched_switch(c7de9b80,0,104,191,e41f5482,...) at sched_switch+0x3bc mi_switch(104,0,c0e8b280,1f3,0,...) at mi_switch+0x219 sleepq_switch(c7de9b80,0,c0e8b280,1a7,0,...) at sleepq_switch+0x162 sleepq_catch_signals(c099890a,c7426b50,0,c0e84107,c7de9b80,...) at sleepq_catch_signals+0xf9 sleepq_wait_sig(c7426b64,0,ef2f1aa4,101,0,...) at sleepq_wait_sig+0x17 _cv_wait_sig(c7426b64,c7426b50,c0e8d885,627,ef2f1b34,...) at _cv_wait_sig+0x243 seltdwait(c74b202c,c0e8d885,535,c7de9b80,ef2f1b2c,...) at seltdwait+0xa2 poll(c7de9b80,ef2f1cec,ef2f1d28,c0e8bbbe,0,...) at poll+0x300 syscallenter(c7de9b80,ef2f1ce4,ef2f1ce4,23,c101fc80,...) at syscallenter+0x263 syscall(ef2f1d28) at syscall+0x4f Xint0x80_syscall() at Xint0x80_syscall+0x21 --- syscall (209, FreeBSD ELF32, poll), eip = 0x290127ab, esp = 0xbfbfe0ec, ebp = 0xbfbfe108 --- Tracing command bash pid 2330 tid 100100 td 0xc777ab80 sched_switch(c777ab80,0,104,191,14504278,...) at sched_switch+0x3bc mi_switch(104,0,c0e8b280,1f3,0,...) at mi_switch+0x219 sleepq_switch(c777ab80,0,c0e8b280,1a7,0,...) at sleepq_switch+0x162 sleepq_catch_signals(c099890a,c9740c04,0,c0e84107,c777ab80,...) at sleepq_catch_signals+0xf9 sleepq_wait_sig(c9740c70,0,ef1f6ad8,101,0,...) at sleepq_wait_sig+0x17 _cv_wait_sig(c9740c70,c9740c04,c0e8f8f0,514,0,...) at _cv_wait_sig+0x243 tty_wait(c9740c00,c9740c70,ef1f6c28,1,0,...) at tty_wait+0x71 ttydisc_read(c9740c00,ef1f6c28,0,9f,0,...) at ttydisc_read+0x22c ttydev_read(c74b1900,ef1f6c28,0,0,1,...) at ttydev_read+0xaa devfs_read_f(c79121c0,ef1f6c28,c74ba280,0,c777ab80,...) at devfs_read_f+0x7e dofileread(ef1f6c28,ffffffff,ffffffff,0,c79121c0,...) at dofileread+0x9e kern_readv(c777ab80,0,ef1f6c28,ef1f6c48,1,...) at kern_readv+0x58 read(c777ab80,ef1f6cec,ef1f6d28,c0e8bbbe,0,...) at read+0x4f syscallenter(c777ab80,ef1f6ce4,ef1f6ce4,0,0,...) at syscallenter+0x263 syscall(ef1f6d28) at syscall+0x4f Xint0x80_syscall() at Xint0x80_syscall+0x21 --- syscall (3, FreeBSD ELF32, read), eip = 0x28354623, esp = 0xbfbfdfcc, ebp = 0xbfbfdff8 --- Tracing command sshd pid 2329 tid 100088 td 0xc74865c0 sched_switch(c74865c0,0,104,191,e41d539e,...) at sched_switch+0x3bc mi_switch(104,0,c0e8b280,1f3,0,...) at mi_switch+0x219 sleepq_switch(c74865c0,0,c0e8b280,1a7,0,...) at sleepq_switch+0x162 sleepq_catch_signals(c099890a,c7425050,0,c0e84107,c74865c0,...) at sleepq_catch_signals+0xf9 sleepq_wait_sig(c7425064,0,ef1b7a4c,101,0,...) at sleepq_wait_sig+0x17 _cv_wait_sig(c7425064,c7425050,c0e8d885,627,c744a818,...) at _cv_wait_sig+0x243 seltdwait(c744a818,58,c7419c00,c74865c0,246,...) at seltdwait+0xa2 kern_select(c74865c0,c,288060b8,288060dc,0,0,20,c701e834,c701e834) at kern_select+0x504 select(c74865c0,ef1b7cec,ef1b7d28,c0e8bbbe,0,...) at select+0x66 syscallenter(c74865c0,ef1b7ce4,ef1b7ce4,0,0,...) at syscallenter+0x263 syscall(ef1b7d28) at syscall+0x4f Xint0x80_syscall() at Xint0x80_syscall+0x21 --- syscall (93, FreeBSD ELF32, select), eip = 0x284bd5a3, esp = 0xbfbfe19c, ebp = 0xbfbfe1e8 --- Tracing command sshd pid 2327 tid 100110 td 0xc778c000 Tracing command bash pid 2318 tid 100150 td 0xc7c872e0 sched_switch(c7c872e0,0,104,191,dd2cb9d2,...) at sched_switch+0x3bc mi_switch(104,0,c0e8b280,1f3,6c,...) at mi_switch+0x219 sleepq_switch(c7c872e0,0,c0e8b280,1a7,6c,...) at sleepq_switch+0x162 sleepq_catch_signals(c0e8b280,160,0,100,100,...) at sleepq_catch_signals+0xf9 sleepq_wait_sig(c7cfaaf0,6c,c0e8e012,100,0,...) at sleepq_wait_sig+0x17 _sleep(c7cfaaf0,c7cfab78,16c,c0e8e012,0,...) at _sleep+0x35c kern_wait(c7c872e0,ffffffff,ef2ccc44,6,0,...) at kern_wait+0xbe6 wait4(c7c872e0,ef2cccec,ef2ccd28,c0e8bbbe,0,...) at wait4+0x3b syscallenter(c7c872e0,ef2ccce4,ef2ccce4,0,0,...) at syscallenter+0x263 syscall(ef2ccd28) at syscall+0x4f Xint0x80_syscall() at Xint0x80_syscall+0x21 --- syscall (7, FreeBSD ELF32, wait4), eip = 0x282c393b, esp = 0xbfbfe53c, ebp = 0xbfbfe558 --- Tracing command csh pid 2314 tid 100151 td 0xc7c87000 Tracing command su pid 2313 tid 100117 td 0xc778ab80 Tracing command bash pid 2308 tid 100121 td 0xc778a000 Tracing command sshd pid 2307 tid 100094 td 0xc777b5c0 sched_switch(c777b5c0,0,104,191,a8a206d5,...) at sched_switch+0x3bc mi_switch(104,0,c0e8b280,1f3,0,...) at mi_switch+0x219 sleepq_switch(c777b5c0,0,c0e8b280,1a7,0,...) at sleepq_switch+0x162 sleepq_catch_signals(c099890a,c74269d0,0,c0e84107,c777b5c0,...) at sleepq_catch_signals+0xf9 sleepq_wait_sig(c74269e4,0,ef1e1a4c,101,0,...) at sleepq_wait_sig+0x17 _cv_wait_sig(c74269e4,c74269d0,c0e8d885,627,c7434540,...) at _cv_wait_sig+0x243 seltdwait(c7434540,58,c715b580,c777b5c0,246,...) at seltdwait+0xa2 kern_select(c777b5c0,c,288060b8,288060dc,0,0,20,c7775578,c7775578) at kern_select+0x504 select(c777b5c0,ef1e1cec,ef1e1d28,c0e8bbbe,0,...) at select+0x66 syscallenter(c777b5c0,ef1e1ce4,ef1e1ce4,0,c101fc80,...) at syscallenter+0x263 syscall(ef1e1d28) at syscall+0x4f Xint0x80_syscall() at Xint0x80_syscall+0x21 --- syscall (93, FreeBSD ELF32, select), eip = 0x284bd5a3, esp = 0xbfbfe19c, ebp = 0xbfbfe1e8 --- Tracing command sshd pid 2305 tid 100114 td 0xc778b5c0 Tracing command getty pid 2274 tid 100119 td 0xc778a5c0 sched_switch(c778a5c0,0,104,191,950ff68f,...) at sched_switch+0x3bc mi_switch(104,0,c0e8b280,1f3,0,...) at mi_switch+0x219 sleepq_switch(c778a5c0,0,c0e8b280,1a7,0,...) at sleepq_switch+0x162 sleepq_catch_signals(c0e8b280,160,0,c778a5c0,c778a5c0,...) at sleepq_catch_signals+0xf9 sleepq_wait_sig(c7182070,0,c0e8ff52,101,0,...) at sleepq_wait_sig+0x17 _cv_wait_sig(c7182070,c1011070,c0e8f8f0,514,0,...) at _cv_wait_sig+0x243 tty_wait(c7182000,c7182070,ef241c28,1,0,...) at tty_wait+0x71 ttydisc_read(c7182000,ef241c28,0,9f,0,...) at ttydisc_read+0x22c ttydev_read(c717b800,ef241c28,0,0,1,...) at ttydev_read+0xaa devfs_read_f(c791d1c0,ef241c28,c6d9ee80,0,c778a5c0,...) at devfs_read_f+0x7e dofileread(ef241c28,ffffffff,ffffffff,0,c791d1c0,...) at dofileread+0x9e kern_readv(c778a5c0,0,ef241c28,ef241c48,1,...) at kern_readv+0x58 read(c778a5c0,ef241cec,ef241d28,c0e8bbbe,0,...) at read+0x4f syscallenter(c778a5c0,ef241ce4,ef241ce4,0,0,...) at syscallenter+0x263 syscall(ef241d28) at syscall+0x4f Xint0x80_syscall() at Xint0x80_syscall+0x21 --- syscall (3, FreeBSD ELF32, read), eip = 0x28196623, esp = 0xbfbfed8c, ebp = 0xbfbfedb8 --- Tracing command getty pid 2273 tid 100163 td 0xc74a2b80 sched_switch(c74a2b80,0,104,191,950d8b7f,...) at sched_switch+0x3bc mi_switch(104,0,c0e8b280,1f3,0,...) at mi_switch+0x219 sleepq_switch(c74a2b80,0,c0e8b280,1a7,0,...) at sleepq_switch+0x162 sleepq_catch_signals(c0e8b280,160,0,c74a2b80,c74a2b80,...) at sleepq_catch_signals+0xf9 sleepq_wait_sig(c7182270,0,c0e8ff52,101,0,...) at sleepq_wait_sig+0x17 _cv_wait_sig(c7182270,c1011070,c0e8f8f0,514,0,...) at _cv_wait_sig+0x243 tty_wait(c7182200,c7182270,ef30ec28,1,0,...) at tty_wait+0x71 ttydisc_read(c7182200,ef30ec28,0,9f,0,...) at ttydisc_read+0x22c ttydev_read(c717b900,ef30ec28,0,0,1,...) at ttydev_read+0xaa devfs_read_f(c744a118,ef30ec28,c6d9ee80,0,c74a2b80,...) at devfs_read_f+0x7e dofileread(ef30ec28,ffffffff,ffffffff,0,c744a118,...) at dofileread+0x9e kern_readv(c74a2b80,0,ef30ec28,ef30ec48,1,...) at kern_readv+0x58 read(c74a2b80,ef30ecec,ef30ed28,c0e8bbbe,0,...) at read+0x4f syscallenter(c74a2b80,ef30ece4,ef30ece4,0,0,...) at syscallenter+0x263 syscall(ef30ed28) at syscall+0x4f Xint0x80_syscall() at Xint0x80_syscall+0x21 --- syscall (3, FreeBSD ELF32, read), eip = 0x28196623, esp = 0xbfbfed8c, ebp = 0xbfbfedb8 --- Tracing command getty pid 2272 tid 100162 td 0xc74a3000 sched_switch(c74a3000,0,104,191,952652b0,...) at sched_switch+0x3bc mi_switch(104,0,c0e8b280,1f3,0,...) at mi_switch+0x219 sleepq_switch(c74a3000,0,c0e8b280,1a7,0,...) at sleepq_switch+0x162 sleepq_catch_signals(c0e8b280,160,0,c74a3000,c74a3000,...) at sleepq_catch_signals+0xf9 sleepq_wait_sig(c7182470,0,c0e8ff52,101,0,...) at sleepq_wait_sig+0x17 _cv_wait_sig(c7182470,c1011070,c0e8f8f0,514,0,...) at _cv_wait_sig+0x243 tty_wait(c7182400,c7182470,ef30ac28,1,0,...) at tty_wait+0x71 ttydisc_read(c7182400,ef30ac28,0,9f,0,...) at ttydisc_read+0x22c ttydev_read(c717ba00,ef30ac28,0,0,1,...) at ttydev_read+0xaa devfs_read_f(c7912658,ef30ac28,c6d9ee80,0,c74a3000,...) at devfs_read_f+0x7e dofileread(ef30ac28,ffffffff,ffffffff,0,c7912658,...) at dofileread+0x9e kern_readv(c74a3000,0,ef30ac28,ef30ac48,1,...) at kern_readv+0x58 read(c74a3000,ef30acec,ef30ad28,c0e8bbbe,0,...) at read+0x4f syscallenter(c74a3000,ef30ace4,ef30ace4,0,0,...) at syscallenter+0x263 syscall(ef30ad28) at syscall+0x4f Xint0x80_syscall() at Xint0x80_syscall+0x21 --- syscall (3, FreeBSD ELF32, read), eip = 0x28196623, esp = 0xbfbfed8c, ebp = 0xbfbfedb8 --- Tracing command getty pid 2271 tid 100161 td 0xc74a32e0 sched_switch(c74a32e0,0,104,191,953161f1,...) at sched_switch+0x3bc mi_switch(104,0,c0e8b280,1f3,0,...) at mi_switch+0x219 sleepq_switch(c74a32e0,0,c0e8b280,1a7,0,...) at sleepq_switch+0x162 sleepq_catch_signals(c0e8b280,160,0,c74a32e0,c74a32e0,...) at sleepq_catch_signals+0xf9 sleepq_wait_sig(c6f52070,0,c0e8ff52,101,0,...) at sleepq_wait_sig+0x17 _cv_wait_sig(c6f52070,c1011070,c0e8f8f0,514,0,...) at _cv_wait_sig+0x243 tty_wait(c6f52000,c6f52070,ef306c28,1,0,...) at tty_wait+0x71 ttydisc_read(c6f52000,ef306c28,0,9f,0,...) at ttydisc_read+0x22c ttydev_read(c717bb00,ef306c28,0,0,1,...) at ttydev_read+0xaa devfs_read_f(c80674d0,ef306c28,c6d9ee80,0,c74a32e0,...) at devfs_read_f+0x7e dofileread(ef306c28,ffffffff,ffffffff,0,c80674d0,...) at dofileread+0x9e kern_readv(c74a32e0,0,ef306c28,ef306c48,1,...) at kern_readv+0x58 read(c74a32e0,ef306cec,ef306d28,c0e8bbbe,0,...) at read+0x4f syscallenter(c74a32e0,ef306ce4,ef306ce4,0,0,...) at syscallenter+0x263 syscall(ef306d28) at syscall+0x4f Xint0x80_syscall() at Xint0x80_syscall+0x21 --- syscall (3, FreeBSD ELF32, read), eip = 0x28196623, esp = 0xbfbfed8c, ebp = 0xbfbfedb8 --- Tracing command getty pid 2270 tid 100160 td 0xc74a35c0 sched_switch(c74a35c0,0,104,191,95250da7,...) at sched_switch+0x3bc mi_switch(104,0,c0e8b280,1f3,0,...) at mi_switch+0x219 sleepq_switch(c74a35c0,0,c0e8b280,1a7,0,...) at sleepq_switch+0x162 sleepq_catch_signals(c0e8b280,160,0,c74a35c0,c74a35c0,...) at sleepq_catch_signals+0xf9 sleepq_wait_sig(c6f52270,0,c0e8ff52,101,0,...) at sleepq_wait_sig+0x17 _cv_wait_sig(c6f52270,c1011070,c0e8f8f0,514,0,...) at _cv_wait_sig+0x243 tty_wait(c6f52200,c6f52270,ef2f7c28,1,0,...) at tty_wait+0x71 ttydisc_read(c6f52200,ef2f7c28,0,9f,0,...) at ttydisc_read+0x22c ttydev_read(c717bc00,ef2f7c28,0,0,1,...) at ttydev_read+0xaa devfs_read_f(c74b9818,ef2f7c28,c6d9ee80,0,c74a35c0,...) at devfs_read_f+0x7e dofileread(ef2f7c28,ffffffff,ffffffff,0,c74b9818,...) at dofileread+0x9e kern_readv(c74a35c0,0,ef2f7c28,ef2f7c48,1,...) at kern_readv+0x58 read(c74a35c0,ef2f7cec,ef2f7d28,c0e8bbbe,0,...) at read+0x4f syscallenter(c74a35c0,ef2f7ce4,ef2f7ce4,0,0,...) at syscallenter+0x263 syscall(ef2f7d28) at syscall+0x4f Xint0x80_syscall() at Xint0x80_syscall+0x21 --- syscall (3, FreeBSD ELF32, read), eip = 0x28196623, esp = 0xbfbfed8c, ebp = 0xbfbfedb8 --- Tracing command getty pid 2269 tid 100092 td 0xc7172b80 sched_switch(c7172b80,0,104,191,95125e4f,...) at sched_switch+0x3bc mi_switch(104,0,c0e8b280,1f3,0,...) at mi_switch+0x219 sleepq_switch(c7172b80,0,c0e8b280,1a7,0,...) at sleepq_switch+0x162 sleepq_catch_signals(c0e8b280,160,0,c7172b80,c7172b80,...) at sleepq_catch_signals+0xf9 sleepq_wait_sig(c6f52470,0,c0e8ff52,101,0,...) at sleepq_wait_sig+0x17 _cv_wait_sig(c6f52470,c1011070,c0e8f8f0,514,0,...) at _cv_wait_sig+0x243 tty_wait(c6f52400,c6f52470,ef1dbc28,1,0,...) at tty_wait+0x71 ttydisc_read(c6f52400,ef1dbc28,0,9f,0,...) at ttydisc_read+0x22c ttydev_read(c717bd00,ef1dbc28,0,0,1,...) at ttydev_read+0xaa devfs_read_f(c80675e8,ef1dbc28,c6d9ee80,0,c7172b80,...) at devfs_read_f+0x7e dofileread(ef1dbc28,ffffffff,ffffffff,0,c80675e8,...) at dofileread+0x9e kern_readv(c7172b80,0,ef1dbc28,ef1dbc48,1,...) at kern_readv+0x58 read(c7172b80,ef1dbcec,ef1dbd28,c0e8bbbe,0,...) at read+0x4f syscallenter(c7172b80,ef1dbce4,ef1dbce4,0,0,...) at syscallenter+0x263 syscall(ef1dbd28) at syscall+0x4f Xint0x80_syscall() at Xint0x80_syscall+0x21 --- syscall (3, FreeBSD ELF32, read), eip = 0x28196623, esp = 0xbfbfed8c, ebp = 0xbfbfedb8 --- Tracing command getty pid 2268 tid 100134 td 0xc783b000 sched_switch(c783b000,0,104,191,952797cc,...) at sched_switch+0x3bc mi_switch(104,0,c0e8b280,1f3,0,...) at mi_switch+0x219 sleepq_switch(c783b000,0,c0e8b280,1a7,0,...) at sleepq_switch+0x162 sleepq_catch_signals(c0e8b280,160,0,c783b000,c783b000,...) at sleepq_catch_signals+0xf9 sleepq_wait_sig(c6f52670,0,c0e8ff52,101,0,...) at sleepq_wait_sig+0x17 _cv_wait_sig(c6f52670,c1011070,c0e8f8f0,514,0,...) at _cv_wait_sig+0x243 tty_wait(c6f52600,c6f52670,ef29cc28,1,0,...) at tty_wait+0x71 ttydisc_read(c6f52600,ef29cc28,0,9f,0,...) at ttydisc_read+0x22c ttydev_read(c717be00,ef29cc28,0,0,1,...) at ttydev_read+0xaa devfs_read_f(c791d038,ef29cc28,c6d9ee80,0,c783b000,...) at devfs_read_f+0x7e dofileread(ef29cc28,ffffffff,ffffffff,0,c791d038,...) at dofileread+0x9e kern_readv(c783b000,0,ef29cc28,ef29cc48,1,...) at kern_readv+0x58 read(c783b000,ef29ccec,ef29cd28,c0e8bbbe,0,...) at read+0x4f syscallenter(c783b000,ef29cce4,ef29cce4,0,0,...) at syscallenter+0x263 syscall(ef29cd28) at syscall+0x4f Xint0x80_syscall() at Xint0x80_syscall+0x21 --- syscall (3, FreeBSD ELF32, read), eip = 0x28196623, esp = 0xbfbfed8c, ebp = 0xbfbfedb8 --- Tracing command getty pid 2267 tid 100135 td 0xc783ab80 sched_switch(c783ab80,0,104,191,9507decf,...) at sched_switch+0x3bc mi_switch(104,0,c0e8b280,1f3,0,...) at mi_switch+0x219 sleepq_switch(c783ab80,0,c0e8b280,1a7,0,...) at sleepq_switch+0x162 sleepq_catch_signals(c0e8b280,160,0,c783ab80,c783ab80,...) at sleepq_catch_signals+0xf9 sleepq_wait_sig(c6f52870,0,c0e8ff52,101,0,...) at sleepq_wait_sig+0x17 _cv_wait_sig(c6f52870,c1011070,c0e8f8f0,514,0,...) at _cv_wait_sig+0x243 tty_wait(c6f52800,c6f52870,ef29fc28,1,0,...) at tty_wait+0x71 ttydisc_read(c6f52800,ef29fc28,0,9f,0,...) at ttydisc_read+0x22c ttydev_read(c717c000,ef29fc28,0,0,1,...) at ttydev_read+0xaa devfs_read_f(c74b9578,ef29fc28,c6d9ee80,0,c783ab80,...) at devfs_read_f+0x7e dofileread(ef29fc28,ffffffff,ffffffff,0,c74b9578,...) at dofileread+0x9e kern_readv(c783ab80,0,ef29fc28,ef29fc48,1,...) at kern_readv+0x58 read(c783ab80,ef29fcec,ef29fd28,c0e8bbbe,0,...) at read+0x4f syscallenter(c783ab80,ef29fce4,ef29fce4,0,0,...) at syscallenter+0x263 syscall(ef29fd28) at syscall+0x4f Xint0x80_syscall() at Xint0x80_syscall+0x21 --- syscall (3, FreeBSD ELF32, read), eip = 0x28196623, esp = 0xbfbfed8c, ebp = 0xbfbfedb8 --- Tracing command getty pid 2266 tid 100084 td 0xc74228a0 sched_switch(c74228a0,0,104,191,1006d158,...) at sched_switch+0x3bc mi_switch(104,0,c0e8b280,1f3,0,...) at mi_switch+0x219 sleepq_switch(c74228a0,0,c0e8b280,1a7,0,...) at sleepq_switch+0x162 sleepq_catch_signals(c099890a,c6f52a04,0,c0e84107,c74228a0,...) at sleepq_catch_signals+0xf9 sleepq_wait_sig(c6f52a70,0,ef1a5ad8,101,0,...) at sleepq_wait_sig+0x17 _cv_wait_sig(c6f52a70,c6f52a04,c0e8f8f0,514,0,...) at _cv_wait_sig+0x243 tty_wait(c6f52a00,c6f52a70,ef1a5c28,1,0,...) at tty_wait+0x71 ttydisc_read(c6f52a00,ef1a5c28,0,9f,0,...) at ttydisc_read+0x22c ttydev_read(c6da2800,ef1a5c28,0,0,1,...) at ttydev_read+0xaa devfs_read_f(c791dd90,ef1a5c28,c6d9ee80,0,c74228a0,...) at devfs_read_f+0x7e dofileread(ef1a5c28,ffffffff,ffffffff,0,c791dd90,...) at dofileread+0x9e kern_readv(c74228a0,0,ef1a5c28,ef1a5c48,1,...) at kern_readv+0x58 read(c74228a0,ef1a5cec,ef1a5d28,c0e8bbbe,0,...) at read+0x4f syscallenter(c74228a0,ef1a5ce4,ef1a5ce4,0,0,...) at syscallenter+0x263 syscall(ef1a5d28) at syscall+0x4f Xint0x80_syscall() at Xint0x80_syscall+0x21 --- syscall (3, FreeBSD ELF32, read), eip = 0x28196623, esp = 0xbfbfed8c, ebp = 0xbfbfedb8 --- Tracing command inetd pid 2218 tid 100079 td 0xc74275c0 sched_switch(c74275c0,0,104,191,63f5a5ae,...) at sched_switch+0x3bc mi_switch(104,0,c0e8b280,1f3,0,...) at mi_switch+0x219 sleepq_switch(c74275c0,0,c0e8b280,1a7,0,...) at sleepq_switch+0x162 sleepq_catch_signals(c099890a,c7016550,0,c0e84107,c74275c0,...) at sleepq_catch_signals+0xf9 sleepq_wait_sig(c7016564,0,ef191a4c,101,0,...) at sleepq_wait_sig+0x17 _cv_wait_sig(c7016564,c7016550,c0e8d885,627,c7434b98,...) at _cv_wait_sig+0x243 seltdwait(c7434b98,58,c6d9ee80,c74275c0,c7427670,...) at seltdwait+0xa2 kern_select(c74275c0,6,bfbfdfa0,0,0,0,20,c7420578,c7420578) at kern_select+0x504 select(c74275c0,ef191cec,ef191d28,c0e8bbbe,0,...) at select+0x66 syscallenter(c74275c0,ef191ce4,ef191ce4,0,0,...) at syscallenter+0x263 syscall(ef191d28) at syscall+0x4f Xint0x80_syscall() at Xint0x80_syscall+0x21 --- syscall (93, FreeBSD ELF32, select), eip = 0x281a85a3, esp = 0xbfbfdf5c, ebp = 0xbfbfede8 --- Tracing command watchdogd pid 2189 tid 100120 td 0xc778a2e0 sched_switch(c778a2e0,0,104,191,e0a9c2fb,...) at sched_switch+0x3bc mi_switch(104,0,c0e8b280,1f3,6c,...) at mi_switch+0x219 sleepq_switch(c778a2e0,0,c0e8b280,1a7,6c,...) at sleepq_switch+0x162 sleepq_catch_signals(ea61,c09e7470,c778a2e0,2,100,...) at sleepq_catch_signals+0xf9 sleepq_timedwait_sig(c1012984,6c,c0e87077,100,0,...) at sleepq_timedwait_sig+0x1a _sleep(c1012984,0,16c,c0e87077,ea61,...) at _sleep+0x328 kern_nanosleep(c778a2e0,ef244c34,ef244c3c,3c,0,...) at kern_nanosleep+0xc1 nanosleep(c778a2e0,ef244cec,ef244d28,c0e8bbbe,0,...) at nanosleep+0x6f syscallenter(c778a2e0,ef244ce4,ef244ce4,0,0,...) at syscallenter+0x263 syscall(ef244d28) at syscall+0x4f Xint0x80_syscall() at Xint0x80_syscall+0x21 --- syscall (240, FreeBSD ELF32, nanosleep), eip = 0x28191b67, esp = 0xbfbfecbc, ebp = 0xbfbfece8 --- Tracing command cron pid 2162 tid 100080 td 0xc74272e0 sched_switch(c74272e0,0,104,191,c5969beb,...) at sched_switch+0x3bc mi_switch(104,0,c0e8b280,1f3,6c,...) at mi_switch+0x219 sleepq_switch(c74272e0,0,c0e8b280,1a7,6c,...) at sleepq_switch+0x162 sleepq_catch_signals(ea61,c09e7470,c74272e0,3,100,...) at sleepq_catch_signals+0xf9 sleepq_timedwait_sig(c1012984,6c,c0e87077,100,0,...) at sleepq_timedwait_sig+0x1a _sleep(c1012984,0,16c,c0e87077,ea61,...) at _sleep+0x328 kern_nanosleep(c74272e0,ef195c34,ef195c3c,3c,0,...) at kern_nanosleep+0xc1 nanosleep(c74272e0,ef195cec,ef195d28,c0e8bbbe,0,...) at nanosleep+0x6f syscallenter(c74272e0,ef195ce4,ef195ce4,0,0,...) at syscallenter+0x263 syscall(ef195d28) at syscall+0x4f Xint0x80_syscall() at Xint0x80_syscall+0x21 --- syscall (240, FreeBSD ELF32, nanosleep), eip = 0x28184b67, esp = 0xbfbfec4c, ebp = 0xbfbfec78 --- Tracing command sendmail pid 2154 tid 100133 td 0xc783b2e0 Tracing command sendmail pid 2148 tid 100153 td 0xc7c868a0 sched_switch(c7c868a0,0,104,191,f16c217e,...) at sched_switch+0x3bc mi_switch(104,0,c0e8b280,1f3,0,...) at mi_switch+0x219 sleepq_switch(c7c868a0,0,c0e8b280,1a7,0,...) at sleepq_switch+0x162 sleepq_catch_signals(ef2d5a14,c099890a,c73bd550,0,c7c868a0,...) at sleepq_catch_signals+0xf9 sleepq_timedwait_sig(c73bd564,0,ef2d5a4c,101,0,...) at sleepq_timedwait_sig+0x1a _cv_timedwait_sig(c73bd564,c73bd550,1389,627,c7931ab8,...) at _cv_timedwait_sig+0x252 seltdwait(ef2d5bf8,ef2d5c00,c7419100,c7c868a0,ef2d5af8,...) at seltdwait+0x8a kern_select(c7c868a0,5,bfbfc510,0,0,ef2d5c40,20,5,0) at kern_select+0x504 select(c7c868a0,ef2d5cec,ef2d5d28,c0e8bbbe,0,...) at select+0x66 syscallenter(c7c868a0,ef2d5ce4,ef2d5ce4,0,0,...) at syscallenter+0x263 syscall(ef2d5d28) at syscall+0x4f Xint0x80_syscall() at Xint0x80_syscall+0x21 --- syscall (93, FreeBSD ELF32, select), eip = 0x283e05a3, esp = 0xbfbfc47c, ebp = 0xbfbfcfa8 --- Tracing command sshd pid 2140 tid 100156 td 0xc7c86000 sched_switch(c7c86000,0,104,191,b6b6cbbf,...) at sched_switch+0x3bc mi_switch(104,0,c0e8b280,1f3,0,...) at mi_switch+0x219 sleepq_switch(c7c86000,0,c0e8b280,1a7,0,...) at sleepq_switch+0x162 sleepq_catch_signals(c099890a,c7426bd0,0,c0e84107,c7c86000,...) at sleepq_catch_signals+0xf9 sleepq_wait_sig(c7426be4,0,ef2e8a4c,101,0,...) at sleepq_wait_sig+0x17 _cv_wait_sig(c7426be4,c7426bd0,c0e8d885,627,c74345e8,...) at _cv_wait_sig+0x243 seltdwait(c74345e8,58,c7caa880,c7c86000,ef2e8ab4,...) at seltdwait+0xa2 kern_select(c7c86000,5,2880c0b0,0,0,0,20,c7cf9834,c7cf9834) at kern_select+0x504 select(c7c86000,ef2e8cec,ef2e8d28,c0e8bbbe,0,...) at select+0x66 syscallenter(c7c86000,ef2e8ce4,ef2e8ce4,0,0,...) at syscallenter+0x263 syscall(ef2e8d28) at syscall+0x4f Xint0x80_syscall() at Xint0x80_syscall+0x21 --- syscall (93, FreeBSD ELF32, select), eip = 0x284bd5a3, esp = 0xbfbfe25c, ebp = 0xbfbfedf8 --- Tracing command moused pid 2080 tid 100149 td 0xc7c875c0 sched_switch(c7c875c0,0,104,191,70a897a0,...) at sched_switch+0x3bc mi_switch(104,0,c0e8b280,1f3,0,...) at mi_switch+0x219 sleepq_switch(c7c875c0,0,c0e8b280,1a7,0,...) at sleepq_switch+0x162 sleepq_catch_signals(c099890a,c7426c10,0,c0e84107,c7c875c0,...) at sleepq_catch_signals+0xf9 sleepq_wait_sig(c7426c24,0,ef2c9a4c,101,0,...) at sleepq_wait_sig+0x17 _cv_wait_sig(c7426c24,c7426c10,c0e8d885,627,c791dc40,...) at _cv_wait_sig+0x243 seltdwait(c791dc40,58,c6d9ee80,c7c875c0,14,...) at seltdwait+0xa2 kern_select(c7c875c0,6,bfbfea04,0,0,0,20,c7cfb000,c7cfb000) at kern_select+0x504 select(c7c875c0,ef2c9cec,ef2c9d28,c0e8bbbe,0,...) at select+0x66 syscallenter(c7c875c0,ef2c9ce4,ef2c9ce4,0,0,...) at syscallenter+0x263 syscall(ef2c9d28) at syscall+0x4f Xint0x80_syscall() at Xint0x80_syscall+0x21 --- syscall (93, FreeBSD ELF32, select), eip = 0x281b35a3, esp = 0xbfbfe99c, ebp = 0xbfbfeb28 --- Tracing command ntpd pid 2020 tid 100122 td 0xc777bb80 sched_switch(c777bb80,0,104,191,e0e7704a,...) at sched_switch+0x3bc mi_switch(104,0,c0e8b280,1f3,0,...) at mi_switch+0x219 sleepq_switch(c777bb80,0,c0e8b280,1a7,0,...) at sleepq_switch+0x162 sleepq_catch_signals(c099890a,c73bd710,0,c0e84107,c777bb80,...) at sleepq_catch_signals+0xf9 sleepq_wait_sig(c73bd724,0,ef24aa4c,101,0,...) at sleepq_wait_sig+0x17 _cv_wait_sig(c73bd724,c73bd710,c0e8d885,627,c79311f8,...) at _cv_wait_sig+0x243 seltdwait(c79311f8,58,c6d9ee80,c777bb80,0,...) at seltdwait+0xa2 kern_select(c777bb80,1c,bfbfece8,0,0,0,20,c7837578,c7837578) at kern_select+0x504 select(c777bb80,ef24acec,ef24ad80,ef24ac88,0,...) at select+0x66 syscallenter(c777bb80,ef24ace4,c0cd2b06,fffffffe,246,...) at syscallenter+0x263 syscall(ef24ad28) at syscall+0x4f Xint0x80_syscall() at Xint0x80_syscall+0x21 --- syscall (93, FreeBSD ELF32, select), eip = 0x283625a3, esp = 0xbfbfecbc, ebp = 0xbfbfed88 --- Tracing command nfsd pid 1904 tid 100144 td 0xc7c885c0 sched_switch(c7c885c0,0,104,191,b6eef5e5,...) at sched_switch+0x3bc mi_switch(104,0,c0e8b280,1f3,0,...) at mi_switch+0x219 sleepq_switch(c7c885c0,0,c0e8b280,1a7,0,...) at sleepq_switch+0x162 sleepq_catch_signals(ef2babe0,c099890a,c7197e00,0,c7c885c0,...) at sleepq_catch_signals+0xf9 sleepq_timedwait_sig(c7cf5cd0,0,ef2bac18,101,0,...) at sleepq_timedwait_sig+0x1a _cv_timedwait_sig(c7cf5cd0,c7197e00,1388,3b1,0,...) at _cv_timedwait_sig+0x252 svc_run_internal(ef2bad14,c097bbc8,c7197e00,ef2bad28,c0e8046c,...) at svc_run_internal+0x356 svc_thread_start(c7197e00,ef2bad28,c0e8046c,390,c7420000,...) at svc_thread_start+0x10 fork_exit(c0b8ad60,c7197e00,ef2bad28) at fork_exit+0xb8 fork_trampoline() at fork_trampoline+0x8 --- trap 0x804c12e, eip = 0xc, esp = 0x33, ebp = 0 --- Tracing command nfsd pid 1904 tid 100143 td 0xc7c888a0 sched_switch(c7c888a0,0,104,191,ca3f2632,...) at sched_switch+0x3bc mi_switch(104,0,c0e8b280,1f3,0,...) at mi_switch+0x219 sleepq_switch(c7c888a0,0,c0e8b280,1a7,0,...) at sleepq_switch+0x162 sleepq_catch_signals(ef2b7be0,c099890a,c7197e00,0,c7c888a0,...) at sleepq_catch_signals+0xf9 sleepq_timedwait_sig(c6f7f490,0,ef2b7c18,101,0,...) at sleepq_timedwait_sig+0x1a _cv_timedwait_sig(c6f7f490,c7197e00,1388,3b1,0,...) at _cv_timedwait_sig+0x252 svc_run_internal(ef2b7d14,c097bbc8,c7197e00,ef2b7d28,c0e8046c,...) at svc_run_internal+0x356 svc_thread_start(c7197e00,ef2b7d28,c0e8046c,390,c7420000,...) at svc_thread_start+0x10 fork_exit(c0b8ad60,c7197e00,ef2b7d28) at fork_exit+0xb8 fork_trampoline() at fork_trampoline+0x8 --- trap 0x804c12e, eip = 0xc, esp = 0x33, ebp = 0 --- Tracing command nfsd pid 1904 tid 100142 td 0xc7c88b80 sched_switch(c7c88b80,0,104,191,2f9752cf,...) at sched_switch+0x3bc mi_switch(104,0,c0e8b280,1f3,0,...) at mi_switch+0x219 sleepq_switch(c7c88b80,0,c0e8b280,1a7,0,...) at sleepq_switch+0x162 sleepq_catch_signals(ef2b4be0,c099890a,c7197e00,0,c7c88b80,...) at sleepq_catch_signals+0xf9 sleepq_timedwait_sig(c7cf5850,0,ef2b4c18,101,0,...) at sleepq_timedwait_sig+0x1a _cv_timedwait_sig(c7cf5850,c7197e00,1388,3b1,0,...) at _cv_timedwait_sig+0x252 svc_run_internal(ef2b4d14,c097bbc8,c7197e00,ef2b4d28,c0e8046c,...) at svc_run_internal+0x356 svc_thread_start(c7197e00,ef2b4d28,c0e8046c,390,c7420000,...) at svc_thread_start+0x10 fork_exit(c0b8ad60,c7197e00,ef2b4d28) at fork_exit+0xb8 fork_trampoline() at fork_trampoline+0x8 --- trap 0x804c12e, eip = 0xc, esp = 0x33, ebp = 0 --- Tracing command nfsd pid 1904 tid 100081 td 0xc7427000 sched_switch(c7427000,0,104,191,11701a77,...) at sched_switch+0x3bc mi_switch(104,0,c0e8b280,1f3,0,...) at mi_switch+0x219 sleepq_switch(c7427000,0,c0e8b280,1a7,0,...) at sleepq_switch+0x162 sleepq_catch_signals(ef199ab4,c099890a,c7197e00,0,c7427000,...) at sleepq_catch_signals+0xf9 sleepq_timedwait_sig(c7cf5d10,0,ef199aec,101,0,...) at sleepq_timedwait_sig+0x1a _cv_timedwait_sig(c7cf5d10,c7197e00,1388,3b1,c7c885c0,...) at _cv_timedwait_sig+0x252 svc_run_internal(c74271b0,14,c0eb3e1a,c7cd860f,ef199c10,...) at svc_run_internal+0x356 svc_run(c7197e00,0,c7cd8a4f,1c2,0,...) at svc_run+0x7b nfssvc_nfsd(bfbfe870,ef199c10,c,c6d9ee80,ef199c24,...) at nfssvc_nfsd+0xb7 nfssvc_nfsserver(c7427000,ef199cec,c7420000,0,ef199c7c,...) at nfssvc_nfsserver+0x55 nfssvc(c7427000,ef199cec,ef199d28,c0e8bbbe,0,...) at nfssvc+0x89 syscallenter(c7427000,ef199ce4,ef199ce4,0,0,...) at syscallenter+0x263 syscall(ef199d28) at syscall+0x4f Xint0x80_syscall() at Xint0x80_syscall+0x21 --- syscall (155, FreeBSD ELF32, nfssvc), eip = 0x280dd86b, esp = 0xbfbfe82c, ebp = 0xbfbfea98 --- Tracing command nfsd pid 1903 tid 100141 td 0xc7c89000 sched_switch(c7c89000,0,104,191,5207f5ce,...) at sched_switch+0x3bc mi_switch(104,0,c0e8b280,1f3,0,...) at mi_switch+0x219 sleepq_switch(c7c89000,0,c0e8b280,1a7,0,...) at sleepq_switch+0x162 sleepq_catch_signals(c099890a,c7426c90,0,c0e84107,c7c89000,...) at sleepq_catch_signals+0xf9 sleepq_wait_sig(c7426ca4,0,ef2b1a4c,101,0,...) at sleepq_wait_sig+0x17 _cv_wait_sig(c7426ca4,c7426c90,c0e8d885,627,c744ab28,...) at _cv_wait_sig+0x243 seltdwait(c744ab28,58,c6d9ee80,c7c89000,f33,...) at seltdwait+0xa2 kern_select(c7c89000,5,bfbfecb4,0,0,0,20,c78392bc,c78392bc) at kern_select+0x504 select(c7c89000,ef2b1cec,bfbffff4,1,0,...) at select+0x66 syscallenter(c7c89000,ef2b1ce4,c0cd2e4d,c1011070,0,...) at syscallenter+0x263 syscall(ef2b1d28) at syscall+0x4f Xint0x80_syscall() at Xint0x80_syscall+0x21 --- syscall (93, FreeBSD ELF32, select), eip = 0x281845a3, esp = 0xbfbfea9c, ebp = 0xbfbfede8 --- Tracing command mountd pid 1894 tid 100078 td 0xc74278a0 sched_switch(c74278a0,0,104,191,ff23b785,...) at sched_switch+0x3bc mi_switch(104,0,c0e8b280,1f3,0,...) at mi_switch+0x219 sleepq_switch(c74278a0,0,c0e8b280,1a7,0,...) at sleepq_switch+0x162 sleepq_catch_signals(c099890a,c7426c50,0,c0e84107,c74278a0,...) at sleepq_catch_signals+0xf9 sleepq_wait_sig(c7426c64,0,ef18da4c,101,0,...) at sleepq_wait_sig+0x17 _cv_wait_sig(c7426c64,c7426c50,c0e8d885,627,c7433000,...) at _cv_wait_sig+0x243 seltdwait(c7433000,58,c6d9ee80,c74278a0,c115b798,...) at seltdwait+0xa2 kern_select(c74278a0,9,bfbfed3c,0,0,0,20,c7420834,c7420834) at kern_select+0x504 select(c74278a0,ef18dcec,ef18dd28,c0e8bbbe,0,...) at select+0x66 syscallenter(c74278a0,ef18dce4,ef18dce4,0,246,...) at syscallenter+0x263 syscall(ef18dd28) at syscall+0x4f Xint0x80_syscall() at Xint0x80_syscall+0x21 --- syscall (93, FreeBSD ELF32, select), eip = 0x2819a5a3, esp = 0xbfbfed0c, ebp = 0xbfbfedd8 --- Tracing command rpcbind pid 1795 tid 100132 td 0xc783b5c0 sched_switch(c783b5c0,0,104,191,c253f686,...) at sched_switch+0x3bc mi_switch(104,0,c0e8b280,1f3,0,...) at mi_switch+0x219 sleepq_switch(c783b5c0,0,c0e8b280,1a7,0,...) at sleepq_switch+0x162 sleepq_catch_signals(ef296a6c,c099890a,c716c450,0,c783b5c0,...) at sleepq_catch_signals+0xf9 sleepq_timedwait_sig(c716c464,0,ef296aa4,101,0,...) at sleepq_timedwait_sig+0x1a _cv_timedwait_sig(c716c464,c716c450,7531,627,ef296b5c,...) at _cv_timedwait_sig+0x252 seltdwait(ef296c2c,ef296c34,535,c783b5c0,ef296b2c,...) at seltdwait+0x8a poll(c783b5c0,ef296cec,ef296d28,c0e8bbbe,0,...) at poll+0x300 syscallenter(c783b5c0,ef296ce4,ef296ce4,0,0,...) at syscallenter+0x263 syscall(ef296d28) at syscall+0x4f Xint0x80_syscall() at Xint0x80_syscall+0x21 --- syscall (209, FreeBSD ELF32, poll), eip = 0x2813f7ab, esp = 0xbfbfcbac, ebp = 0xbfbfed78 --- Tracing command syslogd pid 1715 tid 100129 td 0xc783e000 sched_switch(c783e000,0,104,191,7d29e294,...) at sched_switch+0x3bc mi_switch(104,0,c0e8b280,1f3,0,...) at mi_switch+0x219 sleepq_switch(c783e000,0,c0e8b280,1a7,0,...) at sleepq_switch+0x162 sleepq_catch_signals(c099890a,c73ebd10,0,c0e84107,c783e000,...) at sleepq_catch_signals+0xf9 sleepq_wait_sig(c73ebd24,0,ef28da4c,101,0,...) at sleepq_wait_sig+0x17 _cv_wait_sig(c73ebd24,c73ebd10,c0e8d885,627,c791d9a0,...) at _cv_wait_sig+0x243 seltdwait(c791d9a0,58,c6d9ee80,c783e000,0,...) at seltdwait+0xa2 kern_select(c783e000,9,2847f0ac,0,0,0,20,c79b7834,c79b7834) at kern_select+0x504 select(c783e000,ef28dcec,ef28dd28,c0e8bbbe,0,...) at select+0x66 syscallenter(c783e000,ef28dce4,ef28dce4,0,246,...) at syscallenter+0x263 syscall(ef28dd28) at syscall+0x4f Xint0x80_syscall() at Xint0x80_syscall+0x21 --- syscall (93, FreeBSD ELF32, select), eip = 0x281995a3, esp = 0xbfbfe29c, ebp = 0xbfbfede8 --- Tracing command devd pid 1514 tid 100086 td 0xc74868a0 sched_switch(c74868a0,0,104,191,fe580ddd,...) at sched_switch+0x3bc mi_switch(104,0,c0e8b280,1f3,0,...) at mi_switch+0x219 sleepq_switch(c74868a0,0,c0e8b280,1a7,0,...) at sleepq_switch+0x162 sleepq_catch_signals(c099890a,c7426cd0,0,c0e84107,c74868a0,...) at sleepq_catch_signals+0xf9 sleepq_wait_sig(c7426ce4,0,ef1ada4c,101,0,...) at sleepq_wait_sig+0x17 _cv_wait_sig(c7426ce4,c7426cd0,c0e8d885,627,c74b9540,...) at _cv_wait_sig+0x243 seltdwait(c74b9540,58,c6d9ee80,c74868a0,c0ebd421,...) at seltdwait+0xa2 kern_select(c74868a0,5,bfbfe960,0,0,0,20,c701eaf0,c701eaf0) at kern_select+0x504 select(c74868a0,ef1adcec,ef1add28,c0e8bbbe,0,...) at select+0x66 syscallenter(c74868a0,ef1adce4,ef1adce4,0,74b,...) at syscallenter+0x263 syscall(ef1add28) at syscall+0x4f Xint0x80_syscall() at Xint0x80_syscall+0x21 --- syscall (93, FreeBSD ELF32, select), eip = 0x808b98b, esp = 0xbfbfe92c, ebp = 0xbfbfee08 --- Tracing command softdepflush pid 18 tid 100075 td 0xc7045b80 sched_switch(c7045b80,0,104,191,e889804,...) at sched_switch+0x3bc mi_switch(104,0,c0e8b280,1f3,60,...) at mi_switch+0x219 sleepq_switch(c7045b80,0,c0e8b280,268,60,...) at sleepq_switch+0x162 sleepq_wait(e0842b60,60,c0e7e1b0,4,0,...) at sleepq_wait+0x63 __lockmgr_args(e0842b60,81900,c8d03920,c0e7e1b0,60,...) at __lockmgr_args+0xb1f getblk(c8d03828,3f2c20,0,4000,0,...) at getblk+0x167 breadn(c8d03828,3f2c20,0,4000,0,...) at breadn+0x44 bread(c8d03828,3f2c20,0,4000,0,...) at bread+0x4c ffs_freefile(c7004a00,c7345000,c8d03828,3f511,41f8,...) at ffs_freefile+0x1c0 handle_workitem_freefile(c118f028,0,c0eb861c,1a40,ecf96b38,...) at handle_workitem_freefile+0x120 softdep_freefile(c9c94000,3f511,41f8,c0eb861c,2108,...) at softdep_freefile+0x8ee ffs_vfree(c9c94000,3f511,41f8,ecf96bac,c0cf14a5,...) at ffs_vfree+0x2e ufs_inactive(ecf96bfc,c0ed946b,c9c940c4,c9c940c4,c9c94000,...) at ufs_inactive+0x2d5 VOP_INACTIVE_APV(c0fbb3e0,ecf96bfc,c0e94f92,94e,c0fd6360,...) at VOP_INACTIVE_APV+0xc5 vinactive(c0fbb3e0,ecf96c30,c0e94f92,8a5,0,...) at vinactive+0xb1 vputx(ecf96c8c,c0bc89b6,c9c94000,ecf96c78,2,...) at vputx+0x36c vput(c9c94000,ecf96c78,2,65d,1,...) at vput+0x10 process_worklist_item(c118f028,0,c0eb861c,5a7,c7045b80,...) at process_worklist_item+0x216 softdep_process_worklist(c73f6000,0,c0eb861c,537,3e8,...) at softdep_process_worklist+0x83 softdep_flush(0,ecf96d28,c0e8046c,390,c73a42bc,...) at softdep_flush+0x2a0 fork_exit(c0bd8640,0,ecf96d28) at fork_exit+0xb8 fork_trampoline() at fork_trampoline+0x8 --- trap 0, eip = 0, esp = 0xecf96d60, ebp = 0 --- Tracing command syncer pid 17 tid 100074 td 0xc7170000 sched_switch(c7170000,0,104,191,b8a6a26a,...) at sched_switch+0x3bc mi_switch(104,0,c0e8b280,1f3,0,...) at mi_switch+0x219 sleepq_switch(c7170000,0,c0e8b280,28b,c7170000,...) at sleepq_switch+0x162 sleepq_timedwait(c1188b14,0,ecf93c78,1,0,...) at sleepq_timedwait+0x6b _cv_timedwait(c1188b14,c1188b00,3e8,76a,4e20,...) at _cv_timedwait+0x252 sched_sync(0,ecf93d28,c0e8046c,390,c73a4578,...) at sched_sync+0x595 fork_exit(c0a42990,0,ecf93d28) at fork_exit+0xb8 fork_trampoline() at fork_trampoline+0x8 --- trap 0, eip = 0, esp = 0xecf93d60, ebp = 0 --- Tracing command vnlru pid 16 tid 100073 td 0xc71702e0 sched_switch(c71702e0,0,104,191,dee44beb,...) at sched_switch+0x3bc mi_switch(104,0,c0e8b280,1f3,60,...) at mi_switch+0x219 sleepq_switch(c71702e0,0,c0e8b280,28b,0,...) at sleepq_switch+0x162 sleepq_timedwait(c73a4834,60,c0e95f04,0,0,...) at sleepq_timedwait+0x6b _sleep(c73a4834,c1188ad4,260,c0e95f04,3e8,...) at _sleep+0x342 vnlru_proc(0,ecf90d28,c0e8046c,390,c73a4834,...) at vnlru_proc+0xe7 fork_exit(c0a449f0,0,ecf90d28) at fork_exit+0xb8 fork_trampoline() at fork_trampoline+0x8 --- trap 0, eip = 0, esp = 0xecf90d60, ebp = 0 --- Tracing command bufdaemon pid 9 tid 100072 td 0xc71705c0 sched_switch(c71705c0,0,104,191,89036cc,...) at sched_switch+0x3bc mi_switch(104,0,c0e8b280,1f3,54,...) at mi_switch+0x219 sleepq_switch(c71705c0,0,c0e8b280,28b,0,...) at sleepq_switch+0x162 sleepq_timedwait(c11887a8,54,c0e92f39,0,0,...) at sleepq_timedwait+0x6b _sleep(c11887a8,c11887b0,54,c0e92f39,64,...) at _sleep+0x342 buf_daemon(0,ecf8dd28,c0e8046c,390,c73a4af0,...) at buf_daemon+0x1bb fork_exit(c0a2a100,0,ecf8dd28) at fork_exit+0xb8 fork_trampoline() at fork_trampoline+0x8 --- trap 0, eip = 0, esp = 0xecf8dd60, ebp = 0 --- Tracing command pagezero pid 8 tid 100071 td 0xc71708a0 sched_switch(c71708a0,0,104,191,1ac6ed59,...) at sched_switch+0x3bc mi_switch(104,0,c0e8b280,1f3,0,...) at mi_switch+0x219 sleepq_switch(c71708a0,0,c0e8b280,28b,0,...) at sleepq_switch+0x162 sleepq_timedwait(c1190edc,0,c0ec0ee8,0,0,...) at sleepq_timedwait+0x6b _sleep(c1190edc,c118f980,0,c0ec0ee8,493e0,...) at _sleep+0x342 vm_pagezero(0,ecf8ad28,c0e8046c,390,c73a6000,...) at vm_pagezero+0xdc fork_exit(c0c1ae00,0,ecf8ad28) at fork_exit+0xb8 fork_trampoline() at fork_trampoline+0x8 --- trap 0, eip = 0, esp = 0xecf8ad60, ebp = 0 --- Tracing command vmdaemon pid 7 tid 100070 td 0xc7170b80 sched_switch(c7170b80,0,104,191,b5d9fdb9,...) at sched_switch+0x3bc mi_switch(104,0,c0e8b280,1f3,74,...) at mi_switch+0x219 sleepq_switch(c7170b80,0,c0e8b280,268,0,...) at sleepq_switch+0x162 sleepq_wait(c1190ac8,74,c0e92f32,0,0,...) at sleepq_wait+0x63 _sleep(c1190ac8,c1190acc,74,c0e92f32,0,...) at _sleep+0x372 vm_daemon(0,ecf87d28,c0e8046c,390,c6dbe2bc,...) at vm_daemon+0x59 fork_exit(c0c149c0,0,ecf87d28) at fork_exit+0xb8 fork_trampoline() at fork_trampoline+0x8 --- trap 0, eip = 0, esp = 0xecf87d60, ebp = 0 --- Tracing command pagedaemon pid 6 tid 100069 td 0xc7171000 sched_switch(c7171000,0,104,191,d0cba17a,...) at sched_switch+0x3bc mi_switch(104,0,c0e8b280,1f3,54,...) at mi_switch+0x219 sleepq_switch(c7171000,0,c0e8b280,28b,0,...) at sleepq_switch+0x162 sleepq_timedwait(c1190a90,54,c0e92f32,0,0,...) at sleepq_timedwait+0x6b _sleep(c1190a90,c118f980,54,c0e92f32,1388,...) at _sleep+0x342 vm_pageout(0,ecf84d28,c0e8046c,390,c6dbe578,...) at vm_pageout+0x2c7 fork_exit(c0c159e0,0,ecf84d28) at fork_exit+0xb8 fork_trampoline() at fork_trampoline+0x8 --- trap 0, eip = 0, esp = 0xecf84d60, ebp = 0 --- Tracing command xpt_thrd pid 5 tid 100068 td 0xc71712e0 sched_switch(c71712e0,0,104,191,ddb07f08,...) at sched_switch+0x3bc mi_switch(104,0,c0e8b280,1f3,5c,...) at mi_switch+0x219 sleepq_switch(c71712e0,0,c0e8b280,268,0,...) at sleepq_switch+0x162 sleepq_wait(c0fd7854,5c,c0cf9d72,0,0,...) at sleepq_wait+0x63 _sleep(c0fd7854,c0fd7898,5c,c0cf9d72,0,...) at _sleep+0x372 xpt_scanner_thread(0,ecf81d28,c0e8046c,390,c6dbe834,...) at xpt_scanner_thread+0x47 fork_exit(c048bb70,0,ecf81d28) at fork_exit+0xb8 fork_trampoline() at fork_trampoline+0x8 --- trap 0, eip = 0, esp = 0xecf81d60, ebp = 0 --- Tracing command sctp_iterator pid 4 tid 100067 td 0xc71715c0 sched_switch(c71715c0,0,104,191,d684163c,...) at sched_switch+0x3bc mi_switch(104,0,c0e8b280,1f3,0,...) at mi_switch+0x219 sleepq_switch(c71715c0,0,c0e8b280,268,0,...) at sleepq_switch+0x162 sleepq_wait(c118a5d8,0,c0ea8edf,0,0,...) at sleepq_wait+0x63 _sleep(c118a5d8,c118a5a0,0,c0ea8edf,0,...) at _sleep+0x372 sctp_iterator_thread(0,ecf7ed28,c0e8046c,390,c6dbeaf0,...) at sctp_iterator_thread+0x5c fork_exit(c0ad3ad0,0,ecf7ed28) at fork_exit+0xb8 fork_trampoline() at fork_trampoline+0x8 --- trap 0, eip = 0, esp = 0xecf7ed60, ebp = 0 --- Tracing command fdc0 pid 3 tid 100063 td 0xc70362e0 sched_switch(c70362e0,0,104,191,c70756dd,...) at sched_switch+0x3bc mi_switch(104,0,c0e8b280,1f3,5c,...) at mi_switch+0x219 sleepq_switch(c70362e0,0,c0e8b280,28b,0,...) at sleepq_switch+0x162 sleepq_timedwait(c6fe143c,5c,c0e78f92,0,0,...) at sleepq_timedwait+0x6b _sleep(c6fe143c,c6fe14f0,5c,c0e78f92,3e8,...) at _sleep+0x342 fdc_thread(c6fe1400,ecf72d28,c0e8046c,390,c701e000,...) at fdc_thread+0x27d fork_exit(c0c99f70,c6fe1400,ecf72d28) at fork_exit+0xb8 fork_trampoline() at fork_trampoline+0x8 --- trap 0, eip = 0, esp = 0xecf72d60, ebp = 0 --- Tracing command fw0_probe pid 2 tid 100061 td 0xc70368a0 sched_switch(c70368a0,0,104,191,ddd6881b,...) at sched_switch+0x3bc mi_switch(104,0,c0e8b280,1f3,6c,...) at mi_switch+0x219 sleepq_switch(c70368a0,0,c0e8b280,1a7,6c,...) at sleepq_switch+0x162 sleepq_catch_signals(c0e8b280,160,0,100,100,...) at sleepq_catch_signals+0xf9 sleepq_wait_sig(c706b000,6c,c0e78f92,100,0,...) at sleepq_wait_sig+0x17 _sleep(c706b000,c706f488,16c,c0e78f92,0,...) at _sleep+0x35c fw_bus_probe_thread(c706b000,ecf62d28,c0e8046c,390,c701e2bc,...) at fw_bus_probe_thread+0xa08 fork_exit(c06aaa90,c706b000,ecf62d28) at fork_exit+0xb8 fork_trampoline() at fork_trampoline+0x8 --- trap 0, eip = 0, esp = 0xecf62d60, ebp = 0 --- Tracing command usb pid 15 tid 100057 td 0xc70435c0 sched_switch(c70435c0,0,104,191,cb0ccc00,...) at sched_switch+0x3bc mi_switch(104,0,c0e8b280,1f3,0,...) at mi_switch+0x219 sleepq_switch(c70435c0,0,c0e8b280,268,c70435c0,...) at sleepq_switch+0x162 sleepq_wait(c704bd34,0,ecf4fcac,1,0,...) at sleepq_wait+0x63 _cv_wait(c704bd34,c704bdd4,c0e5763e,6b,c704bd3c,...) at _cv_wait+0x243 usb_process(c704bd2c,ecf4fd28,c0e8046c,390,c701e578,...) at usb_process+0x193 fork_exit(c0850390,c704bd2c,ecf4fd28) at fork_exit+0xb8 fork_trampoline() at fork_trampoline+0x8 --- trap 0, eip = 0, esp = 0xecf4fd60, ebp = 0 --- Tracing command usb pid 15 tid 100056 td 0xc70438a0 sched_switch(c70438a0,0,104,191,c31138fc,...) at sched_switch+0x3bc mi_switch(104,0,c0e8b280,1f3,0,...) at mi_switch+0x219 sleepq_switch(c70438a0,0,c0e8b280,268,c70438a0,...) at sleepq_switch+0x162 sleepq_wait(c704bd04,0,ecf4ccac,1,0,...) at sleepq_wait+0x63 _cv_wait(c704bd04,c704bdd4,c0e5763e,6b,c704bd0c,...) at _cv_wait+0x243 usb_process(c704bcfc,ecf4cd28,c0e8046c,390,c701e578,...) at usb_process+0x193 fork_exit(c0850390,c704bcfc,ecf4cd28) at fork_exit+0xb8 fork_trampoline() at fork_trampoline+0x8 --- trap 0, eip = 0, esp = 0xecf4cd60, ebp = 0 --- Tracing command usb pid 15 tid 100055 td 0xc7043b80 sched_switch(c7043b80,0,104,191,caa392d7,...) at sched_switch+0x3bc mi_switch(104,0,c0e8b280,1f3,0,...) at mi_switch+0x219 sleepq_switch(c7043b80,0,c0e8b280,268,c7043b80,...) at sleepq_switch+0x162 sleepq_wait(c704bcd4,0,ecf49cac,1,0,...) at sleepq_wait+0x63 _cv_wait(c704bcd4,c704bdd4,c0e5763e,6b,c704bcdc,...) at _cv_wait+0x243 usb_process(c704bccc,ecf49d28,c0e8046c,390,c701e578,...) at usb_process+0x193 fork_exit(c0850390,c704bccc,ecf49d28) at fork_exit+0xb8 fork_trampoline() at fork_trampoline+0x8 --- trap 0, eip = 0, esp = 0xecf49d60, ebp = 0 --- Tracing command usb pid 15 tid 100054 td 0xc7045000 sched_switch(c7045000,0,104,191,caa381cc,...) at sched_switch+0x3bc mi_switch(104,0,c0e8b280,1f3,0,...) at mi_switch+0x219 sleepq_switch(c7045000,0,c0e8b280,268,c7045000,...) at sleepq_switch+0x162 sleepq_wait(c704bca4,0,ecf46cac,1,0,...) at sleepq_wait+0x63 _cv_wait(c704bca4,c704bdd4,c0e5763e,6b,c704bcac,...) at _cv_wait+0x243 usb_process(c704bc9c,ecf46d28,c0e8046c,390,c701e578,...) at usb_process+0x193 fork_exit(c0850390,c704bc9c,ecf46d28) at fork_exit+0xb8 fork_trampoline() at fork_trampoline+0x8 --- trap 0, eip = 0, esp = 0xecf46d60, ebp = 0 --- Tracing command usb pid 15 tid 100052 td 0xc70455c0 sched_switch(c70455c0,0,104,191,caa36c38,...) at sched_switch+0x3bc mi_switch(104,0,c0e8b280,1f3,0,...) at mi_switch+0x219 sleepq_switch(c70455c0,0,c0e8b280,268,c70455c0,...) at sleepq_switch+0x162 sleepq_wait(c7040b5c,0,ecf3dcac,1,0,...) at sleepq_wait+0x63 _cv_wait(c7040b5c,c7040bfc,c0e5763e,6b,c7040b64,...) at _cv_wait+0x243 usb_process(c7040b54,ecf3dd28,c0e8046c,390,c701e578,...) at usb_process+0x193 fork_exit(c0850390,c7040b54,ecf3dd28) at fork_exit+0xb8 fork_trampoline() at fork_trampoline+0x8 --- trap 0, eip = 0, esp = 0xecf3dd60, ebp = 0 --- Tracing command usb pid 15 tid 100051 td 0xc7034000 sched_switch(c7034000,0,104,191,a55a6551,...) at sched_switch+0x3bc mi_switch(104,0,c0e8b280,1f3,0,...) at mi_switch+0x219 sleepq_switch(c7034000,0,c0e8b280,268,c7034000,...) at sleepq_switch+0x162 sleepq_wait(c7040b2c,0,ecf3acac,1,0,...) at sleepq_wait+0x63 _cv_wait(c7040b2c,c7040bfc,c0e5763e,6b,c7040b34,...) at _cv_wait+0x243 usb_process(c7040b24,ecf3ad28,c0e8046c,390,c701e578,...) at usb_process+0x193 fork_exit(c0850390,c7040b24,ecf3ad28) at fork_exit+0xb8 fork_trampoline() at fork_trampoline+0x8 --- trap 0, eip = 0, esp = 0xecf3ad60, ebp = 0 --- Tracing command usb pid 15 tid 100050 td 0xc70342e0 sched_switch(c70342e0,0,104,191,ca3c18e4,...) at sched_switch+0x3bc mi_switch(104,0,c0e8b280,1f3,0,...) at mi_switch+0x219 sleepq_switch(c70342e0,0,c0e8b280,268,c70342e0,...) at sleepq_switch+0x162 sleepq_wait(c7040afc,0,ecf37cac,1,0,...) at sleepq_wait+0x63 _cv_wait(c7040afc,c7040bfc,c0e5763e,6b,c7040b04,...) at _cv_wait+0x243 usb_process(c7040af4,ecf37d28,c0e8046c,390,c701e578,...) at usb_process+0x193 fork_exit(c0850390,c7040af4,ecf37d28) at fork_exit+0xb8 fork_trampoline() at fork_trampoline+0x8 --- trap 0, eip = 0, esp = 0xecf37d60, ebp = 0 --- Tracing command usb pid 15 tid 100049 td 0xc70345c0 sched_switch(c70345c0,0,104,191,ca3c04c6,...) at sched_switch+0x3bc mi_switch(104,0,c0e8b280,1f3,0,...) at mi_switch+0x219 sleepq_switch(c70345c0,0,c0e8b280,268,c70345c0,...) at sleepq_switch+0x162 sleepq_wait(c7040acc,0,ecf34cac,1,0,...) at sleepq_wait+0x63 _cv_wait(c7040acc,c7040bfc,c0e5763e,6b,c7040ad4,...) at _cv_wait+0x243 usb_process(c7040ac4,ecf34d28,c0e8046c,390,c701e578,...) at usb_process+0x193 fork_exit(c0850390,c7040ac4,ecf34d28) at fork_exit+0xb8 fork_trampoline() at fork_trampoline+0x8 --- trap 0, eip = 0, esp = 0xecf34d60, ebp = 0 --- Tracing command usb pid 15 tid 100048 td 0xc70348a0 sched_switch(c70348a0,0,104,191,ca3bede2,...) at sched_switch+0x3bc mi_switch(104,0,c0e8b280,1f3,0,...) at mi_switch+0x219 sleepq_switch(c70348a0,0,c0e8b280,268,c70348a0,...) at sleepq_switch+0x162 sleepq_wait(c7039b5c,0,e0bffcac,1,0,...) at sleepq_wait+0x63 _cv_wait(c7039b5c,c7039bfc,c0e5763e,6b,c7039b64,...) at _cv_wait+0x243 usb_process(c7039b54,e0bffd28,c0e8046c,390,c701e578,...) at usb_process+0x193 fork_exit(c0850390,c7039b54,e0bffd28) at fork_exit+0xb8 fork_trampoline() at fork_trampoline+0x8 --- trap 0, eip = 0, esp = 0xe0bffd60, ebp = 0 --- Tracing command usb pid 15 tid 100047 td 0xc7034b80 sched_switch(c7034b80,0,104,191,a50b062b,...) at sched_switch+0x3bc mi_switch(104,0,c0e8b280,1f3,0,...) at mi_switch+0x219 sleepq_switch(c7034b80,0,c0e8b280,268,c7034b80,...) at sleepq_switch+0x162 sleepq_wait(c7039b2c,0,e0bfccac,1,0,...) at sleepq_wait+0x63 _cv_wait(c7039b2c,c7039bfc,c0e5763e,6b,c7039b34,...) at _cv_wait+0x243 usb_process(c7039b24,e0bfcd28,c0e8046c,390,c701e578,...) at usb_process+0x193 fork_exit(c0850390,c7039b24,e0bfcd28) at fork_exit+0xb8 fork_trampoline() at fork_trampoline+0x8 --- trap 0, eip = 0, esp = 0xe0bfcd60, ebp = 0 --- Tracing command usb pid 15 tid 100046 td 0xc7035000 sched_switch(c7035000,0,104,191,c4470686,...) at sched_switch+0x3bc mi_switch(104,0,c0e8b280,1f3,0,...) at mi_switch+0x219 sleepq_switch(c7035000,0,c0e8b280,268,c7035000,...) at sleepq_switch+0x162 sleepq_wait(c7039afc,0,e0bf9cac,1,0,...) at sleepq_wait+0x63 _cv_wait(c7039afc,c7039bfc,c0e5763e,6b,c7039b04,...) at _cv_wait+0x243 usb_process(c7039af4,e0bf9d28,c0e8046c,390,c701e578,...) at usb_process+0x193 fork_exit(c0850390,c7039af4,e0bf9d28) at fork_exit+0xb8 fork_trampoline() at fork_trampoline+0x8 --- trap 0, eip = 0, esp = 0xe0bf9d60, ebp = 0 --- Tracing command usb pid 15 tid 100045 td 0xc70352e0 sched_switch(c70352e0,0,104,191,c446f348,...) at sched_switch+0x3bc mi_switch(104,0,c0e8b280,1f3,0,...) at mi_switch+0x219 sleepq_switch(c70352e0,0,c0e8b280,268,c70352e0,...) at sleepq_switch+0x162 sleepq_wait(c7039acc,0,e0bf6cac,1,0,...) at sleepq_wait+0x63 _cv_wait(c7039acc,c7039bfc,c0e5763e,6b,c7039ad4,...) at _cv_wait+0x243 usb_process(c7039ac4,e0bf6d28,c0e8046c,390,c701e578,...) at usb_process+0x193 fork_exit(c0850390,c7039ac4,e0bf6d28) at fork_exit+0xb8 fork_trampoline() at fork_trampoline+0x8 --- trap 0, eip = 0, esp = 0xe0bf6d60, ebp = 0 --- Tracing command usb pid 15 tid 100044 td 0xc70355c0 sched_switch(c70355c0,0,104,191,c446dd68,...) at sched_switch+0x3bc mi_switch(104,0,c0e8b280,1f3,0,...) at mi_switch+0x219 sleepq_switch(c70355c0,0,c0e8b280,268,c70355c0,...) at sleepq_switch+0x162 sleepq_wait(c702fb5c,0,e0bf2cac,1,0,...) at sleepq_wait+0x63 _cv_wait(c702fb5c,c702fbfc,c0e5763e,6b,c702fb64,...) at _cv_wait+0x243 usb_process(c702fb54,e0bf2d28,c0e8046c,390,c701e578,...) at usb_process+0x193 fork_exit(c0850390,c702fb54,e0bf2d28) at fork_exit+0xb8 fork_trampoline() at fork_trampoline+0x8 --- trap 0, eip = 0, esp = 0xe0bf2d60, ebp = 0 --- Tracing command usb pid 15 tid 100043 td 0xc70358a0 sched_switch(c70358a0,0,104,191,a5034417,...) at sched_switch+0x3bc mi_switch(104,0,c0e8b280,1f3,0,...) at mi_switch+0x219 sleepq_switch(c70358a0,0,c0e8b280,268,c70358a0,...) at sleepq_switch+0x162 sleepq_wait(c702fb2c,0,e0befcac,1,0,...) at sleepq_wait+0x63 _cv_wait(c702fb2c,c702fbfc,c0e5763e,6b,c702fb34,...) at _cv_wait+0x243 usb_process(c702fb24,e0befd28,c0e8046c,390,c701e578,...) at usb_process+0x193 fork_exit(c0850390,c702fb24,e0befd28) at fork_exit+0xb8 fork_trampoline() at fork_trampoline+0x8 --- trap 0, eip = 0, esp = 0xe0befd60, ebp = 0 --- Tracing command usb pid 15 tid 100042 td 0xc7035b80 sched_switch(c7035b80,0,104,191,c3dfefa0,...) at sched_switch+0x3bc mi_switch(104,0,c0e8b280,1f3,0,...) at mi_switch+0x219 sleepq_switch(c7035b80,0,c0e8b280,268,c7035b80,...) at sleepq_switch+0x162 sleepq_wait(c702fafc,0,e0beccac,1,0,...) at sleepq_wait+0x63 _cv_wait(c702fafc,c702fbfc,c0e5763e,6b,c702fb04,...) at _cv_wait+0x243 usb_process(c702faf4,e0becd28,c0e8046c,390,c701e578,...) at usb_process+0x193 fork_exit(c0850390,c702faf4,e0becd28) at fork_exit+0xb8 fork_trampoline() at fork_trampoline+0x8 --- trap 0, eip = 0, esp = 0xe0becd60, ebp = 0 --- Tracing command usb pid 15 tid 100041 td 0xc7036000 sched_switch(c7036000,0,104,191,c3dfddb5,...) at sched_switch+0x3bc mi_switch(104,0,c0e8b280,1f3,0,...) at mi_switch+0x219 sleepq_switch(c7036000,0,c0e8b280,268,c7036000,...) at sleepq_switch+0x162 sleepq_wait(c702facc,0,e0be9cac,1,0,...) at sleepq_wait+0x63 _cv_wait(c702facc,c702fbfc,c0e5763e,6b,c702fad4,...) at _cv_wait+0x243 usb_process(c702fac4,e0be9d28,c0e8046c,390,c701e578,...) at usb_process+0x193 fork_exit(c0850390,c702fac4,e0be9d28) at fork_exit+0xb8 fork_trampoline() at fork_trampoline+0x8 --- trap 0, eip = 0, esp = 0xe0be9d60, ebp = 0 --- Tracing command usb pid 15 tid 100039 td 0xc701f2e0 sched_switch(c701f2e0,0,104,191,c3dfc897,...) at sched_switch+0x3bc mi_switch(104,0,c0e8b280,1f3,0,...) at mi_switch+0x219 sleepq_switch(c701f2e0,0,c0e8b280,268,c701f2e0,...) at sleepq_switch+0x162 sleepq_wait(c7029b5c,0,e0be2cac,1,0,...) at sleepq_wait+0x63 _cv_wait(c7029b5c,c7029bfc,c0e5763e,6b,c7029b64,...) at _cv_wait+0x243 usb_process(c7029b54,e0be2d28,c0e8046c,390,c701e578,...) at usb_process+0x193 fork_exit(c0850390,c7029b54,e0be2d28) at fork_exit+0xb8 fork_trampoline() at fork_trampoline+0x8 --- trap 0, eip = 0, esp = 0xe0be2d60, ebp = 0 --- Tracing command usb pid 15 tid 100038 td 0xc701f5c0 sched_switch(c701f5c0,0,104,191,a5029c10,...) at sched_switch+0x3bc mi_switch(104,0,c0e8b280,1f3,0,...) at mi_switch+0x219 sleepq_switch(c701f5c0,0,c0e8b280,268,c701f5c0,...) at sleepq_switch+0x162 sleepq_wait(c7029b2c,0,e0bdfcac,1,0,...) at sleepq_wait+0x63 _cv_wait(c7029b2c,c7029bfc,c0e5763e,6b,c7029b34,...) at _cv_wait+0x243 usb_process(c7029b24,e0bdfd28,c0e8046c,390,c701e578,...) at usb_process+0x193 fork_exit(c0850390,c7029b24,e0bdfd28) at fork_exit+0xb8 fork_trampoline() at fork_trampoline+0x8 --- trap 0, eip = 0, esp = 0xe0bdfd60, ebp = 0 --- Tracing command usb pid 15 tid 100037 td 0xc701f8a0 sched_switch(c701f8a0,0,104,191,c378ce45,...) at sched_switch+0x3bc mi_switch(104,0,c0e8b280,1f3,0,...) at mi_switch+0x219 sleepq_switch(c701f8a0,0,c0e8b280,268,c701f8a0,...) at sleepq_switch+0x162 sleepq_wait(c7029afc,0,e0bdccac,1,0,...) at sleepq_wait+0x63 _cv_wait(c7029afc,c7029bfc,c0e5763e,6b,c7029b04,...) at _cv_wait+0x243 usb_process(c7029af4,e0bdcd28,c0e8046c,390,c701e578,...) at usb_process+0x193 fork_exit(c0850390,c7029af4,e0bdcd28) at fork_exit+0xb8 fork_trampoline() at fork_trampoline+0x8 --- trap 0, eip = 0, esp = 0xe0bdcd60, ebp = 0 --- Tracing command usb pid 15 tid 100036 td 0xc701fb80 sched_switch(c701fb80,0,104,191,c378bba8,...) at sched_switch+0x3bc mi_switch(104,0,c0e8b280,1f3,0,...) at mi_switch+0x219 sleepq_switch(c701fb80,0,c0e8b280,268,c701fb80,...) at sleepq_switch+0x162 sleepq_wait(c7029acc,0,e0bd9cac,1,0,...) at sleepq_wait+0x63 _cv_wait(c7029acc,c7029bfc,c0e5763e,6b,c7029ad4,...) at _cv_wait+0x243 usb_process(c7029ac4,e0bd9d28,c0e8046c,390,c701e578,...) at usb_process+0x193 fork_exit(c0850390,c7029ac4,e0bd9d28) at fork_exit+0xb8 fork_trampoline() at fork_trampoline+0x8 --- trap 0, eip = 0, esp = 0xe0bd9d60, ebp = 0 --- Tracing command usb pid 15 tid 100034 td 0xc70222e0 sched_switch(c70222e0,0,104,191,c378a6b8,...) at sched_switch+0x3bc mi_switch(104,0,c0e8b280,1f3,0,...) at mi_switch+0x219 sleepq_switch(c70222e0,0,c0e8b280,268,c70222e0,...) at sleepq_switch+0x162 sleepq_wait(c7019b5c,0,e0bd2cac,1,0,...) at sleepq_wait+0x63 _cv_wait(c7019b5c,c7019bfc,c0e5763e,6b,c7019b64,...) at _cv_wait+0x243 usb_process(c7019b54,e0bd2d28,c0e8046c,390,c701e578,...) at usb_process+0x193 fork_exit(c0850390,c7019b54,e0bd2d28) at fork_exit+0xb8 fork_trampoline() at fork_trampoline+0x8 --- trap 0, eip = 0, esp = 0xe0bd2d60, ebp = 0 --- Tracing command usb pid 15 tid 100033 td 0xc70225c0 sched_switch(c70225c0,0,104,191,a5022e10,...) at sched_switch+0x3bc mi_switch(104,0,c0e8b280,1f3,0,...) at mi_switch+0x219 sleepq_switch(c70225c0,0,c0e8b280,268,c70225c0,...) at sleepq_switch+0x162 sleepq_wait(c7019b2c,0,e0bcfcac,1,0,...) at sleepq_wait+0x63 _cv_wait(c7019b2c,c7019bfc,c0e5763e,6b,c7019b34,...) at _cv_wait+0x243 usb_process(c7019b24,e0bcfd28,c0e8046c,390,c701e578,...) at usb_process+0x193 fork_exit(c0850390,c7019b24,e0bcfd28) at fork_exit+0xb8 fork_trampoline() at fork_trampoline+0x8 --- trap 0, eip = 0, esp = 0xe0bcfd60, ebp = 0 --- Tracing command usb pid 15 tid 100032 td 0xc70228a0 sched_switch(c70228a0,0,104,191,c31186fc,...) at sched_switch+0x3bc mi_switch(104,0,c0e8b280,1f3,0,...) at mi_switch+0x219 sleepq_switch(c70228a0,0,c0e8b280,268,c70228a0,...) at sleepq_switch+0x162 sleepq_wait(c7019afc,0,e0bcccac,1,0,...) at sleepq_wait+0x63 _cv_wait(c7019afc,c7019bfc,c0e5763e,6b,c7019b04,...) at _cv_wait+0x243 usb_process(c7019af4,e0bccd28,c0e8046c,390,c701e578,...) at usb_process+0x193 fork_exit(c0850390,c7019af4,e0bccd28) at fork_exit+0xb8 fork_trampoline() at fork_trampoline+0x8 --- trap 0, eip = 0, esp = 0xe0bccd60, ebp = 0 --- Tracing command usb pid 15 tid 100031 td 0xc7022b80 sched_switch(c7022b80,0,104,191,c311724a,...) at sched_switch+0x3bc mi_switch(104,0,c0e8b280,1f3,0,...) at mi_switch+0x219 sleepq_switch(c7022b80,0,c0e8b280,268,c7022b80,...) at sleepq_switch+0x162 sleepq_wait(c7019acc,0,e0bc9cac,1,0,...) at sleepq_wait+0x63 _cv_wait(c7019acc,c7019bfc,c0e5763e,6b,c7019ad4,...) at _cv_wait+0x243 usb_process(c7019ac4,e0bc9d28,c0e8046c,390,c701e578,...) at usb_process+0x193 fork_exit(c0850390,c7019ac4,e0bc9d28) at fork_exit+0xb8 fork_trampoline() at fork_trampoline+0x8 --- trap 0, eip = 0, esp = 0xe0bc9d60, ebp = 0 --- Tracing command yarrow pid 14 tid 100017 td 0xc6ecb5c0 sched_switch(c6ecb5c0,0,104,191,e993b5b,...) at sched_switch+0x3bc mi_switch(104,0,c0e8b280,1f3,0,...) at mi_switch+0x219 sleepq_switch(c6ecb5c0,0,c0e8b280,28b,2,...) at sleepq_switch+0x162 sleepq_timedwait(c1011784,0,c0e78f92,2,0,...) at sleepq_timedwait+0x6b _sleep(c1011784,0,0,c0e78f92,64,...) at _sleep+0x342 pause(c0e78f92,64,c0e4604e,111,0,...) at pause+0x47 random_kthread(0,c6b55d28,c0e8046c,390,c6dbd000,...) at random_kthread+0x1ef fork_exit(c07bb4a0,0,c6b55d28) at fork_exit+0xb8 fork_trampoline() at fork_trampoline+0x8 --- trap 0, eip = 0, esp = 0xc6b55d60, ebp = 0 --- Tracing command geom pid 13 tid 100015 td 0xc6ecbb80 sched_switch(c6ecbb80,0,104,191,8baf96c,...) at sched_switch+0x3bc mi_switch(104,0,c0e8b280,1f3,5c,...) at mi_switch+0x219 sleepq_switch(c6ecbb80,0,c0e8b280,268,0,...) at sleepq_switch+0x162 sleepq_wait(c100f3c8,5c,c0e78f92,0,0,...) at sleepq_wait+0x63 _sleep(c100f3c8,c100f328,25c,c0e78f92,0,...) at _sleep+0x372 g_io_schedule_down(c6ecbb80,0,c0e7aae5,6c,c6b4fd14,...) at g_io_schedule_down+0x5b g_down_procbody(0,c6b4fd28,c0e8046c,390,c6dbd2bc,...) at g_down_procbody+0x9d fork_exit(c093e770,0,c6b4fd28) at fork_exit+0xb8 fork_trampoline() at fork_trampoline+0x8 --- trap 0, eip = 0, esp = 0xc6b4fd60, ebp = 0 --- Tracing command geom pid 13 tid 100014 td 0xc6ecc000 sched_switch(c6ecc000,0,104,191,95cd2f7,...) at sched_switch+0x3bc mi_switch(104,0,c0e8b280,1f3,5c,...) at mi_switch+0x219 sleepq_switch(c6ecc000,0,c0e8b280,268,0,...) at sleepq_switch+0x162 sleepq_wait(c100f3c4,5c,c0e78f92,0,0,...) at sleepq_wait+0x63 _sleep(c100f3c4,c100f348,25c,c0e78f92,0,...) at _sleep+0x372 g_io_schedule_up(c6ecc000,0,c0e7aae5,5f,c6b4cd14,...) at g_io_schedule_up+0x134 g_up_procbody(0,c6b4cd28,c0e8046c,390,c6dbd2bc,...) at g_up_procbody+0x9d fork_exit(c093e810,0,c6b4cd28) at fork_exit+0xb8 fork_trampoline() at fork_trampoline+0x8 --- trap 0, eip = 0, esp = 0xc6b4cd60, ebp = 0 --- Tracing command geom pid 13 tid 100013 td 0xc6dc02e0 sched_switch(c6dc02e0,0,104,191,fe55ad1a,...) at sched_switch+0x3bc mi_switch(104,0,c0e8b280,1f3,5c,...) at mi_switch+0x219 sleepq_switch(c6dc02e0,0,c0e8b280,268,0,...) at sleepq_switch+0x162 sleepq_wait(c100f3bc,5c,c0e78f92,0,0,...) at sleepq_wait+0x63 _sleep(c100f3bc,c100f2ec,25c,c0e78f92,0,...) at _sleep+0x372 g_run_events(c101f600,0,c0e7aae5,79,c6b49d14,...) at g_run_events+0x526 g_event_procbody(0,c6b49d28,c0e8046c,390,c6dbd2bc,...) at g_event_procbody+0x90 fork_exit(c093e8b0,0,c6b49d28) at fork_exit+0xb8 fork_trampoline() at fork_trampoline+0x8 --- trap 0, eip = 0, esp = 0xc6b49d60, ebp = 0 --- Tracing command intr pid 12 tid 100065 td 0xc7171b80 fork_trampoline() at fork_trampoline Tracing command intr pid 12 tid 100064 td 0xc7172000 sched_switch(c7172000,0,109,191,c30dd67b,...) at sched_switch+0x3bc mi_switch(109,0,c0e80791,554,c7172000,...) at mi_switch+0x219 ithread_loop(c7162ae0,ecf75d28,c0e8046c,390,c6dbd578,...) at ithread_loop+0x1fb fork_exit(c097f750,c7162ae0,ecf75d28) at fork_exit+0xb8 fork_trampoline() at fork_trampoline+0x8 --- trap 0, eip = 0, esp = 0xecf75d60, ebp = 0 --- Tracing command intr pid 12 tid 100062 td 0xc70365c0 sched_switch(c70365c0,0,109,191,10069205,...) at sched_switch+0x3bc mi_switch(109,0,c0e80791,554,c70365c0,...) at mi_switch+0x219 ithread_loop(c7162b70,ecf65d28,c0e8046c,390,c6dbd578,...) at ithread_loop+0x1fb fork_exit(c097f750,c7162b70,ecf65d28) at fork_exit+0xb8 fork_trampoline() at fork_trampoline+0x8 --- trap 0, eip = 0, esp = 0xecf65d60, ebp = 0 --- Tracing command intr pid 12 tid 100059 td 0xc7043000 sched_switch(c7043000,0,109,191,c30d7327,...) at sched_switch+0x3bc mi_switch(109,0,c0e80791,554,c7043000,...) at mi_switch+0x219 ithread_loop(c701db60,ecf59d28,c0e8046c,390,c6dbd578,...) at ithread_loop+0x1fb fork_exit(c097f750,c701db60,ecf59d28) at fork_exit+0xb8 fork_trampoline() at fork_trampoline+0x8 --- trap 0, eip = 0, esp = 0xecf59d60, ebp = 0 --- Tracing command intr pid 12 tid 100058 td 0xc70432e0 sched_switch(c70432e0,0,109,191,dea8269a,...) at sched_switch+0x3bc mi_switch(109,0,c0e80791,554,c70432e0,...) at mi_switch+0x219 ithread_loop(c701d210,ecf55d28,c0e8046c,390,c6dbd578,...) at ithread_loop+0x1fb fork_exit(c097f750,c701d210,ecf55d28) at fork_exit+0xb8 fork_trampoline() at fork_trampoline+0x8 --- trap 0, eip = 0, esp = 0xecf55d60, ebp = 0 --- Tracing command intr pid 12 tid 100053 td 0xc70452e0 fork_trampoline() at fork_trampoline Tracing command intr pid 12 tid 100040 td 0xc701f000 sched_switch(c701f000,0,109,191,e854d3a3,...) at sched_switch+0x3bc mi_switch(109,0,c0e80791,554,c701f000,...) at mi_switch+0x219 ithread_loop(c70028a0,e0be6d28,c0e8046c,390,c6dbd578,...) at ithread_loop+0x1fb fork_exit(c097f750,c70028a0,e0be6d28) at fork_exit+0xb8 fork_trampoline() at fork_trampoline+0x8 --- trap 0, eip = 0, esp = 0xe0be6d60, ebp = 0 --- Tracing command intr pid 12 tid 100035 td 0xc7022000 sched_switch(c7022000,0,109,191,e2c0d0bd,...) at sched_switch+0x3bc mi_switch(109,0,c0e80791,554,c7022000,...) at mi_switch+0x219 ithread_loop(c7002ab0,e0bd6d28,c0e8046c,390,c6dbd578,...) at ithread_loop+0x1fb fork_exit(c097f750,c7002ab0,e0bd6d28) at fork_exit+0xb8 fork_trampoline() at fork_trampoline+0x8 --- trap 0, eip = 0, esp = 0xe0bd6d60, ebp = 0 --- Tracing command intr pid 12 tid 100030 td 0xc6ecc2e0 sched_switch(c6ecc2e0,0,109,191,e0d2f0a1,...) at sched_switch+0x3bc mi_switch(109,0,c0e80791,554,c6ecc2e0,...) at mi_switch+0x219 ithread_loop(c701d080,e0bc6d28,c0e8046c,390,c6dbd578,...) at ithread_loop+0x1fb fork_exit(c097f750,c701d080,e0bc6d28) at fork_exit+0xb8 fork_trampoline() at fork_trampoline+0x8 --- trap 0, eip = 0, esp = 0xe0bc6d60, ebp = 0 --- Tracing command intr pid 12 tid 100029 td 0xc6ecc5c0 sched_switch(c6ecc5c0,0,109,191,e79c209f,...) at sched_switch+0x3bc mi_switch(109,0,c0e80791,554,c6ecc5c0,...) at mi_switch+0x219 ithread_loop(c7002340,e0a70d28,c0e8046c,390,c6dbd578,...) at ithread_loop+0x1fb fork_exit(c097f750,c7002340,e0a70d28) at fork_exit+0xb8 fork_trampoline() at fork_trampoline+0x8 --- trap 0, eip = 0, esp = 0xe0a70d60, ebp = 0 --- Tracing command intr pid 12 tid 100028 td 0xc6ecc8a0 sched_switch(c6ecc8a0,0,109,191,da4c5fc1,...) at sched_switch+0x3bc mi_switch(109,0,c0e80791,554,c6ecc8a0,...) at mi_switch+0x219 ithread_loop(c70024e0,e0a6cd28,c0e8046c,390,c6dbd578,...) at ithread_loop+0x1fb fork_exit(c097f750,c70024e0,e0a6cd28) at fork_exit+0xb8 fork_trampoline() at fork_trampoline+0x8 --- trap 0, eip = 0, esp = 0xe0a6cd60, ebp = 0 --- Tracing command intr pid 12 tid 100027 td 0xc6eccb80 sched_switch(c6eccb80,0,109,191,e79cc026,...) at sched_switch+0x3bc mi_switch(109,0,c0e80791,554,c6eccb80,...) at mi_switch+0x219 ithread_loop(c6d83380,c6b73d28,c0e8046c,390,c6dbd578,...) at ithread_loop+0x1fb fork_exit(c097f750,c6d83380,c6b73d28) at fork_exit+0xb8 fork_trampoline() at fork_trampoline+0x8 --- trap 0, eip = 0, esp = 0xc6b73d60, ebp = 0 --- Tracing command intr pid 12 tid 100021 td 0xc6e068a0 sched_switch(c6e068a0,0,109,191,ad504891,...) at sched_switch+0x3bc mi_switch(109,0,c0e80791,554,c6e068a0,...) at mi_switch+0x219 ithread_loop(c6d83430,c6b61d28,c0e8046c,390,c6dbd578,...) at ithread_loop+0x1fb fork_exit(c097f750,c6d83430,c6b61d28) at fork_exit+0xb8 fork_trampoline() at fork_trampoline+0x8 --- trap 0, eip = 0, esp = 0xc6b61d60, ebp = 0 --- Tracing command intr pid 12 tid 100020 td 0xc6e06b80 fork_trampoline() at fork_trampoline Tracing command intr pid 12 tid 100018 td 0xc6ecb2e0 fork_trampoline() at fork_trampoline Tracing command intr pid 12 tid 100012 td 0xc6dc05c0 sched_switch(c6dc05c0,0,109,191,d8452ef,...) at sched_switch+0x3bc mi_switch(109,0,c0e80791,554,c6dc05c0,...) at mi_switch+0x219 ithread_loop(c6d836d0,c6b46d28,c0e8046c,390,c6dbd578,...) at ithread_loop+0x1fb fork_exit(c097f750,c6d836d0,c6b46d28) at fork_exit+0xb8 fork_trampoline() at fork_trampoline+0x8 --- trap 0, eip = 0, esp = 0xc6b46d60, ebp = 0 --- Tracing command intr pid 12 tid 100011 td 0xc6dc08a0 sched_switch(c6dc08a0,0,109,191,f6055c72,...) at sched_switch+0x3bc mi_switch(109,0,c0e80791,554,c6dc08a0,...) at mi_switch+0x219 ithread_loop(c6d836e0,c6b43d28,c0e8046c,390,c6dbd578,...) at ithread_loop+0x1fb fork_exit(c097f750,c6d836e0,c6b43d28) at fork_exit+0xb8 fork_trampoline() at fork_trampoline+0x8 --- trap 0, eip = 0, esp = 0xc6b43d60, ebp = 0 --- Tracing command intr pid 12 tid 100010 td 0xc6dc0b80 sched_switch(c6dc0b80,0,109,191,bfc537,...) at sched_switch+0x3bc mi_switch(109,0,c0e80791,554,c6dc0b80,...) at mi_switch+0x219 ithread_loop(c6d836f0,c6b40d28,c0e8046c,390,c6dbd578,...) at ithread_loop+0x1fb fork_exit(c097f750,c6d836f0,c6b40d28) at fork_exit+0xb8 fork_trampoline() at fork_trampoline+0x8 --- trap 0, eip = 0, esp = 0xc6b40d60, ebp = 0 --- Tracing command intr pid 12 tid 100009 td 0xc6e06000 sched_switch(c6e06000,0,109,191,1331bbb9,...) at sched_switch+0x3bc mi_switch(109,0,c0e80791,554,c6e06000,...) at mi_switch+0x219 ithread_loop(c6d83700,c6b3dd28,c0e8046c,390,c6dbd578,...) at ithread_loop+0x1fb fork_exit(c097f750,c6d83700,c6b3dd28) at fork_exit+0xb8 fork_trampoline() at fork_trampoline+0x8 --- trap 0, eip = 0, esp = 0xc6b3dd60, ebp = 0 --- Tracing command intr pid 12 tid 100008 td 0xc6e062e0 fork_trampoline() at fork_trampoline Tracing command intr pid 12 tid 100007 td 0xc6e065c0 sched_switch(c6e065c0,0,109,191,e41e08ad,...) at sched_switch+0x3bc mi_switch(109,0,c0e80791,554,c6e065c0,...) at mi_switch+0x219 ithread_loop(c6d83720,c6b37d28,c0e8046c,390,c6dbd578,...) at ithread_loop+0x1fb fork_exit(c097f750,c6d83720,c6b37d28) at fork_exit+0xb8 fork_trampoline() at fork_trampoline+0x8 --- trap 0, eip = 0, esp = 0xc6b37d60, ebp = 0 --- Tracing command idle pid 11 tid 100006 td 0xc6dbf000 cpustop_handler(1,c6b33c48,c0cd2706,1,e6c,...) at cpustop_handler+0x34 ipi_nmi_handler(1,e6c,9714e9f4,fdd3bafd,c6dbd834,...) at ipi_nmi_handler+0x2f trap(c6b33c54) at trap+0x36 calltrap() at calltrap+0x6 --- trap 0x13, eip = 0xc09af4f3, esp = 0xc6b33c94, ebp = 0xc6b33c94 --- critical_exit(c101fc80,c6b33ce8,c09ce6ab,c102e130,c6b33cc4,...) at critical_exit+0x3 spinlock_exit(c102e130,c6b33cc4,c0e87b4b,3bb,c6dbf000,...) at spinlock_exit+0x10 sched_idletd(0,c6b33d28,c0e8046c,390,c6dbd834,...) at sched_idletd+0x16b fork_exit(c09ce540,0,c6b33d28) at fork_exit+0xb8 fork_trampoline() at fork_trampoline+0x8 --- trap 0, eip = 0, esp = 0xc6b33d60, ebp = 0 --- Tracing command idle pid 11 tid 100005 td 0xc6dbf2e0 sched_switch(c6dbf2e0,0,108,18c,f1cf266c,...) at sched_switch+0x3bc mi_switch(108,0,c0e87b4b,a03,c6dbf2e0,...) at mi_switch+0x219 sched_idletd(0,c6b30d28,c0e8046c,390,c6dbd834,...) at sched_idletd+0x2bf fork_exit(c09ce540,0,c6b30d28) at fork_exit+0xb8 fork_trampoline() at fork_trampoline+0x8 --- trap 0, eip = 0, esp = 0xc6b30d60, ebp = 0 --- Tracing command idle pid 11 tid 100004 td 0xc6dbf5c0 sched_switch(c6dbf5c0,0,108,18c,fbbf0aa0,...) at sched_switch+0x3bc mi_switch(108,0,c0e87b4b,3b9,c6dbf5c0,...) at mi_switch+0x219 sched_idletd(0,c6b2dd28,c0e8046c,390,c6dbd834,...) at sched_idletd+0x19f fork_exit(c09ce540,0,c6b2dd28) at fork_exit+0xb8 fork_trampoline() at fork_trampoline+0x8 --- trap 0, eip = 0, esp = 0xc6b2dd60, ebp = 0 --- Tracing command idle pid 11 tid 100003 td 0xc6dbf8a0 sched_switch(c6dbf8a0,0,108,18c,3dba704,...) at sched_switch+0x3bc mi_switch(108,0,c0e87b4b,3b9,c6dbf8a0,...) at mi_switch+0x219 sched_idletd(0,c6b2ad28,c0e8046c,390,c6dbd834,...) at sched_idletd+0x19f fork_exit(c09ce540,0,c6b2ad28) at fork_exit+0xb8 fork_trampoline() at fork_trampoline+0x8 --- trap 0, eip = 0, esp = 0xc6b2ad60, ebp = 0 --- Tracing command init pid 1 tid 100002 td 0xc6dbfb80 sched_switch(c6dbfb80,0,104,191,715a1a80,...) at sched_switch+0x3bc mi_switch(104,0,c0e8b280,1f3,6c,...) at mi_switch+0x219 sleepq_switch(c6dbfb80,0,c0e8b280,1a7,6c,...) at sleepq_switch+0x162 sleepq_catch_signals(c0e8b280,160,0,100,100,...) at sleepq_catch_signals+0xf9 sleepq_wait_sig(c6dbdaf0,6c,c0e8e012,100,0,...) at sleepq_wait_sig+0x17 _sleep(c6dbdaf0,c6dbdb78,16c,c0e8e012,0,...) at _sleep+0x35c kern_wait(c6dbfb80,ffffffff,c6b26c44,0,0,...) at kern_wait+0xbe6 wait4(c6dbfb80,c6b26cec,c6b26d28,c0e8bbbe,0,...) at wait4+0x3b syscallenter(c6dbfb80,c6b26ce4,c6b26ce4,0,0,...) at syscallenter+0x263 syscall(c6b26d28) at syscall+0x4f Xint0x80_syscall() at Xint0x80_syscall+0x21 --- syscall (7, FreeBSD ELF32, wait4), eip = 0x8060de7, esp = 0xbfbfe8bc, ebp = 0xbfbfe8d8 --- Tracing command audit pid 10 tid 100001 td 0xc6dc0000 sched_switch(c6dc0000,0,104,191,c30f6774,...) at sched_switch+0x3bc mi_switch(104,0,c0e8b280,1f3,0,...) at mi_switch+0x219 sleepq_switch(c6dc0000,0,c0e8b280,268,c6dc0000,...) at sleepq_switch+0x162 sleepq_wait(c118e800,0,c6b23c8c,1,0,...) at sleepq_wait+0x63 _cv_wait(c118e800,c118e7e4,c0eb5897,194,0,...) at _cv_wait+0x243 audit_worker(0,c6b23d28,c0e8046c,390,c6dbe000,...) at audit_worker+0x84 fork_exit(c0b9aea0,0,c6b23d28) at fork_exit+0xb8 fork_trampoline() at fork_trampoline+0x8 --- trap 0, eip = 0, esp = 0xc6b23d60, ebp = 0 --- Tracing command kernel pid 0 tid 100076 td 0xc70458a0 sched_switch(c70458a0,0,104,191,a6e7ffc7,...) at sched_switch+0x3bc mi_switch(104,0,c0e8b280,1f3,0,...) at mi_switch+0x219 sleepq_switch(c70458a0,0,c0e8b280,268,0,...) at sleepq_switch+0x162 sleepq_wait(c71853c0,0,c0e78f92,0,0,...) at sleepq_wait+0x63 _sleep(c71853c0,c71853d8,0,c0e78f92,0,...) at _sleep+0x372 taskqueue_thread_loop(c11e62a0,ef185d28,c0e8046c,390,c100f4a0,...) at taskqueue_thread_loop+0xb5 fork_exit(c09ea9e0,c11e62a0,ef185d28) at fork_exit+0xb8 fork_trampoline() at fork_trampoline+0x8 --- trap 0, eip = 0, esp = 0xef185d60, ebp = 0 --- Tracing command kernel pid 0 tid 100066 td 0xc71718a0 sched_switch(c71718a0,0,104,191,e7fc7917,...) at sched_switch+0x3bc mi_switch(104,0,c0e8b280,1f3,0,...) at mi_switch+0x219 sleepq_switch(c71718a0,0,c0e8b280,28b,2,...) at sleepq_switch+0x162 sleepq_timedwait(c1011784,0,c0e78f92,2,0,...) at sleepq_timedwait+0x6b _sleep(c1011784,0,0,c0e78f92,bb8,...) at _sleep+0x342 pause(c0e78f92,bb8,124,122,c100f528,...) at pause+0x47 deadlkres(0,ecf7bd28,c0e8046c,390,c100f4a0,...) at deadlkres+0x324 fork_exit(c095ffe0,0,ecf7bd28) at fork_exit+0xb8 fork_trampoline() at fork_trampoline+0x8 --- trap 0, eip = 0, esp = 0xecf7bd60, ebp = 0 --- Tracing command kernel pid 0 tid 100060 td 0xc7036b80 sched_switch(c7036b80,0,104,191,1222aaef,...) at sched_switch+0x3bc mi_switch(104,0,c0e8b280,1f3,0,...) at mi_switch+0x219 sleepq_switch(c7036b80,0,c0e8b280,268,0,...) at sleepq_switch+0x162 sleepq_wait(c7073900,0,c0e868a1,c0e78f92,0,...) at sleepq_wait+0x63 msleep_spin(c7073900,c7073918,c0e78f92,0,c0e84107,...) at msleep_spin+0x21d taskqueue_thread_loop(c706f49c,ecf5fd28,c0e8046c,390,c100f4a0,...) at taskqueue_thread_loop+0x8f fork_exit(c09ea9e0,c706f49c,ecf5fd28) at fork_exit+0xb8 fork_trampoline() at fork_trampoline+0x8 --- trap 0, eip = 0, esp = 0xecf5fd60, ebp = 0 --- Tracing command kernel pid 0 tid 100026 td 0xc6fab000 sched_switch(c6fab000,0,104,191,ddb78b2f,...) at sched_switch+0x3bc mi_switch(104,0,c0e8b280,1f3,0,...) at mi_switch+0x219 sleepq_switch(c6fab000,0,c0e8b280,268,0,...) at sleepq_switch+0x162 sleepq_wait(c6d92340,0,c0e868a1,c0e78f92,0,...) at sleepq_wait+0x63 msleep_spin(c6d92340,c6d92358,c0e78f92,0,c0e84107,...) at msleep_spin+0x21d taskqueue_thread_loop(c0fda738,c6b70d28,c0e8046c,390,c100f4a0,...) at taskqueue_thread_loop+0x8f fork_exit(c09ea9e0,c0fda738,c6b70d28) at fork_exit+0xb8 fork_trampoline() at fork_trampoline+0x8 --- trap 0, eip = 0, esp = 0xc6b70d60, ebp = 0 --- Tracing command kernel pid 0 tid 100025 td 0xc6fab2e0 sched_switch(c6fab2e0,0,104,191,ddb77dc4,...) at sched_switch+0x3bc mi_switch(104,0,c0e8b280,1f3,0,...) at mi_switch+0x219 sleepq_switch(c6fab2e0,0,c0e8b280,268,0,...) at sleepq_switch+0x162 sleepq_wait(c6d92340,0,c0e868a1,c0e78f92,0,...) at sleepq_wait+0x63 msleep_spin(c6d92340,c6d92358,c0e78f92,0,c0e84107,...) at msleep_spin+0x21d taskqueue_thread_loop(c0fda738,c6b6dd28,c0e8046c,390,c100f4a0,...) at taskqueue_thread_loop+0x8f fork_exit(c09ea9e0,c0fda738,c6b6dd28) at fork_exit+0xb8 fork_trampoline() at fork_trampoline+0x8 --- trap 0, eip = 0, esp = 0xc6b6dd60, ebp = 0 --- Tracing command kernel pid 0 tid 100024 td 0xc6fab5c0 sched_switch(c6fab5c0,0,104,191,ddb76d11,...) at sched_switch+0x3bc mi_switch(104,0,c0e8b280,1f3,0,...) at mi_switch+0x219 sleepq_switch(c6fab5c0,0,c0e8b280,268,0,...) at sleepq_switch+0x162 sleepq_wait(c6d92340,0,c0e868a1,c0e78f92,0,...) at sleepq_wait+0x63 msleep_spin(c6d92340,c6d92358,c0e78f92,0,c0e84107,...) at msleep_spin+0x21d taskqueue_thread_loop(c0fda738,c6b6ad28,c0e8046c,390,c100f4a0,...) at taskqueue_thread_loop+0x8f fork_exit(c09ea9e0,c0fda738,c6b6ad28) at fork_exit+0xb8 fork_trampoline() at fork_trampoline+0x8 --- trap 0, eip = 0, esp = 0xc6b6ad60, ebp = 0 --- Tracing command kernel pid 0 tid 100023 td 0xc6fab8a0 sched_switch(c6fab8a0,0,104,191,ddb104dc,...) at sched_switch+0x3bc mi_switch(104,0,c0e8b280,1f3,0,...) at mi_switch+0x219 sleepq_switch(c6fab8a0,0,c0e8b280,268,0,...) at sleepq_switch+0x162 sleepq_wait(c6d92380,0,c0e78f92,0,0,...) at sleepq_wait+0x63 _sleep(c6d92380,c6d92398,0,c0e78f92,0,...) at _sleep+0x372 taskqueue_thread_loop(c100fe18,c6b67d28,c0e8046c,390,c100f4a0,...) at taskqueue_thread_loop+0xb5 fork_exit(c09ea9e0,c100fe18,c6b67d28) at fork_exit+0xb8 fork_trampoline() at fork_trampoline+0x8 --- trap 0, eip = 0, esp = 0xc6b67d60, ebp = 0 --- Tracing command kernel pid 0 tid 100022 td 0xc6fabb80 sched_switch(c6fabb80,0,104,191,ddb0f305,...) at sched_switch+0x3bc mi_switch(104,0,c0e8b280,1f3,0,...) at mi_switch+0x219 sleepq_switch(c6fabb80,0,c0e8b280,268,0,...) at sleepq_switch+0x162 sleepq_wait(c6d923c0,0,c0e78f92,0,0,...) at sleepq_wait+0x63 _sleep(c6d923c0,c6d923d8,0,c0e78f92,0,...) at _sleep+0x372 taskqueue_thread_loop(c118ede4,c6b64d28,c0e8046c,390,c100f4a0,...) at taskqueue_thread_loop+0xb5 fork_exit(c09ea9e0,c118ede4,c6b64d28) at fork_exit+0xb8 fork_trampoline() at fork_trampoline+0x8 --- trap 0, eip = 0, esp = 0xc6b64d60, ebp = 0 --- Tracing command kernel pid 0 tid 100019 td 0xc6ecb000 sched_switch(c6ecb000,0,104,191,e0577299,...) at sched_switch+0x3bc mi_switch(104,0,c0e8b280,1f3,0,...) at mi_switch+0x219 sleepq_switch(c6ecb000,0,c0e8b280,268,0,...) at sleepq_switch+0x162 sleepq_wait(c6d92500,0,c0e78f92,0,0,...) at sleepq_wait+0x63 _sleep(c6d92500,c6d92518,0,c0e78f92,0,...) at _sleep+0x372 taskqueue_thread_loop(c102e328,c6b5bd28,c0e8046c,390,c100f4a0,...) at taskqueue_thread_loop+0xb5 fork_exit(c09ea9e0,c102e328,c6b5bd28) at fork_exit+0xb8 fork_trampoline() at fork_trampoline+0x8 --- trap 0, eip = 0, esp = 0xc6b5bd60, ebp = 0 --- Tracing command kernel pid 0 tid 100016 td 0xc6ecb8a0 sched_switch(c6ecb8a0,0,104,191,98fed32,...) at sched_switch+0x3bc mi_switch(104,0,c0e8b280,1f3,0,...) at mi_switch+0x219 sleepq_switch(c6ecb8a0,0,c0e8b280,268,0,...) at sleepq_switch+0x162 sleepq_wait(c6d92a80,0,c0e78f92,0,0,...) at sleepq_wait+0x63 _sleep(c6d92a80,c6d92a98,0,c0e78f92,0,...) at _sleep+0x372 taskqueue_thread_loop(c102cda0,c6b52d28,c0e8046c,390,c100f4a0,...) at taskqueue_thread_loop+0xb5 fork_exit(c09ea9e0,c102cda0,c6b52d28) at fork_exit+0xb8 fork_trampoline() at fork_trampoline+0x8 --- trap 0, eip = 0, esp = 0xc6b52d60, ebp = 0 --- Tracing command kernel pid 0 tid 100000 td 0xc100f760 sched_switch(c100f760,0,104,191,4e0c9242,...) at sched_switch+0x3bc mi_switch(104,0,c0e8b280,1f3,54,...) at mi_switch+0x219 sleepq_switch(c100f760,0,c0e8b280,28b,0,...) at sleepq_switch+0x162 sleepq_timedwait(c100f4a0,54,c0e8845f,0,0,...) at sleepq_timedwait+0x6b _sleep(c100f4a0,0,54,c0e8845f,2710,...) at _sleep+0x342 scheduler(0,141ec00,141ec00,141e000,1425000,...) at scheduler+0x240 mi_startup() at mi_startup+0xac begin() at begin+0x2c db:0:allt> call doadump Physical memory: 3439 MB Dumping 284 MB: 269 253 237 221 205 189 173 157 141 125 109 93 77 61 45 29 13 Dump complete = 0xf db:0:doadump> reset cpu_reset: Restarting BSP cpu_reset_proxy: Stopped CPU 3 (kgdb) bt #0 doadump () at pcpu.h:244 #1 0xc04ddcb9 in db_fncall (dummy1=0xc09dcaca, dummy2=0x0, dummy3=0xffffffff, dummy4=0xef4e9244 "X\222Nï") at ../../../ddb/db_command.c:548 #2 0xc04de0ef in db_command (last_cmdp=0xc0fd88fc, cmd_table=0x0, dopager=0x0) at ../../../ddb/db_command.c:445 #3 0xc04de1a4 in db_command_script (command=0xc0fd9808 "call doadump") at ../../../ddb/db_command.c:516 #4 0xc04e2470 in db_script_exec (scriptname=0xc0fd9160 "doadump", warnifnotfound=Variable "warnifnotfound" is not available. ) at ../../../ddb/db_script.c:302 #5 0xc04e2501 in db_run_cmd (addr=0x1, have_addr=0x0, count=0xc11b1280, modif=0xef4e937c "") at ../../../ddb/db_script.c:375 #6 0xc04de0b1 in db_command (last_cmdp=0xc0fd88fc, cmd_table=0x0, dopager=0x1) at ../../../ddb/db_command.c:445 #7 0xc04de20a in db_command_loop () at ../../../ddb/db_command.c:498 #8 0xc04e018d in db_trap (type=0x3, code=0x0) at ../../../ddb/db_main.c:229 #9 0xc09dcc42 in kdb_trap (type=0x3, code=0x0, tf=0xef4e952c) at ../../../kern/subr_kdb.c:533 #10 0xc0cd2d3b in trap (frame=0xef4e952c) at ../../../i386/i386/trap.c:719 #11 0xc0cbba4c in calltrap () at ../../../i386/i386/exception.s:168 #12 0xc09dcaca in kdb_enter (why=0xc0e85b53 "panic", msg=0xc0e85b53 "panic") at cpufunc.h:71 #13 0xc09a80d4 in panic (fmt=0xc0ebdc5d "Most recently used by %s\n") at ../../../kern/kern_shutdown.c:584 #14 0xc0bfd407 in mtrash_ctor (mem=0xc9482e80, size=0x80, arg=0x0, flags=0x102) at ../../../vm/uma_dbg.c:137 #15 0xc0bfc717 in uma_zalloc_arg (zone=0xc15b2700, udata=0x0, flags=0x102) at ../../../vm/uma_core.c:2015 #16 0xc0995518 in malloc (size=0x60, mtp=0xc0fb8bf8, flags=0x102) at uma.h:305 #17 0xc0bc64c2 in newblk_lookup (mp=0xc73f6000, newblkno=Unhandled dwarf expression opcode 0x93 ) at ../../../ufs/ffs/ffs_softdep.c:2090 #18 0xc0bc67bf in softdep_setup_blkmapdep (bp=0xe081ff40, mp=0xc73f6000, newblkno=0xe6784, frags=0x1, oldfrags=0x0) at ../../../ufs/ffs/ffs_softdep.c:4574 #19 0xc0bb2eac in ffs_alloccg (ip=0xca9e0000, cg=0xa, bpref=0xe5b58, size=0x800, rsize=0x800) at ../../../ufs/ffs/ffs_alloc.c:1512 #20 0xc0bb0b95 in ffs_hashalloc (ip=0xca9e0000, cg=0xa, pref=0xe5b58, size=0x800, rsize=0x800, allocator=0xc0bb2a10 ) at ../../../ufs/ffs/ffs_alloc.c:1308 #21 0xc0bb31ff in ffs_alloc (ip=0xca9e0000, lbn=0x0, bpref=0xe5b58, size=0x800, flags=0x10000, cred=0xc981d680, bnp=0xef4e9944) at ../../../ufs/ffs/ffs_alloc.c:200 #22 0xc0bb72ac in ffs_balloc_ufs2 (vp=0xc8b0c15c, startoffset=Variable "startoffset" is not available. ) at ../../../ufs/ffs/ffs_balloc.c:735 #23 0xc0bf21ea in ufs_mkdir (ap=0xef4e9bf8) at ../../../ufs/ufs/ufs_vnops.c:1918 #24 0xc0cf5215 in VOP_MKDIR_APV (vop=0xc0fbb8e0, a=0xef4e9bf8) at vnode_if.c:1534 #25 0xc0a46c05 in kern_mkdirat (td=0xc997a000, fd=0xffffff9c, path=0xbfbe520b
, segflg=UIO_USERSPACE, mode=Variable "mode" is not available. ) at vnode_if.h:665 #26 0xc0a46cce in kern_mkdir (td=0xc997a000, path=0xbfbe520b
, segflg=UIO_USERSPACE, mode=0x1f8) at ../../../kern/vfs_syscalls.c:3727 #27 0xc0a46cf9 in mkdir (td=0xc997a000, uap=0xef4e9cec) at ../../../kern/vfs_syscalls.c:3706 #28 0xc09eada3 in syscallenter (td=0xc997a000, sa=0xef4e9ce4) at ../../../kern/subr_trap.c:344 #29 0xc0cd25ef in syscall (frame=0xef4e9d28) at ../../../i386/i386/trap.c:1082 #30 0xc0cbbab1 in Xint0x80_syscall () at ../../../i386/i386/exception.s:266 #31 0x00000033 in ?? () Previous frame inner to this frame (corrupt stack?) (kgdb) x/20 0xc9482e80 0xc9482e80: 0xdeadc0de 0xdeadc0de 0xdeadc0de 0xdea5c0de 0xc9482e90: 0xdeadc0de 0xdeadc0de 0xdeadc0de 0xdeadc0de 0xc9482ea0: 0xdeadc0de 0xdeadc0de 0xdeadc0de 0xdeadc0de 0xc9482eb0: 0xdeadc0de 0xdeadc0de 0xdeadc0de 0xdeadc0de 0xc9482ec0: 0xdeadc0de 0xdeadc0de 0xdeadc0de 0xdeadc0de (kgdb) $ svn diff -x -p /usr/src/sys Index: /usr/src/sys/ufs/ufs/ufsmount.h =================================================================== --- /usr/src/sys/ufs/ufs/ufsmount.h (revision 221878) +++ /usr/src/sys/ufs/ufs/ufsmount.h (working copy) @@ -61,6 +61,7 @@ struct jblocks; struct inodedep; TAILQ_HEAD(inodedeplst, inodedep); +LIST_HEAD(bmsafemaphd, bmsafemap); /* This structure describes the UFS specific mount structure data. */ struct ufsmount { @@ -82,7 +83,8 @@ struct ufsmount { struct workhead softdep_journal_pending; /* journal work queue */ struct worklist *softdep_journal_tail; /* Tail pointer for above */ struct jblocks *softdep_jblocks; /* Journal block information */ - struct inodedeplst softdep_unlinked; /* Unlinked inodes */ + struct inodedeplst softdep_unlinked; /* Unlinked inodes */ + struct bmsafemaphd softdep_dirtycg; /* Dirty CGs */ int softdep_on_journal; /* Items on the journal list */ int softdep_on_worklist; /* Items on the worklist */ int softdep_on_worklist_inprogress; /* Busy items on worklist */ Index: /usr/src/sys/ufs/ffs/ffs_softdep.c =================================================================== --- /usr/src/sys/ufs/ffs/ffs_softdep.c (revision 221878) +++ /usr/src/sys/ufs/ffs/ffs_softdep.c (working copy) @@ -52,6 +52,8 @@ __FBSDID("$FreeBSD$"); #define DEBUG #endif +/* #define SUJ_DEBUG 1 */ + #include #include #include @@ -214,6 +216,17 @@ softdep_setup_allocindir_meta(nbp, ip, bp, ptrno, } void +softdep_journal_freeblocks(ip, cred, length, flags) + struct inode *ip; + struct ucred *cred; + off_t length; + int flags; +{ + + panic("softdep_journal_freeblocks called"); +} + +void softdep_setup_freeblocks(ip, length, flags) struct inode *ip; off_t length; @@ -618,6 +631,7 @@ FEATURE(softupdates, "FFS soft-updates support"); unsigned long dep_current[D_LAST + 1]; unsigned long dep_total[D_LAST + 1]; +unsigned long dep_write[D_LAST + 1]; SYSCTL_NODE(_debug, OID_AUTO, softdep, CTLFLAG_RW, 0, "soft updates stats"); @@ -625,13 +639,17 @@ SYSCTL_NODE(_debug_softdep, OID_AUTO, total, CTLFL "total dependencies allocated"); SYSCTL_NODE(_debug_softdep, OID_AUTO, current, CTLFLAG_RW, 0, "current dependencies allocated"); +SYSCTL_NODE(_debug_softdep, OID_AUTO, write, CTLFLAG_RW, 0, + "current dependencies written"); #define SOFTDEP_TYPE(type, str, long) \ static MALLOC_DEFINE(M_ ## type, #str, long); \ SYSCTL_ULONG(_debug_softdep_total, OID_AUTO, str, CTLFLAG_RD, \ &dep_total[D_ ## type], 0, ""); \ SYSCTL_ULONG(_debug_softdep_current, OID_AUTO, str, CTLFLAG_RD, \ - &dep_current[D_ ## type], 0, ""); + &dep_current[D_ ## type], 0, ""); \ + SYSCTL_ULONG(_debug_softdep_write, OID_AUTO, str, CTLFLAG_RD, \ + &dep_write[D_ ## type], 0, ""); SOFTDEP_TYPE(PAGEDEP, pagedep, "File page dependencies"); SOFTDEP_TYPE(INODEDEP, inodedep, "Inode dependencies"); @@ -736,8 +754,10 @@ static int flush_pagedep_deps(struct vnode *, stru struct diraddhd *); static void free_pagedep(struct pagedep *); static int flush_newblk_dep(struct vnode *, struct mount *, ufs_lbn_t); -static int flush_inodedep_deps(struct mount *, ino_t); +static int flush_inodedep_deps(struct vnode *, struct mount *, ino_t); static int flush_deplist(struct allocdirectlst *, int, int *); +static int flush_trunclist(struct vnode *, struct inodedep *, int, int *); +static void sync_cgs(struct mount *, int); static int handle_written_filepage(struct pagedep *, struct buf *); static int handle_written_sbdep(struct sbdep *, struct buf *); static void initiate_write_sbdep(struct sbdep *); @@ -752,6 +772,7 @@ static void handle_written_jseg(struct jseg *, str static void handle_written_jnewblk(struct jnewblk *); static void handle_written_jfreeblk(struct jfreeblk *); static void handle_written_jfreefrag(struct jfreefrag *); +static void handle_written_jtrunc(struct jtrunc *); static void complete_jseg(struct jseg *); static void jseg_write(struct ufsmount *ump, struct jseg *, uint8_t *); static void jaddref_write(struct jaddref *, struct jseg *, uint8_t *); @@ -768,7 +789,9 @@ static void handle_allocdirect_partdone(struct all static struct jnewblk *cancel_newblk(struct newblk *, struct worklist *, struct workhead *); static void indirdep_complete(struct indirdep *); -static int indirblk_inseg(struct mount *, ufs2_daddr_t); +static int indirblk_lookup(struct mount *, ufs2_daddr_t); +static void indirblk_insert(struct freework *); +static void indirblk_remove(struct freework *); static void handle_allocindir_partdone(struct allocindir *); static void initiate_write_filepage(struct pagedep *, struct buf *); static void initiate_write_indirdep(struct indirdep*, struct buf *); @@ -780,7 +803,9 @@ static void handle_workitem_freefile(struct freefi static void handle_workitem_remove(struct dirrem *, struct vnode *); static struct dirrem *newdirrem(struct buf *, struct inode *, struct inode *, int, struct dirrem **); -static void cancel_indirdep(struct indirdep *, struct buf *, struct inodedep *, +static struct indirdep *indirdep_lookup(struct mount *, struct inode *, + struct buf *); +static void cancel_indirdep(struct indirdep *, struct buf *, struct freeblks *); static void free_indirdep(struct indirdep *); static void free_diradd(struct diradd *, struct workhead *); @@ -795,8 +820,13 @@ static void cancel_diradd(struct diradd *, struct struct jremref *, struct jremref *); static void dirrem_journal(struct dirrem *, struct jremref *, struct jremref *, struct jremref *); -static void cancel_allocindir(struct allocindir *, struct inodedep *, - struct freeblks *); +static void cancel_allocindir(struct allocindir *, struct buf *bp, + struct freeblks *, int); +static int setup_trunc_indir(struct freeblks *, struct inode *, + ufs_lbn_t, ufs_lbn_t, ufs2_daddr_t, int); +static void complete_trunc_indir(struct freework *); +static void trunc_indirdep(struct indirdep *, struct freeblks *, struct buf *, + int); static void complete_mkdir(struct mkdir *); static void free_newdirblk(struct newdirblk *); static void free_jremref(struct jremref *); @@ -818,30 +848,28 @@ static void cancel_jfreefrag(struct jfreefrag *); static inline void setup_freedirect(struct freeblks *, struct inode *, int, int); static inline void setup_freeext(struct freeblks *, struct inode *, int, int); -static inline void setup_freeindir(struct freeblks *, struct inode *, int i, +static inline void setup_freeindir(struct freeblks *, struct inode *, int, ufs_lbn_t, int); static inline struct freeblks *newfreeblks(struct mount *, struct inode *); static void indir_trunc(struct freework *, ufs2_daddr_t, ufs_lbn_t); -static void softdep_trunc_deps(struct vnode *, struct freeblks *, ufs_lbn_t, +static void trunc_dependencies(struct inode *, struct freeblks *, ufs_lbn_t, int, int); -static int cancel_pagedep(struct pagedep *, struct inodedep *, - struct freeblks *); -static int deallocate_dependencies(struct buf *, struct inodedep *, - struct freeblks *, int off); +static int cancel_pagedep(struct pagedep *, struct freeblks *, int); +static int deallocate_dependencies(struct buf *, struct freeblks *, int); static void free_newblk(struct newblk *); static void cancel_allocdirect(struct allocdirectlst *, - struct allocdirect *, struct freeblks *, int); + struct allocdirect *, struct freeblks *); static int check_inode_unwritten(struct inodedep *); static int free_inodedep(struct inodedep *); static void freework_freeblock(struct freework *); static void handle_workitem_freeblocks(struct freeblks *, int); -static void handle_complete_freeblocks(struct freeblks *); +static void handle_complete_freeblocks(struct freeblks *, int); static void handle_workitem_indirblk(struct freework *); static void handle_written_freework(struct freework *); static void merge_inode_lists(struct allocdirectlst *,struct allocdirectlst *); static struct worklist *jnewblk_merge(struct worklist *, struct worklist *, struct workhead *); -static void setup_allocindir_phase2(struct buf *, struct inode *, +static struct freefrag *setup_allocindir_phase2(struct buf *, struct inode *, struct inodedep *, struct allocindir *, ufs_lbn_t); static struct allocindir *newallocindir(struct inode *, int, ufs2_daddr_t, ufs2_daddr_t, ufs_lbn_t); @@ -870,7 +898,9 @@ static void pause_timer(void *); static int request_cleanup(struct mount *, int); static int process_worklist_item(struct mount *, int); static void process_removes(struct vnode *); +static void process_truncates(struct vnode *); static void jwork_move(struct workhead *, struct workhead *); +static void jwork_insert(struct workhead *, struct jsegdep *); static void add_to_worklist(struct worklist *, int); static void remove_from_worklist(struct worklist *); static void softdep_flush(void); @@ -894,11 +924,12 @@ static inline void newinoref(struct inoref *, ino_ static inline struct jsegdep *inoref_jseg(struct inoref *); static struct jmvref *newjmvref(struct inode *, ino_t, off_t, off_t); static struct jfreeblk *newjfreeblk(struct freeblks *, ufs_lbn_t, - ufs2_daddr_t, int); + ufs2_daddr_t, int, int); +static void cancel_jfreeblk(struct freeblks *, ufs2_daddr_t); static struct jfreefrag *newjfreefrag(struct freefrag *, struct inode *, ufs2_daddr_t, long, ufs_lbn_t); static struct freework *newfreework(struct ufsmount *, struct freeblks *, - struct freework *, ufs_lbn_t, ufs2_daddr_t, int, int); + struct freework *, ufs_lbn_t, ufs2_daddr_t, int, int, int); static void jwait(struct worklist *wk); static struct inodedep *inodedep_lookup_ip(struct inode *); static int bmsafemap_rollbacks(struct bmsafemap *); @@ -1064,6 +1095,30 @@ jwork_move(dst, src) } } +static void +jwork_insert(dst, jsegdep) + struct workhead *dst; + struct jsegdep *jsegdep; +{ + struct jsegdep *jsegdepn; + struct worklist *wk; + + LIST_FOREACH(wk, dst, wk_list) + if (wk->wk_type == D_JSEGDEP) + break; + if (wk == NULL) { + WORKLIST_INSERT(dst, &jsegdep->jd_list); + return; + } + jsegdepn = WK_JSEGDEP(wk); + if (jsegdep->jd_seg->js_seq < jsegdepn->jd_seg->js_seq) { + WORKLIST_REMOVE(wk); + free_jsegdep(jsegdepn); + WORKLIST_INSERT(dst, &jsegdep->jd_list); + } else + free_jsegdep(jsegdep); +} + /* * Routines for tracking and managing workitems. */ @@ -1101,14 +1156,18 @@ workitem_alloc(item, type, mp) int type; struct mount *mp; { + struct ufsmount *ump; + item->wk_type = type; item->wk_mp = mp; item->wk_state = 0; + + ump = VFSTOUFS(mp); ACQUIRE_LOCK(&lk); dep_current[type]++; dep_total[type]++; - VFSTOUFS(mp)->softdep_deps++; - VFSTOUFS(mp)->softdep_accdeps++; + ump->softdep_deps++; + ump->softdep_accdeps++; FREE_LOCK(&lk); } @@ -1478,6 +1537,43 @@ process_removes(vp) } /* + * Process all truncations associated with a vnode if we are running out + * of journal space. This is called when the vnode lock is already held + * and no other process can clear the truncation. + */ +static void +process_truncates(vp) + struct vnode *vp; +{ + struct inodedep *inodedep; + struct freeblks *freeblks; + struct mount *mp; + ino_t inum; + + mtx_assert(&lk, MA_OWNED); + + mp = vp->v_mount; + inum = VTOI(vp)->i_number; + for (;;) { + if (inodedep_lookup(mp, inum, 0, &inodedep) == 0) + return; + TAILQ_FOREACH(freeblks, &inodedep->id_freeblklst, fb_next) + if ((freeblks->fb_state & (ALLCOMPLETE | ONWORKLIST)) == + (ALLCOMPLETE | ONWORKLIST)) + break; + if (freeblks == NULL) + return; + remove_from_worklist(&freeblks->fb_list); + FREE_LOCK(&lk); + if (vn_start_secondary_write(NULL, &mp, V_NOWAIT)) + panic("process_removes: suspended filesystem"); + handle_workitem_freeblocks(freeblks, 0); + vn_finished_secondary_write(mp); + ACQUIRE_LOCK(&lk); + } +} + +/* * Process one item on the worklist. */ static int @@ -1560,7 +1656,9 @@ process_worklist_item(mp, flags) case D_FREEWORK: /* Final block in an indirect was freed. */ + ACQUIRE_LOCK(&lk); handle_workitem_indirblk(WK_FREEWORK(wk)); + FREE_LOCK(&lk); break; default: @@ -1922,6 +2020,7 @@ inodedep_lookup(mp, inum, flags, inodedeppp) TAILQ_INIT(&inodedep->id_newinoupdt); TAILQ_INIT(&inodedep->id_extupdt); TAILQ_INIT(&inodedep->id_newextupdt); + TAILQ_INIT(&inodedep->id_freeblklst); LIST_INSERT_HEAD(inodedephd, inodedep, id_hash); *inodedeppp = inodedep; return (0); @@ -2008,43 +2107,86 @@ newblk_lookup(mp, newblkno, flags, newblkpp) } /* - * Structures and routines associated with indir caching. + * Structures and routines associated with freed indirect block caching. */ -struct workhead *indir_hashtbl; +struct freeworklst *indir_hashtbl; u_long indir_hash; /* size of hash table - 1 */ #define INDIR_HASH(mp, blkno) \ (&indir_hashtbl[((((register_t)(mp)) >> 13) + (blkno)) & indir_hash]) +/* + * Lookup an indirect block in the indir hash table. The freework is + * removed and potentially freed. The caller must do a blocking journal + * write before writing to the blkno. + */ static int -indirblk_inseg(mp, blkno) +indirblk_lookup(mp, blkno) struct mount *mp; ufs2_daddr_t blkno; { struct freework *freework; - struct workhead *wkhd; - struct worklist *wk; + struct freeworklst *wkhd; wkhd = INDIR_HASH(mp, blkno); - LIST_FOREACH(wk, wkhd, wk_list) { - freework = WK_FREEWORK(wk); - if (freework->fw_blkno == blkno && - freework->fw_list.wk_mp == mp) { - LIST_REMOVE(freework, fw_next); - WORKLIST_REMOVE(&freework->fw_list); - WORKITEM_FREE(freework, D_FREEWORK); - return (1); - } + TAILQ_FOREACH(freework, wkhd, fw_next) { + if (freework->fw_blkno != blkno) + continue; + if (freework->fw_list.wk_mp != mp) + continue; + indirblk_remove(freework); + return (1); } return (0); } /* + * Insert an indirect block represented by freework into the indirblk + * hash table so that it may prevent the block from being re-used prior + * to the journal being written. + */ +static void +indirblk_insert(freework) + struct freework *freework; +{ + struct freeblks *freeblks; + struct jsegdep *jsegdep; + struct worklist *wk; + + freeblks = freework->fw_freeblks; + LIST_FOREACH(wk, &freeblks->fb_jwork, wk_list) + if (wk->wk_type == D_JSEGDEP) + break; + if (wk == NULL) + return; + + jsegdep = WK_JSEGDEP(wk); + LIST_INSERT_HEAD(&jsegdep->jd_seg->js_indirs, freework, fw_segs); + TAILQ_INSERT_HEAD(INDIR_HASH(freework->fw_list.wk_mp, + freework->fw_blkno), freework, fw_next); + freework->fw_state &= ~DEPCOMPLETE; +} + +static void +indirblk_remove(freework) + struct freework *freework; +{ + + LIST_REMOVE(freework, fw_segs); + TAILQ_REMOVE(INDIR_HASH(freework->fw_list.wk_mp, + freework->fw_blkno), freework, fw_next); + freework->fw_state |= DEPCOMPLETE; + if ((freework->fw_state & ALLCOMPLETE) == ALLCOMPLETE) + WORKITEM_FREE(freework, D_FREEWORK); +} + +/* * Executed during filesystem system initialization before * mounting any filesystems. */ void softdep_initialize() { + int i; LIST_INIT(&mkdirlisthd); max_softdeps = desiredvnodes * 4; @@ -2052,7 +2194,12 @@ softdep_initialize() inodedep_hashtbl = hashinit(desiredvnodes, M_INODEDEP, &inodedep_hash); newblk_hashtbl = hashinit(desiredvnodes / 5, M_NEWBLK, &newblk_hash); bmsafemap_hashtbl = hashinit(1024, M_BMSAFEMAP, &bmsafemap_hash); - indir_hashtbl = hashinit(desiredvnodes / 10, M_FREEWORK, &indir_hash); + i = 1 << (ffs(desiredvnodes / 10) - 1); + indir_hashtbl = malloc(i * sizeof(indir_hashtbl[0]), M_FREEWORK, + M_WAITOK); + indir_hash = i - 1; + for (i = 0; i <= indir_hash; i++) + TAILQ_INIT(&indir_hashtbl[i]); /* initialise bioops hack */ bioops.io_start = softdep_disk_io_initiation; @@ -2077,6 +2224,7 @@ softdep_uninitialize() hashdestroy(inodedep_hashtbl, M_INODEDEP, inodedep_hash); hashdestroy(newblk_hashtbl, M_NEWBLK, newblk_hash); hashdestroy(bmsafemap_hashtbl, M_BMSAFEMAP, bmsafemap_hash); + free(indir_hashtbl, M_FREEWORK); } /* @@ -2108,6 +2256,7 @@ softdep_mount(devvp, mp, fs, cred) LIST_INIT(&ump->softdep_workitem_pending); LIST_INIT(&ump->softdep_journal_pending); TAILQ_INIT(&ump->softdep_unlinked); + LIST_INIT(&ump->softdep_dirtycg); ump->softdep_worklist_tail = NULL; ump->softdep_on_worklist = 0; ump->softdep_deps = 0; @@ -2570,6 +2719,7 @@ softdep_prealloc(vp, waitok) ffs_syncvnode(vp, waitok); ACQUIRE_LOCK(&lk); process_removes(vp); + process_truncates(vp); if (journal_space(ump, 0) == 0) { softdep_speedup(); if (journal_space(ump, 1) == 0) @@ -2604,9 +2754,12 @@ softdep_prelink(dvp, vp) ffs_syncvnode(dvp, MNT_WAIT); ACQUIRE_LOCK(&lk); /* Process vp before dvp as it may create .. removes. */ - if (vp) + if (vp) { process_removes(vp); + process_truncates(vp); + } process_removes(dvp); + process_truncates(dvp); softdep_speedup(); process_worklist_item(UFSTOVFS(ump), LK_NOWAIT); process_worklist_item(UFSTOVFS(ump), LK_NOWAIT); @@ -2753,6 +2906,7 @@ jtrunc_write(jtrunc, jseg, data) { struct jtrncrec *rec; + jtrunc->jt_jsegdep->jd_seg = jseg; rec = (struct jtrncrec *)data; rec->jt_op = JOP_TRUNC; rec->jt_ino = jtrunc->jt_ino; @@ -3013,7 +3167,8 @@ complete_jseg(jseg) rele_jseg(jseg); jmvref = WK_JMVREF(wk); LIST_REMOVE(jmvref, jm_deps); - free_pagedep(jmvref->jm_pagedep); + if ((jmvref->jm_pagedep->pd_state & ONWORKLIST) == 0) + free_pagedep(jmvref->jm_pagedep); WORKITEM_FREE(jmvref, D_JMVREF); break; case D_JNEWBLK: @@ -3026,8 +3181,7 @@ complete_jseg(jseg) handle_written_jfreefrag(WK_JFREEFRAG(wk)); break; case D_JTRUNC: - WK_JTRUNC(wk)->jt_jsegdep->jd_seg = jseg; - WORKITEM_FREE(wk, D_JTRUNC); + handle_written_jtrunc(WK_JTRUNC(wk)); break; default: panic("handle_written_jseg: Unknown type %s", @@ -3082,6 +3236,27 @@ handle_written_jseg(jseg, bp) free_jsegs(jblocks); } +static void +handle_written_jtrunc(jtrunc) + struct jtrunc *jtrunc; +{ + struct freeblks *freeblks; + + freeblks = jtrunc->jt_freeblks; + freeblks->fb_jtrunc = NULL; + jwork_insert(&freeblks->fb_jwork, jtrunc->jt_jsegdep); + /* + * If the freeblks is all journaled, we can add it to the worklist. + */ + if ((freeblks->fb_state & ALLCOMPLETE) == ALLCOMPLETE) { + /* Remove from the b_dep that is waiting on this write. */ + if (freeblks->fb_state & ONWORKLIST) + WORKLIST_REMOVE(&freeblks->fb_list); + add_to_worklist(&freeblks->fb_list, 1); + } + WORKITEM_FREE(jtrunc, D_JTRUNC); +} + static inline struct jsegdep * inoref_jseg(inoref) struct inoref *inoref; @@ -3123,7 +3298,7 @@ handle_written_jremref(jremref) jremref->jr_dirrem = NULL; LIST_REMOVE(jremref, jr_deps); jsegdep->jd_state |= jremref->jr_state & MKDIR_PARENT; - WORKLIST_INSERT(&dirrem->dm_jwork, &jsegdep->jd_list); + jwork_insert(&dirrem->dm_jwork, jsegdep); if (LIST_EMPTY(&dirrem->dm_jremrefhd) && (dirrem->dm_state & COMPLETE) != 0) add_to_worklist(&dirrem->dm_list, 0); @@ -3183,7 +3358,7 @@ handle_written_jaddref(jaddref) mkdir->md_state |= DEPCOMPLETE; complete_mkdir(mkdir); } - WORKLIST_INSERT(&diradd->da_jwork, &jsegdep->jd_list); + jwork_insert(&diradd->da_jwork, jsegdep); if (jaddref->ja_state & NEWBLOCK) { inodedep->id_state |= ONDEPLIST; LIST_INSERT_HEAD(&inodedep->id_bmsafemap->sm_inodedephd, @@ -3205,10 +3380,9 @@ handle_written_jnewblk(jnewblk) { struct bmsafemap *bmsafemap; struct freefrag *freefrag; + struct freework *freework; struct jsegdep *jsegdep; struct newblk *newblk; - struct freework *freework; - struct indirdep *indirdep; /* Grab the jsegdep. */ jsegdep = jnewblk->jn_jsegdep; @@ -3225,10 +3399,13 @@ handle_written_jnewblk(jnewblk) */ newblk = WK_NEWBLK(jnewblk->jn_dep); newblk->nb_jnewblk = NULL; - bmsafemap = newblk->nb_bmsafemap; - newblk->nb_state |= ONDEPLIST; - LIST_INSERT_HEAD(&bmsafemap->sm_newblkhd, newblk, nb_deps); - WORKLIST_INSERT(&newblk->nb_jwork, &jsegdep->jd_list); + if ((newblk->nb_state & GOINGAWAY) == 0) { + bmsafemap = newblk->nb_bmsafemap; + newblk->nb_state |= ONDEPLIST; + LIST_INSERT_HEAD(&bmsafemap->sm_newblkhd, newblk, + nb_deps); + } + jwork_insert(&newblk->nb_jwork, jsegdep); break; case D_FREEFRAG: /* @@ -3245,16 +3422,9 @@ handle_written_jnewblk(jnewblk) */ freework = WK_FREEWORK(jnewblk->jn_dep); freework->fw_jnewblk = NULL; - WORKLIST_INSERT(&freework->fw_jwork, &jsegdep->jd_list); + WORKLIST_INSERT(&freework->fw_freeblks->fb_jwork, + &jsegdep->jd_list); break; - case D_INDIRDEP: - /* - * An indirect block was removed by truncate. - */ - indirdep = WK_INDIRDEP(jnewblk->jn_dep); - LIST_REMOVE(jnewblk, jn_indirdeps); - WORKLIST_INSERT(&indirdep->ir_jwork, &jsegdep->jd_list); - break; default: panic("handle_written_jnewblk: Unknown type %d.", jnewblk->jn_dep->wk_type); @@ -3321,7 +3491,7 @@ handle_written_jfreefrag(jfreefrag) panic("handle_written_jfreefrag: No freefrag."); freefrag->ff_state |= DEPCOMPLETE; freefrag->ff_jdep = NULL; - WORKLIST_INSERT(&freefrag->ff_jwork, &jsegdep->jd_list); + jwork_insert(&freefrag->ff_jwork, jsegdep); if ((freefrag->ff_state & ALLCOMPLETE) == ALLCOMPLETE) add_to_worklist(&freefrag->ff_list, 0); jfreefrag->fr_freefrag = NULL; @@ -3351,12 +3521,8 @@ handle_written_jfreeblk(jfreeblk) * If the freeblks is all journaled, we can add it to the worklist. */ if (LIST_EMPTY(&freeblks->fb_jfreeblkhd) && - (freeblks->fb_state & ALLCOMPLETE) == ALLCOMPLETE) { - /* Remove from the b_dep that is waiting on this write. */ - if (freeblks->fb_state & ONWORKLIST) - WORKLIST_REMOVE(&freeblks->fb_list); + (freeblks->fb_state & ALLCOMPLETE) == ALLCOMPLETE) add_to_worklist(&freeblks->fb_list, 1); - } free_jfreeblk(jfreeblk); } @@ -3493,51 +3659,79 @@ free_freedep(freedep) * is visible outside of softdep_setup_freeblocks(). */ static struct freework * -newfreework(ump, freeblks, parent, lbn, nb, frags, journal) +newfreework(ump, freeblks, parent, lbn, nb, frags, off, journal) struct ufsmount *ump; struct freeblks *freeblks; struct freework *parent; ufs_lbn_t lbn; ufs2_daddr_t nb; int frags; + int off; int journal; { + struct jfreeblk *jfreeblk; struct freework *freework; freework = malloc(sizeof(*freework), M_FREEWORK, M_SOFTDEP_FLAGS); workitem_alloc(&freework->fw_list, D_FREEWORK, freeblks->fb_list.wk_mp); + freework->fw_state = ATTACHED; freework->fw_jnewblk = NULL; freework->fw_freeblks = freeblks; freework->fw_parent = parent; freework->fw_lbn = lbn; freework->fw_blkno = nb; freework->fw_frags = frags; + freework->fw_indir = NULL; freework->fw_ref = ((UFSTOVFS(ump)->mnt_kern_flag & MNTK_SUJ) == 0 || lbn >= -NXADDR) ? 0 : NINDIR(ump->um_fs) + 1; - freework->fw_off = 0; - LIST_INIT(&freework->fw_jwork); - + freework->fw_start = freework->fw_off = off; + jfreeblk = NULL; + if (journal) { + jfreeblk = newjfreeblk(freeblks, lbn, nb, frags, off); + LIST_INSERT_HEAD(&freeblks->fb_jfreeblkhd, jfreeblk, jf_deps); + } if (parent == NULL) { - WORKLIST_INSERT_UNLOCKED(&freeblks->fb_freeworkhd, - &freework->fw_list); + ACQUIRE_LOCK(&lk); + freework->fw_state |= ONDEPLIST; + WORKLIST_INSERT(&freeblks->fb_freeworkhd, &freework->fw_list); freeblks->fb_ref++; + FREE_LOCK(&lk); } - if (journal) - newjfreeblk(freeblks, lbn, nb, frags); return (freework); } /* + * Eliminate a jfreeblk for a block that does not need journaling. + */ +static void +cancel_jfreeblk(freeblks, blkno) + struct freeblks *freeblks; + ufs2_daddr_t blkno; +{ + struct jfreeblk *jfreeblk; + + LIST_FOREACH(jfreeblk, &freeblks->fb_jfreeblkhd, jf_deps) + if (jfreeblk->jf_blkno == blkno) + break; + if (jfreeblk == NULL) + return; + free_jsegdep(jfreeblk->jf_jsegdep); + LIST_REMOVE(jfreeblk, jf_deps); + WORKITEM_FREE(jfreeblk, D_JFREEBLK); +} + +/* * Allocate a new jfreeblk to journal top level block pointer when truncating * a file. The caller must add this to the worklist when lk is held. */ static struct jfreeblk * -newjfreeblk(freeblks, lbn, blkno, frags) +newjfreeblk(freeblks, lbn, blkno, frags, off) struct freeblks *freeblks; ufs_lbn_t lbn; ufs2_daddr_t blkno; int frags; + int off; { struct jfreeblk *jfreeblk; @@ -3545,12 +3739,12 @@ static struct jfreeblk * workitem_alloc(&jfreeblk->jf_list, D_JFREEBLK, freeblks->fb_list.wk_mp); jfreeblk->jf_jsegdep = newjsegdep(&jfreeblk->jf_list); jfreeblk->jf_state = ATTACHED | DEPCOMPLETE; - jfreeblk->jf_ino = freeblks->fb_previousinum; + jfreeblk->jf_ino = freeblks->fb_inum; jfreeblk->jf_lbn = lbn; jfreeblk->jf_blkno = blkno; jfreeblk->jf_frags = frags; + jfreeblk->jf_off = off; jfreeblk->jf_freeblks = freeblks; - LIST_INSERT_HEAD(&freeblks->fb_jfreeblkhd, jfreeblk, jf_deps); return (jfreeblk); } @@ -3645,7 +3839,7 @@ cancel_jaddref(jaddref, inodedep, wkhd) if (jaddref->ja_state & IOSTARTED) { jaddref->ja_state &= ~IOSTARTED; WORKLIST_REMOVE(&jaddref->ja_list); - WORKLIST_INSERT(wkhd, &jsegdep->jd_list); + jwork_insert(wkhd, jsegdep); } else { free_jsegdep(jsegdep); if (jaddref->ja_state & DEPCOMPLETE) @@ -3734,11 +3928,7 @@ free_jnewblk(jnewblk) } /* - * Cancel a jnewblk which has been superseded by a freeblk. The jnewblk - * is kept linked into the bmsafemap until the free completes, thus - * preventing the modified state from ever reaching disk. The free - * routine must pass this structure via ffs_blkfree() to - * softdep_setup_freeblks() so there is no race in releasing the space. + * Cancel a jnewblk which has been been made redundant by frag extension. */ static void cancel_jnewblk(jnewblk, wkhd) @@ -3756,7 +3946,7 @@ cancel_jnewblk(jnewblk, wkhd) if (jnewblk->jn_state & IOSTARTED) { jnewblk->jn_state &= ~IOSTARTED; WORKLIST_REMOVE(&jnewblk->jn_list); - WORKLIST_INSERT(wkhd, &jsegdep->jd_list); + jwork_insert(wkhd, jsegdep); } else { free_jsegdep(jsegdep); remove_from_journal(&jnewblk->jn_list); @@ -3792,11 +3982,8 @@ free_jseg(jseg, jblocks) * Free freework structures that were lingering to indicate freed * indirect blocks that forced journal write ordering on reallocate. */ - while ((freework = LIST_FIRST(&jseg->js_indirs)) != NULL) { - LIST_REMOVE(freework, fw_next); - WORKLIST_REMOVE(&freework->fw_list); - WORKITEM_FREE(freework, D_FREEWORK); - } + while ((freework = LIST_FIRST(&jseg->js_indirs)) != NULL) + indirblk_remove(freework); if (jblocks->jb_oldestseg == jseg) jblocks->jb_oldestseg = TAILQ_NEXT(jseg, js_next); TAILQ_REMOVE(&jblocks->jb_segs, jseg, js_next); @@ -3928,68 +4115,6 @@ inodedep_lookup_ip(ip) } /* - * Create a journal entry that describes a truncate that we're about to - * perform. The inode allocations and frees between here and the completion - * of the operation are done asynchronously and without journaling. At - * the end of the operation the vnode is sync'd and the journal space - * is released. Recovery will discover the partially completed truncate - * and complete it. - */ -void * -softdep_setup_trunc(vp, length, flags) - struct vnode *vp; - off_t length; - int flags; -{ - struct jsegdep *jsegdep; - struct jtrunc *jtrunc; - struct ufsmount *ump; - struct inode *ip; - - softdep_prealloc(vp, MNT_WAIT); - ip = VTOI(vp); - ump = VFSTOUFS(vp->v_mount); - jtrunc = malloc(sizeof(*jtrunc), M_JTRUNC, M_SOFTDEP_FLAGS); - workitem_alloc(&jtrunc->jt_list, D_JTRUNC, vp->v_mount); - jsegdep = jtrunc->jt_jsegdep = newjsegdep(&jtrunc->jt_list); - jtrunc->jt_ino = ip->i_number; - jtrunc->jt_extsize = 0; - jtrunc->jt_size = length; - if ((flags & IO_EXT) == 0 && ump->um_fstype == UFS2) - jtrunc->jt_extsize = ip->i_din2->di_extsize; - if ((flags & IO_NORMAL) == 0) - jtrunc->jt_size = DIP(ip, i_size); - ACQUIRE_LOCK(&lk); - add_to_journal(&jtrunc->jt_list); - while (jsegdep->jd_seg == NULL) { - stat_jwait_freeblks++; - jwait(&jtrunc->jt_list); - } - FREE_LOCK(&lk); - - return (jsegdep); -} - -/* - * After synchronous truncation is complete we free sync the vnode and - * release the jsegdep so the journal space can be freed. - */ -int -softdep_complete_trunc(vp, cookie) - struct vnode *vp; - void *cookie; -{ - int error; - - error = ffs_syncvnode(vp, MNT_WAIT); - ACQUIRE_LOCK(&lk); - free_jsegdep((struct jsegdep *)cookie); - FREE_LOCK(&lk); - - return (error); -} - -/* * Called prior to creating a new inode and linking it to a directory. The * jaddref structure must already be allocated by softdep_setup_inomapdep * and it is discovered here so we can initialize the mode and update @@ -4523,6 +4648,8 @@ bmsafemap_lookup(mp, bp, cg) LIST_INIT(&bmsafemap->sm_newblkwr); LIST_INIT(&bmsafemap->sm_jaddrefhd); LIST_INIT(&bmsafemap->sm_jnewblkhd); + LIST_INIT(&bmsafemap->sm_freehd); + LIST_INIT(&bmsafemap->sm_freewr); ACQUIRE_LOCK(&lk); if (bmsafemap_find(bmsafemaphd, mp, cg, &collision) == 1) { WORKITEM_FREE(bmsafemap, D_BMSAFEMAP); @@ -4530,6 +4657,7 @@ bmsafemap_lookup(mp, bp, cg) } bmsafemap->sm_cg = cg; LIST_INSERT_HEAD(bmsafemaphd, bmsafemap, sm_hash); + LIST_INSERT_HEAD(&VFSTOUFS(mp)->softdep_dirtycg, bmsafemap, sm_next); WORKLIST_INSERT(&bp->b_dep, &bmsafemap->sm_list); return (bmsafemap); } @@ -4814,9 +4942,8 @@ allocdirect_merge(adphead, newadp, oldadp) &oldadp->ad_block.nb_jnewblk->jn_list, &newadp->ad_block.nb_jwork); oldadp->ad_block.nb_jnewblk = NULL; - if (cancel_newblk(&oldadp->ad_block, NULL, - &newadp->ad_block.nb_jwork)) - panic("allocdirect_merge: Unexpected dependency."); + cancel_newblk(&oldadp->ad_block, NULL, + &newadp->ad_block.nb_jwork); } else { wk = (struct worklist *) cancel_newblk(&oldadp->ad_block, &freefrag->ff_list, &freefrag->ff_jwork); @@ -5084,6 +5211,7 @@ newallocindir(ip, ptrno, newblkno, oldblkno, lbn) aip = (struct allocindir *)newblk; aip->ai_offset = ptrno; aip->ai_oldblkno = oldblkno; + aip->ai_lbn = lbn; if ((jnewblk = newblk->nb_jnewblk) != NULL) { jnewblk->jn_ino = ip->i_number; jnewblk->jn_lbn = lbn; @@ -5110,6 +5238,7 @@ softdep_setup_allocindir_page(ip, lbn, bp, ptrno, struct buf *nbp; /* buffer holding allocated page */ { struct inodedep *inodedep; + struct freefrag *freefrag; struct allocindir *aip; struct pagedep *pagedep; struct mount *mp; @@ -5130,8 +5259,10 @@ softdep_setup_allocindir_page(ip, lbn, bp, ptrno, pagedep_lookup(mp, ip->i_number, lbn, DEPALLOC, &pagedep) == 0) WORKLIST_INSERT(&nbp->b_dep, &pagedep->pd_list); WORKLIST_INSERT(&nbp->b_dep, &aip->ai_block.nb_list); - setup_allocindir_phase2(bp, ip, inodedep, aip, lbn); + freefrag = setup_allocindir_phase2(bp, ip, inodedep, aip, lbn); FREE_LOCK(&lk); + if (freefrag) + handle_workitem_freefrag(freefrag); } /* @@ -5155,7 +5286,8 @@ softdep_setup_allocindir_meta(nbp, ip, bp, ptrno, aip = newallocindir(ip, ptrno, newblkno, 0, lbn); inodedep_lookup(UFSTOVFS(ip->i_ump), ip->i_number, DEPALLOC, &inodedep); WORKLIST_INSERT(&nbp->b_dep, &aip->ai_block.nb_list); - setup_allocindir_phase2(bp, ip, inodedep, aip, lbn); + if (setup_allocindir_phase2(bp, ip, inodedep, aip, lbn)) + panic("softdep_setup_allocindir_meta: Block already existed"); FREE_LOCK(&lk); } @@ -5166,7 +5298,7 @@ indirdep_complete(indirdep) struct allocindir *aip; LIST_REMOVE(indirdep, ir_next); - indirdep->ir_state &= ~ONDEPLIST; + indirdep->ir_state |= DEPCOMPLETE; while ((aip = LIST_FIRST(&indirdep->ir_completehd)) != NULL) { LIST_REMOVE(aip, ai_next); @@ -5181,127 +5313,135 @@ indirdep_complete(indirdep) free_indirdep(indirdep); } -/* - * Called to finish the allocation of the "aip" allocated - * by one of the two routines above. - */ -static void -setup_allocindir_phase2(bp, ip, inodedep, aip, lbn) - struct buf *bp; /* in-memory copy of the indirect block */ - struct inode *ip; /* inode for file being extended */ - struct inodedep *inodedep; /* Inodedep for ip */ - struct allocindir *aip; /* allocindir allocated by the above routines */ - ufs_lbn_t lbn; /* Logical block number for this block. */ +static struct indirdep * +indirdep_lookup(mp, ip, bp) + struct mount *mp; + struct inode *ip; + struct buf *bp; { + struct indirdep *indirdep, *newindirdep; + struct newblk *newblk; struct worklist *wk; struct fs *fs; - struct newblk *newblk; - struct indirdep *indirdep, *newindirdep; - struct allocindir *oldaip; - struct freefrag *freefrag; - struct mount *mp; ufs2_daddr_t blkno; - mp = UFSTOVFS(ip->i_ump); + mtx_assert(&lk, MA_OWNED); + indirdep = NULL; + newindirdep = NULL; fs = ip->i_fs; - mtx_assert(&lk, MA_OWNED); - if (bp->b_lblkno >= 0) - panic("setup_allocindir_phase2: not indir blk"); - for (freefrag = NULL, indirdep = NULL, newindirdep = NULL; ; ) { + for (;;) { LIST_FOREACH(wk, &bp->b_dep, wk_list) { if (wk->wk_type != D_INDIRDEP) continue; indirdep = WK_INDIRDEP(wk); break; } - if (indirdep == NULL && newindirdep) { - indirdep = newindirdep; - newindirdep = NULL; - WORKLIST_INSERT(&bp->b_dep, &indirdep->ir_list); - if (newblk_lookup(mp, dbtofsb(fs, bp->b_blkno), 0, - &newblk)) { - indirdep->ir_state |= ONDEPLIST; - LIST_INSERT_HEAD(&newblk->nb_indirdeps, - indirdep, ir_next); - } else - indirdep->ir_state |= DEPCOMPLETE; - } - if (indirdep) { - aip->ai_indirdep = indirdep; - /* - * Check to see if there is an existing dependency - * for this block. If there is, merge the old - * dependency into the new one. This happens - * as a result of reallocblk only. - */ - if (aip->ai_oldblkno == 0) - oldaip = NULL; - else - - LIST_FOREACH(oldaip, &indirdep->ir_deplisthd, - ai_next) - if (oldaip->ai_offset == aip->ai_offset) - break; - if (oldaip != NULL) - freefrag = allocindir_merge(aip, oldaip); - LIST_INSERT_HEAD(&indirdep->ir_deplisthd, aip, ai_next); - KASSERT(aip->ai_offset >= 0 && - aip->ai_offset < NINDIR(ip->i_ump->um_fs), - ("setup_allocindir_phase2: Bad offset %d", - aip->ai_offset)); - KASSERT(indirdep->ir_savebp != NULL, - ("setup_allocindir_phase2 NULL ir_savebp")); - if (ip->i_ump->um_fstype == UFS1) - ((ufs1_daddr_t *)indirdep->ir_savebp->b_data) - [aip->ai_offset] = aip->ai_oldblkno; - else - ((ufs2_daddr_t *)indirdep->ir_savebp->b_data) - [aip->ai_offset] = aip->ai_oldblkno; - FREE_LOCK(&lk); - if (freefrag != NULL) - handle_workitem_freefrag(freefrag); - } else - FREE_LOCK(&lk); - if (newindirdep) { - newindirdep->ir_savebp->b_flags |= B_INVAL | B_NOCACHE; - brelse(newindirdep->ir_savebp); - ACQUIRE_LOCK(&lk); - WORKITEM_FREE((caddr_t)newindirdep, D_INDIRDEP); - if (indirdep) - break; - FREE_LOCK(&lk); - } - if (indirdep) { - ACQUIRE_LOCK(&lk); + /* Found on the buffer worklist, no new structure to free. */ + if (indirdep != NULL && newindirdep == NULL) + return (indirdep); + if (indirdep != NULL && newindirdep != NULL) + panic("indirdep_lookup: simultaneous create"); + /* None found on the buffer and a new structure is ready. */ + if (indirdep == NULL && newindirdep != NULL) break; - } + /* None found and no new structure available. */ + FREE_LOCK(&lk); newindirdep = malloc(sizeof(struct indirdep), - M_INDIRDEP, M_SOFTDEP_FLAGS); + M_INDIRDEP, M_SOFTDEP_FLAGS); workitem_alloc(&newindirdep->ir_list, D_INDIRDEP, mp); newindirdep->ir_state = ATTACHED; if (ip->i_ump->um_fstype == UFS1) newindirdep->ir_state |= UFS1FMT; + TAILQ_INIT(&newindirdep->ir_trunc); newindirdep->ir_saveddata = NULL; LIST_INIT(&newindirdep->ir_deplisthd); LIST_INIT(&newindirdep->ir_donehd); LIST_INIT(&newindirdep->ir_writehd); LIST_INIT(&newindirdep->ir_completehd); - LIST_INIT(&newindirdep->ir_jwork); - LIST_INIT(&newindirdep->ir_jnewblkhd); if (bp->b_blkno == bp->b_lblkno) { ufs_bmaparray(bp->b_vp, bp->b_lblkno, &blkno, bp, NULL, NULL); bp->b_blkno = blkno; } + newindirdep->ir_freeblks = NULL; newindirdep->ir_savebp = getblk(ip->i_devvp, bp->b_blkno, bp->b_bcount, 0, 0, 0); + newindirdep->ir_bp = bp; BUF_KERNPROC(newindirdep->ir_savebp); + BUF_NOREC(newindirdep->ir_savebp); bcopy(bp->b_data, newindirdep->ir_savebp->b_data, bp->b_bcount); ACQUIRE_LOCK(&lk); } + indirdep = newindirdep; + WORKLIST_INSERT(&bp->b_dep, &indirdep->ir_list); + /* + * If the block is not yet allocated we don't set DEPCOMPLETE so + * that we don't free dependencies until the pointers are valid. + * This could search b_dep for D_ALLOCDIRECT/D_ALLOCINDIR rather + * than using the hash. + */ + if (newblk_lookup(mp, dbtofsb(fs, bp->b_blkno), 0, &newblk)) + LIST_INSERT_HEAD(&newblk->nb_indirdeps, indirdep, ir_next); + else + indirdep->ir_state |= DEPCOMPLETE; + return (indirdep); } /* + * Called to finish the allocation of the "aip" allocated + * by one of the two routines above. + */ +static struct freefrag * +setup_allocindir_phase2(bp, ip, inodedep, aip, lbn) + struct buf *bp; /* in-memory copy of the indirect block */ + struct inode *ip; /* inode for file being extended */ + struct inodedep *inodedep; /* Inodedep for ip */ + struct allocindir *aip; /* allocindir allocated by the above routines */ + ufs_lbn_t lbn; /* Logical block number for this block. */ +{ + struct fs *fs; + struct indirdep *indirdep; + struct allocindir *oldaip; + struct freefrag *freefrag; + struct mount *mp; + + mtx_assert(&lk, MA_OWNED); + mp = UFSTOVFS(ip->i_ump); + fs = ip->i_fs; + if (bp->b_lblkno >= 0) + panic("setup_allocindir_phase2: not indir blk"); + KASSERT(aip->ai_offset >= 0 && aip->ai_offset < NINDIR(fs), + ("setup_allocindir_phase2: Bad offset %d", aip->ai_offset)); + indirdep = indirdep_lookup(mp, ip, bp); + KASSERT(indirdep->ir_savebp != NULL, + ("setup_allocindir_phase2 NULL ir_savebp")); + aip->ai_indirdep = indirdep; + /* + * Check for an unwritten dependency for this indirect offset. If + * there is, merge the old dependency into the new one. This happens + * as a result of reallocblk only. + */ + freefrag = NULL; + if (aip->ai_oldblkno != 0) { + LIST_FOREACH(oldaip, &indirdep->ir_deplisthd, ai_next) { + if (oldaip->ai_offset == aip->ai_offset) { + freefrag = allocindir_merge(aip, oldaip); + goto done; + } + } + LIST_FOREACH(oldaip, &indirdep->ir_donehd, ai_next) { + if (oldaip->ai_offset == aip->ai_offset) { + freefrag = allocindir_merge(aip, oldaip); + goto done; + } + } + } +done: + LIST_INSERT_HEAD(&indirdep->ir_deplisthd, aip, ai_next); + return (freefrag); +} + +/* * Merge two allocindirs which refer to the same block. Move newblock * dependencies and setup the freefrags appropriately. */ @@ -5363,7 +5503,7 @@ setup_freedirect(freeblks, ip, i, needj) DIP_SET(ip, i_db[i], 0); frags = sblksize(ip->i_fs, ip->i_size, i); frags = numfrags(ip->i_fs, frags); - newfreework(ip->i_ump, freeblks, NULL, i, blkno, frags, needj); + newfreework(ip->i_ump, freeblks, NULL, i, blkno, frags, 0, needj); } static inline void @@ -5382,15 +5522,15 @@ setup_freeext(freeblks, ip, i, needj) ip->i_din2->di_extb[i] = 0; frags = sblksize(ip->i_fs, ip->i_din2->di_extsize, i); frags = numfrags(ip->i_fs, frags); - newfreework(ip->i_ump, freeblks, NULL, -1 - i, blkno, frags, needj); + newfreework(ip->i_ump, freeblks, NULL, -1 - i, blkno, frags, 0, needj); } static inline void setup_freeindir(freeblks, ip, i, lbn, needj) struct freeblks *freeblks; struct inode *ip; + int i; ufs_lbn_t lbn; - int i; int needj; { ufs2_daddr_t blkno; @@ -5400,7 +5540,7 @@ setup_freeindir(freeblks, ip, i, lbn, needj) return; DIP_SET(ip, i_ib[i], 0); newfreework(ip->i_ump, freeblks, NULL, lbn, blkno, ip->i_fs->fs_frag, - needj); + 0, needj); } static inline struct freeblks * @@ -5415,16 +5555,529 @@ newfreeblks(mp, ip) workitem_alloc(&freeblks->fb_list, D_FREEBLKS, mp); LIST_INIT(&freeblks->fb_jfreeblkhd); LIST_INIT(&freeblks->fb_jwork); + freeblks->fb_ref = 1; + freeblks->fb_jtrunc = NULL; freeblks->fb_state = ATTACHED; freeblks->fb_uid = ip->i_uid; - freeblks->fb_previousinum = ip->i_number; + freeblks->fb_inum = ip->i_number; + freeblks->fb_modrev = DIP(ip, i_modrev); freeblks->fb_devvp = ip->i_devvp; freeblks->fb_chkcnt = 0; + freeblks->fb_freecnt = 0; + freeblks->fb_len = 0; return (freeblks); } +static void +trunc_indirdep(indirdep, freeblks, bp, off) + struct indirdep *indirdep; + struct freeblks *freeblks; + struct buf *bp; + int off; +{ + struct allocindir *aip, *aipn; + + /* + * The first set of allocindirs won't be in savedbp. + */ + LIST_FOREACH_SAFE(aip, &indirdep->ir_deplisthd, ai_next, aipn) + if (aip->ai_offset > off) + cancel_allocindir(aip, bp, freeblks, 1); + LIST_FOREACH_SAFE(aip, &indirdep->ir_donehd, ai_next, aipn) + if (aip->ai_offset > off) + cancel_allocindir(aip, bp, freeblks, 1); + /* + * These will exist in savedbp. + */ + LIST_FOREACH_SAFE(aip, &indirdep->ir_writehd, ai_next, aipn) + if (aip->ai_offset > off) + cancel_allocindir(aip, NULL, freeblks, 0); + LIST_FOREACH_SAFE(aip, &indirdep->ir_completehd, ai_next, aipn) + if (aip->ai_offset > off) + cancel_allocindir(aip, NULL, freeblks, 0); +} + /* + * Follow the chain of indirects down to lastlbn creating a freework + * structure for each. This will be used to start indir_trunc() at + * the right offset and create the journal records for the parrtial + * truncation. A second step will handle the truncated dependencies. + */ +static int +setup_trunc_indir(freeblks, ip, lbn, lastlbn, blkno, needj) + struct freeblks *freeblks; + struct inode *ip; + ufs_lbn_t lbn; + ufs_lbn_t lastlbn; + ufs2_daddr_t blkno; + int needj; +{ + struct indirdep *indirdep; + struct indirdep *indirn; + struct freework *freework; + struct newblk *newblk; + struct mount *mp; + struct buf *bp; + uint8_t *start; + uint8_t *end; + ufs_lbn_t lbnadd; + int level; + int error; + int off; + + + freework = NULL; + if (blkno == 0) + return (0); + mp = freeblks->fb_list.wk_mp; + bp = getblk(ITOV(ip), lbn, mp->mnt_stat.f_iosize, 0, 0, 0); + if ((bp->b_flags & B_CACHE) == 0) { + bp->b_blkno = blkptrtodb(VFSTOUFS(mp), blkno); + bp->b_iocmd = BIO_READ; + bp->b_flags &= ~B_INVAL; + bp->b_ioflags &= ~BIO_ERROR; + vfs_busy_pages(bp, 0); + bp->b_iooffset = dbtob(bp->b_blkno); + bstrategy(bp); + curthread->td_ru.ru_inblock++; + error = bufwait(bp); + if (error) { + brelse(bp); + return (error); + } + } + level = lbn_level(lbn); + lbnadd = lbn_offset(ip->i_fs, level); + /* + * Compute the offset of the last block we want to keep. Store + * in the freework the first block we want to completely free. + */ + off = (lastlbn - -(lbn + level)) / lbnadd; + if (off + 1 == NINDIR(ip->i_fs)) + goto nowork; + freework = newfreework(ip->i_ump, freeblks, NULL, lbn, blkno, 0, off+1, + needj); + /* + * Link the freework into the indirdep. This will prevent any new + * allocations from proceeding until we are finished with the + * truncate and the block is written. + */ + ACQUIRE_LOCK(&lk); + indirdep = indirdep_lookup(mp, ip, bp); + TAILQ_INSERT_TAIL(&indirdep->ir_trunc, freework, fw_next); + freework->fw_indir = indirdep; + /* + * Cancel any allocindirs that will not make it to disk. + * We have to do this for all copies of the indirdep that + * live on this newblk. + */ + if ((indirdep->ir_state & DEPCOMPLETE) == 0) { + newblk_lookup(mp, dbtofsb(ip->i_fs, bp->b_blkno), 0, &newblk); + LIST_FOREACH(indirn, &newblk->nb_indirdeps, ir_next) + trunc_indirdep(indirn, freeblks, bp, off); + } else + trunc_indirdep(indirdep, freeblks, bp, off); + FREE_LOCK(&lk); + /* + * Creation is protected by the buf lock. The saveddata is only + * needed if a full truncation follows a partial truncation but it + * is difficult to allocate in that case so we fetch it anyway. + */ + if (indirdep->ir_saveddata == NULL); + indirdep->ir_saveddata = malloc(bp->b_bcount, M_INDIRDEP, + M_SOFTDEP_FLAGS); +nowork: + /* Fetch the blkno of the child and the zero start offset. */ + if (ip->i_ump->um_fstype == UFS1) { + blkno = ((ufs1_daddr_t *)bp->b_data)[off]; + start = (uint8_t *)&((ufs1_daddr_t *)bp->b_data)[off+1]; + } else { + blkno = ((ufs2_daddr_t *)bp->b_data)[off]; + start = (uint8_t *)&((ufs2_daddr_t *)bp->b_data)[off+1]; + } + if (freework) { + /* Zero the truncated pointers. */ + end = bp->b_data + bp->b_bcount; + bzero(start, end - start); + bdwrite(bp); + } else + bqrelse(bp); + if (level == 0) + return (0); + lbn++; /* adjust level */ + lbn -= (off * lbnadd); + return setup_trunc_indir(freeblks, ip, lbn, lastlbn, blkno, needj); +} + +/* + * Complete the partial truncation of an indirect block setup by + * setup_trunc_indir(). This zeros the truncated pointers in the saved + * copy and writes them to disk before the freeblks is allowed to complete. + */ +static void +complete_trunc_indir(freework) + struct freework *freework; +{ + struct indirdep *indirdep; + struct buf *bp; + uintptr_t start; + int count; + + indirdep = freework->fw_indir; + freework->fw_state |= DEPCOMPLETE; + do { + bp = indirdep->ir_bp; + /* See if the block was discarded. */ + if (bp == NULL) + break; + } while ((bp = getdirtybuf(bp, &lk, MNT_WAIT)) == NULL); + TAILQ_REMOVE(&indirdep->ir_trunc, freework, fw_next); + /* + * Zero the pointers in the saved copy. + */ + if (indirdep->ir_state & UFS1FMT) + start = sizeof(ufs1_daddr_t); + else + start = sizeof(ufs2_daddr_t); + start *= freework->fw_start; + count = indirdep->ir_savebp->b_bcount - start; + start += (uintptr_t)indirdep->ir_savebp->b_data; + bzero((char *)start, count); + /* + * If bp is NULL the block was fully truncated, restore the saved + * block list otherwise free it if it is no longer needed. + */ + if (TAILQ_EMPTY(&indirdep->ir_trunc)) { + if (bp == NULL) + bcopy(indirdep->ir_saveddata, + indirdep->ir_savebp->b_data, + indirdep->ir_savebp->b_bcount); + free(indirdep->ir_saveddata, M_INDIRDEP); + indirdep->ir_saveddata = 0; + } + /* + * When bp is NULL there is a full truncation pending. We + * must wait for this full truncation to be journaled before + * we can release this freework because the disk pointers will + * never be written as zero. + */ + if (bp == NULL) { + if (LIST_EMPTY(&indirdep->ir_freeblks->fb_jfreeblkhd)) { + handle_written_freework(freework); + return; + } + freework->fw_state |= ONDEPLIST; + WORKLIST_INSERT(&indirdep->ir_freeblks->fb_freeworkhd, + &freework->fw_list); + return; + } + /* Write the real copy. */ + WORKLIST_INSERT(&bp->b_dep, &freework->fw_list); + FREE_LOCK(&lk); + bawrite(bp); + ACQUIRE_LOCK(&lk); + return; +} + +/* + * Handle freeblocks for journaled softupdate filesystems. + * + * Contrary to normal softupdates, we must preserve the block pointers in + * indirects until their subordinates are free. This is to avoid journaling + * every block that is freed which may consume more space than the journal + * itself. The recovery program will see the free block journals at the + * base of the truncated area and traverse them to reclaim space. The + * pointers in the inode may be cleared immediately after the journal + * records are written because each direct and indirect pointer in the + * inode is recorded in a journal. This permits full truncation to proceed + * asynchronously. The write order is journal -> inode -> cgs -> indirects. + * + * The algorithm is as follows: + * 1) Traverse the in-memory state and create journal entries to release + * the relevant blocks and full indirect trees. + * 2) Traverse the indirect block chain adding partial truncation freework + * records to indirects in the path to lastlbn. The freework will + * prevent new allocation dependencies from being satisfied in this + * indirect until the truncation completes. + * 3) Read and lock the inode block, performing an update with the new size + * and pointers. This prevents truncated data from becoming valid on + * disk through step 4. + * 4) Reap unsatisfied dependencies that are beyond the truncated area, + * eliminate journal work for those records that do not require it. + * 5) Schedule the journal records to be written followed by the inode block. + * 6) Allocate any necessary frags for the end of file. + * 7) Zero any partially truncated blocks. + * + * From this truncation proceeds asynchronously using the freework and + * indir_trunc machinery. The file will not be extended again into a + * partially truncated indirect block until all work is completed but + * the normal dependency mechanism ensures that it is rolled back/forward + * as appropriate. Further truncation may occur without delay and is + * serialized in indir_trunc(). + */ +void +softdep_journal_freeblocks(ip, cred, length, flags) + struct inode *ip; /* The inode whose length is to be reduced */ + struct ucred *cred; + off_t length; /* The new length for the file */ + int flags; /* IO_EXT and/or IO_NORMAL */ +{ + struct freeblks *freeblks, *fbn; + struct inodedep *inodedep; + struct jfreeblk *jfreeblk; + struct allocdirect *adp, *adpn; + struct fs *fs; + struct buf *bp; + struct vnode *vp; + ufs2_daddr_t extblocks, datablocks; + struct mount *mp; + ufs_lbn_t tmpval, lbn, lastlbn, partlbn; + off_t osize; + int frags; + int lastoff, iboff; + int allocblock; + int error, i; + int partlvl; + int needj; + + fs = ip->i_fs; + mp = UFSTOVFS(ip->i_ump); + vp = ITOV(ip); + needj = 1; + lastoff = 0; + iboff = -1; + allocblock = 0; + extblocks = 0; + datablocks = 0; + partlbn = 0; + partlvl = 0; + osize = 0; + frags = 0; + freeblks = newfreeblks(mp, ip); + ACQUIRE_LOCK(&lk); + /* + * If we're truncating a removed file that will never be written + * we don't need to journal the block frees. The canceled journals + * for the allocations will suffice. + */ + inodedep_lookup(mp, ip->i_number, DEPALLOC, &inodedep); + if ((inodedep->id_state & (UNLINKED | DEPCOMPLETE)) == UNLINKED && + length == 0) + needj = 0; + FREE_LOCK(&lk); + /* + * Calculate the lbn that we are truncating to. This results in -1 + * if we're truncating the 0 bytes. So it is the last lbn we want + * to keep, not the first lbn we want to truncate. + */ + lastlbn = lblkno(fs, length + fs->fs_bsize - 1) - 1; + /* + * Compute frags we are keeping in lastlbn. 0 means all. + */ + if (lastlbn >= 0 && lastlbn < NDADDR) { + lastoff = blkoff(fs, length); + frags = fragroundup(fs, lastoff); + /* adp offset of last valid allocdirect. */ + iboff = lastlbn; + } + if (fs->fs_magic == FS_UFS2_MAGIC) + extblocks = btodb(fragroundup(fs, ip->i_din2->di_extsize)); + /* + * Handle normal data blocks and indirects. This section saves + * values used after the inode update to complete frag and indirect + * truncation. + */ + if ((flags & IO_NORMAL) != 0) { + /* + * Handle truncation of whole direct and indirect blocks. + */ + for (i = 0; i < NDADDR; i++) + if (i > lastlbn) + setup_freedirect(freeblks, ip, i, needj); + for (i = 0, tmpval = NINDIR(fs), lbn = NDADDR; i < NIADDR; + i++, lbn += tmpval, tmpval *= NINDIR(fs)) { + /* Release a whole indirect tree. */ + if (lbn > lastlbn) { + setup_freeindir(freeblks, ip, i, -lbn -i, + needj); + continue; + } + iboff = i + NDADDR; + /* + * Record the level and lbn for a indir needing + * partial truncation. + */ + if (lbn <= lastlbn && lbn + tmpval - 1 > lastlbn) { + partlbn = -lbn - i; + partlvl = i; + } + } + /* + * Traverse partially truncated indirect tree. + */ + if (partlbn) + setup_trunc_indir(freeblks, ip, partlbn, + lastlbn, DIP(ip, i_ib[partlvl]), needj); + osize = ip->i_size; + ip->i_size = length; + /* + * Handle partial truncation to a frag boundary. + */ + if (lastoff) { + ufs2_daddr_t blkno; + long oldfrags; + + oldfrags = blksize(fs, ip, lastlbn); + blkno = DIP(ip, i_db[lastlbn]); + if (blkno && oldfrags != frags) { + oldfrags -= frags; + oldfrags = numfrags(ip->i_fs, oldfrags); + blkno += numfrags(ip->i_fs, frags); + newfreework(ip->i_ump, freeblks, NULL, lastlbn, + blkno, oldfrags, 0, needj); + } else if (blkno == 0) { + ip->i_size = length - lastoff; + allocblock = 1; + } + } + DIP_SET(ip, i_size, ip->i_size); + if (length == 0) + datablocks = DIP(ip, i_blocks) - extblocks; + freeblks->fb_len = length; + } + if ((flags & IO_EXT) != 0) { + for (i = 0; i < NXADDR; i++) + setup_freeext(freeblks, ip, i, needj); + ip->i_din2->di_extsize = 0; + datablocks += extblocks; + } + freeblks->fb_chkcnt = datablocks; + UFS_LOCK(ip->i_ump); + fs->fs_pendingblocks += datablocks; + UFS_UNLOCK(ip->i_ump); + DIP_SET(ip, i_blocks, DIP(ip, i_blocks) - datablocks); + /* + * Handle truncation of incomplete alloc direct dependencies. We + * hold the inode block locked to prevent incomplete dependencies + * from reaching the disk while we are eliminating those that + * have been truncated. This is a partially inlined ffs_update(). + */ + ufs_itimes(vp); + ip->i_flag &= ~(IN_LAZYACCESS | IN_LAZYMOD | IN_MODIFIED); + error = bread(ip->i_devvp, fsbtodb(fs, ino_to_fsba(fs, ip->i_number)), + (int)fs->fs_bsize, cred, &bp); + if (error) { + brelse(bp); + softdep_error("softdep_journal_freeblocks", error); + return; + } + if (bp->b_bufsize == fs->fs_bsize) + bp->b_flags |= B_CLUSTEROK; + softdep_update_inodeblock(ip, bp, 0); + if (ip->i_ump->um_fstype == UFS1) + *((struct ufs1_dinode *)bp->b_data + + ino_to_fsbo(fs, ip->i_number)) = *ip->i_din1; + else + *((struct ufs2_dinode *)bp->b_data + + ino_to_fsbo(fs, ip->i_number)) = *ip->i_din2; + ACQUIRE_LOCK(&lk); + (void) inodedep_lookup(mp, ip->i_number, DEPALLOC, &inodedep); + if ((inodedep->id_state & IOSTARTED) != 0) + panic("softdep_setup_freeblocks: inode busy"); + /* + * Add the freeblks structure to the list of operations that + * must await the zero'ed inode being written to disk. If we + * still have a bitmap dependency (needj), then the inode + * has never been written to disk, so we can process the + * freeblks below once we have deleted the dependencies. + */ + if (needj) + WORKLIST_INSERT(&bp->b_dep, &freeblks->fb_list); + else + freeblks->fb_state |= COMPLETE; + if (flags & IO_NORMAL) { + TAILQ_FOREACH_SAFE(adp, &inodedep->id_inoupdt, ad_next, adpn) { + if (adp->ad_offset > iboff) + cancel_allocdirect(&inodedep->id_inoupdt, adp, + freeblks); + /* + * Truncate the allocdirect. We could eliminate + * or modify journal records as well. + */ + else if (adp->ad_offset == iboff && lastoff) + adp->ad_newsize = frags; + } + } + if (flags & IO_EXT) + while ((adp = TAILQ_FIRST(&inodedep->id_extupdt)) != 0) + cancel_allocdirect(&inodedep->id_extupdt, adp, + freeblks); + /* + * Add journal work. + */ + LIST_FOREACH(jfreeblk, &freeblks->fb_jfreeblkhd, jf_deps) + add_to_journal(&jfreeblk->jf_list); + FREE_LOCK(&lk); + bdwrite(bp); + /* + * Truncate dependency structures beyond length. + */ + trunc_dependencies(ip, freeblks, lastlbn, frags, flags); + /* + * This is only set when we need to allocate a fragment because + * none existed at the end of a frag-sized file. It handles only + * allocating a new, zero filled block. + */ + if (allocblock) { + error = UFS_BALLOC(vp, length - 1, 1, cred, BA_CLRBUF, &bp); + if (error != 0) { + softdep_error("softdep_journal_freeblks", error); + return; + } + ip->i_size = length; + DIP_SET(ip, i_size, length); + ip->i_flag |= IN_CHANGE | IN_UPDATE; + allocbuf(bp, frags); + bawrite(bp); + /* + * Zero the end of a truncated frag or block. + */ + } else if (lastoff != 0 && vp->v_type != VDIR) { + int size; + + size = sblksize(fs, osize, lastlbn); + error = bread(vp, lastlbn, size, cred, &bp); + if (error) { + softdep_error("softdep_journal_freeblks", error); + return; + } + bzero((char *)bp->b_data + lastoff, size - lastoff); + size = sblksize(fs, length, lastlbn); + allocbuf(bp, size); + bawrite(bp); + + } + ACQUIRE_LOCK(&lk); + inodedep_lookup(mp, ip->i_number, DEPALLOC, &inodedep); + TAILQ_INSERT_TAIL(&inodedep->id_freeblklst, freeblks, fb_next); + freeblks->fb_state |= DEPCOMPLETE | ONDEPLIST; + /* + * We zero earlier truncations so they don't erroneously + * update i_blocks. + */ + if (freeblks->fb_len == 0) + TAILQ_FOREACH(fbn, &inodedep->id_freeblklst, fb_next) + fbn->fb_len = 0; + if ((freeblks->fb_state & ALLCOMPLETE) != ALLCOMPLETE || + !LIST_EMPTY(&freeblks->fb_jfreeblkhd)) + freeblks = NULL; + FREE_LOCK(&lk); + if (freeblks) + handle_workitem_freeblocks(freeblks, 0); +} + +/* * Block de-allocation dependencies. * * When blocks are de-allocated, the on-disk pointers must be nullified before @@ -5464,7 +6117,6 @@ softdep_setup_freeblocks(ip, length, flags) struct freeblks *freeblks; struct inodedep *inodedep; struct allocdirect *adp; - struct jfreeblk *jfreeblk; struct buf *bp; struct fs *fs; ufs2_daddr_t extblocks, datablocks; @@ -5472,52 +6124,37 @@ softdep_setup_freeblocks(ip, length, flags) int i, delay, error; ufs_lbn_t tmpval; ufs_lbn_t lbn; - int needj; fs = ip->i_fs; mp = UFSTOVFS(ip->i_ump); if (length != 0) panic("softdep_setup_freeblocks: non-zero length"); freeblks = newfreeblks(mp, ip); - ACQUIRE_LOCK(&lk); - /* - * If we're truncating a removed file that will never be written - * we don't need to journal the block frees. The canceled journals - * for the allocations will suffice. - */ - inodedep_lookup(mp, ip->i_number, DEPALLOC, &inodedep); - if ((inodedep->id_state & (UNLINKED | DEPCOMPLETE)) == UNLINKED || - (fs->fs_flags & FS_SUJ) == 0) - needj = 0; - else - needj = 1; - FREE_LOCK(&lk); extblocks = 0; + datablocks = 0; if (fs->fs_magic == FS_UFS2_MAGIC) extblocks = btodb(fragroundup(fs, ip->i_din2->di_extsize)); - datablocks = DIP(ip, i_blocks) - extblocks; if ((flags & IO_NORMAL) != 0) { for (i = 0; i < NDADDR; i++) - setup_freedirect(freeblks, ip, i, needj); + setup_freedirect(freeblks, ip, i, 0); for (i = 0, tmpval = NINDIR(fs), lbn = NDADDR; i < NIADDR; i++, lbn += tmpval, tmpval *= NINDIR(fs)) - setup_freeindir(freeblks, ip, i, -lbn -i, needj); + setup_freeindir(freeblks, ip, i, -lbn -i, 0); ip->i_size = 0; DIP_SET(ip, i_size, 0); - freeblks->fb_chkcnt = datablocks; - UFS_LOCK(ip->i_ump); - fs->fs_pendingblocks += datablocks; - UFS_UNLOCK(ip->i_ump); + datablocks = DIP(ip, i_blocks) - extblocks; } if ((flags & IO_EXT) != 0) { for (i = 0; i < NXADDR; i++) - setup_freeext(freeblks, ip, i, needj); + setup_freeext(freeblks, ip, i, 0); ip->i_din2->di_extsize = 0; - freeblks->fb_chkcnt += extblocks; + datablocks += extblocks; } - if (LIST_EMPTY(&freeblks->fb_jfreeblkhd)) - needj = 0; - DIP_SET(ip, i_blocks, DIP(ip, i_blocks) - freeblks->fb_chkcnt); + freeblks->fb_chkcnt = datablocks; + UFS_LOCK(ip->i_ump); + fs->fs_pendingblocks += datablocks; + UFS_UNLOCK(ip->i_ump); + DIP_SET(ip, i_blocks, DIP(ip, i_blocks) - datablocks); /* * Push the zero'ed inode to to its disk buffer so that we are free * to delete its dependencies below. Once the dependencies are gone @@ -5557,8 +6194,6 @@ softdep_setup_freeblocks(ip, length, flags) delay = (inodedep->id_state & DEPCOMPLETE); if (delay) WORKLIST_INSERT(&bp->b_dep, &freeblks->fb_list); - else if (needj) - freeblks->fb_state |= COMPLETE; /* * Because the file length has been truncated to zero, any * pending block allocation dependency structures associated @@ -5573,27 +6208,22 @@ softdep_setup_freeblocks(ip, length, flags) &inodedep->id_inoupdt); while ((adp = TAILQ_FIRST(&inodedep->id_inoupdt)) != 0) cancel_allocdirect(&inodedep->id_inoupdt, adp, - freeblks, delay); + freeblks); } if (flags & IO_EXT) { merge_inode_lists(&inodedep->id_newextupdt, &inodedep->id_extupdt); while ((adp = TAILQ_FIRST(&inodedep->id_extupdt)) != 0) cancel_allocdirect(&inodedep->id_extupdt, adp, - freeblks, delay); + freeblks); } - LIST_FOREACH(jfreeblk, &freeblks->fb_jfreeblkhd, jf_deps) - add_to_journal(&jfreeblk->jf_list); - FREE_LOCK(&lk); bdwrite(bp); - softdep_trunc_deps(ITOV(ip), freeblks, 0, 0, flags); + trunc_dependencies(ip, freeblks, -1, 0, flags); ACQUIRE_LOCK(&lk); if (inodedep_lookup(mp, ip->i_number, 0, &inodedep) != 0) (void) free_inodedep(inodedep); - - if (delay || needj) - freeblks->fb_state |= DEPCOMPLETE; + freeblks->fb_state |= DEPCOMPLETE; if (delay) { /* * If the inode with zeroed block pointers is now on disk @@ -5604,17 +6234,15 @@ softdep_setup_freeblocks(ip, length, flags) */ if ((freeblks->fb_state & ALLCOMPLETE) == ALLCOMPLETE) add_to_worklist(&freeblks->fb_list, 1); - } - if (needj && LIST_EMPTY(&freeblks->fb_jfreeblkhd)) - needj = 0; - + } else + freeblks->fb_state |= COMPLETE; FREE_LOCK(&lk); /* - * If the inode has never been written to disk (delay == 0) and - * we're not waiting on any journal writes, then we can process the - * freeblks now that we have deleted the dependencies. + * If the inode has never been written to disk (delay == 0) then + * we can process the freeblks now that we have deleted the + * dependencies. */ - if (!delay && !needj) + if (!delay) handle_workitem_freeblocks(freeblks, 0); } @@ -5622,18 +6250,19 @@ softdep_setup_freeblocks(ip, length, flags) * Eliminate any dependencies that exist in memory beyond lblkno:off */ static void -softdep_trunc_deps(vp, freeblks, lblkno, off, flags) - struct vnode *vp; +trunc_dependencies(ip, freeblks, lastlbn, lastoff, flags) + struct inode *ip; struct freeblks *freeblks; - ufs_lbn_t lblkno; - int off; + ufs_lbn_t lastlbn; + int lastoff; int flags; { - struct inodedep *inodedep; struct bufobj *bo; + struct vnode *vp; struct buf *bp; - struct mount *mp; - ino_t ino; + struct fs *fs; + ufs_lbn_t lbn; + int blkoff; /* * We must wait for any I/O in progress to finish so that @@ -5641,25 +6270,50 @@ static void * Once they are all there, walk the list and get rid of * any dependencies. */ - ino = VTOI(vp)->i_number; - mp = vp->v_mount; + fs = ip->i_fs; + vp = ITOV(ip); bo = &vp->v_bufobj; BO_LOCK(bo); drain_output(vp); + TAILQ_FOREACH(bp, &bo->bo_dirty.bv_hd, b_bobufs) + bp->b_vflags &= ~BV_SCANNED; restart: TAILQ_FOREACH(bp, &bo->bo_dirty.bv_hd, b_bobufs) { if (((flags & IO_EXT) == 0 && (bp->b_xflags & BX_ALTDATA)) || ((flags & IO_NORMAL) == 0 && (bp->b_xflags & BX_ALTDATA) == 0)) continue; + if (bp->b_vflags & BV_SCANNED) + continue; + blkoff = 0; + /* + * If this is a partial truncate we only want those + * blocks and indirect blocks that cover the range + * we're after. We handle the partially de-allocated + * indirects in a different pass. + */ + if (lastlbn > -1 && (bp->b_xflags & BX_ALTDATA) == 0) { + lbn = bp->b_lblkno; + if (lbn < 0) + lbn = -(lbn + lbn_level(lbn)); + if (lbn < lastlbn) + continue; + /* Here we only truncate lblkno if it's partial. */ + if (lbn == lastlbn) { + if (lastoff == 0) + continue; + blkoff = lastoff; + } + } if ((bp = getdirtybuf(bp, BO_MTX(bo), MNT_WAIT)) == NULL) goto restart; BO_UNLOCK(bo); ACQUIRE_LOCK(&lk); - (void) inodedep_lookup(mp, ino, 0, &inodedep); - if (deallocate_dependencies(bp, inodedep, freeblks, 0)) + if (deallocate_dependencies(bp, freeblks, blkoff) == 0) bp->b_flags |= B_INVAL | B_NOCACHE; FREE_LOCK(&lk); + if (blkoff) + allocbuf(bp, blkoff); brelse(bp); BO_LOCK(bo); goto restart; @@ -5668,69 +6322,73 @@ restart: } static int -cancel_pagedep(pagedep, inodedep, freeblks) +cancel_pagedep(pagedep, freeblks, blkoff) struct pagedep *pagedep; - struct inodedep *inodedep; struct freeblks *freeblks; + int blkoff; { - struct newdirblk *newdirblk; struct jremref *jremref; struct jmvref *jmvref; - struct dirrem *dirrem; + struct dirrem *dirrem, *tmp; int i; /* - * There should be no directory add dependencies present - * as the directory could not be truncated until all - * children were removed. - */ - KASSERT(LIST_FIRST(&pagedep->pd_pendinghd) == NULL, - ("deallocate_dependencies: pendinghd != NULL")); - for (i = 0; i < DAHASHSZ; i++) - KASSERT(LIST_FIRST(&pagedep->pd_diraddhd[i]) == NULL, - ("deallocate_dependencies: diraddhd != NULL")); - /* * Copy any directory remove dependencies to the list - * to be processed after the zero'ed inode is written. - * If the inode has already been written, then they + * to be processed after the freeblks proceeds. If + * directory entry never made it to disk they * can be dumped directly onto the work list. */ - LIST_FOREACH(dirrem, &pagedep->pd_dirremhd, dm_next) { + LIST_FOREACH_SAFE(dirrem, &pagedep->pd_dirremhd, dm_next, tmp) { + /* Skip this directory removal if it is intended to remain. */ + if (dirrem->dm_offset < blkoff) + continue; /* - * If there are any dirrems we wait for - * the journal write to complete and - * then restart the buf scan as the lock + * If there are any dirrems we wait for the journal write + * to complete and then restart the buf scan as the lock * has been dropped. */ - while ((jremref = LIST_FIRST(&dirrem->dm_jremrefhd)) - != NULL) { + while ((jremref = LIST_FIRST(&dirrem->dm_jremrefhd)) != NULL) { stat_jwait_filepage++; jwait(&jremref->jr_list); return (ERESTART); } LIST_REMOVE(dirrem, dm_next); dirrem->dm_dirinum = pagedep->pd_ino; - if (inodedep == NULL || - (inodedep->id_state & ALLCOMPLETE) == ALLCOMPLETE) { - dirrem->dm_state |= COMPLETE; - add_to_worklist(&dirrem->dm_list, 0); - } else - WORKLIST_INSERT(&inodedep->id_bufwait, - &dirrem->dm_list); + WORKLIST_INSERT(&freeblks->fb_freeworkhd, &dirrem->dm_list); } - if ((pagedep->pd_state & NEWBLOCK) != 0) { - newdirblk = pagedep->pd_newdirblk; - WORKLIST_REMOVE(&newdirblk->db_list); - free_newdirblk(newdirblk); - } while ((jmvref = LIST_FIRST(&pagedep->pd_jmvrefhd)) != NULL) { stat_jwait_filepage++; jwait(&jmvref->jm_list); return (ERESTART); } - WORKLIST_REMOVE(&pagedep->pd_list); - LIST_REMOVE(pagedep, pd_hash); - WORKITEM_FREE(pagedep, D_PAGEDEP); + /* + * When we're partially truncating a pagedep we just want to flush + * journal entries and return. There can not be any adds in the + * truncated portion of the directory and newblk must remain if + * part of the block remains. + */ + if (blkoff != 0) + goto out; + /* + * There should be no directory add dependencies present + * as the directory could not be truncated until all + * children were removed. + */ + KASSERT(LIST_FIRST(&pagedep->pd_pendinghd) == NULL, + ("deallocate_dependencies: pendinghd != NULL")); + for (i = 0; i < DAHASHSZ; i++) + KASSERT(LIST_FIRST(&pagedep->pd_diraddhd[i]) == NULL, + ("deallocate_dependencies: diraddhd != NULL")); + if ((pagedep->pd_state & NEWBLOCK) != 0) { + free_newdirblk(pagedep->pd_newdirblk); + pagedep->pd_state &= ~NEWBLOCK; + } +out: + /* + * Try to free the pagedep, may not if we didn't deallocate + * everything for partial truncate. + */ + free_pagedep(pagedep); return (0); } @@ -5743,54 +6401,65 @@ static int * all dependencies were cleared, 0 otherwise. */ static int -deallocate_dependencies(bp, inodedep, freeblks, off) +deallocate_dependencies(bp, freeblks, off) struct buf *bp; - struct inodedep *inodedep; struct freeblks *freeblks; int off; { - struct worklist *wk; struct indirdep *indirdep; - struct allocindir *aip; struct pagedep *pagedep; + struct allocdirect *adp; + struct worklist *wk, *wkn; mtx_assert(&lk, MA_OWNED); - while ((wk = LIST_FIRST(&bp->b_dep)) != NULL) { + LIST_FOREACH_SAFE(wk, &bp->b_dep, wk_list, wkn) { switch (wk->wk_type) { - case D_INDIRDEP: indirdep = WK_INDIRDEP(wk); if (bp->b_lblkno >= 0 || bp->b_blkno != indirdep->ir_savebp->b_lblkno) panic("deallocate_dependencies: not indir"); - cancel_indirdep(indirdep, bp, inodedep, freeblks); + cancel_indirdep(indirdep, bp, freeblks); continue; case D_PAGEDEP: pagedep = WK_PAGEDEP(wk); - if (cancel_pagedep(pagedep, inodedep, freeblks)) - return (0); + if (cancel_pagedep(pagedep, freeblks, off)) + return (ERESTART); continue; case D_ALLOCINDIR: - aip = WK_ALLOCINDIR(wk); - cancel_allocindir(aip, inodedep, freeblks); + /* + * Simply remove the allocindir, we'll find it via + * the indirdep where we can clear pointers if + * needed. + */ + WORKLIST_REMOVE(wk); continue; case D_ALLOCDIRECT: - case D_INODEDEP: + adp = WK_ALLOCDIRECT(wk); + if (off != 0) + continue; + /* FALLTHROUGH */ + default: panic("deallocate_dependencies: Unexpected type %s", TYPENAME(wk->wk_type)); /* NOTREACHED */ - - default: - panic("deallocate_dependencies: Unknown type %s", - TYPENAME(wk->wk_type)); - /* NOTREACHED */ } } + /* + * Don't throw away this buf, we were partially truncating and + * some deps will always remain. + */ + if (!LIST_EMPTY(&bp->b_dep)) { + if (off == 0) + panic("deallocate_dependencies: dangling deps"); + bp->b_vflags |= BV_SCANNED; + return (EBUSY); + } - return (1); + return (0); } /* @@ -5800,20 +6469,36 @@ static int * space is no longer pointed to by the inode or in the bitmap. */ static void -cancel_allocdirect(adphead, adp, freeblks, delay) +cancel_allocdirect(adphead, adp, freeblks) struct allocdirectlst *adphead; struct allocdirect *adp; struct freeblks *freeblks; - int delay; { struct freework *freework; struct newblk *newblk; struct worklist *wk; - ufs_lbn_t lbn; TAILQ_REMOVE(adphead, adp, ad_next); newblk = (struct newblk *)adp; + freework = NULL; /* + * Find the correct freework structure. + */ + LIST_FOREACH(wk, &freeblks->fb_freeworkhd, wk_list) { + if (wk->wk_type != D_FREEWORK) + continue; + freework = WK_FREEWORK(wk); + if (freework->fw_blkno == newblk->nb_newblkno) + break; + } + if (freework == NULL) + panic("cancel_allocdirect: Freework not found"); + /* + * If a newblk exists at all we still have the journal entry that + * initiated the allocation so we do not need to journal the free. + */ + cancel_jfreeblk(freeblks, freework->fw_blkno); + /* * If the journal hasn't been written the jnewblk must be passed * to the call to ffs_blkfree that reclaims the space. We accomplish * this by linking the journal dependency into the freework to be @@ -5821,33 +6506,9 @@ static void * been written we can simply reclaim the journal space when the * freeblks work is complete. */ - if (newblk->nb_jnewblk == NULL) { - if (cancel_newblk(newblk, NULL, &freeblks->fb_jwork) != NULL) - panic("cancel_allocdirect: Unexpected dependency"); - goto found; - } - lbn = newblk->nb_jnewblk->jn_lbn; - /* - * Find the correct freework structure so it releases the canceled - * journal when the bitmap is cleared. This preserves rollback - * until the allocation is reverted. - */ - LIST_FOREACH(wk, &freeblks->fb_freeworkhd, wk_list) { - freework = WK_FREEWORK(wk); - if (freework->fw_lbn != lbn) - continue; - freework->fw_jnewblk = cancel_newblk(newblk, &freework->fw_list, - &freework->fw_jwork); - goto found; - } - panic("cancel_allocdirect: Freework not found for lbn %jd\n", lbn); -found: - if (delay) - WORKLIST_INSERT(&adp->ad_inodedep->id_bufwait, - &newblk->nb_list); - else - free_newblk(newblk); - return; + freework->fw_jnewblk = cancel_newblk(newblk, &freework->fw_list, + &freeblks->fb_jwork); + WORKLIST_INSERT(&freeblks->fb_freeworkhd, &newblk->nb_list); } @@ -5865,33 +6526,18 @@ cancel_newblk(newblk, wk, wkhd) struct worklist *wk; struct workhead *wkhd; { - struct indirdep *indirdep; - struct allocindir *aip; struct jnewblk *jnewblk; - while ((indirdep = LIST_FIRST(&newblk->nb_indirdeps)) != NULL) { - indirdep->ir_state &= ~ONDEPLIST; - LIST_REMOVE(indirdep, ir_next); - /* - * If an indirdep is not on the buf worklist we need to - * free it here as deallocate_dependencies() will never - * find it. These pointers were never visible on disk and - * can be discarded immediately. - */ - while ((aip = LIST_FIRST(&indirdep->ir_completehd)) != NULL) { - LIST_REMOVE(aip, ai_next); - if (cancel_newblk(&aip->ai_block, NULL, wkhd) != NULL) - panic("cancel_newblk: aip has journal entry"); - free_newblk(&aip->ai_block); - } - /* - * If this indirdep is not attached to a buf it was simply - * waiting on completion to clear completehd. free_indirdep() - * asserts that nothing is dangling. - */ - if ((indirdep->ir_state & ONWORKLIST) == 0) - free_indirdep(indirdep); - } + newblk->nb_state |= GOINGAWAY; + /* + * Previously we traversed the completedhd on each indirdep + * attached to this newblk to cancel them and gather journal + * work. Since we need only the oldest journal segment and + * the lowest point on the tree will always have the oldest + * journal segment we are free to release the segments + * of any subordinates and may leave the indirdep list to + * indirdep_complete() when this newblk is freed. + */ if (newblk->nb_state & ONDEPLIST) { newblk->nb_state &= ~ONDEPLIST; LIST_REMOVE(newblk, nb_deps); @@ -5904,7 +6550,7 @@ cancel_newblk(newblk, wk, wkhd) * superseding operation completes. */ jnewblk = newblk->nb_jnewblk; - if (jnewblk != NULL) { + if (jnewblk != NULL && wk != NULL) { newblk->nb_jnewblk = NULL; jnewblk->jn_dep = wk; } @@ -5924,10 +6570,11 @@ free_newblk(newblk) struct newblk *newblk; { struct indirdep *indirdep; - struct newdirblk *newdirblk; struct freefrag *freefrag; struct worklist *wk; + KASSERT(newblk->nb_jnewblk == NULL, + ("free_newblk; jnewblk %p still attached", newblk->nb_jnewblk)); mtx_assert(&lk, MA_OWNED); if (newblk->nb_state & ONDEPLIST) LIST_REMOVE(newblk, nb_deps); @@ -5939,19 +6586,12 @@ free_newblk(newblk) if ((freefrag->ff_state & ALLCOMPLETE) == ALLCOMPLETE) add_to_worklist(&freefrag->ff_list, 0); } - if ((wk = LIST_FIRST(&newblk->nb_newdirblk)) != NULL) { - newdirblk = WK_NEWDIRBLK(wk); - WORKLIST_REMOVE(&newdirblk->db_list); - if (!LIST_EMPTY(&newblk->nb_newdirblk)) - panic("free_newblk: extra newdirblk"); - free_newdirblk(newdirblk); - } - while ((indirdep = LIST_FIRST(&newblk->nb_indirdeps)) != NULL) { - indirdep->ir_state |= DEPCOMPLETE; + if ((wk = LIST_FIRST(&newblk->nb_newdirblk)) != NULL) + free_newdirblk(WK_NEWDIRBLK(wk)); + if (!LIST_EMPTY(&newblk->nb_newdirblk)) + panic("free_newblk: extra newdirblk"); + while ((indirdep = LIST_FIRST(&newblk->nb_indirdeps)) != NULL) indirdep_complete(indirdep); - } - KASSERT(newblk->nb_jnewblk == NULL, - ("free_newblk; jnewblk %p still attached", newblk->nb_jnewblk)); handle_jwork(&newblk->nb_jwork); newblk->nb_list.wk_type = D_NEWBLK; WORKITEM_FREE(newblk, D_NEWBLK); @@ -5971,6 +6611,7 @@ free_newdirblk(newdirblk) int i; mtx_assert(&lk, MA_OWNED); + WORKLIST_REMOVE(&newdirblk->db_list); /* * If the pagedep is still linked onto the directory buffer * dependency chain, then some of the entries on the @@ -6020,6 +6661,7 @@ softdep_freefile(pvp, ino, mode) struct inode *ip = VTOI(pvp); struct inodedep *inodedep; struct freefile *freefile; + struct freeblks *freeblks; /* * This sets up the inode de-allocation dependency. @@ -6048,28 +6690,38 @@ softdep_freefile(pvp, ino, mode) */ ACQUIRE_LOCK(&lk); inodedep_lookup(pvp->v_mount, ino, 0, &inodedep); - /* - * Remove this inode from the unlinked list and set - * GOINGAWAY as appropriate to indicate that this inode - * will never be written. - */ - if (inodedep && inodedep->id_state & UNLINKED) { + if (inodedep) { /* - * Save the journal work to be freed with the bitmap - * before we clear UNLINKED. Otherwise it can be lost - * if the inode block is written. + * Clear out freeblks that no longer need to reference + * this inode. */ - handle_bufwait(inodedep, &freefile->fx_jwork); - clear_unlinked_inodedep(inodedep); - /* Re-acquire inodedep as we've dropped lk. */ - inodedep_lookup(pvp->v_mount, ino, 0, &inodedep); + while ((freeblks = + TAILQ_FIRST(&inodedep->id_freeblklst)) != NULL) { + TAILQ_REMOVE(&inodedep->id_freeblklst, freeblks, + fb_next); + freeblks->fb_state &= ~ONDEPLIST; + } + /* + * Remove this inode from the unlinked list. + */ + if (inodedep->id_state & UNLINKED) { + /* + * Save the journal work to be freed with the bitmap + * before we clear UNLINKED. Otherwise it can be lost + * if the inode block is written. + */ + handle_bufwait(inodedep, &freefile->fx_jwork); + clear_unlinked_inodedep(inodedep); + /* Re-acquire inodedep as we've dropped lk. */ + inodedep_lookup(pvp->v_mount, ino, 0, &inodedep); + } } if (inodedep == NULL || check_inode_unwritten(inodedep)) { FREE_LOCK(&lk); handle_workitem_freefile(freefile); return; } - if (inodedep && (inodedep->id_state & DEPCOMPLETE) == 0) + if ((inodedep->id_state & DEPCOMPLETE) == 0) inodedep->id_state |= GOINGAWAY; WORKLIST_INSERT(&inodedep->id_inowait, &freefile->fx_list); FREE_LOCK(&lk); @@ -6154,6 +6806,7 @@ free_inodedep(inodedep) !TAILQ_EMPTY(&inodedep->id_newinoupdt) || !TAILQ_EMPTY(&inodedep->id_extupdt) || !TAILQ_EMPTY(&inodedep->id_newextupdt) || + !TAILQ_EMPTY(&inodedep->id_freeblklst) || inodedep->id_mkdiradd != NULL || inodedep->id_nlinkdelta != 0 || inodedep->id_savedino1 != NULL) @@ -6181,54 +6834,59 @@ freework_freeblock(freework) struct ufsmount *ump; struct workhead wkhd; struct fs *fs; - int pending; int bsize; int needj; + mtx_assert(&lk, MA_OWNED); + /* + * Handle partial truncate separately. + */ + if (freework->fw_indir) { + complete_trunc_indir(freework); + return; + } freeblks = freework->fw_freeblks; ump = VFSTOUFS(freeblks->fb_list.wk_mp); fs = ump->um_fs; needj = freeblks->fb_list.wk_mp->mnt_kern_flag & MNTK_SUJ; bsize = lfragtosize(fs, freework->fw_frags); - pending = btodb(bsize); LIST_INIT(&wkhd); /* + * DEPCOMPLETE is cleared in indirblk_insert() if the block lives + * on the indirblk hashtable and prevents premature freeing. + */ + freework->fw_state |= DEPCOMPLETE; + /* + * SUJ needs to wait for the segment referencing freed indirect + * blocks to expire so that we know the checker will not confuse + * a re-allocated indirect block with its old contents. + */ + if (needj && freework->fw_lbn <= -NDADDR) + indirblk_insert(freework); + /* * If we are canceling an existing jnewblk pass it to the free * routine, otherwise pass the freeblk which will ultimately * release the freeblks. If we're not journaling, we can just * free the freeblks immediately. */ - ACQUIRE_LOCK(&lk); - LIST_SWAP(&wkhd, &freework->fw_jwork, worklist, wk_list); jnewblk = freework->fw_jnewblk; if (jnewblk != NULL) { - /* Could've already been canceled in indir_trunc(). */ - if ((jnewblk->jn_state & GOINGAWAY) == 0) - cancel_jnewblk(jnewblk, &wkhd); + cancel_jnewblk(jnewblk, &wkhd); needj = 0; } else if (needj) WORKLIST_INSERT(&wkhd, &freework->fw_list); - freeblks->fb_chkcnt -= pending; + freeblks->fb_freecnt += btodb(bsize); FREE_LOCK(&lk); - /* - * extattr blocks don't show up in pending blocks. XXX why? - */ - if (freework->fw_lbn >= 0 || freework->fw_lbn <= -NDADDR) { - UFS_LOCK(ump); - fs->fs_pendingblocks -= pending; - UFS_UNLOCK(ump); - } - ffs_blkfree(ump, fs, freeblks->fb_devvp, freework->fw_blkno, - bsize, freeblks->fb_previousinum, &wkhd); + ffs_blkfree(ump, fs, freeblks->fb_devvp, freework->fw_blkno, bsize, + freeblks->fb_inum, &wkhd); + ACQUIRE_LOCK(&lk); if (needj) return; /* * The jnewblk will be discarded and the bits in the map never * made it to disk. We can immediately free the freeblk. */ - ACQUIRE_LOCK(&lk); handle_written_freework(freework); - FREE_LOCK(&lk); } /* @@ -6246,15 +6904,21 @@ handle_workitem_indirblk(freework) struct ufsmount *ump; struct fs *fs; - freeblks = freework->fw_freeblks; ump = VFSTOUFS(freeblks->fb_list.wk_mp); fs = ump->um_fs; - if (freework->fw_off == NINDIR(fs)) + if (freework->fw_state & DEPCOMPLETE) { + handle_written_freework(freework); + return; + } + if (freework->fw_off == NINDIR(fs)) { freework_freeblock(freework); - else - indir_trunc(freework, fsbtodb(fs, freework->fw_blkno), - freework->fw_lbn); + return; + } + FREE_LOCK(&lk); + indir_trunc(freework, fsbtodb(fs, freework->fw_blkno), + freework->fw_lbn); + ACQUIRE_LOCK(&lk); } /* @@ -6268,48 +6932,17 @@ handle_written_freework(freework) { struct freeblks *freeblks; struct freework *parent; - struct jsegdep *jsegdep; - struct worklist *wk; - int needj; - needj = 0; freeblks = freework->fw_freeblks; parent = freework->fw_parent; - /* - * SUJ needs to wait for the segment referencing freed indirect - * blocks to expire so that we know the checker will not confuse - * a re-allocated indirect block with its old contents. - */ - if (freework->fw_lbn <= -NDADDR && - freework->fw_list.wk_mp->mnt_kern_flag & MNTK_SUJ) { - LIST_FOREACH(wk, &freeblks->fb_jwork, wk_list) - if (wk->wk_type == D_JSEGDEP) - break; - if (wk) { - jsegdep = WK_JSEGDEP(wk); - LIST_INSERT_HEAD(&jsegdep->jd_seg->js_indirs, - freework, fw_next); - WORKLIST_INSERT(INDIR_HASH(freework->fw_list.wk_mp, - freework->fw_blkno), &freework->fw_list); - needj = 1; - } - } if (parent) { - if (--parent->fw_ref != 0) - parent = NULL; - freeblks = NULL; - } else if (--freeblks->fb_ref != 0) - freeblks = NULL; - if (needj == 0) + if (--parent->fw_ref == 0) + add_to_worklist(&parent->fw_list, 1); + } else if (--freeblks->fb_ref == 0) + add_to_worklist(&freeblks->fb_list, 1); + freework->fw_state |= COMPLETE; + if ((freework->fw_state & ALLCOMPLETE) == ALLCOMPLETE) WORKITEM_FREE(freework, D_FREEWORK); - /* - * Don't delay these block frees or it takes an intolerable amount - * of time to process truncates and free their journal entries. - */ - if (freeblks) - add_to_worklist(&freeblks->fb_list, 1); - if (parent) - add_to_worklist(&parent->fw_list, 1); } /* @@ -6326,32 +6959,68 @@ handle_workitem_freeblocks(freeblks, flags) int flags; { struct freework *freework; + struct newblk *newblk; + struct allocindir *aip; + struct ufsmount *ump; struct worklist *wk; KASSERT(LIST_EMPTY(&freeblks->fb_jfreeblkhd), ("handle_workitem_freeblocks: Journal entries not written.")); if (LIST_EMPTY(&freeblks->fb_freeworkhd)) { - handle_complete_freeblocks(freeblks); + handle_complete_freeblocks(freeblks, flags); return; } - freeblks->fb_ref++; + ump = VFSTOUFS(freeblks->fb_list.wk_mp); + ACQUIRE_LOCK(&lk); while ((wk = LIST_FIRST(&freeblks->fb_freeworkhd)) != NULL) { - KASSERT(wk->wk_type == D_FREEWORK, - ("handle_workitem_freeblocks: Unknown type %s", - TYPENAME(wk->wk_type))); - WORKLIST_REMOVE_UNLOCKED(wk); - freework = WK_FREEWORK(wk); - if (freework->fw_lbn <= -NDADDR) - handle_workitem_indirblk(freework); - else - freework_freeblock(freework); + WORKLIST_REMOVE(wk); + switch (wk->wk_type) { + case D_DIRREM: + wk->wk_state |= COMPLETE; + add_to_worklist(wk, 0); + continue; + + case D_ALLOCDIRECT: + free_newblk(WK_NEWBLK(wk)); + continue; + + case D_ALLOCINDIR: + aip = WK_ALLOCINDIR(wk); + freework = NULL; + if (aip->ai_state & DELAYEDFREE) { + FREE_LOCK(&lk); + freework = newfreework(ump, freeblks, NULL, + aip->ai_lbn, aip->ai_newblkno, + ump->um_fs->fs_frag, 0, 0); + ACQUIRE_LOCK(&lk); + } + newblk = WK_NEWBLK(wk); + if (newblk->nb_jnewblk) { + freework->fw_jnewblk = newblk->nb_jnewblk; + newblk->nb_jnewblk->jn_dep = &freework->fw_list; + newblk->nb_jnewblk = NULL; + } + free_newblk(newblk); + continue; + + case D_FREEWORK: + wk->wk_state &= ~ONDEPLIST; + freework = WK_FREEWORK(wk); + if (freework->fw_lbn <= -NDADDR) + handle_workitem_indirblk(freework); + else + freework_freeblock(freework); + continue; + default: + panic("handle_workitem_freeblocks: Unknown type %s", + TYPENAME(wk->wk_type)); + } } - ACQUIRE_LOCK(&lk); if (--freeblks->fb_ref != 0) freeblks = NULL; FREE_LOCK(&lk); if (freeblks) - handle_complete_freeblocks(freeblks); + handle_complete_freeblocks(freeblks, flags); } /* @@ -6360,40 +7029,76 @@ handle_workitem_freeblocks(freeblks, flags) * can not be called until all other dependencies are stable on disk. */ static void -handle_complete_freeblocks(freeblks) +handle_complete_freeblocks(freeblks, flags) struct freeblks *freeblks; + int flags; { + struct inodedep *inodedep; struct inode *ip; struct vnode *vp; struct fs *fs; struct ufsmount *ump; - int flags; + ufs2_daddr_t spare; ump = VFSTOUFS(freeblks->fb_list.wk_mp); fs = ump->um_fs; - flags = LK_NOWAIT; + flags = LK_EXCLUSIVE | (flags & LK_NOWAIT); + spare = freeblks->fb_freecnt - freeblks->fb_chkcnt; /* - * If we still have not finished background cleanup, then check - * to see if the block count needs to be adjusted. + * If we did not release the expected number of blocks we may have + * to adjust the inode block count here. Only do so if it wasn't + * a truncation to zero and the modrev still matches. */ - if (freeblks->fb_chkcnt != 0 && (fs->fs_flags & FS_UNCLEAN) != 0 && - ffs_vgetf(freeblks->fb_list.wk_mp, freeblks->fb_previousinum, - (flags & LK_NOWAIT) | LK_EXCLUSIVE, &vp, FFSV_FORCEINSMQ) == 0) { + if (spare && freeblks->fb_len != 0) { + if (ffs_vgetf(freeblks->fb_list.wk_mp, freeblks->fb_inum, + flags, &vp, FFSV_FORCEINSMQ) != 0) { + ACQUIRE_LOCK(&lk); + add_to_worklist(&freeblks->fb_list, 1); + FREE_LOCK(&lk); + return; + } ip = VTOI(vp); - DIP_SET(ip, i_blocks, DIP(ip, i_blocks) + freeblks->fb_chkcnt); - ip->i_flag |= IN_CHANGE; + if (DIP(ip, i_modrev) == freeblks->fb_modrev) { + DIP_SET(ip, i_blocks, DIP(ip, i_blocks) - spare); + ip->i_flag |= IN_CHANGE; + /* + * We must wait so this happens before the + * journal is reclaimed. + */ + ffs_update(vp, 1); + } vput(vp); + spare = 0; } + if (freeblks->fb_chkcnt) { + UFS_LOCK(ump); + fs->fs_pendingblocks -= freeblks->fb_chkcnt; + UFS_UNLOCK(ump); + } +#ifdef QUOTA + /* Handle spare. */ +#endif - if (!(freeblks->fb_chkcnt == 0 || +#if 0 + if (!(spare != 0 || ((fs->fs_flags & FS_UNCLEAN) != 0 && (flags & LK_NOWAIT) == 0))) - printf( - "handle_workitem_freeblocks: inode %ju block count %jd\n", - (uintmax_t)freeblks->fb_previousinum, - (intmax_t)freeblks->fb_chkcnt); + printf("handle_complete_freeblocks: " + "inode %ju block count %jd actual %jd\n", + (uintmax_t)freeblks->fb_inum, + (intmax_t)freeblks->fb_chkcnt, + (intmax_t)freeblks->fb_freecnt); +#endif ACQUIRE_LOCK(&lk); + if (freeblks->fb_state & ONDEPLIST) { + inodedep_lookup(freeblks->fb_list.wk_mp, freeblks->fb_inum, + 0, &inodedep); + TAILQ_REMOVE(&inodedep->id_freeblklst, freeblks, fb_next); + freeblks->fb_state &= ~ONDEPLIST; + if (TAILQ_EMPTY(&inodedep->id_freeblklst)) + free_inodedep(inodedep); + } /* * All of the freeblock deps must be complete prior to this call * so it's now safe to complete earlier outstanding journal entries. @@ -6404,10 +7109,15 @@ static void } /* - * Release blocks associated with the inode ip and stored in the indirect + * Release blocks associated with the freeblks and stored in the indirect * block dbn. If level is greater than SINGLE, the block is an indirect block * and recursive calls to indirtrunc must be used to cleanse other indirect * blocks. + * + * This handles partial and complete truncation of blocks. Partial is noted + * with goingaway == 0. In this case the freework is completed after the + * zero'd indirects are written to disk. For full truncation the freework + * is completed after the block is freed. */ static void indir_trunc(freework, dbn, lbn) @@ -6417,165 +7127,105 @@ indir_trunc(freework, dbn, lbn) { struct freework *nfreework; struct workhead wkhd; - struct jnewblk *jnewblkn; - struct jnewblk *jnewblk; struct freeblks *freeblks; struct buf *bp; struct fs *fs; - struct worklist *wkn; - struct worklist *wk; struct indirdep *indirdep; struct ufsmount *ump; ufs1_daddr_t *bap1 = 0; ufs2_daddr_t nb, nnb, *bap2 = 0; - ufs_lbn_t lbnadd; + ufs_lbn_t lbnadd, nlbn; int i, nblocks, ufs1fmt; int fs_pendingblocks; + int goingaway; int freedeps; int needj; int level; int cnt; - LIST_INIT(&wkhd); - level = lbn_level(lbn); - if (level == -1) - panic("indir_trunc: Invalid lbn %jd\n", lbn); freeblks = freework->fw_freeblks; ump = VFSTOUFS(freeblks->fb_list.wk_mp); fs = ump->um_fs; - fs_pendingblocks = 0; - freedeps = 0; - needj = UFSTOVFS(ump)->mnt_kern_flag & MNTK_SUJ; - lbnadd = lbn_offset(fs, level); /* - * Get buffer of block pointers to be freed. This routine is not - * called until the zero'ed inode has been written, so it is safe - * to free blocks as they are encountered. Because the inode has - * been zero'ed, calls to bmap on these blocks will fail. So, we - * have to use the on-disk address and the block device for the - * filesystem to look them up. If the file was deleted before its - * indirect blocks were all written to disk, the routine that set - * us up (deallocate_dependencies) will have arranged to leave - * a complete copy of the indirect block in memory for our use. - * Otherwise we have to read the blocks in from the disk. + * Get buffer of block pointers to be freed. There are three cases: + * + * 1) Partial truncate caches the indirdep pointer in the freework + * which provides us a back copy to the save bp which holds the + * pointers we want to clear. When this completes the zero + * pointers are written to the real copy. + * 2) The indirect is being completely truncated, cancel_indirdep() + * eliminated the real copy and placed the indirdep on the saved + * copy. The indirdep and buf are discarded when this completes. + * 3) The indirect was not in memory, we read a copy off of the disk + * using the devvp and drop and invalidate the buffer when we're + * done. */ -#ifdef notyet - bp = getblk(freeblks->fb_devvp, dbn, (int)fs->fs_bsize, 0, 0, - GB_NOCREAT); -#else - bp = incore(&freeblks->fb_devvp->v_bufobj, dbn); -#endif + goingaway = 1; + indirdep = NULL; + if (freework->fw_indir != NULL) { + goingaway = 0; + indirdep = freework->fw_indir; + bp = indirdep->ir_savebp; + if (bp == NULL || bp->b_blkno != dbn) + panic("indir_trunc: Bad saved buf %p blkno %jd", + bp, (intmax_t)dbn); + } else if ((bp = incore(&freeblks->fb_devvp->v_bufobj, dbn)) != NULL) { + /* + * The lock prevents the buf dep list from changing and + * indirects on devvp should only ever have one dependency. + */ + indirdep = WK_INDIRDEP(LIST_FIRST(&bp->b_dep)); + if (indirdep == NULL || (indirdep->ir_state & GOINGAWAY) == 0) + panic("indir_trunc: Bad indirdep %p from buf %p", + indirdep, bp); + } else if (bread(freeblks->fb_devvp, dbn, (int)fs->fs_bsize, + NOCRED, &bp) != 0) { + brelse(bp); + return; + } ACQUIRE_LOCK(&lk); - if (bp != NULL && (wk = LIST_FIRST(&bp->b_dep)) != NULL) { - if (wk->wk_type != D_INDIRDEP || - (wk->wk_state & GOINGAWAY) == 0) - panic("indir_trunc: lost indirdep %p", wk); - indirdep = WK_INDIRDEP(wk); - LIST_SWAP(&wkhd, &indirdep->ir_jwork, worklist, wk_list); - LIST_FOREACH_SAFE(jnewblk, &indirdep->ir_jnewblkhd, - jn_indirdeps, jnewblkn) { - /* - * XXX This cancel may cause some lengthy delay - * before the record is reclaimed below. - */ - LIST_REMOVE(jnewblk, jn_indirdeps); - cancel_jnewblk(jnewblk, &wkhd); - } - - free_indirdep(indirdep); - if (!LIST_EMPTY(&bp->b_dep)) - panic("indir_trunc: dangling dep %p", - LIST_FIRST(&bp->b_dep)); - ump->um_numindirdeps -= 1; - FREE_LOCK(&lk); - } else { -#ifdef notyet - if (bp) - brelse(bp); -#endif - FREE_LOCK(&lk); - if (bread(freeblks->fb_devvp, dbn, (int)fs->fs_bsize, - NOCRED, &bp) != 0) { - brelse(bp); + /* + * If we have an indirdep we need to enforce the truncation order + * and discard it when it is complete. + */ + if (indirdep) { + if (freework != TAILQ_FIRST(&indirdep->ir_trunc) && + !TAILQ_EMPTY(&indirdep->ir_trunc)) { + add_to_worklist(&freework->fw_list, 0); + FREE_LOCK(&lk); return; } + /* + * If we're goingaway, free the indirdep. Otherwise it will + * linger until the write completes. + */ + if (goingaway) { + free_indirdep(indirdep); + ump->um_numindirdeps -= 1; + } } - /* - * Recursively free indirect blocks. - */ + FREE_LOCK(&lk); + /* Initialize pointers depending on block size. */ if (ump->um_fstype == UFS1) { + bap1 = (ufs1_daddr_t *)bp->b_data; + nb = bap1[freework->fw_off]; ufs1fmt = 1; - bap1 = (ufs1_daddr_t *)bp->b_data; } else { + bap2 = (ufs2_daddr_t *)bp->b_data; + nb = bap2[freework->fw_off]; ufs1fmt = 0; - bap2 = (ufs2_daddr_t *)bp->b_data; } - - /* - * Reclaim indirect blocks which never made it to disk. - */ - cnt = 0; - LIST_FOREACH_SAFE(wk, &wkhd, wk_list, wkn) { - if (wk->wk_type != D_JNEWBLK) - continue; - /* XXX Is the lock necessary here for more than an assert? */ - ACQUIRE_LOCK(&lk); - WORKLIST_REMOVE(wk); - FREE_LOCK(&lk); - jnewblk = WK_JNEWBLK(wk); - if (jnewblk->jn_lbn > 0) - i = (jnewblk->jn_lbn - -lbn) / lbnadd; - else - i = (-(jnewblk->jn_lbn + level - 1) - -(lbn + level)) / - lbnadd; - KASSERT(i >= 0 && i < NINDIR(fs), - ("indir_trunc: Index out of range %d parent %jd lbn %jd level %d", - i, lbn, jnewblk->jn_lbn, level)); - /* Clear the pointer so it isn't found below. */ - if (ufs1fmt) { - nb = bap1[i]; - bap1[i] = 0; - } else { - nb = bap2[i]; - bap2[i] = 0; - } - KASSERT(nb == jnewblk->jn_blkno, - ("indir_trunc: Block mismatch %jd != %jd", - nb, jnewblk->jn_blkno)); - if (level != 0) { - ufs_lbn_t nlbn; - - nlbn = (lbn + 1) - (i * lbnadd); - nfreework = newfreework(ump, freeblks, freework, - nlbn, nb, fs->fs_frag, 0); - nfreework->fw_jnewblk = jnewblk; - freedeps++; - indir_trunc(nfreework, fsbtodb(fs, nb), nlbn); - } else { - struct workhead freewk; - - LIST_INIT(&freewk); - ACQUIRE_LOCK(&lk); - WORKLIST_INSERT(&freewk, wk); - FREE_LOCK(&lk); - ffs_blkfree(ump, fs, freeblks->fb_devvp, - jnewblk->jn_blkno, fs->fs_bsize, - freeblks->fb_previousinum, &freewk); - } - cnt++; - } - ACQUIRE_LOCK(&lk); - /* Any remaining journal work can be completed with freeblks. */ - jwork_move(&freeblks->fb_jwork, &wkhd); - FREE_LOCK(&lk); + level = lbn_level(lbn); + needj = UFSTOVFS(ump)->mnt_kern_flag & MNTK_SUJ; + lbnadd = lbn_offset(fs, level); nblocks = btodb(fs->fs_bsize); - if (ufs1fmt) - nb = bap1[0]; - else - nb = bap2[0]; nfreework = freework; + freedeps = 0; + cnt = 0; /* - * Reclaim on disk blocks. + * Reclaim blocks. Traverses into nested indirect levels and + * arranges for the current level to be freed when subordinates + * are free when journaling. */ for (i = freework->fw_off; i < NINDIR(fs); i++, nb = nnb) { if (i != NINDIR(fs) - 1) { @@ -6589,12 +7239,10 @@ indir_trunc(freework, dbn, lbn) continue; cnt++; if (level != 0) { - ufs_lbn_t nlbn; - nlbn = (lbn + 1) - (i * lbnadd); if (needj != 0) { nfreework = newfreework(ump, freeblks, freework, - nlbn, nb, fs->fs_frag, 0); + nlbn, nb, fs->fs_frag, 0, 0); freedeps++; } indir_trunc(nfreework, fsbtodb(fs, nb), nlbn); @@ -6614,85 +7262,102 @@ indir_trunc(freework, dbn, lbn) freedeps++; } ffs_blkfree(ump, fs, freeblks->fb_devvp, nb, - fs->fs_bsize, freeblks->fb_previousinum, &wkhd); + fs->fs_bsize, freeblks->fb_inum, &wkhd); } } + if (goingaway) { + bp->b_flags |= B_INVAL | B_NOCACHE; + brelse(bp); + } + fs_pendingblocks = 0; if (level == 0) fs_pendingblocks = (nblocks * cnt); /* - * If we're not journaling we can free the indirect now. Otherwise - * setup the ref counts and offset so this indirect can be completed - * when its children are free. + * If we are journaling set up the ref counts and offset so this + * indirect can be completed when its children are free. */ - if (needj == 0) { - fs_pendingblocks += nblocks; - dbn = dbtofsb(fs, dbn); - ffs_blkfree(ump, fs, freeblks->fb_devvp, dbn, fs->fs_bsize, - freeblks->fb_previousinum, NULL); + if (needj) { ACQUIRE_LOCK(&lk); - freeblks->fb_chkcnt -= fs_pendingblocks; - if (freework->fw_blkno == dbn) - handle_written_freework(freework); - FREE_LOCK(&lk); - freework = NULL; - } else { - ACQUIRE_LOCK(&lk); freework->fw_off = i; freework->fw_ref += freedeps; freework->fw_ref -= NINDIR(fs) + 1; - if (freework->fw_ref != 0) - freework = NULL; - freeblks->fb_chkcnt -= fs_pendingblocks; + freeblks->fb_freecnt += fs_pendingblocks; + if (freework->fw_ref == 0) + freework_freeblock(freework); FREE_LOCK(&lk); + return; } - if (fs_pendingblocks) { - UFS_LOCK(ump); - fs->fs_pendingblocks -= fs_pendingblocks; - UFS_UNLOCK(ump); + /* + * If we're not journaling we can free the indirect now. + */ + fs_pendingblocks += nblocks; + dbn = dbtofsb(fs, dbn); + ffs_blkfree(ump, fs, freeblks->fb_devvp, dbn, fs->fs_bsize, + freeblks->fb_inum, NULL); + /* Non SUJ softdep does single-threaded truncations. */ + freeblks->fb_freecnt += fs_pendingblocks; + if (freework->fw_blkno == dbn) { + ACQUIRE_LOCK(&lk); + handle_written_freework(freework); + FREE_LOCK(&lk); } - bp->b_flags |= B_INVAL | B_NOCACHE; - brelse(bp); - if (freework) - handle_workitem_indirblk(freework); return; } /* - * Cancel an allocindir when it is removed via truncation. + * Cancel an allocindir when it is removed via truncation. When bp is not + * NULL the indirect never appeared on disk and is scheduled to be freed + * independently of the indir so we can more easily track journal work. */ static void -cancel_allocindir(aip, inodedep, freeblks) +cancel_allocindir(aip, bp, freeblks, trunc) struct allocindir *aip; - struct inodedep *inodedep; + struct buf *bp; struct freeblks *freeblks; + int trunc; { - struct jnewblk *jnewblk; + struct indirdep *indirdep; + struct freefrag *freefrag; struct newblk *newblk; + newblk = (struct newblk *)aip; + LIST_REMOVE(aip, ai_next); /* + * We must eliminate the pointer in bp if it must be freed on its + * own due to partial truncate or pending journal work. + */ + if (bp && (trunc || newblk->nb_jnewblk)) { + /* + * Clear the pointer and mark the aip to be freed + * directly if it never existed on disk. + */ + aip->ai_state |= DELAYEDFREE; + indirdep = aip->ai_indirdep; + if (indirdep->ir_state & UFS1FMT) + ((ufs1_daddr_t *)bp->b_data)[aip->ai_offset] = 0; + else + ((ufs2_daddr_t *)bp->b_data)[aip->ai_offset] = 0; + } + /* + * When truncating the previous pointer will be freed via + * savedbp. Eliminate the freefrag which would dup free. + */ + if (trunc && (freefrag = newblk->nb_freefrag) != NULL) { + newblk->nb_freefrag = NULL; + if (freefrag->ff_jdep) + cancel_jfreefrag( + WK_JFREEFRAG(freefrag->ff_jdep)); + jwork_move(&freeblks->fb_jwork, &freefrag->ff_jwork); + WORKITEM_FREE(freefrag, D_FREEFRAG); + } + /* * If the journal hasn't been written the jnewblk must be passed * to the call to ffs_blkfree that reclaims the space. We accomplish - * this by linking the journal dependency into the indirdep to be - * freed when indir_trunc() is called. If the journal has already - * been written we can simply reclaim the journal space when the - * freeblks work is complete. + * this by leaving the journal dependency on the newblk to be freed + * when a freework is created in handle_workitem_freeblocks(). */ - LIST_REMOVE(aip, ai_next); - newblk = (struct newblk *)aip; - if (newblk->nb_jnewblk == NULL) { - if (cancel_newblk(newblk, NULL, &freeblks->fb_jwork)) - panic("cancel_allocindir: Unexpected dependency."); - } else { - jnewblk = cancel_newblk(newblk, &aip->ai_indirdep->ir_list, - &aip->ai_indirdep->ir_jwork); - if (jnewblk) - LIST_INSERT_HEAD(&aip->ai_indirdep->ir_jnewblkhd, - jnewblk, jn_indirdeps); - } - if (inodedep && inodedep->id_state & DEPCOMPLETE) - WORKLIST_INSERT(&inodedep->id_bufwait, &newblk->nb_list); - else - free_newblk(newblk); + cancel_newblk(newblk, NULL, &freeblks->fb_jwork); + WORKLIST_INSERT(&freeblks->fb_freeworkhd, &newblk->nb_list); } /* @@ -6788,7 +7453,7 @@ setup_newdir(dap, newinum, dinum, newdirbp, mkdirp WORKITEM_FREE(mkdir2, D_MKDIR); } else { LIST_INSERT_HEAD(&mkdirlisthd, mkdir2, md_mkdirs); - WORKLIST_INSERT(&inodedep->id_bufwait,&mkdir2->md_list); + WORKLIST_INSERT(&inodedep->id_bufwait, &mkdir2->md_list); } *mkdirp = mkdir2; @@ -7540,6 +8205,7 @@ newdirrem(bp, dp, ip, isrmdir, prevdirremp) &pagedep) == 0) WORKLIST_INSERT(&bp->b_dep, &pagedep->pd_list); dirrem->dm_pagedep = pagedep; + dirrem->dm_offset = offset; /* * If we're renaming a .. link to a new directory, cancel any * existing MKDIR_PARENT mkdir. If it has already been canceled @@ -8372,7 +9038,7 @@ softdep_disk_io_initiation(bp) freeblks = WK_FREEBLKS(wk); jfreeblk = LIST_FIRST(&freeblks->fb_jfreeblkhd); /* - * We have to wait for the jfreeblks to be journaled + * We have to wait for the freeblks to be journaled * before we can write an inodeblock with updated * pointers. Be careful to arrange the marker so * we revisit the jfreeblk if it's not removed by @@ -8396,7 +9062,7 @@ softdep_disk_io_initiation(bp) */ newblk = WK_NEWBLK(wk); if (newblk->nb_jnewblk != NULL && - indirblk_inseg(newblk->nb_list.wk_mp, + indirblk_lookup(newblk->nb_list.wk_mp, newblk->nb_newblkno)) { LIST_REMOVE(&marker, wk_list); LIST_INSERT_BEFORE(wk, &marker, wk_list); @@ -8900,10 +9566,9 @@ initiate_write_inodeblock_ufs2(inodedep, bp) * list. */ static void -cancel_indirdep(indirdep, bp, inodedep, freeblks) +cancel_indirdep(indirdep, bp, freeblks) struct indirdep *indirdep; struct buf *bp; - struct inodedep *inodedep; struct freeblks *freeblks; { struct allocindir *aip; @@ -8924,24 +9589,38 @@ static void */ if (indirdep->ir_state & GOINGAWAY) panic("cancel_indirdep: already gone"); - if (indirdep->ir_state & ONDEPLIST) { - indirdep->ir_state &= ~ONDEPLIST; + if ((indirdep->ir_state & DEPCOMPLETE) == 0) { + indirdep->ir_state |= DEPCOMPLETE; LIST_REMOVE(indirdep, ir_next); } indirdep->ir_state |= GOINGAWAY; VFSTOUFS(indirdep->ir_list.wk_mp)->um_numindirdeps += 1; + /* + * Pass in bp for blocks still have journal writes + * pending so we can cancel them on their own. + */ while ((aip = LIST_FIRST(&indirdep->ir_deplisthd)) != 0) - cancel_allocindir(aip, inodedep, freeblks); + cancel_allocindir(aip, bp, freeblks, 0); while ((aip = LIST_FIRST(&indirdep->ir_donehd)) != 0) - cancel_allocindir(aip, inodedep, freeblks); + cancel_allocindir(aip, NULL, freeblks, 0); while ((aip = LIST_FIRST(&indirdep->ir_writehd)) != 0) - cancel_allocindir(aip, inodedep, freeblks); + cancel_allocindir(aip, NULL, freeblks, 0); while ((aip = LIST_FIRST(&indirdep->ir_completehd)) != 0) - cancel_allocindir(aip, inodedep, freeblks); - bcopy(bp->b_data, indirdep->ir_savebp->b_data, bp->b_bcount); + cancel_allocindir(aip, NULL, freeblks, 0); + /* + * If there are pending partial truncations we need to keep the + * old block copy around until they complete. This is because + * the current b_data is not a perfect superset of the available + * blocks. + */ + if (TAILQ_EMPTY(&indirdep->ir_trunc)) + bcopy(bp->b_data, indirdep->ir_savebp->b_data, bp->b_bcount); + else + bcopy(bp->b_data, indirdep->ir_saveddata, bp->b_bcount); WORKLIST_REMOVE(&indirdep->ir_list); WORKLIST_INSERT(&indirdep->ir_savebp->b_dep, &indirdep->ir_list); - indirdep->ir_savebp = NULL; + indirdep->ir_bp = NULL; + indirdep->ir_freeblks = freeblks; } /* @@ -8952,10 +9631,8 @@ free_indirdep(indirdep) struct indirdep *indirdep; { - KASSERT(LIST_EMPTY(&indirdep->ir_jwork), - ("free_indirdep: Journal work not empty.")); - KASSERT(LIST_EMPTY(&indirdep->ir_jnewblkhd), - ("free_indirdep: Journal new block list not empty.")); + KASSERT(TAILQ_EMPTY(&indirdep->ir_trunc), + ("free_indirdep: Indir trunc list not empty.")); KASSERT(LIST_EMPTY(&indirdep->ir_completehd), ("free_indirdep: Complete head not empty.")); KASSERT(LIST_EMPTY(&indirdep->ir_writehd), @@ -8964,10 +9641,8 @@ free_indirdep(indirdep) ("free_indirdep: done head not empty.")); KASSERT(LIST_EMPTY(&indirdep->ir_deplisthd), ("free_indirdep: deplist head not empty.")); - KASSERT(indirdep->ir_savebp == NULL, - ("free_indirdep: %p ir_savebp != NULL", indirdep)); - KASSERT((indirdep->ir_state & ONDEPLIST) == 0, - ("free_indirdep: %p still on deplist.", indirdep)); + KASSERT((indirdep->ir_state & DEPCOMPLETE), + ("free_indirdep: %p still on newblk list.", indirdep)); if (indirdep->ir_state & ONWORKLIST) WORKLIST_REMOVE(&indirdep->ir_list); WORKITEM_FREE(indirdep, D_INDIRDEP); @@ -8984,6 +9659,7 @@ initiate_write_indirdep(indirdep, bp) struct buf *bp; { + indirdep->ir_state |= IOSTARTED; if (indirdep->ir_state & GOINGAWAY) panic("disk_io_initiation: indirdep gone"); @@ -8991,15 +9667,18 @@ initiate_write_indirdep(indirdep, bp) * If there are no remaining dependencies, this will be writing * the real pointers. */ - if (LIST_EMPTY(&indirdep->ir_deplisthd)) + if (LIST_EMPTY(&indirdep->ir_deplisthd) && + TAILQ_EMPTY(&indirdep->ir_trunc)) return; /* * Replace up-to-date version with safe version. */ - FREE_LOCK(&lk); - indirdep->ir_saveddata = malloc(bp->b_bcount, M_INDIRDEP, - M_SOFTDEP_FLAGS); - ACQUIRE_LOCK(&lk); + if (indirdep->ir_saveddata == NULL) { + FREE_LOCK(&lk); + indirdep->ir_saveddata = malloc(bp->b_bcount, M_INDIRDEP, + M_SOFTDEP_FLAGS); + ACQUIRE_LOCK(&lk); + } indirdep->ir_state &= ~ATTACHED; indirdep->ir_state |= UNDONE; bcopy(bp->b_data, indirdep->ir_saveddata, bp->b_bcount); @@ -9066,11 +9745,11 @@ softdep_setup_blkfree(mp, bp, blkno, frags, wkhd) int frags; struct workhead *wkhd; { + struct bmsafemap *bmsafemap; struct jnewblk *jnewblk; - struct worklist *wk, *wkn; + struct worklist *wk; + struct fs *fs; #ifdef SUJ_DEBUG - struct bmsafemap *bmsafemap; - struct fs *fs; uint8_t *blksfree; struct cg *cgp; ufs2_daddr_t jstart; @@ -9081,25 +9760,29 @@ softdep_setup_blkfree(mp, bp, blkno, frags, wkhd) #endif ACQUIRE_LOCK(&lk); + /* Lookup the bmsafemap so we track when it is dirty. */ + fs = VFSTOUFS(mp)->um_fs; + bmsafemap = bmsafemap_lookup(mp, bp, dtog(fs, blkno)); /* * Detach any jnewblks which have been canceled. They must linger * until the bitmap is cleared again by ffs_blkfree() to prevent * an unjournaled allocation from hitting the disk. */ if (wkhd) { - LIST_FOREACH_SAFE(wk, wkhd, wk_list, wkn) { - if (wk->wk_type != D_JNEWBLK) + while ((wk = LIST_FIRST(wkhd)) != NULL) { + WORKLIST_REMOVE(wk); + if (wk->wk_type != D_JNEWBLK) { + WORKLIST_INSERT(&bmsafemap->sm_freehd, wk); continue; + } jnewblk = WK_JNEWBLK(wk); KASSERT(jnewblk->jn_state & GOINGAWAY, ("softdep_setup_blkfree: jnewblk not canceled.")); - WORKLIST_REMOVE(wk); #ifdef SUJ_DEBUG /* * Assert that this block is free in the bitmap * before we discard the jnewblk. */ - fs = VFSTOUFS(mp)->um_fs; cgp = (struct cg *)bp->b_data; blksfree = cg_blksfree(cgp); bno = dtogd(fs, jnewblk->jn_blkno); @@ -9117,12 +9800,6 @@ softdep_setup_blkfree(mp, bp, blkno, frags, wkhd) wk->wk_state |= COMPLETE | ATTACHED; free_jnewblk(jnewblk); } - /* - * The buf must be locked by the caller otherwise these could - * be added while it's being written and the write would - * complete them before they made it to disk. - */ - jwork_move(&bp->b_dep, wkhd); } #ifdef SUJ_DEBUG @@ -9242,6 +9919,8 @@ initiate_write_bmsafemap(bmsafemap, bp) inodedep, id_deps); LIST_SWAP(&bmsafemap->sm_newblkhd, &bmsafemap->sm_newblkwr, newblk, nb_deps); + LIST_SWAP(&bmsafemap->sm_freehd, &bmsafemap->sm_freewr, worklist, + wk_list); } /* @@ -9260,6 +9939,7 @@ softdep_disk_write_complete(bp) struct worklist *wk; struct worklist *owk; struct workhead reattach; + struct freeblks *freeblks; struct buf *sbp; /* @@ -9277,6 +9957,7 @@ softdep_disk_write_complete(bp) ACQUIRE_LOCK(&lk); while ((wk = LIST_FIRST(&bp->b_dep)) != NULL) { WORKLIST_REMOVE(wk); + dep_write[wk->wk_type]++; if (wk == owk) panic("duplicate worklist: %p\n", wk); owk = wk; @@ -9318,7 +9999,9 @@ softdep_disk_write_complete(bp) case D_FREEBLKS: wk->wk_state |= COMPLETE; - if ((wk->wk_state & ALLCOMPLETE) == ALLCOMPLETE) + freeblks = WK_FREEBLKS(wk); + if ((wk->wk_state & ALLCOMPLETE) == ALLCOMPLETE && + LIST_EMPTY(&freeblks->fb_jfreeblkhd)) add_to_worklist(wk, 1); continue; @@ -9326,10 +10009,6 @@ softdep_disk_write_complete(bp) handle_written_freework(WK_FREEWORK(wk)); break; - case D_FREEDEP: - free_freedep(WK_FREEDEP(wk)); - continue; - case D_JSEGDEP: free_jsegdep(WK_JSEGDEP(wk)); continue; @@ -9459,7 +10138,11 @@ handle_allocindir_partdone(aip) return; indirdep = aip->ai_indirdep; LIST_REMOVE(aip, ai_next); - if (indirdep->ir_state & UNDONE) { + /* + * Don't set a pointer while the buffer is undergoing IO or while + * we have active truncations. + */ + if (indirdep->ir_state & UNDONE || !TAILQ_EMPTY(&indirdep->ir_trunc)) { LIST_INSERT_HEAD(&indirdep->ir_donehd, aip, ai_next); return; } @@ -9490,6 +10173,12 @@ handle_jwork(wkhd) case D_JSEGDEP: free_jsegdep(WK_JSEGDEP(wk)); continue; + case D_FREEDEP: + free_freedep(WK_FREEDEP(wk)); + continue; + case D_FREEWORK: + handle_written_freework(WK_FREEWORK(wk)); + continue; default: panic("handle_jwork: Unknown type %s\n", TYPENAME(wk->wk_type)); @@ -9852,21 +10541,26 @@ handle_written_indirdep(indirdep, bp, bpp) struct buf **bpp; { struct allocindir *aip; + struct buf *sbp; int chgs; if (indirdep->ir_state & GOINGAWAY) - panic("disk_write_complete: indirdep gone"); + panic("handle_written_indirdep: indirdep gone"); + if ((indirdep->ir_state & IOSTARTED) == 0) + panic("handle_written_indirdep: IO not started"); chgs = 0; /* * If there were rollbacks revert them here. */ if (indirdep->ir_saveddata) { bcopy(indirdep->ir_saveddata, bp->b_data, bp->b_bcount); - free(indirdep->ir_saveddata, M_INDIRDEP); - indirdep->ir_saveddata = 0; + if (TAILQ_EMPTY(&indirdep->ir_trunc)) { + free(indirdep->ir_saveddata, M_INDIRDEP); + indirdep->ir_saveddata = 0; + } chgs = 1; } - indirdep->ir_state &= ~UNDONE; + indirdep->ir_state &= ~(UNDONE | IOSTARTED); indirdep->ir_state |= ATTACHED; /* * Move allocindirs with written pointers to the completehd if @@ -9878,6 +10572,7 @@ handle_written_indirdep(indirdep, bp, bpp) if ((indirdep->ir_state & DEPCOMPLETE) == 0) { LIST_INSERT_HEAD(&indirdep->ir_completehd, aip, ai_next); + /* We could initiate freefrag processing here. */ continue; } free_newblk(&aip->ai_block); @@ -9886,50 +10581,42 @@ handle_written_indirdep(indirdep, bp, bpp) * Move allocindirs that have finished dependency processing from * the done list to the write list after updating the pointers. */ - while ((aip = LIST_FIRST(&indirdep->ir_donehd)) != 0) { - handle_allocindir_partdone(aip); - if (aip == LIST_FIRST(&indirdep->ir_donehd)) - panic("disk_write_complete: not gone"); - chgs = 1; + if (TAILQ_EMPTY(&indirdep->ir_trunc)) { + while ((aip = LIST_FIRST(&indirdep->ir_donehd)) != 0) { + handle_allocindir_partdone(aip); + if (aip == LIST_FIRST(&indirdep->ir_donehd)) + panic("disk_write_complete: not gone"); + chgs = 1; + } } /* - * If this indirdep has been detached from its newblk during - * I/O we need to keep this dep attached to the buffer so - * deallocate_dependencies can find it and properly resolve - * any outstanding dependencies. + * Preserve the indirdep if there were any changes or if it is not + * yet valid on disk. */ - if ((indirdep->ir_state & (ONDEPLIST | DEPCOMPLETE)) == 0) - chgs = 1; - if ((bp->b_flags & B_DELWRI) == 0) + if (chgs) { stat_indir_blk_ptrs++; + bdirty(bp); + return (1); + } /* * If there were no changes we can discard the savedbp and detach * ourselves from the buf. We are only carrying completed pointers * in this case. */ - if (chgs == 0) { - struct buf *sbp; - - sbp = indirdep->ir_savebp; - sbp->b_flags |= B_INVAL | B_NOCACHE; - indirdep->ir_savebp = NULL; - if (*bpp != NULL) - panic("handle_written_indirdep: bp already exists."); - *bpp = sbp; - } else - bdirty(bp); + sbp = indirdep->ir_savebp; + sbp->b_flags |= B_INVAL | B_NOCACHE; + indirdep->ir_savebp = NULL; + indirdep->ir_bp = NULL; + if (*bpp != NULL) + panic("handle_written_indirdep: bp already exists."); + *bpp = sbp; /* - * If there are no fresh dependencies and none waiting on writes - * we can free the indirdep. + * The indirdep may not be freed until its parent points at it. */ - if ((indirdep->ir_state & DEPCOMPLETE) && chgs == 0) { - if (indirdep->ir_state & ONDEPLIST) - LIST_REMOVE(indirdep, ir_next); + if (indirdep->ir_state & DEPCOMPLETE) free_indirdep(indirdep); - return (0); - } - return (chgs); + return (0); } /* @@ -9974,6 +10661,7 @@ handle_written_bmsafemap(bmsafemap, bp) struct inodedep *inodedep; struct jaddref *jaddref, *jatmp; struct jnewblk *jnewblk, *jntmp; + struct ufsmount *ump; uint8_t *inosused; uint8_t *blksfree; struct cg *cgp; @@ -9985,9 +10673,15 @@ handle_written_bmsafemap(bmsafemap, bp) if ((bmsafemap->sm_state & IOSTARTED) == 0) panic("initiate_write_bmsafemap: Not started\n"); + ump = VFSTOUFS(bmsafemap->sm_list.wk_mp); chgs = 0; bmsafemap->sm_state &= ~IOSTARTED; /* + * Release journal work that was waiting on the write. + */ + handle_jwork(&bmsafemap->sm_freewr); + + /* * Restore unwritten inode allocation pending jaddref writes. */ if (!LIST_EMPTY(&bmsafemap->sm_jaddrefhd)) { @@ -10063,16 +10757,17 @@ handle_written_bmsafemap(bmsafemap, bp) LIST_REMOVE(inodedep, id_deps); inodedep->id_bmsafemap = NULL; } - if (LIST_EMPTY(&bmsafemap->sm_jaddrefhd) && + LIST_REMOVE(bmsafemap, sm_next); + if (chgs == 0 && LIST_EMPTY(&bmsafemap->sm_jaddrefhd) && LIST_EMPTY(&bmsafemap->sm_jnewblkhd) && LIST_EMPTY(&bmsafemap->sm_newblkhd) && - LIST_EMPTY(&bmsafemap->sm_inodedephd)) { - if (chgs) - bdirty(bp); + LIST_EMPTY(&bmsafemap->sm_inodedephd) && + LIST_EMPTY(&bmsafemap->sm_freehd)) { LIST_REMOVE(bmsafemap, sm_hash); WORKITEM_FREE(bmsafemap, D_BMSAFEMAP); return (0); } + LIST_INSERT_HEAD(&ump->softdep_dirtycg, bmsafemap, sm_next); bdirty(bp); return (1); } @@ -10119,7 +10814,7 @@ free_pagedep(pagedep) { int i; - if (pagedep->pd_state & (NEWBLOCK | ONWORKLIST)) + if (pagedep->pd_state & NEWBLOCK) return; for (i = 0; i < DAHASHSZ; i++) if (!LIST_EMPTY(&pagedep->pd_diraddhd[i])) @@ -10130,6 +10825,8 @@ free_pagedep(pagedep) return; if (!LIST_EMPTY(&pagedep->pd_pendinghd)) return; + if (pagedep->pd_state & ONWORKLIST) + WORKLIST_REMOVE(&pagedep->pd_list); LIST_REMOVE(pagedep, pd_hash); WORKITEM_FREE(pagedep, D_PAGEDEP); } @@ -10655,6 +11352,44 @@ restart: BO_UNLOCK(bo); } +static void +sync_cgs(mp, waitfor) + struct mount *mp; + int waitfor; +{ + struct bmsafemap *bmsafemap; + struct bmsafemap *sentinal; + struct ufsmount *ump; + struct buf *bp; + + sentinal = malloc(sizeof(*sentinal), M_BMSAFEMAP, M_ZERO | M_WAITOK); + sentinal->sm_cg = -1; + ump = VFSTOUFS(mp); + ACQUIRE_LOCK(&lk); + LIST_INSERT_HEAD(&ump->softdep_dirtycg, sentinal, sm_next); + for (bmsafemap = LIST_NEXT(sentinal, sm_next); bmsafemap != NULL; + bmsafemap = LIST_NEXT(sentinal, sm_next)) { + /* Skip sentinals and cgs with no work to release. */ + if (bmsafemap->sm_cg == -1 || + LIST_EMPTY(&bmsafemap->sm_freehd)) { + LIST_REMOVE(sentinal, sm_next); + LIST_INSERT_AFTER(bmsafemap, sentinal, sm_next); + continue; + } + bp = getdirtybuf(bmsafemap->sm_buf, &lk, waitfor); + if (bp == NULL) + continue; + LIST_REMOVE(sentinal, sm_next); + LIST_INSERT_AFTER(bmsafemap, sentinal, sm_next); + FREE_LOCK(&lk); + bwrite(bp); + ACQUIRE_LOCK(&lk); + } + LIST_REMOVE(sentinal, sm_next); + FREE_LOCK(&lk); + free(sentinal, M_BMSAFEMAP); +} + /* * This routine is called when we are trying to synchronously flush a * file. This routine must eliminate any filesystem metadata dependencies @@ -10664,6 +11399,8 @@ restart: int softdep_sync_metadata(struct vnode *vp) { + struct indirdep *indirdep; + struct freework *freework; struct pagedep *pagedep; struct allocindir *aip; struct newblk *newblk; @@ -10678,7 +11415,8 @@ softdep_sync_metadata(struct vnode *vp) * Ensure that any direct block dependencies have been cleared. */ ACQUIRE_LOCK(&lk); - if ((error = flush_inodedep_deps(vp->v_mount, VTOI(vp)->i_number))) { + if ((error = flush_inodedep_deps(vp, vp->v_mount, + VTOI(vp)->i_number))) { FREE_LOCK(&lk); return (error); } @@ -10754,9 +11492,45 @@ loop: case D_INDIRDEP: restart: + indirdep = WK_INDIRDEP(wk); + TAILQ_FOREACH(freework, &indirdep->ir_trunc, fw_next) { + /* + * If the freework is on a worklist it is + * simply waiting for softdep flush to + * execute it. + */ + if (freework->fw_state & ONWORKLIST) { + if (freework->fw_state & ONDEPLIST) + WORKLIST_REMOVE( + &freework->fw_list); + else + remove_from_worklist( + &freework->fw_list); + freework->fw_state &= ~ONDEPLIST; + } else + freework = NULL; + /* + * Release the buf so that freework_freeblock + * has a chance to succeed. + */ + FREE_LOCK(&lk); + BUF_NOREC(bp); + bqrelse(bp); + if (freework) { + ACQUIRE_LOCK(&lk); + handle_workitem_indirblk(freework); + FREE_LOCK(&lk); + goto top; + } + /* + * We may need to flush cgs for the freework + * to finish. + */ + sync_cgs(vp->v_mount, MNT_WAIT); + goto top; + } - LIST_FOREACH(aip, - &WK_INDIRDEP(wk)->ir_deplisthd, ai_next) { + LIST_FOREACH(aip, &indirdep->ir_deplisthd, ai_next) { newblk = (struct newblk *)aip; if (newblk->nb_jnewblk != NULL) { stat_jwait_newblk++; @@ -10851,11 +11625,58 @@ loop: } /* + * Make sure that all truncations have been started so that if we + * discover any lingering dependencies on indirdeps we can successfully + * flush them. + */ +static int +flush_trunclist(vp, inodedep, waitfor, errorp) + struct vnode *vp; + struct inodedep *inodedep; + int waitfor; + int *errorp; +{ + struct freeblks *freeblks; + + TAILQ_FOREACH(freeblks, &inodedep->id_freeblklst, fb_next) { + if (!LIST_EMPTY(&freeblks->fb_jfreeblkhd)) { + stat_jwait_freeblks++; + jwait(&LIST_FIRST(&freeblks->fb_jfreeblkhd)->jf_list); + return (1); + } + /* Freeblks is waiting on a inode write. */ + if ((freeblks->fb_state & COMPLETE) == 0) { + FREE_LOCK(&lk); + ffs_update(vp, 1); + goto restart; + } + /* + * If the truncation is complete it may be waiting for the vnode + * lock to update i_blocks. It may also simply be waiting on + * a busy softdep thread to start truncation. + */ + if ((freeblks->fb_state & (ONWORKLIST | ALLCOMPLETE)) == + (ONWORKLIST | ALLCOMPLETE)) { + remove_from_worklist(&freeblks->fb_list); + FREE_LOCK(&lk); + handle_workitem_freeblocks(freeblks, 0); + goto restart; + } + } + return (0); + +restart: + ACQUIRE_LOCK(&lk); + return (1); +} + +/* * Flush the dependencies associated with an inodedep. * Called with splbio blocked. */ static int -flush_inodedep_deps(mp, ino) +flush_inodedep_deps(vp, mp, ino) + struct vnode *vp; struct mount *mp; ino_t ino; { @@ -10895,7 +11716,8 @@ restart: if (flush_deplist(&inodedep->id_inoupdt, waitfor, &error) || flush_deplist(&inodedep->id_newinoupdt, waitfor, &error) || flush_deplist(&inodedep->id_extupdt, waitfor, &error) || - flush_deplist(&inodedep->id_newextupdt, waitfor, &error)) + flush_deplist(&inodedep->id_newextupdt, waitfor, &error) || + flush_trunclist(vp, inodedep, waitfor, &error)) continue; /* * If pass2, we are done, otherwise do pass 2. @@ -11338,6 +12160,7 @@ retry: UFS_UNLOCK(ump); ACQUIRE_LOCK(&lk); process_removes(vp); + process_truncates(vp); if (ump->softdep_on_worklist > 0 && process_worklist_item(UFSTOVFS(ump), LK_NOWAIT) != -1) { stat_worklist_push += 1; @@ -11363,24 +12186,14 @@ retry: UFS_UNLOCK(ump); MNT_ILOCK(mp); MNT_VNODE_FOREACH(lvp, mp, mvp) { - UFS_LOCK(ump); - if (ump->softdep_on_worklist > 0) { - UFS_UNLOCK(ump); - MNT_VNODE_FOREACH_ABORT_ILOCKED(mp, mvp); - MNT_IUNLOCK(mp); - UFS_LOCK(ump); - stat_cleanup_retries += 1; - goto retry; - } - UFS_UNLOCK(ump); VI_LOCK(lvp); - if (TAILQ_FIRST(&lvp->v_bufobj.bo_dirty.bv_hd) == 0 || - VOP_ISLOCKED(lvp) != 0) { + if (TAILQ_FIRST(&lvp->v_bufobj.bo_dirty.bv_hd) == 0) { VI_UNLOCK(lvp); continue; } MNT_IUNLOCK(mp); - if (vget(lvp, LK_EXCLUSIVE | LK_INTERLOCK, curthread)) { + if (vget(lvp, LK_EXCLUSIVE | LK_INTERLOCK | LK_NOWAIT, + curthread)) { MNT_ILOCK(mp); continue; } @@ -11394,8 +12207,17 @@ retry: MNT_ILOCK(mp); } MNT_IUNLOCK(mp); + lvp = ump->um_devvp; + if (vn_lock(lvp, LK_EXCLUSIVE | LK_NOWAIT) == 0) { + VOP_FSYNC(lvp, MNT_NOWAIT, curthread); + VOP_UNLOCK(lvp, 0); + } + UFS_LOCK(ump); + if (ump->softdep_on_worklist > 0) { + stat_cleanup_retries += 1; + goto retry; + } stat_cleanup_failures += 1; - UFS_LOCK(ump); } if (time_second - starttime > stat_cleanup_high_delay) stat_cleanup_high_delay = time_second - starttime; @@ -11664,6 +12486,7 @@ softdep_count_dependencies(bp, wantcount) { struct worklist *wk; struct bmsafemap *bmsafemap; + struct freework *freework; struct inodedep *inodedep; struct indirdep *indirdep; struct freeblks *freeblks; @@ -11711,6 +12534,13 @@ softdep_count_dependencies(bp, wantcount) case D_INDIRDEP: indirdep = WK_INDIRDEP(wk); + TAILQ_FOREACH(freework, &indirdep->ir_trunc, fw_next) { + /* indirect truncation dependency */ + retval += 1; + if (!wantcount) + goto out; + } + LIST_FOREACH(aip, &indirdep->ir_deplisthd, ai_next) { /* indirect block pointer dependency */ retval += 1; Index: /usr/src/sys/ufs/ffs/ffs_alloc.c =================================================================== --- /usr/src/sys/ufs/ffs/ffs_alloc.c (revision 221878) +++ /usr/src/sys/ufs/ffs/ffs_alloc.c (working copy) @@ -217,7 +217,7 @@ nospace: (void) chkdq(ip, -btodb(size), cred, FORCE); UFS_LOCK(ump); #endif - if (reclaimed == 0) { + if (reclaimed == 0 && (flags & IO_BUFLOCKED) == 0) { reclaimed = 1; softdep_request_cleanup(fs, ITOV(ip), cred, FLUSH_BLOCKS_WAIT); goto retry; @@ -418,15 +418,15 @@ nospace: /* * no space available */ - if (reclaimed == 0) { + if (reclaimed == 0 && (flags & IO_BUFLOCKED) == 0) { reclaimed = 1; - softdep_request_cleanup(fs, vp, cred, FLUSH_BLOCKS_WAIT); UFS_UNLOCK(ump); if (bp) { brelse(bp); bp = NULL; } UFS_LOCK(ump); + softdep_request_cleanup(fs, vp, cred, FLUSH_BLOCKS_WAIT); goto retry; } UFS_UNLOCK(ump); Index: /usr/src/sys/ufs/ffs/ffs_extern.h =================================================================== --- /usr/src/sys/ufs/ffs/ffs_extern.h (revision 221878) +++ /usr/src/sys/ufs/ffs/ffs_extern.h (working copy) @@ -107,7 +107,6 @@ extern struct vop_vector ffs_fifoops2; int softdep_check_suspend(struct mount *, struct vnode *, int, int, int, int); -int softdep_complete_trunc(struct vnode *, void *); void softdep_get_depcounts(struct mount *, int *, int *); void softdep_initialize(void); void softdep_uninitialize(void); @@ -139,7 +138,6 @@ void softdep_setup_blkfree(struct mount *, struct void softdep_setup_inofree(struct mount *, struct buf *, ino_t, struct workhead *); void softdep_setup_sbupdate(struct ufsmount *, struct fs *, struct buf *); -void *softdep_setup_trunc(struct vnode *vp, off_t length, int flags); void softdep_fsync_mountdev(struct vnode *); int softdep_sync_metadata(struct vnode *); int softdep_process_worklist(struct mount *, int); @@ -147,7 +145,9 @@ int softdep_fsync(struct vnode *); int softdep_waitidle(struct mount *); int softdep_prealloc(struct vnode *, int); int softdep_journal_lookup(struct mount *, struct vnode **); +void softdep_journal_freeblocks(struct inode *, struct ucred *, off_t, int); + /* * Things to request flushing in softdep_request_cleanup() */ Index: /usr/src/sys/ufs/ffs/softdep.h =================================================================== --- /usr/src/sys/ufs/ffs/softdep.h (revision 221878) +++ /usr/src/sys/ufs/ffs/softdep.h (working copy) @@ -127,7 +127,7 @@ #define DIRCHG 0x000080 /* diradd, dirrem only */ #define GOINGAWAY 0x000100 /* indirdep, jremref only */ #define IOSTARTED 0x000200 /* inodedep, pagedep, bmsafemap only */ -#define UNUSED400 0x000400 /* currently available. */ +#define DELAYEDFREE 0x000400 /* allocindirect free delayed. */ #define NEWBLOCK 0x000800 /* pagedep, jaddref only */ #define INPROGRESS 0x001000 /* dirrem, freeblks, freefrag, freefile only */ #define UFS1FMT 0x002000 /* indirdep only */ @@ -215,8 +215,10 @@ LIST_HEAD(jmvrefhd, jmvref); LIST_HEAD(jnewblkhd, jnewblk); LIST_HEAD(jfreeblkhd, jfreeblk); LIST_HEAD(freeworkhd, freework); +TAILQ_HEAD(freeworklst, freework); TAILQ_HEAD(jseglst, jseg); TAILQ_HEAD(inoreflst, inoref); +TAILQ_HEAD(freeblklst, freeblks); /* * The "pagedep" structure tracks the various dependencies related to @@ -321,6 +323,7 @@ struct inodedep { struct allocdirectlst id_newinoupdt; /* updates when inode written */ struct allocdirectlst id_extupdt; /* extdata updates pre-inode write */ struct allocdirectlst id_newextupdt; /* extdata updates at ino write */ + struct freeblklst id_freeblklst; /* List of partial truncates. */ union { struct ufs1_dinode *idu_savedino1; /* saved ufs1_dinode contents */ struct ufs2_dinode *idu_savedino2; /* saved ufs2_dinode contents */ @@ -342,8 +345,9 @@ struct inodedep { struct bmsafemap { struct worklist sm_list; /* cylgrp buffer */ # define sm_state sm_list.wk_state + LIST_ENTRY(bmsafemap) sm_hash; /* Hash links. */ + LIST_ENTRY(bmsafemap) sm_next; /* Mount list. */ int sm_cg; - LIST_ENTRY(bmsafemap) sm_hash; /* Hash links. */ struct buf *sm_buf; /* associated buffer */ struct allocdirecthd sm_allocdirecthd; /* allocdirect deps */ struct allocdirecthd sm_allocdirectwr; /* writing allocdirect deps */ @@ -355,6 +359,8 @@ struct bmsafemap { struct newblkhd sm_newblkwr; /* writing newblk deps */ struct jaddrefhd sm_jaddrefhd; /* Pending inode allocations. */ struct jnewblkhd sm_jnewblkhd; /* Pending block allocations. */ + struct workhead sm_freehd; /* Freedep deps. */ + struct workhead sm_freewr; /* Written freedeps. */ }; /* @@ -442,14 +448,15 @@ struct indirdep { struct worklist ir_list; /* buffer holding indirect block */ # define ir_state ir_list.wk_state /* indirect block pointer state */ LIST_ENTRY(indirdep) ir_next; /* alloc{direct,indir} list */ + TAILQ_HEAD(, freework) ir_trunc; /* List of truncations. */ caddr_t ir_saveddata; /* buffer cache contents */ struct buf *ir_savebp; /* buffer holding safe copy */ + struct buf *ir_bp; /* buffer holding live copy */ struct allocindirhd ir_completehd; /* waiting for indirdep complete */ struct allocindirhd ir_writehd; /* Waiting for the pointer write. */ struct allocindirhd ir_donehd; /* done waiting to update safecopy */ struct allocindirhd ir_deplisthd; /* allocindir deps for this block */ - struct jnewblkhd ir_jnewblkhd; /* Canceled block allocations. */ - struct workhead ir_jwork; /* Journal work pending. */ + struct freeblks *ir_freeblks; /* Freeblks that frees this indir. */ }; /* @@ -471,6 +478,7 @@ struct allocindir { LIST_ENTRY(allocindir) ai_next; /* indirdep's list of allocindir's */ struct indirdep *ai_indirdep; /* address of associated indirdep */ ufs2_daddr_t ai_oldblkno; /* old value of block pointer */ + ufs_lbn_t ai_lbn; /* Logical block number. */ int ai_offset; /* Pointer offset in parent. */ }; #define ai_newblkno ai_block.nb_newblkno @@ -516,13 +524,18 @@ struct freefrag { struct freeblks { struct worklist fb_list; /* id_inowait or delayed worklist */ # define fb_state fb_list.wk_state /* inode and dirty block state */ + TAILQ_ENTRY(freeblks) fb_next; /* List of inode truncates. */ struct jfreeblkhd fb_jfreeblkhd; /* Journal entries pending */ struct workhead fb_freeworkhd; /* Work items pending */ struct workhead fb_jwork; /* Journal work pending */ - ino_t fb_previousinum; /* inode of previous owner of blocks */ + struct jtrunc *fb_jtrunc; /* Journal truncation record. */ + struct vnode *fb_devvp; /* filesystem device vnode */ + uint64_t fb_modrev; /* Inode revision at start of trunc. */ + off_t fb_len; /* Length we're truncating to. */ + ufs2_daddr_t fb_chkcnt; /* Expected blks released. */ + ufs2_daddr_t fb_freecnt; /* Actual blocks released. */ + ino_t fb_inum; /* inode owner of blocks */ uid_t fb_uid; /* uid of previous owner of blocks */ - struct vnode *fb_devvp; /* filesystem device vnode */ - ufs2_daddr_t fb_chkcnt; /* used to check cnt of blks released */ int fb_ref; /* Children outstanding. */ }; @@ -538,16 +551,18 @@ struct freeblks { struct freework { struct worklist fw_list; /* Delayed worklist. */ # define fw_state fw_list.wk_state - LIST_ENTRY(freework) fw_next; /* For seg journal list. */ - struct jnewblk *fw_jnewblk; /* Journal entry to cancel. */ + LIST_ENTRY(freework) fw_segs; /* Seg list. */ + TAILQ_ENTRY(freework) fw_next; /* Hash/Trunc list. */ + struct jnewblk *fw_jnewblk; /* Journal entry to cancel. */ struct freeblks *fw_freeblks; /* Root of operation. */ struct freework *fw_parent; /* Parent indirect. */ + struct indirdep *fw_indir; /* indirect block. */ ufs2_daddr_t fw_blkno; /* Our block #. */ ufs_lbn_t fw_lbn; /* Original lbn before free. */ - int fw_frags; /* Number of frags. */ - int fw_ref; /* Number of children out. */ - int fw_off; /* Current working position. */ - struct workhead fw_jwork; /* Journal work pending. */ + uint16_t fw_frags; /* Number of frags. */ + uint16_t fw_ref; /* Number of children out. */ + uint16_t fw_off; /* Current working position. */ + uint16_t fw_start; /* Start of partial truncate. */ }; /* @@ -674,6 +689,7 @@ struct dirrem { LIST_ENTRY(dirrem) dm_inonext; /* inodedep's list of dirrem's */ struct jremrefhd dm_jremrefhd; /* Pending remove reference deps. */ ino_t dm_oldinum; /* inum of the removed dir entry */ + doff_t dm_offset; /* offset of removed dir entry in blk */ union { struct pagedep *dmu_pagedep; /* pagedep dependency for remove */ ino_t dmu_dirinum; /* parent inode number (for rmdir) */ @@ -707,7 +723,7 @@ struct dirrem { */ struct newdirblk { struct worklist db_list; /* id_inowait or pg_newdirblk */ -# define db_state db_list.wk_state /* unused */ +# define db_state db_list.wk_state struct pagedep *db_pagedep; /* associated pagedep */ struct workhead db_mkdir; }; @@ -807,7 +823,6 @@ struct jnewblk { # define jn_state jn_list.wk_state struct jsegdep *jn_jsegdep; /* Will track our journal record. */ LIST_ENTRY(jnewblk) jn_deps; /* Jnewblks on sm_jnewblkhd. */ - LIST_ENTRY(jnewblk) jn_indirdeps; /* Jnewblks on ir_jnewblkhd. */ struct worklist *jn_dep; /* Dependency to ref completed seg. */ ino_t jn_ino; /* Ino to which allocated. */ ufs_lbn_t jn_lbn; /* Lbn to which allocated. */ @@ -831,6 +846,7 @@ struct jfreeblk { ufs_lbn_t jf_lbn; /* Lbn from which blocks freed. */ ufs2_daddr_t jf_blkno; /* Blkno being freed. */ int jf_frags; /* Number of frags being freed. */ + int jf_off; /* Offset into indir. */ }; /* @@ -850,14 +866,12 @@ struct jfreefrag { }; /* - * A "jtrunc" journals the intent to truncate an inode to a non-zero - * value. This is done synchronously prior to the synchronous partial - * truncation process. The jsegdep is not released until the truncation - * is complete and the truncated inode is fsync'd. + * A "jtrunc" journals the intent to truncate an inode's data or extent area. */ struct jtrunc { struct worklist jt_list; /* Linked to softdep_journal_pending. */ struct jsegdep *jt_jsegdep; /* Will track our journal record. */ + struct freeblks *jt_freeblks; /* The parent freeblks operation. */ ino_t jt_ino; /* Ino being truncated. */ off_t jt_size; /* Final file size. */ int jt_extsize; /* Final extent size. */ Index: /usr/src/sys/ufs/ffs/ffs_balloc.c =================================================================== --- /usr/src/sys/ufs/ffs/ffs_balloc.c (revision 221878) +++ /usr/src/sys/ufs/ffs/ffs_balloc.c (working copy) @@ -105,6 +105,7 @@ ffs_balloc_ufs1(struct vnode *vp, off_t startoffse ufs2_daddr_t *lbns_remfree, lbns[NIADDR + 1]; int unwindidx = -1; int saved_inbdflush; + int reclaimed; ip = VTOI(vp); dp = ip->i_din1; @@ -112,6 +113,7 @@ ffs_balloc_ufs1(struct vnode *vp, off_t startoffse ump = ip->i_ump; lbn = lblkno(fs, startoffset); size = blkoff(fs, startoffset) + size; + reclaimed = 0; if (size > fs->fs_bsize) panic("ffs_balloc_ufs1: blk too big"); *bpp = NULL; @@ -276,6 +278,7 @@ ffs_balloc_ufs1(struct vnode *vp, off_t startoffse /* * Fetch through the indirect blocks, allocating as necessary. */ +retry: for (i = 1;;) { error = bread(vp, indirs[i].in_lbn, (int)fs->fs_bsize, NOCRED, &bp); @@ -296,8 +299,15 @@ ffs_balloc_ufs1(struct vnode *vp, off_t startoffse if (pref == 0) pref = ffs_blkpref_ufs1(ip, lbn, 0, (ufs1_daddr_t *)0); if ((error = ffs_alloc(ip, lbn, pref, (int)fs->fs_bsize, - flags, cred, &newb)) != 0) { + flags | IO_BUFLOCKED, cred, &newb)) != 0) { brelse(bp); + if (++reclaimed == 1) { + UFS_LOCK(ump); + softdep_request_cleanup(fs, vp, cred, + FLUSH_BLOCKS_WAIT); + UFS_UNLOCK(ump); + goto retry; + } goto fail; } nb = newb; @@ -349,10 +359,17 @@ ffs_balloc_ufs1(struct vnode *vp, off_t startoffse if (nb == 0) { UFS_LOCK(ump); pref = ffs_blkpref_ufs1(ip, lbn, indirs[i].in_off, &bap[0]); - error = ffs_alloc(ip, - lbn, pref, (int)fs->fs_bsize, flags, cred, &newb); + error = ffs_alloc(ip, lbn, pref, (int)fs->fs_bsize, + flags | IO_BUFLOCKED, cred, &newb); if (error) { brelse(bp); + if (++reclaimed == 1) { + UFS_LOCK(ump); + softdep_request_cleanup(fs, vp, cred, + FLUSH_BLOCKS_WAIT); + UFS_UNLOCK(ump); + goto retry; + } goto fail; } nb = newb; @@ -506,6 +523,7 @@ ffs_balloc_ufs2(struct vnode *vp, off_t startoffse int deallocated, osize, nsize, num, i, error; int unwindidx = -1; int saved_inbdflush; + int reclaimed; ip = VTOI(vp); dp = ip->i_din2; @@ -513,6 +531,7 @@ ffs_balloc_ufs2(struct vnode *vp, off_t startoffse ump = ip->i_ump; lbn = lblkno(fs, startoffset); size = blkoff(fs, startoffset) + size; + reclaimed = 0; if (size > fs->fs_bsize) panic("ffs_balloc_ufs2: blk too big"); *bpp = NULL; @@ -787,6 +806,7 @@ ffs_balloc_ufs2(struct vnode *vp, off_t startoffse /* * Fetch through the indirect blocks, allocating as necessary. */ +retry: for (i = 1;;) { error = bread(vp, indirs[i].in_lbn, (int)fs->fs_bsize, NOCRED, &bp); @@ -807,8 +827,15 @@ ffs_balloc_ufs2(struct vnode *vp, off_t startoffse if (pref == 0) pref = ffs_blkpref_ufs2(ip, lbn, 0, (ufs2_daddr_t *)0); if ((error = ffs_alloc(ip, lbn, pref, (int)fs->fs_bsize, - flags, cred, &newb)) != 0) { + flags | IO_BUFLOCKED, cred, &newb)) != 0) { brelse(bp); + if (++reclaimed == 1) { + UFS_LOCK(ump); + softdep_request_cleanup(fs, vp, cred, + FLUSH_BLOCKS_WAIT); + UFS_UNLOCK(ump); + goto retry; + } goto fail; } nb = newb; @@ -860,10 +887,17 @@ ffs_balloc_ufs2(struct vnode *vp, off_t startoffse if (nb == 0) { UFS_LOCK(ump); pref = ffs_blkpref_ufs2(ip, lbn, indirs[i].in_off, &bap[0]); - error = ffs_alloc(ip, - lbn, pref, (int)fs->fs_bsize, flags, cred, &newb); + error = ffs_alloc(ip, lbn, pref, (int)fs->fs_bsize, + flags | IO_BUFLOCKED, cred, &newb); if (error) { brelse(bp); + if (++reclaimed == 1) { + UFS_LOCK(ump); + softdep_request_cleanup(fs, vp, cred, + FLUSH_BLOCKS_WAIT); + UFS_UNLOCK(ump); + goto retry; + } goto fail; } nb = newb; Index: /usr/src/sys/ufs/ffs/ffs_inode.c =================================================================== --- /usr/src/sys/ufs/ffs/ffs_inode.c (revision 221878) +++ /usr/src/sys/ufs/ffs/ffs_inode.c (working copy) @@ -151,12 +151,12 @@ ffs_truncate(vp, length, flags, cred, td) ufs2_daddr_t bn, lbn, lastblock, lastiblock[NIADDR], indir_lbn[NIADDR]; ufs2_daddr_t oldblks[NDADDR + NIADDR], newblks[NDADDR + NIADDR]; ufs2_daddr_t count, blocksreleased = 0, datablocks; - void *cookie; struct bufobj *bo; struct fs *fs; struct buf *bp; struct ufsmount *ump; - int needextclean, softdepslowdown, extblocks; + int softdeptrunc, journaltrunc; + int needextclean, extblocks; int offset, size, level, nblocks; int i, error, allerror; off_t osize; @@ -165,7 +165,6 @@ ffs_truncate(vp, length, flags, cred, td) fs = ip->i_fs; ump = ip->i_ump; bo = &vp->v_bufobj; - cookie = NULL; ASSERT_VOP_LOCKED(vp, "ffs_truncate"); @@ -191,7 +190,10 @@ ffs_truncate(vp, length, flags, cred, td) */ allerror = 0; needextclean = 0; - softdepslowdown = DOINGSOFTDEP(vp) && softdep_slowdown(vp); + softdeptrunc = 0; + journaltrunc = DOINGSUJ(vp); + if (journaltrunc == 0 && DOINGSOFTDEP(vp) && length == 0) + softdeptrunc = !softdep_slowdown(vp); extblocks = 0; datablocks = DIP(ip, i_blocks); if (fs->fs_magic == FS_UFS2_MAGIC && ip->i_din2->di_extsize > 0) { @@ -199,19 +201,24 @@ ffs_truncate(vp, length, flags, cred, td) datablocks -= extblocks; } if ((flags & IO_EXT) && extblocks > 0) { - if (DOINGSOFTDEP(vp) && softdepslowdown == 0 && length == 0) { + if (softdeptrunc) { if ((flags & IO_NORMAL) == 0) { softdep_setup_freeblocks(ip, length, IO_EXT); return (0); } needextclean = 1; + } else if (journaltrunc) { + if ((flags & IO_NORMAL) == 0) { + softdep_journal_freeblocks(ip, cred, length, + IO_EXT); + return (0); + } + needextclean = 1; } else { if (length != 0) panic("ffs_truncate: partial trunc of extdata"); if ((error = ffs_syncvnode(vp, MNT_WAIT)) != 0) return (error); - if (DOINGSUJ(vp)) - cookie = softdep_setup_trunc(vp, length, flags); osize = ip->i_din2->di_extsize; ip->i_din2->di_blocks -= extblocks; #ifdef QUOTA @@ -300,7 +307,7 @@ ffs_truncate(vp, length, flags, cred, td) goto out; } if (DOINGSOFTDEP(vp)) { - if (length > 0 || softdepslowdown) { + if (softdeptrunc == 0 && journaltrunc == 0) { /* * If a file is only partially truncated, then * we have to clean up the data structures @@ -312,27 +319,29 @@ ffs_truncate(vp, length, flags, cred, td) */ if ((error = ffs_syncvnode(vp, MNT_WAIT)) != 0) goto out; - /* - * We have to journal the truncation before we change - * any blocks so we don't leave the file partially - * truncated. - */ - if (DOINGSUJ(vp) && cookie == NULL) - cookie = softdep_setup_trunc(vp, length, flags); } else { #ifdef QUOTA - (void) chkdq(ip, -datablocks, NOCRED, 0); + /* XXX This is wrong for partial truncation. */ + if (length == 0) + (void) chkdq(ip, -datablocks, NOCRED, 0); #endif - softdep_setup_freeblocks(ip, length, needextclean ? - IO_EXT | IO_NORMAL : IO_NORMAL); + flags = IO_NORMAL | (needextclean ? IO_EXT: 0); + if (journaltrunc) + softdep_journal_freeblocks(ip, cred, length, + flags); + else + softdep_setup_freeblocks(ip, length, flags); ASSERT_VOP_LOCKED(vp, "ffs_truncate1"); - vinvalbuf(vp, needextclean ? 0 : V_NORMAL, 0, 0); + if (needextclean) + vinvalbuf(vp, V_ALT, 0, 0); + error = vtruncbuf(vp, cred, td, length, fs->fs_bsize); if (!needextclean) ffs_pages_remove(vp, 0, OFF_TO_IDX(lblktosize(fs, -extblocks))); - vnode_pager_setsize(vp, 0); - ip->i_flag |= IN_CHANGE | IN_UPDATE; - error = ffs_update(vp, 0); + if (journaltrunc == 0) { + ip->i_flag |= IN_CHANGE | IN_UPDATE; + error = ffs_update(vp, 0); + } goto out; } } @@ -411,13 +420,7 @@ ffs_truncate(vp, length, flags, cred, td) DIP_SET(ip, i_db[i], 0); } ip->i_flag |= IN_CHANGE | IN_UPDATE; - /* - * When doing softupdate journaling we must preserve the size along - * with the old pointers until they are freed or we might not - * know how many fragments remain. - */ - if (!DOINGSUJ(vp)) - allerror = ffs_update(vp, 1); + allerror = ffs_update(vp, 1); /* * Having written the new inode to disk, save its new configuration @@ -543,11 +546,6 @@ done: #endif error = allerror; out: - if (cookie) { - allerror = softdep_complete_trunc(vp, cookie); - if (allerror != 0 && error == 0) - error = allerror; - } return (error); } Index: /usr/src/sys/ufs/ffs/fs.h =================================================================== --- /usr/src/sys/ufs/ffs/fs.h (revision 221878) +++ /usr/src/sys/ufs/ffs/fs.h (working copy) @@ -715,7 +715,9 @@ struct jmvrec { /* * Block record. A set of frags or tree of blocks starting at an indirect are - * freed or a set of frags are allocated. + * freed or a set of frags are allocated. If indiroff is set, only a subset + * of the pointers in an indirect block are freed and the indirect itself + * is retained. */ struct jblkrec { uint32_t jb_op; @@ -724,7 +726,7 @@ struct jblkrec { ufs_lbn_t jb_lbn; uint16_t jb_frags; uint16_t jb_oldfrags; - uint32_t jb_unused; + uint32_t jb_indiroff; }; /* Index: /usr/src/sys/kern/vfs_bio.c =================================================================== --- /usr/src/sys/kern/vfs_bio.c (revision 221878) +++ /usr/src/sys/kern/vfs_bio.c (working copy) @@ -3999,10 +3999,11 @@ DB_SHOW_COMMAND(buffer, db_show_buffer) db_printf("b_flags = 0x%b\n", (u_int)bp->b_flags, PRINT_BUF_FLAGS); db_printf( "b_error = %d, b_bufsize = %ld, b_bcount = %ld, b_resid = %ld\n" - "b_bufobj = (%p), b_data = %p, b_blkno = %jd, b_dep = %p\n", + "b_bufobj = (%p), b_data = %p, b_blkno = %jd, b_lblkno = %jd, " + "b_dep = %p\n", bp->b_error, bp->b_bufsize, bp->b_bcount, bp->b_resid, bp->b_bufobj, bp->b_data, (intmax_t)bp->b_blkno, - bp->b_dep.lh_first); + (intmax_t)bp->b_lblkno, bp->b_dep.lh_first); if (bp->b_npages) { int i; db_printf("b_npages = %d, pages(OBJ, IDX, PA): ", bp->b_npages); Index: /usr/src/sys/sys/vnode.h =================================================================== --- /usr/src/sys/sys/vnode.h (revision 221878) +++ /usr/src/sys/sys/vnode.h (working copy) @@ -302,6 +302,7 @@ struct vattr { #define IO_EXT 0x0400 /* operate on external attributes */ #define IO_NORMAL 0x0800 /* operate on regular data */ #define IO_NOMACCHECK 0x1000 /* MAC checks unnecessary */ +#define IO_BUFLOCKED 0x2000 /* ffs flag; indir buf is locked */ #define IO_SEQMAX 0x7F /* seq heuristic max value */ #define IO_SEQSHIFT 16 /* seq heuristic in upper 16 bits */ -- Test scenario: suj15.sh