GENERIC HEAD from 2011-05-17 06:36:32 UTC, r222007M, vmcore.141 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 r222007M: Tue May 17 11:55:25 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]... 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: FILE SYSTEM CLEAN; SKIPPING CHECKS /dev/ad4s1a: clean, 211741 free (1437 frags, 26288 blocks, 0.1% fragmentation) /dev/ad4s1f: FILE SYSTEM CLEAN; SKIPPING CHECKS /dev/ad4s1f: clean, 189486 free (4198 frags, 23161 blocks, 0.4% fragmentation) /dev/label/tmp: FILE SYSTEM CLEAN; SKIPPING CHECKS /dev/label/tmp: clean, 91337303 free (3143 frags, 11416770 blocks, 0.0% fragmentation) /dev/ad4s1d: FILE SYSTEM CLEAN; SKIPPING CHECKS /dev/ad4s1d: clean, 2497228 free (226740 frags, 283811 blocks, 2.2% fragmentation) /dev/ad4s1e: FILE SYSTEM CLEAN; SKIPPING CHECKS /dev/ad4s1e: clean, 11184621 free (56629 frags, 1390999 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. No core dumps found. Additional ABI support: linux. Starting rpcbind. NFS access cache time=60 lock order reversal: 1st 0xe071e500 bufwait (bufwait) @ kern/vfs_bio.c:2658 2nd 0xc7412600 dirhash (dirhash) @ ufs/ufs/ufs_dirhash.c:284 KDB: stack backtrace: db_trace_self_wrapper(c0e8a476,2e687361,38323a63,a0d34,a7a,...) at db_trace_self_wrapper+0x26 kdb_backtrace(c09e11fb,c0e8dd93,c6d5e2a0,c6d61ec0,ef1e4894,...) at kdb_backtrace+0x2a _witness_debugger(c0e8dd93,c7412600,c0ebcc8e,c6d61ec0,c0ebc920,...) at _witness_debugger+0x25 witness_checkorder(c7412600,9,c0ebc917,11c,0,...) at witness_checkorder+0x839 _sx_xlock(c7412600,0,c0ebc917,11c,c74726cc,...) at _sx_xlock+0x85 ufsdirhash_acquire(e071e4a0,ef1e49ec,d4,e13f5b3c,ef1e4964,...) at ufsdirhash_acquire+0x48 ufsdirhash_add(c74726cc,ef1e49ec,1b3c,ef1e4950,ef1e4954,...) at ufsdirhash_add+0x13 ufs_direnter(c7749570,c79ca984,ef1e49ec,ef1e4bd0,e071eb20,...) at ufs_direnter+0x749 ufs_mkdir(ef1e4bf8,c0eda8b5,0,0,ef1e4b3c,...) at ufs_mkdir+0x916 VOP_MKDIR_APV(c0fbb100,ef1e4bf8,ef1e4bd0,ef1e4b3c,0,...) at VOP_MKDIR_APV+0xc5 kern_mkdirat(c74455c0,ffffff9c,28404020,0,1c0,...) at kern_mkdirat+0x225 kern_mkdir(c74455c0,28404020,0,1c0,ef1e4c7c,...) at kern_mkdir+0x2e mkdir(c74455c0,ef1e4cec,ef1e4d28,c0e8c5de,0,...) at mkdir+0x29 syscallenter(c74455c0,ef1e4ce4,ef1e4ce4,0,0,...) at syscallenter+0x263 syscall(ef1e4d28) at syscall+0x4f Xint0x80_syscall() at Xint0x80_syscall+0x21 --- syscall (136, FreeBSD ELF32, mkdir), eip = 0x28172663, esp = 0xbfbfe8cc, ebp = 0xbfbfed78 --- Clearing /tmp (X related). Starting mountd. NFSv4 is disabled Starting nfsd. Recovering vi editor sessions:lock order reversal: 1st 0xc7a2946c ufs (ufs) @ kern/vfs_lookup.c:501 2nd 0xe0726080 bufwait (bufwait) @ ufs/ffs/ffs_softdep.c:12679 3rd 0xc7a249dc ufs (ufs) @ kern/vfs_subr.c:2134 KDB: stack backtrace: db_trace_self_wrapper(c0e8a476,2e706564,32313a63,d393736,a,...) at db_trace_self_wrapper+0x26 kdb_backtrace(c09e11fb,c0e8ddac,c6d5e2a0,c6d61e58,ef23e32c,...) at kdb_backtrace+0x2a _witness_debugger(c0e8ddac,c7a249dc,c0e7d22e,c6d61e58,c0e959bb,...) at _witness_debugger+0x25 witness_checkorder(c7a249dc,9,c0e959b2,856,0,...) at witness_checkorder+0x839 __lockmgr_args(c7a249dc,80100,c7a24a48,0,0,...) at __lockmgr_args+0x814 ffs_lock(ef23e450,c09f279b,c0e94d17,80100,c7a24984,...) at ffs_lock+0xa1 VOP_LOCK1_APV(c0fbb100,ef23e450,c7498670,c0fd60c0,c7a24984,...) at VOP_LOCK1_APV+0xb5 _vn_lock(c7a24984,80100,c0e959b2,856,4,...) at _vn_lock+0x78 vget(c7a24984,80100,c74985c0,50,0,...) at vget+0xbb vfs_hash_get(c73f52d4,15ef44,80000,c74985c0,ef23e5a8,...) at vfs_hash_get+0xed ffs_vgetf(c73f52d4,15ef44,80000,ef23e5a8,1,...) at ffs_vgetf+0x49 softdep_sync_metadata(c7a29414,0,c0ebc40d,144,0,...) at softdep_sync_metadata+0x10e2 ffs_syncvnode(c7a29414,1,c7a2950c,c6d5e2a0,c115b288,...) at ffs_syncvnode+0x3e2 ffs_truncate(c7a29414,200,0,880,c715bb00,...) at ffs_truncate+0x8bb ufs_direnter(c7a29414,c7a24984,ef23e914,ef23eba4,0,...) at ufs_direnter+0x924 ufs_makeinode(ef23eba4,c0fbb600,ef23eb00,ef23ea5c,c0cf6425,...) at ufs_makeinode+0x5c5 ufs_create(ef23eb00,c0edaa7b,0,0,ef23eb78,...) at ufs_create+0x30 VOP_CREATE_APV(c0fbb100,ef23eb00,ef23eba4,ef23ea98,0,...) at VOP_CREATE_APV+0xc5 vn_open_cred(ef23eb78,ef23ec2c,1b0,0,c715bb00,...) at vn_open_cred+0x205 vn_open(ef23eb78,ef23ec2c,1b0,c7452348,0,...) at vn_open+0x3b kern_openat(c74985c0,ffffff9c,28839f60,0,a03,...) at kern_openat+0x12f kern_open(c74985c0,28839f60,0,a02,1b0,...) at kern_open+0x35 open(c74985c0,ef23ecec,ef23ed28,c0e8c5de,0,...) at open+0x30 syscallenter(c74985c0,ef23ece4,ef23ece4,0,0,...) at syscallenter+0x263 syscall(ef23ed28) at syscall+0x4f Xint0x80_syscall() at Xint0x80_syscall+0x21 --- syscall (5, FreeBSD ELF32, open), eip = 0x283d16a3, esp = 0xbfbfc4fc, ebp = 0xbfbfc588 --- . Updating motd:. Starting ntpd. Starting default moused. Configuring syscons: keymap blanktime. You already have an RSA host key in /etc/ssh/ssh_host_key Skipping protocol version 1 RSA Key Generation You already have a DSA host key in /etc/ssh/ssh_host_dsa_key Skipping protocol version 2 DSA Key Generation You already have an RSA host key in /etc/ssh/ssh_host_rsa_key Skipping protocol version 2 RSA Key Generation Generating public/private ecdsa key pair. Your identification has been saved in /etc/ssh/ssh_host_ecdsa_key. Your public key has been saved in /etc/ssh/ssh_host_ecdsa_key.pub. The key fingerprint is: e2:04:22:a6:11:b6:c2:9b:61:60:30:7c:60:e8:94:83 root@x4.osted.lan The key's randomart image is: +--[ECDSA 256]---+ |X=o | |EB.. | |**+ . | |=++. . | |.o o S | | o . | | . | | | | | +-----------------+ Starting sshd. Starting cron. Local package initialization: backuplock order reversal: 1st 0xc748a880 ufs (ufs) @ kern/vfs_mount.c:1193 2nd 0xc748a058 devfs (devfs) @ ufs/ffs/ffs_softdep.c:1759 KDB: stack backtrace: db_trace_self_wrapper(c0e8a476,37313a63,a0d3935,c0ebdf00,c15a4888,...) at db_trace_self_wrapper+0x26 kdb_backtrace(c09e11fb,c0e8dd93,c6d61e58,c6d61d88,ef1eda04,...) at kdb_backtrace+0x2a _witness_debugger(c0e8dd93,c748a058,c0e75167,c6d61d88,c0eb9065,...) at _witness_debugger+0x25 witness_checkorder(c748a058,9,c0eb905c,6df,c748a0c4,...) at witness_checkorder+0x839 __lockmgr_args(c748a058,80400,c748a0c4,0,0,...) at __lockmgr_args+0x814 vop_stdlock(ef1edb24,4,c0e84b27,80400,c748a000,...) at vop_stdlock+0x65 VOP_LOCK1_APV(c0f90ec0,ef1edb24,c118ed2c,c0fd60c0,c748a000,...) at VOP_LOCK1_APV+0xb5 _vn_lock(c748a000,80400,c0eb905c,6df,c73f587c,...) at _vn_lock+0x78 softdep_flushworklist(c73f587c,ef1edbd0,c7444b80,574,0,...) at softdep_flushworklist+0x47 ffs_sync(c73f587c,1,ef1edc14,4ee,0,...) at ffs_sync+0x2fd dounmount(c73f587c,8080000,c7444b80,473,5b85c5ea,...) at dounmount+0x447 unmount(c7444b80,ef1edcec,28176705,1,0,...) at unmount+0x310 syscallenter(c7444b80,ef1edce4,c0cd350d,c1010d70,0,...) at syscallenter+0x263 syscall(ef1edd28) at syscall+0x4f Xint0x80_syscall() at Xint0x80_syscall+0x21 --- syscall (22, FreeBSD ELF32, unmount), eip = 0x280dcd5b, esp = 0xbfbfe64c, ebp = 0xbfbfe718 --- fsck -y /tmp watchdogd. Starting inetd. Tue May 17 12:53:23 CEST 2011 FreeBSD/i386 (x4.osted.lan) (console) login: May 17 12:54:20 x4 su: pho to root on /dev/pts/2 May 17 14:29:57 x4 kernel: pid 64447 (rw), uid 1001 inumber 7886 on /mnt: filesystem full May 17 14:31:23 x4 kernel: pid 64473 (rw), uid 1001 inumber 6068 on /mnt: filesystem full May 17 14:35:09 x4 kernel: pid 64962 (link), uid 1001 inumber 4132 on /mnt: out of inodes May 17 14:38:45 x4 kernel: pid 65684 (rw), uid 1001 inumber 14789 on /mnt: filesystem full May 17 14:41:43 x4 kernel: pid 66144 (creat), uid 1001 inumber 4107 on /mnt: out of inodes May 17 14:41:44 x4 kernel: pid 65998 (creat), uid 1001 inumber 4110 on /mnt: out of inodes May 17 14:41:46 x4 kernel: pid 65996 (creat), uid 1001 inumber 4109 on /mnt: out of inodes May 17 14:41:48 x4 kernel: pid 66000 (creat), uid 1001 inumber 4112 on /mnt: out of inodes May 17 14:41:50 x4 kernel: pid 65996 (creat), uid 1001 inumber 4109 on /mnt: out of inodes May 17 14:42:09 x4 kernel: pid 65998 (creat), uid 1001 inumber 4110 on /mnt: out of inodes May 17 14:42:13 x4 kernel: pid 66006 (creat), uid 1001 inumber 4114 on /mnt: out of inodes May 17 14:42:15 x4 kernel: pid 66138 (creat), uid 1001 inumber 4105 on /mnt: out of inodes May 17 14:42:16 x4 kernel: pid 66136 (creat), uid 1001 inumber 4104 on /mnt: out of inodes May 17 14:42:18 x4 kernel: pid 66134 (creat), uid 1001 inumber 4103 on /mnt: out of inodes May 17 14:42:21 x4 kernel: pid 66008 (creat), uid 1001 inumber 4099 on /mnt: out of inodes May 17 14:42:31 x4 kernel: pid 65994 (creat), uid 1001 inumber 4113 on /mnt: out of inodes May 17 14:42:37 x4 kernel: pid 66008 (creat), uid 1001 inumber 4099 on /mnt: out of inodes May 17 14:42:40 x4 kernel: pid 65992 (creat), uid 1001 inumber 4097 on /mnt: out of inodes May 17 14:42:43 x4 kernel: pid 65994 (creat), uid 1001 inumber 4113 on /mnt: out of inodes May 17 14:42:46 x4 kernel: pid 66136 (creat), uid 1001 inumber 4104 on /mnt: out of inodes May 17 14:42:49 x4 kernel: pid 66130 (creat), uid 1001 inumber 4101 on /mnt: out of inodes May 17 14:42:51 x4 kernel: pid 66004 (creat), uid 1001 inumber 4108 on /mnt: out of inodes May 17 14:42:53 x4 kernel: pid 66134 (creat), uid 1001 inumber 4103 on /mnt: out of inodes May 17 14:43:01 x4 kernel: pid 65994 (creat), uid 1001 inumber 4113 on /mnt: out of inodes May 17 14:46:17 x4 kernel: pid 66706 (rw), uid 1001 inumber 5582 on /mnt: filesystem full May 17 14:50:28 x4 kernel: pid 67319 (rw), uid 1001 inumber 12312 on /mnt: filesystem full May 17 14:50:31 x4 kernel: pid 67309 (rw), uid 1001 inumber 7256 on /mnt: filesystem full May 17 14:50:32 x4 kernel: pid 67319 (rw), uid 1001 inumber 12905 on /mnt: filesystem full May 17 14:50:34 x4 kernel: pid 67311 (rw), uid 1001 inumber 8818 on /mnt: filesystem full May 17 14:50:35 x4 kernel: pid 67310 (rw), uid 1001 inumber 11324 on /mnt: filesystem full May 17 14:50:37 x4 kernel: pid 67313 (rw), uid 1001 inumber 11968 on /mnt: filesystem full May 17 14:50:38 x4 kernel: pid 67316 (rw), uid 1001 inumber 11323 on /mnt: filesystem full May 17 14:50:39 x4 kernel: pid 67315 (rw), uid 1001 inumber 11954 on /mnt: filesystem full May 17 14:51:36 x4 kernel: pid 67314 (rw), uid 1001 inumber 7879 on /mnt: filesystem full May 17 14:51:39 x4 kernel: pid 67321 (rw), uid 1001 inumber 14684 on /mnt: filesystem full May 17 14:51:44 x4 kernel: pid 67321 (rw), uid 1001 inumber 14684 on /mnt: filesystem full May 17 14:52:18 x4 kernel: pid 67320 (rw), uid 1001 inumber 13926 on /mnt: filesystem full May 17 14:52:21 x4 kernel: pid 67315 (rw), uid 1001 inumber 10526 on /mnt: filesystem full May 17 14:52:53 x4 kernel: pid 67507 (creat), uid 1001 inumber 8208 on /mnt: out of inodes May 17 14:52:56 x4 kernel: pid 67508 (creat), uid 1001 inumber 8210 on /mnt: out of inodes May 17 14:52:59 x4 kernel: pid 67488 (creat), uid 1001 inumber 8194 on /mnt: out of inodes May 17 14:53:04 x4 kernel: pid 67528 (creat), uid 1001 inumber 8212 on /mnt: out of inodes May 17 14:53:08 x4 kernel: pid 67488 (creat), uid 1001 inumber 8194 on /mnt: out of inodes May 17 14:53:11 x4 kernel: pid 67506 (creat), uid 1001 inumber 8206 on /mnt: out of inodes May 17 14:53:14 x4 kernel: pid 67506 (creat), uid 1001 inumber 8206 on /mnt: out of inodes May 17 14:53:16 x4 kernel: pid 67479 (symlink), uid 1001 inumber 8200 on /mnt: out of inodes May 17 14:53:21 x4 kernel: pid 67508 (creat), uid 1001 inumber 8210 on /mnt: out of inodes May 17 14:53:22 x4 kernel: pid 67468 (symlink), uid 1001 inumber 8193 on /mnt: out of inodes May 17 14:53:28 x4 kernel: pid 67507 (creat), uid 1001 inumber 8208 on /mnt: out of inodes May 17 14:53:31 x4 kernel: pid 67506 (creat), uid 1001 inumber 8206 on /mnt: out of inodes May 17 14:53:32 x4 kernel: pid 67488 (creat), uid 1001 inumber 8194 on /mnt: out of inodes May 17 14:53:37 x4 kernel: pid 67489 (creat), uid 1001 inumber 8201 on /mnt: out of inodes May 17 14:53:39 x4 kernel: pid 67529 (creat), uid 1001 inumber 8211 on /mnt: out of inodes May 17 14:53:43 x4 kernel: pid 67488 (creat), uid 1001 inumber 8194 on /mnt: out of inodes May 17 14:53:48 x4 kernel: pid 67505 (creat), uid 1001 inumber 8204 on /mnt: out of inodes May 17 14:53:49 x4 kernel: pid 67504 (creat), uid 1001 inumber 8203 on /mnt: out of inodes May 17 14:53:51 x4 kernel: pid 67507 (creat), uid 1001 inumber 8208 on /mnt: out of inodes May 17 14:53:55 x4 kernel: pid 67504 (creat), uid 1001 inumber 8203 on /mnt: out of inodes May 17 14:53:56 x4 kernel: pid 67528 (creat), uid 1001 inumber 8212 on /mnt: out of inodes May 17 14:53:57 x4 kernel: pid 67528 (creat), uid 1001 inumber 8212 on /mnt: out of inodes May 17 14:54:01 x4 kernel: pid 67488 (creat), uid 1001 inumber 8194 on /mnt: out of inodes May 17 14:54:02 x4 kernel: pid 67529 (creat), uid 1001 inumber 8211 on /mnt: out of inodes May 17 14:54:10 x4 kernel: pid 67502 (creat), uid 1001 inumber 8209 on /mnt: out of inodes May 17 14:54:11 x4 kernel: pid 67488 (creat), uid 1001 inumber 8194 on /mnt: out of inodes May 17 14:54:18 x4 kernel: pid 67488 (creat), uid 1001 inumber 8194 on /mnt: out of inodes May 17 14:54:19 x4 kernel: pid 67504 (creat), uid 1001 inumber 8203 on /mnt: out of inodes May 17 14:54:24 x4 kernel: pid 67488 (creat), uid 1001 inumber 8194 on /mnt: out of inodes May 17 14:54:25 x4 kernel: pid 67471 (symlink), uid 1001 inumber 8197 on /mnt: out of inodes May 17 14:54:27 x4 kernel: pid 67528 (creat), uid 1001 inumber 8212 on /mnt: out of inodes May 17 14:54:30 x4 kernel: pid 67488 (creat), uid 1001 inumber 8194 on /mnt: out of inodes May 17 14:54:32 x4 kernel: pid 67528 (creat), uid 1001 inumber 8212 on /mnt: out of inodes May 17 14:54:33 x4 kernel: pid 67488 (creat), uid 1001 inumber 8194 on /mnt: out of inodes May 17 14:54:34 x4 kernel: pid 67506 (creat), uid 1001 inumber 8206 on /mnt: out of inodes May 17 14:54:35 x4 kernel: pid 67489 (creat), uid 1001 inumber 8201 on /mnt: out of inodes May 17 14:57:55 x4 kernel: pid 68247 (creat), uid 1001 inumber 8216 on /mnt: out of inodes May 17 14:59:16 x4 kernel: pid 68639 (rw), uid 1001 inumber 3892 on /mnt: filesystem full May 17 14:59:18 x4 kernel: pid 68651 (rw), uid 1001 inumber 14403 on /mnt: filesystem full May 17 14:59:23 x4 kernel: pid 68638 (rw), uid 1001 inumber 3033 on /mnt: filesystem full May 17 14:59:32 x4 kernel: pid 68641 (rw), uid 1001 inumber 4120 on /mnt: filesystem full May 17 14:59:39 x4 kernel: pid 68639 (rw), uid 1001 inumber 998 on /mnt: filesystem full May 17 14:59:48 x4 kernel: pid 68640 (rw), uid 1001 inumber 4106 on /mnt: filesystem full May 17 14:59:56 x4 kernel: pid 68645 (rw), uid 1001 inumber 13006 on /mnt: filesystem full May 17 15:00:13 x4 kernel: pid 68649 (rw), uid 1001 inumber 3223 on /mnt: filesystem full May 17 15:00:21 x4 kernel: pid 68645 (rw), uid 1001 inumber 12972 on /mnt: filesystem full May 17 15:00:30 x4 kernel: pid 68642 (rw), uid 1001 inumber 3050 on /mnt: filesystem full May 17 15:00:40 x4 kernel: pid 68639 (rw), uid 1001 inumber 11049 on /mnt: filesystem full May 17 15:00:48 x4 kernel: pid 68642 (rw), uid 1001 inumber 12539 on /mnt: filesystem full May 17 15:00:55 x4 kernel: pid 68646 (rw), uid 1001 inumber 3604 on /mnt: filesystem full May 17 15:01:04 x4 kernel: pid 68649 (rw), uid 1001 inumber 647 on /mnt: filesystem full May 17 15:01:11 x4 kernel: pid 68649 (rw), uid 1001 inumber 4098 on /mnt: filesystem full May 17 15:05:34 x4 kernel: pid 69634 (rw), uid 1001 inumber 10936 on /mnt: filesystem full May 17 15:05:35 x4 kernel: pid 69636 (rw), uid 1001 inumber 12090 on /mnt: filesystem full May 17 15:05:36 x4 kernel: pid 69676 (rw), uid 1001 inumber 13522 on /mnt: filesystem full May 17 15:05:38 x4 kernel: pid 69640 (rw), uid 1001 inumber 13733 on /mnt: filesystem full May 17 15:05:40 x4 kernel: pid 69671 (rw), uid 1001 inumber 14162 on /mnt: filesystem full May 17 15:05:41 x4 kernel: pid 69638 (rw), uid 1001 inumber 14775 on /mnt: filesystem full May 17 15:05:43 x4 kernel: pid 69640 (rw), uid 1001 inumber 15088 on /mnt: filesystem full May 17 15:05:44 x4 kernel: pid 69618 (rw), uid 1001 inumber 15087 on /mnt: filesystem full May 17 15:05:45 x4 kernel: pid 69626 (rw), uid 1001 inumber 15143 on /mnt: filesystem full May 17 15:05:48 x4 kernel: pid 69638 (rw), uid 1001 inumber 12325 on /mnt: filesystem full May 17 15:05:50 x4 kernel: pid 69671 (rw), uid 1001 inumber 13515 on /mnt: filesystem full May 17 15:05:52 x4 kernel: pid 69674 (rw), uid 1001 inumber 15982 on /mnt: filesystem full May 17 15:06:28 x4 kernel: pid 69636 (rw), uid 1001 inumber 11099 on /mnt: filesystem full May 17 15:06:36 x4 kernel: pid 69636 (rw), uid 1001 inumber 11099 on /mnt: filesystem full May 17 15:06:38 x4 kernel: pid 69630 (rw), uid 1001 inumber 11236 on /mnt: filesystem full May 17 15:06:40 x4 kernel: pid 69671 (rw), uid 1001 inumber 13915 on /mnt: filesystem full May 17 15:07:11 x4 kernel: pid 69640 (rw), uid 1001 inumber 12054 on /mnt: filesystem full May 17 15:07:12 x4 kernel: pid 69640 (rw), uid 1001 inumber 15351 on /mnt: filesystem full May 17 15:07:14 x4 kernel: pid 69676 (rw), uid 1001 inumber 12841 on /mnt: filesystem full May 17 15:07:15 x4 kernel: pid 69632 (rw), uid 1001 inumber 9916 on /mnt: filesystem full May 17 15:07:17 x4 kernel: pid 69618 (rw), uid 1001 inumber 13566 on /mnt: filesystem full May 17 15:07:24 x4 kernel: pid 69630 (rw), uid 1001 inumber 9027 on /mnt: filesystem full May 17 15:07:52 x4 kernel: pid 69949 (rw), uid 1001 inumber 12771 on /mnt: filesystem full May 17 15:11:24 x4 kernel: pid 70297 (link), uid 1001 inumber 8255 on /mnt: out of inodes May 17 15:12:13 x4 kernel: pid 70250 (creat), uid 1001 inumber 8497 on /mnt: out of inodes May 17 15:12:18 x4 kernel: pid 70246 (creat), uid 1001 inumber 8397 on /mnt: out of inodes May 17 15:13:01 x4 kernel: pid 70478 (rw), uid 1001 inumber 12524 on /mnt: filesystem full May 17 15:13:05 x4 kernel: pid 70478 (rw), uid 1001 inumber 12524 on /mnt: filesystem full May 17 15:13:10 x4 kernel: pid 70477 (rw), uid 1001 inumber 12828 on /mnt: filesystem full May 17 15:15:47 x4 kernel: pid 70813 (creat), uid 1001 inumber 12392 on /mnt: out of inodes May 17 15:15:49 x4 last message repeated 2 times May 17 15:15:51 x4 kernel: pid 70825 (creat), uid 1001 inumber 12335 on /mnt: out of inodes May 17 15:15:52 x4 kernel: pid 70818 (creat), uid 1001 inumber 12364 on /mnt: out of inodes May 17 15:19:09 x4 kernel: pid 71262 (creat), uid 1001 inumber 28 on /mnt: out of inodes fsync: giving up on dirty 0xc797d984: tag devfs, type VCHR usecount 1, writecount 0, refcount 350 mountedhere 0xc8a2fe00 flags () v_object 0xcab6cdd0 ref 0 pages 1386 lock type devfs: EXCL by thread 0xc922f8a0 (pid 76167) #0 0xc0990e0e at __lockmgr_args+0xbfe #1 0xc0a30485 at vop_stdlock+0x65 #2 0xc0cf5455 at VOP_LOCK1_APV+0xb5 #3 0xc0a50408 at _vn_lock+0x78 #4 0xc0bd8b77 at softdep_flushworklist+0x47 #5 0xc0bdcb3d at ffs_sync+0x2fd #6 0xc0a501e2 at vfs_write_suspend+0x122 #7 0xc0bc2011 at ffs_snapshot+0xc91 #8 0xc0bdea10 at ffs_mount+0x1590 #9 0xc0a39c17 at vfs_donmount+0x1147 #10 0xc0a3a284 at nmount+0x84 #11 0xc09eb163 at syscallenter+0x263 #12 0xc0cd2caf at syscall+0x4f #13 0xc0cbc171 at Xint0x80_syscall+0x21 dev md5a fsync: giving up on dirty 0xc797d984: tag devfs, type VCHR usecount 1, writecount 0, refcount 898 mountedhere 0xc8a2fe00 flags () v_object 0xcab6cdd0 ref 0 pages 3578 lock type devfs: EXCL by thread 0xc9210000 (pid 76185) #0 0xc0990e0e at __lockmgr_args+0xbfe #1 0xc0a30485 at vop_stdlock+0x65 #2 0xc0cf5455 at VOP_LOCK1_APV+0xb5 #3 0xc0a50408 at _vn_lock+0x78 #4 0xc0bd8b77 at softdep_flushworklist+0x47 #5 0xc0bdcb3d at ffs_sync+0x2fd #6 0xc0a501e2 at vfs_write_suspend+0x122 #7 0xc0bc2011 at ffs_snapshot+0xc91 #8 0xc0bdea10 at ffs_mount+0x1590 #9 0xc0a39c17 at vfs_donmount+0x1147 #10 0xc0a3a284 at nmount+0x84 #11 0xc09eb163 at syscallenter+0x263 #12 0xc0cd2caf at syscall+0x4f #13 0xc0cbc171 at Xint0x80_syscall+0x21 dev md5a fsync: giving up on dirty 0xc797d984: tag devfs, type VCHR usecount 1, writecount 0, refcount 898 mountedhere 0xc8a2fe00 flags () v_object 0xcab6cdd0 ref 0 pages 3578 lock type devfs: EXCL by thread 0xc9210000 (pid 76185) #0 0xc0990e0e at __lockmgr_args+0xbfe #1 0xc0a30485 at vop_stdlock+0x65 #2 0xc0cf5455 at VOP_LOCK1_APV+0xb5 #3 0xc0a50408 at _vn_lock+0x78 #4 0xc0bdcc15 at ffs_sync+0x3d5 #5 0xc0a501e2 at vfs_write_suspend+0x122 #6 0xc0bc2011 at ffs_snapshot+0xc91 #7 0xc0bdea10 at ffs_mount+0x1590 #8 0xc0a39c17 at vfs_donmount+0x1147 #9 0xc0a3a284 at nmount+0x84 #10 0xc09eb163 at syscallenter+0x263 #11 0xc0cd2caf at syscall+0x4f #12 0xc0cbc171 at Xint0x80_syscall+0x21 dev md5a fsync: giving up on dirty 0xc797d984: tag devfs, type VCHR usecount 1, writecount 0, refcount 916 mountedhere 0xc8a2fe00 flags () v_object 0xcab6cdd0 ref 0 pages 3650 lock type devfs: EXCL by thread 0xc8bb6000 (pid 76220) #0 0xc0990e0e at __lockmgr_args+0xbfe #1 0xc0a30485 at vop_stdlock+0x65 #2 0xc0cf5455 at VOP_LOCK1_APV+0xb5 #3 0xc0a50408 at _vn_lock+0x78 #4 0xc0bd8b77 at softdep_flushworklist+0x47 #5 0xc0bdcb3d at ffs_sync+0x2fd #6 0xc0a501e2 at vfs_write_suspend+0x122 #7 0xc0bc2011 at ffs_snapshot+0xc91 #8 0xc0bdea10 at ffs_mount+0x1590 #9 0xc0a39c17 at vfs_donmount+0x1147 #10 0xc0a3a284 at nmount+0x84 #11 0xc09eb163 at syscallenter+0x263 #12 0xc0cd2caf at syscall+0x4f #13 0xc0cbc171 at Xint0x80_syscall+0x21 dev md5a fsync: giving up on dirty 0xc797d984: tag devfs, type VCHR usecount 1, writecount 0, refcount 1066 mountedhere 0xc8a2fe00 flags () v_object 0xcab6cdd0 ref 0 pages 4250 lock type devfs: EXCL by thread 0xc7f40000 (pid 76253) #0 0xc0990e0e at __lockmgr_args+0xbfe #1 0xc0a30485 at vop_stdlock+0x65 #2 0xc0cf5455 at VOP_LOCK1_APV+0xb5 #3 0xc0a50408 at _vn_lock+0x78 #4 0xc0bd8b77 at softdep_flushworklist+0x47 #5 0xc0bdcb3d at ffs_sync+0x2fd #6 0xc0a501e2 at vfs_write_suspend+0x122 #7 0xc0bc2011 at ffs_snapshot+0xc91 #8 0xc0bdea10 at ffs_mount+0x1590 #9 0xc0a39c17 at vfs_donmount+0x1147 #10 0xc0a3a284 at nmount+0x84 #11 0xc09eb163 at syscallenter+0x263 #12 0xc0cd2caf at syscall+0x4f #13 0xc0cbc171 at Xint0x80_syscall+0x21 dev md5a fsync: giving up on dirty 0xc797d984: tag devfs, type VCHR usecount 1, writecount 0, refcount 1066 mountedhere 0xc8a2fe00 flags () v_object 0xcab6cdd0 ref 0 pages 4250 lock type devfs: EXCL by thread 0xc7f40000 (pid 76253) #0 0xc0990e0e at __lockmgr_args+0xbfe #1 0xc0a30485 at vop_stdlock+0x65 #2 0xc0cf5455 at VOP_LOCK1_APV+0xb5 #3 0xc0a50408 at _vn_lock+0x78 #4 0xc0bdcc15 at ffs_sync+0x3d5 #5 0xc0a501e2 at vfs_write_suspend+0x122 #6 0xc0bc2011 at ffs_snapshot+0xc91 #7 0xc0bdea10 at ffs_mount+0x1590 #8 0xc0a39c17 at vfs_donmount+0x1147 #9 0xc0a3a284 at nmount+0x84 #10 0xc09eb163 at syscallenter+0x263 #11 0xc0cd2caf at syscall+0x4f #12 0xc0cbc171 at Xint0x80_syscall+0x21 dev md5a fsync: giving up on dirty 0xc797d984: tag devfs, type VCHR usecount 1, writecount 0, refcount 1070 mountedhere 0xc8a2fe00 flags () v_object 0xcab6cdd0 ref 0 pages 4266 lock type devfs: EXCL by thread 0xc78e58a0 (pid 76303) #0 0xc0990e0e at __lockmgr_args+0xbfe #1 0xc0a30485 at vop_stdlock+0x65 #2 0xc0cf5455 at VOP_LOCK1_APV+0xb5 #3 0xc0a50408 at _vn_lock+0x78 #4 0xc0bd8b77 at softdep_flushworklist+0x47 #5 0xc0bdcb3d at ffs_sync+0x2fd #6 0xc0a501e2 at vfs_write_suspend+0x122 #7 0xc0bc2011 at ffs_snapshot+0xc91 #8 0xc0bdea10 at ffs_mount+0x1590 #9 0xc0a39c17 at vfs_donmount+0x1147 #10 0xc0a3a284 at nmount+0x84 #11 0xc09eb163 at syscallenter+0x263 #12 0xc0cd2caf at syscall+0x4f #13 0xc0cbc171 at Xint0x80_syscall+0x21 dev md5a fsync: giving up on dirty 0xc797d984: tag devfs, type VCHR usecount 1, writecount 0, refcount 1070 mountedhere 0xc8a2fe00 flags () v_object 0xcab6cdd0 ref 0 pages 4266 lock type devfs: EXCL by thread 0xc7eb9b80 (pid 76338) #0 0xc0990e0e at __lockmgr_args+0xbfe #1 0xc0a30485 at vop_stdlock+0x65 #2 0xc0cf5455 at VOP_LOCK1_APV+0xb5 #3 0xc0a50408 at _vn_lock+0x78 #4 0xc0bd8b77 at softdep_flushworklist+0x47 #5 0xc0bdcb3d at ffs_sync+0x2fd #6 0xc0a501e2 at vfs_write_suspend+0x122 #7 0xc0bc2011 at ffs_snapshot+0xc91 #8 0xc0bdea10 at ffs_mount+0x1590 #9 0xc0a39c17 at vfs_donmount+0x1147 #10 0xc0a3a284 at nmount+0x84 #11 0xc09eb163 at syscallenter+0x263 #12 0xc0cd2caf at syscall+0x4f #13 0xc0cbc171 at Xint0x80_syscall+0x21 dev md5a fsync: giving up on dirty 0xc797d984: tag devfs, type VCHR usecount 1, writecount 0, refcount 1070 mountedhere 0xc8a2fe00 flags () v_object 0xcab6cdd0 ref 0 pages 4266 lock type devfs: EXCL by thread 0xc7eb9b80 (pid 76338) #0 0xc0990e0e at __lockmgr_args+0xbfe #1 0xc0a30485 at vop_stdlock+0x65 #2 0xc0cf5455 at VOP_LOCK1_APV+0xb5 #3 0xc0a50408 at _vn_lock+0x78 #4 0xc0bdcc15 at ffs_sync+0x3d5 #5 0xc0a501e2 at vfs_write_suspend+0x122 #6 0xc0bc2011 at ffs_snapshot+0xc91 #7 0xc0bdea10 at ffs_mount+0x1590 #8 0xc0a39c17 at vfs_donmount+0x1147 #9 0xc0a3a284 at nmount+0x84 #10 0xc09eb163 at syscallenter+0x263 #11 0xc0cd2caf at syscall+0x4f #12 0xc0cbc171 at Xint0x80_syscall+0x21 dev md5a fsync: giving up on dirty 0xc797d984: tag devfs, type VCHR usecount 1, writecount 0, refcount 1070 mountedhere 0xc8a2fe00 flags () v_object 0xcab6cdd0 ref 0 pages 4266 lock type devfs: EXCL by thread 0xc8a8eb80 (pid 76379) #0 0xc0990e0e at __lockmgr_args+0xbfe #1 0xc0a30485 at vop_stdlock+0x65 #2 0xc0cf5455 at VOP_LOCK1_APV+0xb5 #3 0xc0a50408 at _vn_lock+0x78 #4 0xc0bd8b77 at softdep_flushworklist+0x47 #5 0xc0bdcb3d at ffs_sync+0x2fd #6 0xc0a501e2 at vfs_write_suspend+0x122 #7 0xc0bc2011 at ffs_snapshot+0xc91 #8 0xc0bdea10 at ffs_mount+0x1590 #9 0xc0a39c17 at vfs_donmount+0x1147 #10 0xc0a3a284 at nmount+0x84 #11 0xc09eb163 at syscallenter+0x263 #12 0xc0cd2caf at syscall+0x4f #13 0xc0cbc171 at Xint0x80_syscall+0x21 dev md5a fsync: giving up on dirty 0xc797d984: tag devfs, type VCHR usecount 1, writecount 0, refcount 1355 mountedhere 0xc8a2fe00 flags () v_object 0xcab6cdd0 ref 0 pages 5406 lock type devfs: EXCL by thread 0xc7b062e0 (pid 76397) #0 0xc0990e0e at __lockmgr_args+0xbfe #1 0xc0a30485 at vop_stdlock+0x65 #2 0xc0cf5455 at VOP_LOCK1_APV+0xb5 #3 0xc0a50408 at _vn_lock+0x78 #4 0xc0bd8b77 at softdep_flushworklist+0x47 #5 0xc0bdcb3d at ffs_sync+0x2fd #6 0xc0a501e2 at vfs_write_suspend+0x122 #7 0xc0bc2011 at ffs_snapshot+0xc91 #8 0xc0bdea10 at ffs_mount+0x1590 #9 0xc0a39c17 at vfs_donmount+0x1147 #10 0xc0a3a284 at nmount+0x84 #11 0xc09eb163 at syscallenter+0x263 #12 0xc0cd2caf at syscall+0x4f #13 0xc0cbc171 at Xint0x80_syscall+0x21 dev md5a fsync: giving up on dirty 0xc797d984: tag devfs, type VCHR usecount 1, writecount 0, refcount 1355 mountedhere 0xc8a2fe00 flags () v_object 0xcab6cdd0 ref 0 pages 5406 lock type devfs: EXCL by thread 0xc84e15c0 (pid 76415) #0 0xc0990e0e at __lockmgr_args+0xbfe #1 0xc0a30485 at vop_stdlock+0x65 #2 0xc0cf5455 at VOP_LOCK1_APV+0xb5 #3 0xc0a50408 at _vn_lock+0x78 #4 0xc0bd8b77 at softdep_flushworklist+0x47 #5 0xc0bdcb3d at ffs_sync+0x2fd #6 0xc0a501e2 at vfs_write_suspend+0x122 #7 0xc0bc2011 at ffs_snapshot+0xc91 #8 0xc0bdea10 at ffs_mount+0x1590 #9 0xc0a39c17 at vfs_donmount+0x1147 #10 0xc0a3a284 at nmount+0x84 #11 0xc09eb163 at syscallenter+0x263 #12 0xc0cd2caf at syscall+0x4f #13 0xc0cbc171 at Xint0x80_syscall+0x21 dev md5a fsync: giving up on dirty 0xc797d984: tag devfs, type VCHR usecount 1, writecount 0, refcount 1355 mountedhere 0xc8a2fe00 flags () v_object 0xcab6cdd0 ref 0 pages 5406 lock type devfs: EXCL by thread 0xc78fe5c0 (pid 76449) #0 0xc0990e0e at __lockmgr_args+0xbfe #1 0xc0a30485 at vop_stdlock+0x65 #2 0xc0cf5455 at VOP_LOCK1_APV+0xb5 #3 0xc0a50408 at _vn_lock+0x78 #4 0xc0bd8b77 at softdep_flushworklist+0x47 #5 0xc0bdcb3d at ffs_sync+0x2fd #6 0xc0a501e2 at vfs_write_suspend+0x122 #7 0xc0bc2011 at ffs_snapshot+0xc91 #8 0xc0bdea10 at ffs_mount+0x1590 #9 0xc0a39c17 at vfs_donmount+0x1147 #10 0xc0a3a284 at nmount+0x84 #11 0xc09eb163 at syscallenter+0x263 #12 0xc0cd2caf at syscall+0x4f #13 0xc0cbc171 at Xint0x80_syscall+0x21 dev md5a fsync: giving up on dirty 0xc797d984: tag devfs, type VCHR usecount 1, writecount 0, refcount 1355 mountedhere 0xc8a2fe00 flags () v_object 0xcab6cdd0 ref 0 pages 5406 lock type devfs: EXCL by thread 0xc7ebb5c0 (pid 76482) #0 0xc0990e0e at __lockmgr_args+0xbfe #1 0xc0a30485 at vop_stdlock+0x65 #2 0xc0cf5455 at VOP_LOCK1_APV+0xb5 #3 0xc0a50408 at _vn_lock+0x78 #4 0xc0bd8b77 at softdep_flushworklist+0x47 #5 0xc0bdcb3d at ffs_sync+0x2fd #6 0xc0a501e2 at vfs_write_suspend+0x122 #7 0xc0bc2011 at ffs_snapshot+0xc91 #8 0xc0bdea10 at ffs_mount+0x1590 #9 0xc0a39c17 at vfs_donmount+0x1147 #10 0xc0a3a284 at nmount+0x84 #11 0xc09eb163 at syscallenter+0x263 #12 0xc0cd2caf at syscall+0x4f #13 0xc0cbc171 at Xint0x80_syscall+0x21 dev md5a lock order reversal: 1st 0xe0746bc0 bufwait (bufwait) @ kern/vfs_bio.c:2658 2nd 0xcd59bd1c snaplk (snaplk) @ ufs/ffs/ffs_snapshot.c:817 KDB: stack backtrace: db_trace_self_wrapper(c0e8a476,632e746f,3731383a,ef000a0d,c09f279b,...) at db_trace_self_wrapper+0x26 kdb_backtrace(c09e11fb,c0e8dd93,c6d5e2a0,c6d62678,ef6dd50c,...) at kdb_backtrace+0x2a _witness_debugger(c0e8dd93,cd59bd1c,c0eb8b01,c6d62678,c0eb8a8b,...) at _witness_debugger+0x25 witness_checkorder(cd59bd1c,9,c0eb8a82,331,c91e08ec,...) at witness_checkorder+0x839 __lockmgr_args(cd59bd1c,80400,c91e08ec,0,0,...) at __lockmgr_args+0x814 ffs_lock(ef6dd630,e09b9120,100000,80400,c91e0828,...) at ffs_lock+0xa1 VOP_LOCK1_APV(c0fbb100,ef6dd630,e09b91c8,c0fd60c0,c91e0828,...) at VOP_LOCK1_APV+0xb5 _vn_lock(c91e0828,80400,c0eb8a82,331,0,...) at _vn_lock+0x78 ffs_snapshot(c7748b50,c9903640,c0ebbe0c,174,ef6dd980,...) at ffs_snapshot+0x2946 ffs_mount(c7748b50,c84e3000,ff,393,0,...) at ffs_mount+0x1590 vfs_donmount(c92072e0,211300,cc4f1100,cc4f1100,c8a81834,...) at vfs_donmount+0x1147 nmount(c92072e0,ef6ddcec,ef6ddd28,c0e8c5de,0,...) at nmount+0x84 syscallenter(c92072e0,ef6ddce4,ef6ddce4,0,0,...) at syscallenter+0x263 syscall(ef6ddd28) at syscall+0x4f Xint0x80_syscall() at Xint0x80_syscall+0x21 --- syscall (378, FreeBSD ELF32, nmount), eip = 0x280da9db, esp = 0xbfbfe0cc, ebp = 0xbfbfe848 --- lock order reversal: 1st 0xcd59bd1c snaplk (snaplk) @ kern/vfs_vnops.c:301 2nd 0xc91e0880 ufs (ufs) @ ufs/ffs/ffs_snapshot.c:1617 KDB: stack backtrace: db_trace_self_wrapper(c0e8a476,d373136,c101000a,c7045b80,c0e8856b,...) at db_trace_self_wrapper+0x26 kdb_backtrace(c09e11fb,c0e8dd93,c6d62678,c6d61e58,ef524630,...) at kdb_backtrace+0x2a _witness_debugger(c0e8dd93,c91e0880,c0e7d22e,c6d61e58,c0eb8a8b,...) at _witness_debugger+0x25 witness_checkorder(c91e0880,9,c0eb8a82,651,0,...) at witness_checkorder+0x839 __lockmgr_args(c91e0880,80000,0,0,0,...) at __lockmgr_args+0x814 ffs_snapremove(c91e0828,c0eb89c0,c0e7c1d2,3,c9230b80,...) at ffs_snapremove+0x11f ffs_truncate(c91e0828,0,0,c00,0,...) at ffs_truncate+0x69f ufs_inactive(ef524a18,c0ed9f8b,c91e08ec,c91e08ec,c91e0828,...) at ufs_inactive+0x21d VOP_INACTIVE_APV(c0fbb100,ef524a18,c0e959b2,94e,c0fd6080,...) at VOP_INACTIVE_APV+0xc5 vinactive(c0fbb100,ef524a4c,c0e959b2,8a5,0,...) at vinactive+0xb1 vputx(ef524ab4,c0a50f2a,c91e0828,ef524a90,c0e971b8,...) at vputx+0x36c vput(c91e0828,ef524a90,c0e971b8,12d,0,...) at vput+0x10 vn_close(c91e0828,1,c8560180,c9230b80,c0ebe7f7,...) at vn_close+0x19a vn_closefile(c78e97e0,c9230b80,3,0,c78e97e0,...) at vn_closefile+0xe4 _fdrop(c78e97e0,c9230b80,ef524b5c,c09f283c,0,c9230c30,c0fa1ac0,c1157b88,c0e80029,c9230b80,c8fdbc2c,754,ef524b84,c09b0997,c8fdbc2c,8,c0e80020,754) at _fdrop+0x43 closef(c78e97e0,c9230b80,754,751,c9230c30,...) at closef+0x290 fdfree(c9230b80,0,c0e80c4d,104,c9230c30,...) at fdfree+0x46a exit1(c9230b80,0,ef524c7c,c09eb163,c9230b80,...) at exit1+0x573 sys_exit(c9230b80,ef524cec,281338e0,1,0,...) at sys_exit+0x1d syscallenter(c9230b80,ef524ce4,c0cd350d,c1010d70,0,...) at syscallenter+0x263 syscall(ef524d28) at syscall+0x4f Xint0x80_syscall() at Xint0x80_syscall+0x21 --- syscall (1, FreeBSD ELF32, sys_exit), eip = 0x2810f98f, esp = 0xbfbfdf0c, ebp = 0xbfbfdf18 --- fsync: giving up on dirty 0xc797d984: tag devfs, type VCHR usecount 1, writecount 0, refcount 1406 mountedhere 0xc8a2fe00 flags () v_object 0xcab6cdd0 ref 0 pages 5610 lock type devfs: EXCL by thread 0xc9c6a2e0 (pid 76522) #0 0xc0990e0e at __lockmgr_args+0xbfe #1 0xc0a30485 at vop_stdlock+0x65 #2 0xc0cf5455 at VOP_LOCK1_APV+0xb5 #3 0xc0a50408 at _vn_lock+0x78 #4 0xc0bd8b77 at softdep_flushworklist+0x47 #5 0xc0bdcb3d at ffs_sync+0x2fd #6 0xc0a501e2 at vfs_write_suspend+0x122 #7 0xc0bc2011 at ffs_snapshot+0xc91 #8 0xc0bdea10 at ffs_mount+0x1590 #9 0xc0a39c17 at vfs_donmount+0x1147 #10 0xc0a3a284 at nmount+0x84 #11 0xc09eb163 at syscallenter+0x263 #12 0xc0cd2caf at syscall+0x4f #13 0xc0cbc171 at Xint0x80_syscall+0x21 dev md5a fsync: giving up on dirty 0xc797d984: tag devfs, type VCHR usecount 1, writecount 0, refcount 1406 mountedhere 0xc8a2fe00 flags () v_object 0xcab6cdd0 ref 0 pages 5610 lock type devfs: EXCL by thread 0xc8a928a0 (pid 76564) #0 0xc0990e0e at __lockmgr_args+0xbfe #1 0xc0a30485 at vop_stdlock+0x65 #2 0xc0cf5455 at VOP_LOCK1_APV+0xb5 #3 0xc0a50408 at _vn_lock+0x78 #4 0xc0bd8b77 at softdep_flushworklist+0x47 #5 0xc0bdcb3d at ffs_sync+0x2fd #6 0xc0a501e2 at vfs_write_suspend+0x122 #7 0xc0bc2011 at ffs_snapshot+0xc91 #8 0xc0bdea10 at ffs_mount+0x1590 #9 0xc0a39c17 at vfs_donmount+0x1147 #10 0xc0a3a284 at nmount+0x84 #11 0xc09eb163 at syscallenter+0x263 #12 0xc0cd2caf at syscall+0x4f #13 0xc0cbc171 at Xint0x80_syscall+0x21 dev md5a fsync: giving up on dirty 0xc797d984: tag devfs, type VCHR usecount 1, writecount 0, refcount 1406 mountedhere 0xc8a2fe00 flags () v_object 0xcab6cdd0 ref 0 pages 5610 lock type devfs: EXCL by thread 0xc806b8a0 (pid 76582) #0 0xc0990e0e at __lockmgr_args+0xbfe #1 0xc0a30485 at vop_stdlock+0x65 #2 0xc0cf5455 at VOP_LOCK1_APV+0xb5 #3 0xc0a50408 at _vn_lock+0x78 #4 0xc0bd8b77 at softdep_flushworklist+0x47 #5 0xc0bdcb3d at ffs_sync+0x2fd #6 0xc0a501e2 at vfs_write_suspend+0x122 #7 0xc0bc2011 at ffs_snapshot+0xc91 #8 0xc0bdea10 at ffs_mount+0x1590 #9 0xc0a39c17 at vfs_donmount+0x1147 #10 0xc0a3a284 at nmount+0x84 #11 0xc09eb163 at syscallenter+0x263 #12 0xc0cd2caf at syscall+0x4f #13 0xc0cbc171 at Xint0x80_syscall+0x21 dev md5a fsync: giving up on dirty 0xc797d984: tag devfs, type VCHR usecount 1, writecount 0, refcount 1406 mountedhere 0xc8a2fe00 flags () v_object 0xcab6cdd0 ref 0 pages 5610 lock type devfs: EXCL by thread 0xc806b8a0 (pid 76600) #0 0xc0990e0e at __lockmgr_args+0xbfe #1 0xc0a30485 at vop_stdlock+0x65 #2 0xc0cf5455 at VOP_LOCK1_APV+0xb5 #3 0xc0a50408 at _vn_lock+0x78 #4 0xc0bd8b77 at softdep_flushworklist+0x47 #5 0xc0bdcb3d at ffs_sync+0x2fd #6 0xc0a501e2 at vfs_write_suspend+0x122 #7 0xc0bc2011 at ffs_snapshot+0xc91 #8 0xc0bdea10 at ffs_mount+0x1590 #9 0xc0a39c17 at vfs_donmount+0x1147 #10 0xc0a3a284 at nmount+0x84 #11 0xc09eb163 at syscallenter+0x263 #12 0xc0cd2caf at syscall+0x4f #13 0xc0cbc171 at Xint0x80_syscall+0x21 dev md5a fsync: giving up on dirty 0xc797d984: tag devfs, type VCHR usecount 1, writecount 0, refcount 1406 mountedhere 0xc8a2fe00 flags () v_object 0xcab6cdd0 ref 0 pages 5610 lock type devfs: EXCL by thread 0xc806b8a0 (pid 76600) #0 0xc0990e0e at __lockmgr_args+0xbfe #1 0xc0a30485 at vop_stdlock+0x65 #2 0xc0cf5455 at VOP_LOCK1_APV+0xb5 #3 0xc0a50408 at _vn_lock+0x78 #4 0xc0bdcc15 at ffs_sync+0x3d5 #5 0xc0a501e2 at vfs_write_suspend+0x122 #6 0xc0bc2011 at ffs_snapshot+0xc91 #7 0xc0bdea10 at ffs_mount+0x1590 #8 0xc0a39c17 at vfs_donmount+0x1147 #9 0xc0a3a284 at nmount+0x84 #10 0xc09eb163 at syscallenter+0x263 #11 0xc0cd2caf at syscall+0x4f #12 0xc0cbc171 at Xint0x80_syscall+0x21 dev md5a fsync: giving up on dirty 0xc797d984: tag devfs, type VCHR usecount 1, writecount 0, refcount 1406 mountedhere 0xc8a2fe00 flags () v_object 0xcab6cdd0 ref 0 pages 5610 lock type devfs: EXCL by thread 0xc854ab80 (pid 76645) #0 0xc0990e0e at __lockmgr_args+0xbfe #1 0xc0a30485 at vop_stdlock+0x65 #2 0xc0cf5455 at VOP_LOCK1_APV+0xb5 #3 0xc0a50408 at _vn_lock+0x78 #4 0xc0bd8b77 at softdep_flushworklist+0x47 #5 0xc0bdcb3d at ffs_sync+0x2fd #6 0xc0a501e2 at vfs_write_suspend+0x122 #7 0xc0bc2011 at ffs_snapshot+0xc91 #8 0xc0bdea10 at ffs_mount+0x1590 #9 0xc0a39c17 at vfs_donmount+0x1147 #10 0xc0a3a284 at nmount+0x84 #11 0xc09eb163 at syscallenter+0x263 #12 0xc0cd2caf at syscall+0x4f #13 0xc0cbc171 at Xint0x80_syscall+0x21 dev md5a fsync: giving up on dirty 0xc797d984: tag devfs, type VCHR usecount 1, writecount 0, refcount 1406 mountedhere 0xc8a2fe00 flags () v_object 0xcab6cdd0 ref 0 pages 5610 lock type devfs: EXCL by thread 0xc854ab80 (pid 76645) #0 0xc0990e0e at __lockmgr_args+0xbfe #1 0xc0a30485 at vop_stdlock+0x65 #2 0xc0cf5455 at VOP_LOCK1_APV+0xb5 #3 0xc0a50408 at _vn_lock+0x78 #4 0xc0bdcc15 at ffs_sync+0x3d5 #5 0xc0a501e2 at vfs_write_suspend+0x122 #6 0xc0bc2011 at ffs_snapshot+0xc91 #7 0xc0bdea10 at ffs_mount+0x1590 #8 0xc0a39c17 at vfs_donmount+0x1147 #9 0xc0a3a284 at nmount+0x84 #10 0xc09eb163 at syscallenter+0x263 #11 0xc0cd2caf at syscall+0x4f #12 0xc0cbc171 at Xint0x80_syscall+0x21 dev md5a fsync: giving up on dirty 0xc797d984: tag devfs, type VCHR usecount 1, writecount 0, refcount 1406 mountedhere 0xc8a2fe00 flags () v_object 0xcab6cdd0 ref 0 pages 5610 lock type devfs: EXCL by thread 0xc78fe2e0 (pid 76663) #0 0xc0990e0e at __lockmgr_args+0xbfe #1 0xc0a30485 at vop_stdlock+0x65 #2 0xc0cf5455 at VOP_LOCK1_APV+0xb5 #3 0xc0a50408 at _vn_lock+0x78 #4 0xc0bd8b77 at softdep_flushworklist+0x47 #5 0xc0bdcb3d at ffs_sync+0x2fd #6 0xc0a501e2 at vfs_write_suspend+0x122 #7 0xc0bc2011 at ffs_snapshot+0xc91 #8 0xc0bdea10 at ffs_mount+0x1590 #9 0xc0a39c17 at vfs_donmount+0x1147 #10 0xc0a3a284 at nmount+0x84 #11 0xc09eb163 at syscallenter+0x263 #12 0xc0cd2caf at syscall+0x4f #13 0xc0cbc171 at Xint0x80_syscall+0x21 dev md5a fsync: giving up on dirty 0xc797d984: tag devfs, type VCHR usecount 1, writecount 0, refcount 1406 mountedhere 0xc8a2fe00 flags () v_object 0xcab6cdd0 ref 0 pages 5610 lock type devfs: EXCL by thread 0xc78ff8a0 (pid 76681) #0 0xc0990e0e at __lockmgr_args+0xbfe #1 0xc0a30485 at vop_stdlock+0x65 #2 0xc0cf5455 at VOP_LOCK1_APV+0xb5 #3 0xc0a50408 at _vn_lock+0x78 #4 0xc0bd8b77 at softdep_flushworklist+0x47 #5 0xc0bdcb3d at ffs_sync+0x2fd #6 0xc0a501e2 at vfs_write_suspend+0x122 #7 0xc0bc2011 at ffs_snapshot+0xc91 #8 0xc0bdea10 at ffs_mount+0x1590 #9 0xc0a39c17 at vfs_donmount+0x1147 #10 0xc0a3a284 at nmount+0x84 #11 0xc09eb163 at syscallenter+0x263 #12 0xc0cd2caf at syscall+0x4f #13 0xc0cbc171 at Xint0x80_syscall+0x21 dev md5a fsync: giving up on dirty 0xc797d984: tag devfs, type VCHR usecount 1, writecount 0, refcount 1406 mountedhere 0xc8a2fe00 flags () v_object 0xcab6cdd0 ref 0 pages 5610 lock type devfs: EXCL by thread 0xc84c32e0 (pid 76716) #0 0xc0990e0e at __lockmgr_args+0xbfe #1 0xc0a30485 at vop_stdlock+0x65 #2 0xc0cf5455 at VOP_LOCK1_APV+0xb5 #3 0xc0a50408 at _vn_lock+0x78 #4 0xc0bd8b77 at softdep_flushworklist+0x47 #5 0xc0bdcb3d at ffs_sync+0x2fd #6 0xc0a501e2 at vfs_write_suspend+0x122 #7 0xc0bc2011 at ffs_snapshot+0xc91 #8 0xc0bdea10 at ffs_mount+0x1590 #9 0xc0a39c17 at vfs_donmount+0x1147 #10 0xc0a3a284 at nmount+0x84 #11 0xc09eb163 at syscallenter+0x263 #12 0xc0cd2caf at syscall+0x4f #13 0xc0cbc171 at Xint0x80_syscall+0x21 dev md5a fsync: giving up on dirty 0xc797d984: tag devfs, type VCHR usecount 1, writecount 0, refcount 1406 mountedhere 0xc8a2fe00 flags () v_object 0xcab6cdd0 ref 0 pages 5610 lock type devfs: EXCL by thread 0xc8a942e0 (pid 76734) #0 0xc0990e0e at __lockmgr_args+0xbfe #1 0xc0a30485 at vop_stdlock+0x65 #2 0xc0cf5455 at VOP_LOCK1_APV+0xb5 #3 0xc0a50408 at _vn_lock+0x78 #4 0xc0bd8b77 at softdep_flushworklist+0x47 #5 0xc0bdcb3d at ffs_sync+0x2fd #6 0xc0a501e2 at vfs_write_suspend+0x122 #7 0xc0bc2011 at ffs_snapshot+0xc91 #8 0xc0bdea10 at ffs_mount+0x1590 #9 0xc0a39c17 at vfs_donmount+0x1147 #10 0xc0a3a284 at nmount+0x84 #11 0xc09eb163 at syscallenter+0x263 #12 0xc0cd2caf at syscall+0x4f #13 0xc0cbc171 at Xint0x80_syscall+0x21 dev md5a fsync: giving up on dirty 0xc797d984: tag devfs, type VCHR usecount 1, writecount 0, refcount 1406 mountedhere 0xc8a2fe00 flags () v_object 0xcab6cdd0 ref 0 pages 5610 lock type devfs: EXCL by thread 0xc8a902e0 (pid 76818) #0 0xc0990e0e at __lockmgr_args+0xbfe #1 0xc0a30485 at vop_stdlock+0x65 #2 0xc0cf5455 at VOP_LOCK1_APV+0xb5 #3 0xc0a50408 at _vn_lock+0x78 #4 0xc0bd8b77 at softdep_flushworklist+0x47 #5 0xc0bdcb3d at ffs_sync+0x2fd #6 0xc0a501e2 at vfs_write_suspend+0x122 #7 0xc0bc2011 at ffs_snapshot+0xc91 #8 0xc0bdea10 at ffs_mount+0x1590 #9 0xc0a39c17 at vfs_donmount+0x1147 #10 0xc0a3a284 at nmount+0x84 #11 0xc09eb163 at syscallenter+0x263 #12 0xc0cd2caf at syscall+0x4f #13 0xc0cbc171 at Xint0x80_syscall+0x21 dev md5a fsync: giving up on dirty 0xc797d984: tag devfs, type VCHR usecount 1, writecount 0, refcount 2384 mountedhere 0xc8a2fe00 flags () v_object 0xcab6cdd0 ref 0 pages 9522 lock type devfs: EXCL by thread 0xc852d2e0 (pid 76976) #0 0xc0990e0e at __lockmgr_args+0xbfe #1 0xc0a30485 at vop_stdlock+0x65 #2 0xc0cf5455 at VOP_LOCK1_APV+0xb5 #3 0xc0a50408 at _vn_lock+0x78 #4 0xc0bd8b77 at softdep_flushworklist+0x47 #5 0xc0bdcb3d at ffs_sync+0x2fd #6 0xc0a501e2 at vfs_write_suspend+0x122 #7 0xc0bc2011 at ffs_snapshot+0xc91 #8 0xc0bdea10 at ffs_mount+0x1590 #9 0xc0a39c17 at vfs_donmount+0x1147 #10 0xc0a3a284 at nmount+0x84 #11 0xc09eb163 at syscallenter+0x263 #12 0xc0cd2caf at syscall+0x4f #13 0xc0cbc171 at Xint0x80_syscall+0x21 dev md5a fsync: giving up on dirty 0xc797d984: tag devfs, type VCHR usecount 1, writecount 0, refcount 2384 mountedhere 0xc8a2fe00 flags () v_object 0xcab6cdd0 ref 0 pages 9522 lock type devfs: EXCL by thread 0xc852d2e0 (pid 76976) #0 0xc0990e0e at __lockmgr_args+0xbfe #1 0xc0a30485 at vop_stdlock+0x65 #2 0xc0cf5455 at VOP_LOCK1_APV+0xb5 #3 0xc0a50408 at _vn_lock+0x78 #4 0xc0bdcc15 at ffs_sync+0x3d5 #5 0xc0a501e2 at vfs_write_suspend+0x122 #6 0xc0bc2011 at ffs_snapshot+0xc91 #7 0xc0bdea10 at ffs_mount+0x1590 #8 0xc0a39c17 at vfs_donmount+0x1147 #9 0xc0a3a284 at nmount+0x84 #10 0xc09eb163 at syscallenter+0x263 #11 0xc0cd2caf at syscall+0x4f #12 0xc0cbc171 at Xint0x80_syscall+0x21 dev md5a fsync: giving up on dirty 0xc797d984: tag devfs, type VCHR usecount 1, writecount 0, refcount 2506 mountedhere 0xc8a2fe00 flags () v_object 0xcab6cdd0 ref 0 pages 10010 lock type devfs: EXCL by thread 0xc9207b80 (pid 77024) #0 0xc0990e0e at __lockmgr_args+0xbfe #1 0xc0a30485 at vop_stdlock+0x65 #2 0xc0cf5455 at VOP_LOCK1_APV+0xb5 #3 0xc0a50408 at _vn_lock+0x78 #4 0xc0bd8b77 at softdep_flushworklist+0x47 #5 0xc0bdcb3d at ffs_sync+0x2fd #6 0xc0a501e2 at vfs_write_suspend+0x122 #7 0xc0bc2011 at ffs_snapshot+0xc91 #8 0xc0bdea10 at ffs_mount+0x1590 #9 0xc0a39c17 at vfs_donmount+0x1147 #10 0xc0a3a284 at nmount+0x84 #11 0xc09eb163 at syscallenter+0x263 #12 0xc0cd2caf at syscall+0x4f #13 0xc0cbc171 at Xint0x80_syscall+0x21 dev md5a fsync: giving up on dirty 0xc797d984: tag devfs, type VCHR usecount 1, writecount 0, refcount 2506 mountedhere 0xc8a2fe00 flags () v_object 0xcab6cdd0 ref 0 pages 10010 lock type devfs: EXCL by thread 0xc9207b80 (pid 77024) #0 0xc0990e0e at __lockmgr_args+0xbfe #1 0xc0a30485 at vop_stdlock+0x65 #2 0xc0cf5455 at VOP_LOCK1_APV+0xb5 #3 0xc0a50408 at _vn_lock+0x78 #4 0xc0bdcc15 at ffs_sync+0x3d5 #5 0xc0a501e2 at vfs_write_suspend+0x122 #6 0xc0bc2011 at ffs_snapshot+0xc91 #7 0xc0bdea10 at ffs_mount+0x1590 #8 0xc0a39c17 at vfs_donmount+0x1147 #9 0xc0a3a284 at nmount+0x84 #10 0xc09eb163 at syscallenter+0x263 #11 0xc0cd2caf at syscall+0x4f #12 0xc0cbc171 at Xint0x80_syscall+0x21 dev md5a lock order reversal: 1st 0xc77d712c filedesc structure (filedesc structure) @ kern/kern_descrip.c:791 2nd 0xc796a880 ufs (ufs) @ kern/vfs_subr.c:4216 KDB: stack backtrace: db_trace_self_wrapper(c0e8a476,20296572,656b2040,6b2f6e72,5f6e7265,...) at db_trace_self_wrapper+0x26 kdb_backtrace(c09e11fb,c0e8dd93,c6d5e6b0,c6d61e58,ef22aa2c,...) at kdb_backtrace+0x2a _witness_debugger(c0e8dd93,c796a880,c0e7d22e,c6d61e58,c0e959bb,...) at _witness_debugger+0x25 witness_checkorder(c796a880,9,c0e959b2,1078,c796a8ec,...) at witness_checkorder+0x839 __lockmgr_args(c796a880,80400,c796a8ec,0,0,...) at __lockmgr_args+0x814 ffs_lock(ef22ab50,c,0,80400,c796a828,...) at ffs_lock+0xa1 VOP_LOCK1_APV(c0fbb100,ef22ab50,ef22ab6c,c0fd60c0,c796a828,...) at VOP_LOCK1_APV+0xb5 _vn_lock(c796a828,80400,c0e959b2,1078,ef22abac,...) at _vn_lock+0x78 vfs_knllock(c796a828,0,c0e807f3,723,c7bf8090,...) at vfs_knllock+0x29 knlist_remove_kq(0,ef22abcc,c0a3ea29,c8b0601c,c7bf8090,...) at knlist_remove_kq+0x85 knlist_remove(c8b0601c,c7bf8090,0,ef22abf8,c0974ae5,...) at knlist_remove+0x1b filt_vfsdetach(c7bf8090,0,c0e807f3,804,317,...) at filt_vfsdetach+0x39 knote_fdclose(c74995c0,3,c0e80020,317,5,...) at knote_fdclose+0xf5 do_dup(3,c7499808,ef22ac7c,c09eb163,c74995c0,...) at do_dup+0x441 dup2(c74995c0,ef22acec,2810d368,1,0,...) at dup2+0x28 syscallenter(c74995c0,ef22ace4,c0cd350d,c1010d70,0,...) at syscallenter+0x263 syscall(ef22ad28) at syscall+0x4f Xint0x80_syscall() at Xint0x80_syscall+0x21 --- syscall (90, FreeBSD ELF32, dup2), eip = 0x2810d36f, esp = 0xbfbfeacc, ebp = 0xbfbfeb18 --- fsync: giving up on dirty 0xc797d984: tag devfs, type VCHR usecount 1, writecount 0, refcount 2561 mountedhere 0xc8a2fe00 flags () v_object 0xcab6cdd0 ref 0 pages 10230 lock type devfs: EXCL by thread 0xc84f4b80 (pid 77072) #0 0xc0990e0e at __lockmgr_args+0xbfe #1 0xc0a30485 at vop_stdlock+0x65 #2 0xc0cf5455 at VOP_LOCK1_APV+0xb5 #3 0xc0a50408 at _vn_lock+0x78 #4 0xc0bd8b77 at softdep_flushworklist+0x47 #5 0xc0bdcb3d at ffs_sync+0x2fd #6 0xc0a501e2 at vfs_write_suspend+0x122 #7 0xc0bc2011 at ffs_snapshot+0xc91 #8 0xc0bdea10 at ffs_mount+0x1590 #9 0xc0a39c17 at vfs_donmount+0x1147 #10 0xc0a3a284 at nmount+0x84 #11 0xc09eb163 at syscallenter+0x263 #12 0xc0cd2caf at syscall+0x4f #13 0xc0cbc171 at Xint0x80_syscall+0x21 dev md5a fsync: giving up on dirty 0xc797d984: tag devfs, type VCHR usecount 1, writecount 0, refcount 2561 mountedhere 0xc8a2fe00 flags () v_object 0xcab6cdd0 ref 0 pages 10230 lock type devfs: EXCL by thread 0xc84f4b80 (pid 77072) #0 0xc0990e0e at __lockmgr_args+0xbfe #1 0xc0a30485 at vop_stdlock+0x65 #2 0xc0cf5455 at VOP_LOCK1_APV+0xb5 #3 0xc0a50408 at _vn_lock+0x78 #4 0xc0bdcc15 at ffs_sync+0x3d5 #5 0xc0a501e2 at vfs_write_suspend+0x122 #6 0xc0bc2011 at ffs_snapshot+0xc91 #7 0xc0bdea10 at ffs_mount+0x1590 #8 0xc0a39c17 at vfs_donmount+0x1147 #9 0xc0a3a284 at nmount+0x84 #10 0xc09eb163 at syscallenter+0x263 #11 0xc0cd2caf at syscall+0x4f #12 0xc0cbc171 at Xint0x80_syscall+0x21 dev md5a fsync: giving up on dirty 0xc797d984: tag devfs, type VCHR usecount 1, writecount 0, refcount 2561 mountedhere 0xc8a2fe00 flags () v_object 0xcab6cdd0 ref 0 pages 10230 lock type devfs: EXCL by thread 0xc84f4b80 (pid 77109) #0 0xc0990e0e at __lockmgr_args+0xbfe #1 0xc0a30485 at vop_stdlock+0x65 #2 0xc0cf5455 at VOP_LOCK1_APV+0xb5 #3 0xc0a50408 at _vn_lock+0x78 #4 0xc0bd8b77 at softdep_flushworklist+0x47 #5 0xc0bdcb3d at ffs_sync+0x2fd #6 0xc0a501e2 at vfs_write_suspend+0x122 #7 0xc0bc2011 at ffs_snapshot+0xc91 #8 0xc0bdea10 at ffs_mount+0x1590 #9 0xc0a39c17 at vfs_donmount+0x1147 #10 0xc0a3a284 at nmount+0x84 #11 0xc09eb163 at syscallenter+0x263 #12 0xc0cd2caf at syscall+0x4f #13 0xc0cbc171 at Xint0x80_syscall+0x21 dev md5a fsync: giving up on dirty 0xc797d984: tag devfs, type VCHR usecount 1, writecount 0, refcount 2561 mountedhere 0xc8a2fe00 flags () v_object 0xcab6cdd0 ref 0 pages 10230 lock type devfs: EXCL by thread 0xc84f4b80 (pid 77109) #0 0xc0990e0e at __lockmgr_args+0xbfe #1 0xc0a30485 at vop_stdlock+0x65 #2 0xc0cf5455 at VOP_LOCK1_APV+0xb5 #3 0xc0a50408 at _vn_lock+0x78 #4 0xc0bdcc15 at ffs_sync+0x3d5 #5 0xc0a501e2 at vfs_write_suspend+0x122 #6 0xc0bc2011 at ffs_snapshot+0xc91 #7 0xc0bdea10 at ffs_mount+0x1590 #8 0xc0a39c17 at vfs_donmount+0x1147 #9 0xc0a3a284 at nmount+0x84 #10 0xc09eb163 at syscallenter+0x263 #11 0xc0cd2caf at syscall+0x4f #12 0xc0cbc171 at Xint0x80_syscall+0x21 dev md5a fsync: giving up on dirty 0xc797d984: tag devfs, type VCHR usecount 1, writecount 0, refcount 2561 mountedhere 0xc8a2fe00 flags () v_object 0xcab6cdd0 ref 0 pages 10230 lock type devfs: EXCL by thread 0xc9c69000 (pid 77163) #0 0xc0990e0e at __lockmgr_args+0xbfe #1 0xc0a30485 at vop_stdlock+0x65 #2 0xc0cf5455 at VOP_LOCK1_APV+0xb5 #3 0xc0a50408 at _vn_lock+0x78 #4 0xc0bdcc15 at ffs_sync+0x3d5 #5 0xc0a501e2 at vfs_write_suspend+0x122 #6 0xc0bc2011 at ffs_snapshot+0xc91 #7 0xc0bdea10 at ffs_mount+0x1590 #8 0xc0a39c17 at vfs_donmount+0x1147 #9 0xc0a3a284 at nmount+0x84 #10 0xc09eb163 at syscallenter+0x263 #11 0xc0cd2caf at syscall+0x4f #12 0xc0cbc171 at Xint0x80_syscall+0x21 dev md5a fsync: giving up on dirty 0xc797d984: tag devfs, type VCHR usecount 1, writecount 0, refcount 2561 mountedhere 0xc8a2fe00 flags () v_object 0xcab6cdd0 ref 0 pages 10230 lock type devfs: EXCL by thread 0xc9248b80 (pid 77448) #0 0xc0990e0e at __lockmgr_args+0xbfe #1 0xc0a30485 at vop_stdlock+0x65 #2 0xc0cf5455 at VOP_LOCK1_APV+0xb5 #3 0xc0a50408 at _vn_lock+0x78 #4 0xc0bd8b77 at softdep_flushworklist+0x47 #5 0xc0bdcb3d at ffs_sync+0x2fd #6 0xc0a501e2 at vfs_write_suspend+0x122 #7 0xc0bc2011 at ffs_snapshot+0xc91 #8 0xc0bdea10 at ffs_mount+0x1590 #9 0xc0a39c17 at vfs_donmount+0x1147 #10 0xc0a3a284 at nmount+0x84 #11 0xc09eb163 at syscallenter+0x263 #12 0xc0cd2caf at syscall+0x4f #13 0xc0cbc171 at Xint0x80_syscall+0x21 dev md5a fsync: giving up on dirty 0xc797d984: tag devfs, type VCHR usecount 1, writecount 0, refcount 2561 mountedhere 0xc8a2fe00 flags () v_object 0xcab6cdd0 ref 0 pages 10230 lock type devfs: EXCL by thread 0xc8bb68a0 (pid 77466) #0 0xc0990e0e at __lockmgr_args+0xbfe #1 0xc0a30485 at vop_stdlock+0x65 #2 0xc0cf5455 at VOP_LOCK1_APV+0xb5 #3 0xc0a50408 at _vn_lock+0x78 #4 0xc0bd8b77 at softdep_flushworklist+0x47 #5 0xc0bdcb3d at ffs_sync+0x2fd #6 0xc0a501e2 at vfs_write_suspend+0x122 #7 0xc0bc2011 at ffs_snapshot+0xc91 #8 0xc0bdea10 at ffs_mount+0x1590 #9 0xc0a39c17 at vfs_donmount+0x1147 #10 0xc0a3a284 at nmount+0x84 #11 0xc09eb163 at syscallenter+0x263 #12 0xc0cd2caf at syscall+0x4f #13 0xc0cbc171 at Xint0x80_syscall+0x21 dev md5a fsync: giving up on dirty 0xc797d984: tag devfs, type VCHR usecount 1, writecount 0, refcount 2561 mountedhere 0xc8a2fe00 flags () v_object 0xcab6cdd0 ref 0 pages 10230 lock type devfs: EXCL by thread 0xc8bb68a0 (pid 77466) #0 0xc0990e0e at __lockmgr_args+0xbfe #1 0xc0a30485 at vop_stdlock+0x65 #2 0xc0cf5455 at VOP_LOCK1_APV+0xb5 #3 0xc0a50408 at _vn_lock+0x78 #4 0xc0bdcc15 at ffs_sync+0x3d5 #5 0xc0a501e2 at vfs_write_suspend+0x122 #6 0xc0bc2011 at ffs_snapshot+0xc91 #7 0xc0bdea10 at ffs_mount+0x1590 #8 0xc0a39c17 at vfs_donmount+0x1147 #9 0xc0a3a284 at nmount+0x84 #10 0xc09eb163 at syscallenter+0x263 #11 0xc0cd2caf at syscall+0x4f #12 0xc0cbc171 at Xint0x80_syscall+0x21 dev md5a fsync: giving up on dirty 0xc797d984: tag devfs, type VCHR usecount 1, writecount 0, refcount 2593 mountedhere 0xc8a2fe00 flags () v_object 0xcab6cdd0 ref 0 pages 10358 lock type devfs: EXCL by thread 0xc9c68b80 (pid 77523) #0 0xc0990e0e at __lockmgr_args+0xbfe #1 0xc0a30485 at vop_stdlock+0x65 #2 0xc0cf5455 at VOP_LOCK1_APV+0xb5 #3 0xc0a50408 at _vn_lock+0x78 #4 0xc0bd8b77 at softdep_flushworklist+0x47 #5 0xc0bdcb3d at ffs_sync+0x2fd #6 0xc0a501e2 at vfs_write_suspend+0x122 #7 0xc0bc2011 at ffs_snapshot+0xc91 #8 0xc0bdea10 at ffs_mount+0x1590 #9 0xc0a39c17 at vfs_donmount+0x1147 #10 0xc0a3a284 at nmount+0x84 #11 0xc09eb163 at syscallenter+0x263 #12 0xc0cd2caf at syscall+0x4f #13 0xc0cbc171 at Xint0x80_syscall+0x21 dev md5a fsync: giving up on dirty 0xc797d984: tag devfs, type VCHR usecount 1, writecount 0, refcount 2593 mountedhere 0xc8a2fe00 flags () v_object 0xcab6cdd0 ref 0 pages 10358 lock type devfs: EXCL by thread 0xc9c68b80 (pid 77523) #0 0xc0990e0e at __lockmgr_args+0xbfe #1 0xc0a30485 at vop_stdlock+0x65 #2 0xc0cf5455 at VOP_LOCK1_APV+0xb5 #3 0xc0a50408 at _vn_lock+0x78 #4 0xc0bdcc15 at ffs_sync+0x3d5 #5 0xc0a501e2 at vfs_write_suspend+0x122 #6 0xc0bc2011 at ffs_snapshot+0xc91 #7 0xc0bdea10 at ffs_mount+0x1590 #8 0xc0a39c17 at vfs_donmount+0x1147 #9 0xc0a3a284 at nmount+0x84 #10 0xc09eb163 at syscallenter+0x263 #11 0xc0cd2caf at syscall+0x4f #12 0xc0cbc171 at Xint0x80_syscall+0x21 dev md5a fsync: giving up on dirty 0xc797d984: tag devfs, type VCHR usecount 1, writecount 0, refcount 2593 mountedhere 0xc8a2fe00 flags () v_object 0xcab6cdd0 ref 0 pages 10358 lock type devfs: EXCL by thread 0xc7e915c0 (pid 77556) #0 0xc0990e0e at __lockmgr_args+0xbfe #1 0xc0a30485 at vop_stdlock+0x65 #2 0xc0cf5455 at VOP_LOCK1_APV+0xb5 #3 0xc0a50408 at _vn_lock+0x78 #4 0xc0bd8b77 at softdep_flushworklist+0x47 #5 0xc0bdcb3d at ffs_sync+0x2fd #6 0xc0a501e2 at vfs_write_suspend+0x122 #7 0xc0bc2011 at ffs_snapshot+0xc91 #8 0xc0bdea10 at ffs_mount+0x1590 #9 0xc0a39c17 at vfs_donmount+0x1147 #10 0xc0a3a284 at nmount+0x84 #11 0xc09eb163 at syscallenter+0x263 #12 0xc0cd2caf at syscall+0x4f #13 0xc0cbc171 at Xint0x80_syscall+0x21 dev md5a fsync: giving up on dirty 0xc797d984: tag devfs, type VCHR usecount 1, writecount 0, refcount 2593 mountedhere 0xc8a2fe00 flags () v_object 0xcab6cdd0 ref 0 pages 10358 lock type devfs: EXCL by thread 0xc7e915c0 (pid 77556) #0 0xc0990e0e at __lockmgr_args+0xbfe #1 0xc0a30485 at vop_stdlock+0x65 #2 0xc0cf5455 at VOP_LOCK1_APV+0xb5 #3 0xc0a50408 at _vn_lock+0x78 #4 0xc0bdcc15 at ffs_sync+0x3d5 #5 0xc0a501e2 at vfs_write_suspend+0x122 #6 0xc0bc2011 at ffs_snapshot+0xc91 #7 0xc0bdea10 at ffs_mount+0x1590 #8 0xc0a39c17 at vfs_donmount+0x1147 #9 0xc0a3a284 at nmount+0x84 #10 0xc09eb163 at syscallenter+0x263 #11 0xc0cd2caf at syscall+0x4f #12 0xc0cbc171 at Xint0x80_syscall+0x21 dev md5a fsync: giving up on dirty 0xc797d984: tag devfs, type VCHR usecount 1, writecount 0, refcount 2593 mountedhere 0xc8a2fe00 flags () v_object 0xcab6cdd0 ref 0 pages 10358 lock type devfs: EXCL by thread 0xc90338a0 (pid 77574) #0 0xc0990e0e at __lockmgr_args+0xbfe #1 0xc0a30485 at vop_stdlock+0x65 #2 0xc0cf5455 at VOP_LOCK1_APV+0xb5 #3 0xc0a50408 at _vn_lock+0x78 #4 0xc0bd8b77 at softdep_flushworklist+0x47 #5 0xc0bdcb3d at ffs_sync+0x2fd #6 0xc0a501e2 at vfs_write_suspend+0x122 #7 0xc0bc2011 at ffs_snapshot+0xc91 #8 0xc0bdea10 at ffs_mount+0x1590 #9 0xc0a39c17 at vfs_donmount+0x1147 #10 0xc0a3a284 at nmount+0x84 #11 0xc09eb163 at syscallenter+0x263 #12 0xc0cd2caf at syscall+0x4f #13 0xc0cbc171 at Xint0x80_syscall+0x21 dev md5a fsync: giving up on dirty 0xc797d984: tag devfs, type VCHR usecount 1, writecount 0, refcount 2593 mountedhere 0xc8a2fe00 flags () v_object 0xcab6cdd0 ref 0 pages 10358 lock type devfs: EXCL by thread 0xc90338a0 (pid 77574) #0 0xc0990e0e at __lockmgr_args+0xbfe #1 0xc0a30485 at vop_stdlock+0x65 #2 0xc0cf5455 at VOP_LOCK1_APV+0xb5 #3 0xc0a50408 at _vn_lock+0x78 #4 0xc0bdcc15 at ffs_sync+0x3d5 #5 0xc0a501e2 at vfs_write_suspend+0x122 #6 0xc0bc2011 at ffs_snapshot+0xc91 #7 0xc0bdea10 at ffs_mount+0x1590 #8 0xc0a39c17 at vfs_donmount+0x1147 #9 0xc0a3a284 at nmount+0x84 #10 0xc09eb163 at syscallenter+0x263 #11 0xc0cd2caf at syscall+0x4f #12 0xc0cbc171 at Xint0x80_syscall+0x21 dev md5a fsync: giving up on dirty 0xc797d984: tag devfs, type VCHR usecount 1, writecount 0, refcount 2593 mountedhere 0xc8a2fe00 flags () v_object 0xcab6cdd0 ref 0 pages 10358 lock type devfs: EXCL by thread 0xc7f0a8a0 (pid 77594) #0 0xc0990e0e at __lockmgr_args+0xbfe #1 0xc0a30485 at vop_stdlock+0x65 #2 0xc0cf5455 at VOP_LOCK1_APV+0xb5 #3 0xc0a50408 at _vn_lock+0x78 #4 0xc0bd8b77 at softdep_flushworklist+0x47 #5 0xc0bdcb3d at ffs_sync+0x2fd #6 0xc0a501e2 at vfs_write_suspend+0x122 #7 0xc0bc2011 at ffs_snapshot+0xc91 #8 0xc0bdea10 at ffs_mount+0x1590 #9 0xc0a39c17 at vfs_donmount+0x1147 #10 0xc0a3a284 at nmount+0x84 #11 0xc09eb163 at syscallenter+0x263 #12 0xc0cd2caf at syscall+0x4f #13 0xc0cbc171 at Xint0x80_syscall+0x21 dev md5a fsync: giving up on dirty 0xc797d984: tag devfs, type VCHR usecount 1, writecount 0, refcount 2593 mountedhere 0xc8a2fe00 flags () v_object 0xcab6cdd0 ref 0 pages 10358 lock type devfs: EXCL by thread 0xc84c3000 (pid 77627) #0 0xc0990e0e at __lockmgr_args+0xbfe #1 0xc0a30485 at vop_stdlock+0x65 #2 0xc0cf5455 at VOP_LOCK1_APV+0xb5 #3 0xc0a50408 at _vn_lock+0x78 #4 0xc0bd8b77 at softdep_flushworklist+0x47 #5 0xc0bdcb3d at ffs_sync+0x2fd #6 0xc0a501e2 at vfs_write_suspend+0x122 #7 0xc0bc2011 at ffs_snapshot+0xc91 #8 0xc0bdea10 at ffs_mount+0x1590 #9 0xc0a39c17 at vfs_donmount+0x1147 #10 0xc0a3a284 at nmount+0x84 #11 0xc09eb163 at syscallenter+0x263 #12 0xc0cd2caf at syscall+0x4f #13 0xc0cbc171 at Xint0x80_syscall+0x21 dev md5a fsync: giving up on dirty 0xc797d984: tag devfs, type VCHR usecount 1, writecount 0, refcount 2593 mountedhere 0xc8a2fe00 flags () v_object 0xcab6cdd0 ref 0 pages 10358 lock type devfs: EXCL by thread 0xc84c3000 (pid 77627) #0 0xc0990e0e at __lockmgr_args+0xbfe #1 0xc0a30485 at vop_stdlock+0x65 #2 0xc0cf5455 at VOP_LOCK1_APV+0xb5 #3 0xc0a50408 at _vn_lock+0x78 #4 0xc0bdcc15 at ffs_sync+0x3d5 #5 0xc0a501e2 at vfs_write_suspend+0x122 #6 0xc0bc2011 at ffs_snapshot+0xc91 #7 0xc0bdea10 at ffs_mount+0x1590 #8 0xc0a39c17 at vfs_donmount+0x1147 #9 0xc0a3a284 at nmount+0x84 #10 0xc09eb163 at syscallenter+0x263 #11 0xc0cd2caf at syscall+0x4f #12 0xc0cbc171 at Xint0x80_syscall+0x21 dev md5a fsync: giving up on dirty 0xc797d984: tag devfs, type VCHR usecount 1, writecount 0, refcount 2593 mountedhere 0xc8a2fe00 flags () v_object 0xcab6cdd0 ref 0 pages 10358 lock type devfs: EXCL by thread 0xc74442e0 (pid 77691) #0 0xc0990e0e at __lockmgr_args+0xbfe #1 0xc0a30485 at vop_stdlock+0x65 #2 0xc0cf5455 at VOP_LOCK1_APV+0xb5 #3 0xc0a50408 at _vn_lock+0x78 #4 0xc0bd8b77 at softdep_flushworklist+0x47 #5 0xc0bdcb3d at ffs_sync+0x2fd #6 0xc0a501e2 at vfs_write_suspend+0x122 #7 0xc0bc2011 at ffs_snapshot+0xc91 #8 0xc0bdea10 at ffs_mount+0x1590 #9 0xc0a39c17 at vfs_donmount+0x1147 #10 0xc0a3a284 at nmount+0x84 #11 0xc09eb163 at syscallenter+0x263 #12 0xc0cd2caf at syscall+0x4f #13 0xc0cbc171 at Xint0x80_syscall+0x21 dev md5a fsync: giving up on dirty 0xc797d984: tag devfs, type VCHR usecount 1, writecount 0, refcount 2593 mountedhere 0xc8a2fe00 flags () v_object 0xcab6cdd0 ref 0 pages 10358 lock type devfs: EXCL by thread 0xc922e000 (pid 77709) #0 0xc0990e0e at __lockmgr_args+0xbfe #1 0xc0a30485 at vop_stdlock+0x65 #2 0xc0cf5455 at VOP_LOCK1_APV+0xb5 #3 0xc0a50408 at _vn_lock+0x78 #4 0xc0bd8b77 at softdep_flushworklist+0x47 #5 0xc0bdcb3d at ffs_sync+0x2fd #6 0xc0a501e2 at vfs_write_suspend+0x122 #7 0xc0bc2011 at ffs_snapshot+0xc91 #8 0xc0bdea10 at ffs_mount+0x1590 #9 0xc0a39c17 at vfs_donmount+0x1147 #10 0xc0a3a284 at nmount+0x84 #11 0xc09eb163 at syscallenter+0x263 #12 0xc0cd2caf at syscall+0x4f #13 0xc0cbc171 at Xint0x80_syscall+0x21 dev md5a fsync: giving up on dirty 0xc797d984: tag devfs, type VCHR usecount 1, writecount 0, refcount 2593 mountedhere 0xc8a2fe00 flags () v_object 0xcab6cdd0 ref 0 pages 10358 lock type devfs: EXCL by thread 0xc920e8a0 (pid 77746) #0 0xc0990e0e at __lockmgr_args+0xbfe #1 0xc0a30485 at vop_stdlock+0x65 #2 0xc0cf5455 at VOP_LOCK1_APV+0xb5 #3 0xc0a50408 at _vn_lock+0x78 #4 0xc0bd8b77 at softdep_flushworklist+0x47 #5 0xc0bdcb3d at ffs_sync+0x2fd #6 0xc0a501e2 at vfs_write_suspend+0x122 #7 0xc0bc2011 at ffs_snapshot+0xc91 #8 0xc0bdea10 at ffs_mount+0x1590 #9 0xc0a39c17 at vfs_donmount+0x1147 #10 0xc0a3a284 at nmount+0x84 #11 0xc09eb163 at syscallenter+0x263 #12 0xc0cd2caf at syscall+0x4f #13 0xc0cbc171 at Xint0x80_syscall+0x21 dev md5a fsync: giving up on dirty 0xc797d984: tag devfs, type VCHR usecount 1, writecount 0, refcount 2593 mountedhere 0xc8a2fe00 flags () v_object 0xcab6cdd0 ref 0 pages 10358 lock type devfs: EXCL by thread 0xc920e8a0 (pid 77746) #0 0xc0990e0e at __lockmgr_args+0xbfe #1 0xc0a30485 at vop_stdlock+0x65 #2 0xc0cf5455 at VOP_LOCK1_APV+0xb5 #3 0xc0a50408 at _vn_lock+0x78 #4 0xc0bdcc15 at ffs_sync+0x3d5 #5 0xc0a501e2 at vfs_write_suspend+0x122 #6 0xc0bc2011 at ffs_snapshot+0xc91 #7 0xc0bdea10 at ffs_mount+0x1590 #8 0xc0a39c17 at vfs_donmount+0x1147 #9 0xc0a3a284 at nmount+0x84 #10 0xc09eb163 at syscallenter+0x263 #11 0xc0cd2caf at syscall+0x4f #12 0xc0cbc171 at Xint0x80_syscall+0x21 dev md5a fsync: giving up on dirty 0xc797d984: tag devfs, type VCHR usecount 1, writecount 0, refcount 2593 mountedhere 0xc8a2fe00 flags () v_object 0xcab6cdd0 ref 0 pages 10358 lock type devfs: EXCL by thread 0xc85488a0 (pid 77764) #0 0xc0990e0e at __lockmgr_args+0xbfe #1 0xc0a30485 at vop_stdlock+0x65 #2 0xc0cf5455 at VOP_LOCK1_APV+0xb5 #3 0xc0a50408 at _vn_lock+0x78 #4 0xc0bd8b77 at softdep_flushworklist+0x47 #5 0xc0bdcb3d at ffs_sync+0x2fd #6 0xc0a501e2 at vfs_write_suspend+0x122 #7 0xc0bc2011 at ffs_snapshot+0xc91 #8 0xc0bdea10 at ffs_mount+0x1590 #9 0xc0a39c17 at vfs_donmount+0x1147 #10 0xc0a3a284 at nmount+0x84 #11 0xc09eb163 at syscallenter+0x263 #12 0xc0cd2caf at syscall+0x4f #13 0xc0cbc171 at Xint0x80_syscall+0x21 dev md5a fsync: giving up on dirty 0xc797d984: tag devfs, type VCHR usecount 1, writecount 0, refcount 2593 mountedhere 0xc8a2fe00 flags () v_object 0xcab6cdd0 ref 0 pages 10358 lock type devfs: EXCL by thread 0xc78ffb80 (pid 77782) #0 0xc0990e0e at __lockmgr_args+0xbfe #1 0xc0a30485 at vop_stdlock+0x65 #2 0xc0cf5455 at VOP_LOCK1_APV+0xb5 #3 0xc0a50408 at _vn_lock+0x78 #4 0xc0bd8b77 at softdep_flushworklist+0x47 #5 0xc0bdcb3d at ffs_sync+0x2fd #6 0xc0a501e2 at vfs_write_suspend+0x122 #7 0xc0bc2011 at ffs_snapshot+0xc91 #8 0xc0bdea10 at ffs_mount+0x1590 #9 0xc0a39c17 at vfs_donmount+0x1147 #10 0xc0a3a284 at nmount+0x84 #11 0xc09eb163 at syscallenter+0x263 #12 0xc0cd2caf at syscall+0x4f #13 0xc0cbc171 at Xint0x80_syscall+0x21 dev md5a fsync: giving up on dirty 0xc797d984: tag devfs, type VCHR usecount 1, writecount 0, refcount 2593 mountedhere 0xc8a2fe00 flags () v_object 0xcab6cdd0 ref 0 pages 10358 lock type devfs: EXCL by thread 0xc78ffb80 (pid 77782) #0 0xc0990e0e at __lockmgr_args+0xbfe #1 0xc0a30485 at vop_stdlock+0x65 #2 0xc0cf5455 at VOP_LOCK1_APV+0xb5 #3 0xc0a50408 at _vn_lock+0x78 #4 0xc0bdcc15 at ffs_sync+0x3d5 #5 0xc0a501e2 at vfs_write_suspend+0x122 #6 0xc0bc2011 at ffs_snapshot+0xc91 #7 0xc0bdea10 at ffs_mount+0x1590 #8 0xc0a39c17 at vfs_donmount+0x1147 #9 0xc0a3a284 at nmount+0x84 #10 0xc09eb163 at syscallenter+0x263 #11 0xc0cd2caf at syscall+0x4f #12 0xc0cbc171 at Xint0x80_syscall+0x21 dev md5a fsync: giving up on dirty 0xc797d984: tag devfs, type VCHR usecount 1, writecount 0, refcount 2593 mountedhere 0xc8a2fe00 flags () v_object 0xcab6cdd0 ref 0 pages 10358 lock type devfs: EXCL by thread 0xc806b5c0 (pid 77822) #0 0xc0990e0e at __lockmgr_args+0xbfe #1 0xc0a30485 at vop_stdlock+0x65 #2 0xc0cf5455 at VOP_LOCK1_APV+0xb5 #3 0xc0a50408 at _vn_lock+0x78 #4 0xc0bd8b77 at softdep_flushworklist+0x47 #5 0xc0bdcb3d at ffs_sync+0x2fd #6 0xc0a501e2 at vfs_write_suspend+0x122 #7 0xc0bc2011 at ffs_snapshot+0xc91 #8 0xc0bdea10 at ffs_mount+0x1590 #9 0xc0a39c17 at vfs_donmount+0x1147 #10 0xc0a3a284 at nmount+0x84 #11 0xc09eb163 at syscallenter+0x263 #12 0xc0cd2caf at syscall+0x4f #13 0xc0cbc171 at Xint0x80_syscall+0x21 dev md5a fsync: giving up on dirty 0xc797d984: tag devfs, type VCHR usecount 1, writecount 0, refcount 2593 mountedhere 0xc8a2fe00 flags () v_object 0xcab6cdd0 ref 0 pages 10358 lock type devfs: EXCL by thread 0xc806b5c0 (pid 77822) #0 0xc0990e0e at __lockmgr_args+0xbfe #1 0xc0a30485 at vop_stdlock+0x65 #2 0xc0cf5455 at VOP_LOCK1_APV+0xb5 #3 0xc0a50408 at _vn_lock+0x78 #4 0xc0bdcc15 at ffs_sync+0x3d5 #5 0xc0a501e2 at vfs_write_suspend+0x122 #6 0xc0bc2011 at ffs_snapshot+0xc91 #7 0xc0bdea10 at ffs_mount+0x1590 #8 0xc0a39c17 at vfs_donmount+0x1147 #9 0xc0a3a284 at nmount+0x84 #10 0xc09eb163 at syscallenter+0x263 #11 0xc0cd2caf at syscall+0x4f #12 0xc0cbc171 at Xint0x80_syscall+0x21 dev md5a fsync: giving up on dirty 0xc797d984: tag devfs, type VCHR usecount 1, writecount 0, refcount 2593 mountedhere 0xc8a2fe00 flags () v_object 0xcab6cdd0 ref 0 pages 10358 lock type devfs: EXCL by thread 0xc854bb80 (pid 77842) #0 0xc0990e0e at __lockmgr_args+0xbfe #1 0xc0a30485 at vop_stdlock+0x65 #2 0xc0cf5455 at VOP_LOCK1_APV+0xb5 #3 0xc0a50408 at _vn_lock+0x78 #4 0xc0bd8b77 at softdep_flushworklist+0x47 #5 0xc0bdcb3d at ffs_sync+0x2fd #6 0xc0a501e2 at vfs_write_suspend+0x122 #7 0xc0bc2011 at ffs_snapshot+0xc91 #8 0xc0bdea10 at ffs_mount+0x1590 #9 0xc0a39c17 at vfs_donmount+0x1147 #10 0xc0a3a284 at nmount+0x84 #11 0xc09eb163 at syscallenter+0x263 #12 0xc0cd2caf at syscall+0x4f #13 0xc0cbc171 at Xint0x80_syscall+0x21 dev md5a fsync: giving up on dirty 0xc797d984: tag devfs, type VCHR usecount 1, writecount 0, refcount 2593 mountedhere 0xc8a2fe00 flags () v_object 0xcab6cdd0 ref 0 pages 10358 lock type devfs: EXCL by thread 0xc921a000 (pid 77875) #0 0xc0990e0e at __lockmgr_args+0xbfe #1 0xc0a30485 at vop_stdlock+0x65 #2 0xc0cf5455 at VOP_LOCK1_APV+0xb5 #3 0xc0a50408 at _vn_lock+0x78 #4 0xc0bd8b77 at softdep_flushworklist+0x47 #5 0xc0bdcb3d at ffs_sync+0x2fd #6 0xc0a501e2 at vfs_write_suspend+0x122 #7 0xc0bc2011 at ffs_snapshot+0xc91 #8 0xc0bdea10 at ffs_mount+0x1590 #9 0xc0a39c17 at vfs_donmount+0x1147 #10 0xc0a3a284 at nmount+0x84 #11 0xc09eb163 at syscallenter+0x263 #12 0xc0cd2caf at syscall+0x4f #13 0xc0cbc171 at Xint0x80_syscall+0x21 dev md5a fsync: giving up on dirty 0xc797d984: tag devfs, type VCHR usecount 1, writecount 0, refcount 2593 mountedhere 0xc8a2fe00 flags () v_object 0xcab6cdd0 ref 0 pages 10358 lock type devfs: EXCL by thread 0xc921a000 (pid 77875) #0 0xc0990e0e at __lockmgr_args+0xbfe #1 0xc0a30485 at vop_stdlock+0x65 #2 0xc0cf5455 at VOP_LOCK1_APV+0xb5 #3 0xc0a50408 at _vn_lock+0x78 #4 0xc0bdcc15 at ffs_sync+0x3d5 #5 0xc0a501e2 at vfs_write_suspend+0x122 #6 0xc0bc2011 at ffs_snapshot+0xc91 #7 0xc0bdea10 at ffs_mount+0x1590 #8 0xc0a39c17 at vfs_donmount+0x1147 #9 0xc0a3a284 at nmount+0x84 #10 0xc09eb163 at syscallenter+0x263 #11 0xc0cd2caf at syscall+0x4f #12 0xc0cbc171 at Xint0x80_syscall+0x21 dev md5a fsync: giving up on dirty 0xc797d984: tag devfs, type VCHR usecount 1, writecount 0, refcount 2593 mountedhere 0xc8a2fe00 flags () v_object 0xcab6cdd0 ref 0 pages 10358 lock type devfs: EXCL by thread 0xc85482e0 (pid 77893) #0 0xc0990e0e at __lockmgr_args+0xbfe #1 0xc0a30485 at vop_stdlock+0x65 #2 0xc0cf5455 at VOP_LOCK1_APV+0xb5 #3 0xc0a50408 at _vn_lock+0x78 #4 0xc0bd8b77 at softdep_flushworklist+0x47 #5 0xc0bdcb3d at ffs_sync+0x2fd #6 0xc0a501e2 at vfs_write_suspend+0x122 #7 0xc0bc2011 at ffs_snapshot+0xc91 #8 0xc0bdea10 at ffs_mount+0x1590 #9 0xc0a39c17 at vfs_donmount+0x1147 #10 0xc0a3a284 at nmount+0x84 #11 0xc09eb163 at syscallenter+0x263 #12 0xc0cd2caf at syscall+0x4f #13 0xc0cbc171 at Xint0x80_syscall+0x21 dev md5a fsync: giving up on dirty 0xc797d984: tag devfs, type VCHR usecount 1, writecount 0, refcount 2593 mountedhere 0xc8a2fe00 flags () v_object 0xcab6cdd0 ref 0 pages 10358 lock type devfs: EXCL by thread 0xc85482e0 (pid 77893) #0 0xc0990e0e at __lockmgr_args+0xbfe #1 0xc0a30485 at vop_stdlock+0x65 #2 0xc0cf5455 at VOP_LOCK1_APV+0xb5 #3 0xc0a50408 at _vn_lock+0x78 #4 0xc0bdcc15 at ffs_sync+0x3d5 #5 0xc0a501e2 at vfs_write_suspend+0x122 #6 0xc0bc2011 at ffs_snapshot+0xc91 #7 0xc0bdea10 at ffs_mount+0x1590 #8 0xc0a39c17 at vfs_donmount+0x1147 #9 0xc0a3a284 at nmount+0x84 #10 0xc09eb163 at syscallenter+0x263 #11 0xc0cd2caf at syscall+0x4f #12 0xc0cbc171 at Xint0x80_syscall+0x21 dev md5a fsync: giving up on dirty 0xc797d984: tag devfs, type VCHR usecount 1, writecount 0, refcount 2593 mountedhere 0xc8a2fe00 flags () v_object 0xcab6cdd0 ref 0 pages 10358 lock type devfs: EXCL by thread 0xc922eb80 (pid 77952) #0 0xc0990e0e at __lockmgr_args+0xbfe #1 0xc0a30485 at vop_stdlock+0x65 #2 0xc0cf5455 at VOP_LOCK1_APV+0xb5 #3 0xc0a50408 at _vn_lock+0x78 #4 0xc0bd8b77 at softdep_flushworklist+0x47 #5 0xc0bdcb3d at ffs_sync+0x2fd #6 0xc0a501e2 at vfs_write_suspend+0x122 #7 0xc0bc2011 at ffs_snapshot+0xc91 #8 0xc0bdea10 at ffs_mount+0x1590 #9 0xc0a39c17 at vfs_donmount+0x1147 #10 0xc0a3a284 at nmount+0x84 #11 0xc09eb163 at syscallenter+0x263 #12 0xc0cd2caf at syscall+0x4f #13 0xc0cbc171 at Xint0x80_syscall+0x21 dev md5a fsync: giving up on dirty 0xc797d984: tag devfs, type VCHR usecount 1, writecount 0, refcount 2593 mountedhere 0xc8a2fe00 flags () v_object 0xcab6cdd0 ref 0 pages 10358 lock type devfs: EXCL by thread 0xc922eb80 (pid 77952) #0 0xc0990e0e at __lockmgr_args+0xbfe #1 0xc0a30485 at vop_stdlock+0x65 #2 0xc0cf5455 at VOP_LOCK1_APV+0xb5 #3 0xc0a50408 at _vn_lock+0x78 #4 0xc0bdcc15 at ffs_sync+0x3d5 #5 0xc0a501e2 at vfs_write_suspend+0x122 #6 0xc0bc2011 at ffs_snapshot+0xc91 #7 0xc0bdea10 at ffs_mount+0x1590 #8 0xc0a39c17 at vfs_donmount+0x1147 #9 0xc0a3a284 at nmount+0x84 #10 0xc09eb163 at syscallenter+0x263 #11 0xc0cd2caf at syscall+0x4f #12 0xc0cbc171 at Xint0x80_syscall+0x21 dev md5a fsync: giving up on dirty 0xc797d984: tag devfs, type VCHR usecount 1, writecount 0, refcount 2593 mountedhere 0xc8a2fe00 flags () v_object 0xcab6cdd0 ref 0 pages 10358 lock type devfs: EXCL by thread 0xc7f0fb80 (pid 77987) #0 0xc0990e0e at __lockmgr_args+0xbfe #1 0xc0a30485 at vop_stdlock+0x65 #2 0xc0cf5455 at VOP_LOCK1_APV+0xb5 #3 0xc0a50408 at _vn_lock+0x78 #4 0xc0bd8b77 at softdep_flushworklist+0x47 #5 0xc0bdcb3d at ffs_sync+0x2fd #6 0xc0a501e2 at vfs_write_suspend+0x122 #7 0xc0bc2011 at ffs_snapshot+0xc91 #8 0xc0bdea10 at ffs_mount+0x1590 #9 0xc0a39c17 at vfs_donmount+0x1147 #10 0xc0a3a284 at nmount+0x84 #11 0xc09eb163 at syscallenter+0x263 #12 0xc0cd2caf at syscall+0x4f #13 0xc0cbc171 at Xint0x80_syscall+0x21 dev md5a fsync: giving up on dirty 0xc797d984: tag devfs, type VCHR usecount 1, writecount 0, refcount 2593 mountedhere 0xc8a2fe00 flags () v_object 0xcab6cdd0 ref 0 pages 10358 lock type devfs: EXCL by thread 0xc8aa22e0 (pid 78020) #0 0xc0990e0e at __lockmgr_args+0xbfe #1 0xc0a30485 at vop_stdlock+0x65 #2 0xc0cf5455 at VOP_LOCK1_APV+0xb5 #3 0xc0a50408 at _vn_lock+0x78 #4 0xc0bd8b77 at softdep_flushworklist+0x47 #5 0xc0bdcb3d at ffs_sync+0x2fd #6 0xc0a501e2 at vfs_write_suspend+0x122 #7 0xc0bc2011 at ffs_snapshot+0xc91 #8 0xc0bdea10 at ffs_mount+0x1590 #9 0xc0a39c17 at vfs_donmount+0x1147 #10 0xc0a3a284 at nmount+0x84 #11 0xc09eb163 at syscallenter+0x263 #12 0xc0cd2caf at syscall+0x4f #13 0xc0cbc171 at Xint0x80_syscall+0x21 dev md5a fsync: giving up on dirty 0xc797d984: tag devfs, type VCHR usecount 1, writecount 0, refcount 2593 mountedhere 0xc8a2fe00 flags () v_object 0xcab6cdd0 ref 0 pages 10358 lock type devfs: EXCL by thread 0xc8aa22e0 (pid 78020) #0 0xc0990e0e at __lockmgr_args+0xbfe #1 0xc0a30485 at vop_stdlock+0x65 #2 0xc0cf5455 at VOP_LOCK1_APV+0xb5 #3 0xc0a50408 at _vn_lock+0x78 #4 0xc0bdcc15 at ffs_sync+0x3d5 #5 0xc0a501e2 at vfs_write_suspend+0x122 #6 0xc0bc2011 at ffs_snapshot+0xc91 #7 0xc0bdea10 at ffs_mount+0x1590 #8 0xc0a39c17 at vfs_donmount+0x1147 #9 0xc0a3a284 at nmount+0x84 #10 0xc09eb163 at syscallenter+0x263 #11 0xc0cd2caf at syscall+0x4f #12 0xc0cbc171 at Xint0x80_syscall+0x21 dev md5a fsync: giving up on dirty 0xc797d984: tag devfs, type VCHR usecount 1, writecount 0, refcount 2593 mountedhere 0xc8a2fe00 flags () v_object 0xcab6cdd0 ref 0 pages 10358 lock type devfs: EXCL by thread 0xc92072e0 (pid 78053) #0 0xc0990e0e at __lockmgr_args+0xbfe #1 0xc0a30485 at vop_stdlock+0x65 #2 0xc0cf5455 at VOP_LOCK1_APV+0xb5 #3 0xc0a50408 at _vn_lock+0x78 #4 0xc0bd8b77 at softdep_flushworklist+0x47 #5 0xc0bdcb3d at ffs_sync+0x2fd #6 0xc0a501e2 at vfs_write_suspend+0x122 #7 0xc0bc2011 at ffs_snapshot+0xc91 #8 0xc0bdea10 at ffs_mount+0x1590 #9 0xc0a39c17 at vfs_donmount+0x1147 #10 0xc0a3a284 at nmount+0x84 #11 0xc09eb163 at syscallenter+0x263 #12 0xc0cd2caf at syscall+0x4f #13 0xc0cbc171 at Xint0x80_syscall+0x21 dev md5a fsync: giving up on dirty 0xc797d984: tag devfs, type VCHR usecount 1, writecount 0, refcount 2593 mountedhere 0xc8a2fe00 flags () v_object 0xcab6cdd0 ref 0 pages 10358 lock type devfs: EXCL by thread 0xc9c6a8a0 (pid 78103) #0 0xc0990e0e at __lockmgr_args+0xbfe #1 0xc0a30485 at vop_stdlock+0x65 #2 0xc0cf5455 at VOP_LOCK1_APV+0xb5 #3 0xc0a50408 at _vn_lock+0x78 #4 0xc0bd8b77 at softdep_flushworklist+0x47 #5 0xc0bdcb3d at ffs_sync+0x2fd #6 0xc0a501e2 at vfs_write_suspend+0x122 #7 0xc0bc2011 at ffs_snapshot+0xc91 #8 0xc0bdea10 at ffs_mount+0x1590 #9 0xc0a39c17 at vfs_donmount+0x1147 #10 0xc0a3a284 at nmount+0x84 #11 0xc09eb163 at syscallenter+0x263 #12 0xc0cd2caf at syscall+0x4f #13 0xc0cbc171 at Xint0x80_syscall+0x21 dev md5a fsync: giving up on dirty 0xc797d984: tag devfs, type VCHR usecount 1, writecount 0, refcount 2593 mountedhere 0xc8a2fe00 flags () v_object 0xcab6cdd0 ref 0 pages 10358 lock type devfs: EXCL by thread 0xc9c6a8a0 (pid 78103) #0 0xc0990e0e at __lockmgr_args+0xbfe #1 0xc0a30485 at vop_stdlock+0x65 #2 0xc0cf5455 at VOP_LOCK1_APV+0xb5 #3 0xc0a50408 at _vn_lock+0x78 #4 0xc0bdcc15 at ffs_sync+0x3d5 #5 0xc0a501e2 at vfs_write_suspend+0x122 #6 0xc0bc2011 at ffs_snapshot+0xc91 #7 0xc0bdea10 at ffs_mount+0x1590 #8 0xc0a39c17 at vfs_donmount+0x1147 #9 0xc0a3a284 at nmount+0x84 #10 0xc09eb163 at syscallenter+0x263 #11 0xc0cd2caf at syscall+0x4f #12 0xc0cbc171 at Xint0x80_syscall+0x21 dev md5a fsync: giving up on dirty 0xc797d984: tag devfs, type VCHR usecount 1, writecount 0, refcount 2593 mountedhere 0xc8a2fe00 flags () v_object 0xcab6cdd0 ref 0 pages 10358 lock type devfs: EXCL by thread 0xc7e912e0 (pid 78183) #0 0xc0990e0e at __lockmgr_args+0xbfe #1 0xc0a30485 at vop_stdlock+0x65 #2 0xc0cf5455 at VOP_LOCK1_APV+0xb5 #3 0xc0a50408 at _vn_lock+0x78 #4 0xc0bd8b77 at softdep_flushworklist+0x47 #5 0xc0bdcb3d at ffs_sync+0x2fd #6 0xc0a501e2 at vfs_write_suspend+0x122 #7 0xc0bc2011 at ffs_snapshot+0xc91 #8 0xc0bdea10 at ffs_mount+0x1590 #9 0xc0a39c17 at vfs_donmount+0x1147 #10 0xc0a3a284 at nmount+0x84 #11 0xc09eb163 at syscallenter+0x263 #12 0xc0cd2caf at syscall+0x4f #13 0xc0cbc171 at Xint0x80_syscall+0x21 dev md5a fsync: giving up on dirty 0xc797d984: tag devfs, type VCHR usecount 1, writecount 0, refcount 2593 mountedhere 0xc8a2fe00 flags () v_object 0xcab6cdd0 ref 0 pages 10358 lock type devfs: EXCL by thread 0xc9215000 (pid 78201) #0 0xc0990e0e at __lockmgr_args+0xbfe #1 0xc0a30485 at vop_stdlock+0x65 #2 0xc0cf5455 at VOP_LOCK1_APV+0xb5 #3 0xc0a50408 at _vn_lock+0x78 #4 0xc0bd8b77 at softdep_flushworklist+0x47 #5 0xc0bdcb3d at ffs_sync+0x2fd #6 0xc0a501e2 at vfs_write_suspend+0x122 #7 0xc0bc2011 at ffs_snapshot+0xc91 #8 0xc0bdea10 at ffs_mount+0x1590 #9 0xc0a39c17 at vfs_donmount+0x1147 #10 0xc0a3a284 at nmount+0x84 #11 0xc09eb163 at syscallenter+0x263 #12 0xc0cd2caf at syscall+0x4f #13 0xc0cbc171 at Xint0x80_syscall+0x21 dev md5a fsync: giving up on dirty 0xc797d984: tag devfs, type VCHR usecount 1, writecount 0, refcount 2593 mountedhere 0xc8a2fe00 flags () v_object 0xcab6cdd0 ref 0 pages 10358 lock type devfs: EXCL by thread 0xc9215000 (pid 78201) #0 0xc0990e0e at __lockmgr_args+0xbfe #1 0xc0a30485 at vop_stdlock+0x65 #2 0xc0cf5455 at VOP_LOCK1_APV+0xb5 #3 0xc0a50408 at _vn_lock+0x78 #4 0xc0bdcc15 at ffs_sync+0x3d5 #5 0xc0a501e2 at vfs_write_suspend+0x122 #6 0xc0bc2011 at ffs_snapshot+0xc91 #7 0xc0bdea10 at ffs_mount+0x1590 #8 0xc0a39c17 at vfs_donmount+0x1147 #9 0xc0a3a284 at nmount+0x84 #10 0xc09eb163 at syscallenter+0x263 #11 0xc0cd2caf at syscall+0x4f #12 0xc0cbc171 at Xint0x80_syscall+0x21 dev md5a fsync: giving up on dirty 0xc797d984: tag devfs, type VCHR usecount 1, writecount 0, refcount 2593 mountedhere 0xc8a2fe00 flags () v_object 0xcab6cdd0 ref 0 pages 10358 lock type devfs: EXCL by thread 0xc7f0e2e0 (pid 78221) #0 0xc0990e0e at __lockmgr_args+0xbfe #1 0xc0a30485 at vop_stdlock+0x65 #2 0xc0cf5455 at VOP_LOCK1_APV+0xb5 #3 0xc0a50408 at _vn_lock+0x78 #4 0xc0bd8b77 at softdep_flushworklist+0x47 #5 0xc0bdcb3d at ffs_sync+0x2fd #6 0xc0a501e2 at vfs_write_suspend+0x122 #7 0xc0bc2011 at ffs_snapshot+0xc91 #8 0xc0bdea10 at ffs_mount+0x1590 #9 0xc0a39c17 at vfs_donmount+0x1147 #10 0xc0a3a284 at nmount+0x84 #11 0xc09eb163 at syscallenter+0x263 #12 0xc0cd2caf at syscall+0x4f #13 0xc0cbc171 at Xint0x80_syscall+0x21 dev md5a fsync: giving up on dirty 0xc797d984: tag devfs, type VCHR usecount 1, writecount 0, refcount 2593 mountedhere 0xc8a2fe00 flags () v_object 0xcab6cdd0 ref 0 pages 10358 lock type devfs: EXCL by thread 0xc7f0e2e0 (pid 78221) #0 0xc0990e0e at __lockmgr_args+0xbfe #1 0xc0a30485 at vop_stdlock+0x65 #2 0xc0cf5455 at VOP_LOCK1_APV+0xb5 #3 0xc0a50408 at _vn_lock+0x78 #4 0xc0bdcc15 at ffs_sync+0x3d5 #5 0xc0a501e2 at vfs_write_suspend+0x122 #6 0xc0bc2011 at ffs_snapshot+0xc91 #7 0xc0bdea10 at ffs_mount+0x1590 #8 0xc0a39c17 at vfs_donmount+0x1147 #9 0xc0a3a284 at nmount+0x84 #10 0xc09eb163 at syscallenter+0x263 #11 0xc0cd2caf at syscall+0x4f #12 0xc0cbc171 at Xint0x80_syscall+0x21 dev md5a fsync: giving up on dirty 0xc797d984: tag devfs, type VCHR usecount 1, writecount 0, refcount 2593 mountedhere 0xc8a2fe00 flags () v_object 0xcab6cdd0 ref 0 pages 10358 lock type devfs: EXCL by thread 0xc8a902e0 (pid 78254) #0 0xc0990e0e at __lockmgr_args+0xbfe #1 0xc0a30485 at vop_stdlock+0x65 #2 0xc0cf5455 at VOP_LOCK1_APV+0xb5 #3 0xc0a50408 at _vn_lock+0x78 #4 0xc0bd8b77 at softdep_flushworklist+0x47 #5 0xc0bdcb3d at ffs_sync+0x2fd #6 0xc0a501e2 at vfs_write_suspend+0x122 #7 0xc0bc2011 at ffs_snapshot+0xc91 #8 0xc0bdea10 at ffs_mount+0x1590 #9 0xc0a39c17 at vfs_donmount+0x1147 #10 0xc0a3a284 at nmount+0x84 #11 0xc09eb163 at syscallenter+0x263 #12 0xc0cd2caf at syscall+0x4f #13 0xc0cbc171 at Xint0x80_syscall+0x21 dev md5a fsync: giving up on dirty 0xc797d984: tag devfs, type VCHR usecount 1, writecount 0, refcount 2593 mountedhere 0xc8a2fe00 flags () v_object 0xcab6cdd0 ref 0 pages 10358 lock type devfs: EXCL by thread 0xc7ebb5c0 (pid 78309) #0 0xc0990e0e at __lockmgr_args+0xbfe #1 0xc0a30485 at vop_stdlock+0x65 #2 0xc0cf5455 at VOP_LOCK1_APV+0xb5 #3 0xc0a50408 at _vn_lock+0x78 #4 0xc0bd8b77 at softdep_flushworklist+0x47 #5 0xc0bdcb3d at ffs_sync+0x2fd #6 0xc0a501e2 at vfs_write_suspend+0x122 #7 0xc0bc2011 at ffs_snapshot+0xc91 #8 0xc0bdea10 at ffs_mount+0x1590 #9 0xc0a39c17 at vfs_donmount+0x1147 #10 0xc0a3a284 at nmount+0x84 #11 0xc09eb163 at syscallenter+0x263 #12 0xc0cd2caf at syscall+0x4f #13 0xc0cbc171 at Xint0x80_syscall+0x21 dev md5a fsync: giving up on dirty 0xc797d984: tag devfs, type VCHR usecount 1, writecount 0, refcount 2593 mountedhere 0xc8a2fe00 flags () v_object 0xcab6cdd0 ref 0 pages 10358 lock type devfs: EXCL by thread 0xc8aa22e0 (pid 78331) #0 0xc0990e0e at __lockmgr_args+0xbfe #1 0xc0a30485 at vop_stdlock+0x65 #2 0xc0cf5455 at VOP_LOCK1_APV+0xb5 #3 0xc0a50408 at _vn_lock+0x78 #4 0xc0bd8b77 at softdep_flushworklist+0x47 #5 0xc0bdcb3d at ffs_sync+0x2fd #6 0xc0a501e2 at vfs_write_suspend+0x122 #7 0xc0bc2011 at ffs_snapshot+0xc91 #8 0xc0bdea10 at ffs_mount+0x1590 #9 0xc0a39c17 at vfs_donmount+0x1147 #10 0xc0a3a284 at nmount+0x84 #11 0xc09eb163 at syscallenter+0x263 #12 0xc0cd2caf at syscall+0x4f #13 0xc0cbc171 at Xint0x80_syscall+0x21 dev md5a fsync: giving up on dirty 0xc797d984: tag devfs, type VCHR usecount 1, writecount 0, refcount 2593 mountedhere 0xc8a2fe00 flags () v_object 0xcab6cdd0 ref 0 pages 10358 lock type devfs: EXCL by thread 0xc8aa22e0 (pid 78331) #0 0xc0990e0e at __lockmgr_args+0xbfe #1 0xc0a30485 at vop_stdlock+0x65 #2 0xc0cf5455 at VOP_LOCK1_APV+0xb5 #3 0xc0a50408 at _vn_lock+0x78 #4 0xc0bdcc15 at ffs_sync+0x3d5 #5 0xc0a501e2 at vfs_write_suspend+0x122 #6 0xc0bc2011 at ffs_snapshot+0xc91 #7 0xc0bdea10 at ffs_mount+0x1590 #8 0xc0a39c17 at vfs_donmount+0x1147 #9 0xc0a3a284 at nmount+0x84 #10 0xc09eb163 at syscallenter+0x263 #11 0xc0cd2caf at syscall+0x4f #12 0xc0cbc171 at Xint0x80_syscall+0x21 dev md5a fsync: giving up on dirty 0xc797d984: tag devfs, type VCHR usecount 1, writecount 0, refcount 2593 mountedhere 0xc8a2fe00 flags () v_object 0xcab6cdd0 ref 0 pages 10358 lock type devfs: EXCL by thread 0xc9210b80 (pid 78349) #0 0xc0990e0e at __lockmgr_args+0xbfe #1 0xc0a30485 at vop_stdlock+0x65 #2 0xc0cf5455 at VOP_LOCK1_APV+0xb5 #3 0xc0a50408 at _vn_lock+0x78 #4 0xc0bd8b77 at softdep_flushworklist+0x47 #5 0xc0bdcb3d at ffs_sync+0x2fd #6 0xc0a501e2 at vfs_write_suspend+0x122 #7 0xc0bc2011 at ffs_snapshot+0xc91 #8 0xc0bdea10 at ffs_mount+0x1590 #9 0xc0a39c17 at vfs_donmount+0x1147 #10 0xc0a3a284 at nmount+0x84 #11 0xc09eb163 at syscallenter+0x263 #12 0xc0cd2caf at syscall+0x4f #13 0xc0cbc171 at Xint0x80_syscall+0x21 dev md5a fsync: giving up on dirty 0xc797d984: tag devfs, type VCHR usecount 1, writecount 0, refcount 2593 mountedhere 0xc8a2fe00 flags () v_object 0xcab6cdd0 ref 0 pages 10358 lock type devfs: EXCL by thread 0xc7b035c0 (pid 78418) #0 0xc0990e0e at __lockmgr_args+0xbfe #1 0xc0a30485 at vop_stdlock+0x65 #2 0xc0cf5455 at VOP_LOCK1_APV+0xb5 #3 0xc0a50408 at _vn_lock+0x78 #4 0xc0bd8b77 at softdep_flushworklist+0x47 #5 0xc0bdcb3d at ffs_sync+0x2fd #6 0xc0a501e2 at vfs_write_suspend+0x122 #7 0xc0bc2011 at ffs_snapshot+0xc91 #8 0xc0bdea10 at ffs_mount+0x1590 #9 0xc0a39c17 at vfs_donmount+0x1147 #10 0xc0a3a284 at nmount+0x84 #11 0xc09eb163 at syscallenter+0x263 #12 0xc0cd2caf at syscall+0x4f #13 0xc0cbc171 at Xint0x80_syscall+0x21 dev md5a fsync: giving up on dirty 0xc797d984: tag devfs, type VCHR usecount 1, writecount 0, refcount 2593 mountedhere 0xc8a2fe00 flags () v_object 0xcab6cdd0 ref 0 pages 10358 lock type devfs: EXCL by thread 0xc7b035c0 (pid 78418) #0 0xc0990e0e at __lockmgr_args+0xbfe #1 0xc0a30485 at vop_stdlock+0x65 #2 0xc0cf5455 at VOP_LOCK1_APV+0xb5 #3 0xc0a50408 at _vn_lock+0x78 #4 0xc0bdcc15 at ffs_sync+0x3d5 #5 0xc0a501e2 at vfs_write_suspend+0x122 #6 0xc0bc2011 at ffs_snapshot+0xc91 #7 0xc0bdea10 at ffs_mount+0x1590 #8 0xc0a39c17 at vfs_donmount+0x1147 #9 0xc0a3a284 at nmount+0x84 #10 0xc09eb163 at syscallenter+0x263 #11 0xc0cd2caf at syscall+0x4f #12 0xc0cbc171 at Xint0x80_syscall+0x21 dev md5a fsync: giving up on dirty 0xc797d984: tag devfs, type VCHR usecount 1, writecount 0, refcount 2593 mountedhere 0xc8a2fe00 flags () v_object 0xcab6cdd0 ref 0 pages 10358 lock type devfs: EXCL by thread 0xc920eb80 (pid 78436) #0 0xc0990e0e at __lockmgr_args+0xbfe #1 0xc0a30485 at vop_stdlock+0x65 #2 0xc0cf5455 at VOP_LOCK1_APV+0xb5 #3 0xc0a50408 at _vn_lock+0x78 #4 0xc0bd8b77 at softdep_flushworklist+0x47 #5 0xc0bdcb3d at ffs_sync+0x2fd #6 0xc0a501e2 at vfs_write_suspend+0x122 #7 0xc0bc2011 at ffs_snapshot+0xc91 #8 0xc0bdea10 at ffs_mount+0x1590 #9 0xc0a39c17 at vfs_donmount+0x1147 #10 0xc0a3a284 at nmount+0x84 #11 0xc09eb163 at syscallenter+0x263 #12 0xc0cd2caf at syscall+0x4f #13 0xc0cbc171 at Xint0x80_syscall+0x21 dev md5a fsync: giving up on dirty 0xc797d984: tag devfs, type VCHR usecount 1, writecount 0, refcount 2593 mountedhere 0xc8a2fe00 flags () v_object 0xcab6cdd0 ref 0 pages 10358 lock type devfs: EXCL by thread 0xc8549000 (pid 78468) #0 0xc0990e0e at __lockmgr_args+0xbfe #1 0xc0a30485 at vop_stdlock+0x65 #2 0xc0cf5455 at VOP_LOCK1_APV+0xb5 #3 0xc0a50408 at _vn_lock+0x78 #4 0xc0bd8b77 at softdep_flushworklist+0x47 #5 0xc0bdcb3d at ffs_sync+0x2fd #6 0xc0a501e2 at vfs_write_suspend+0x122 #7 0xc0bc2011 at ffs_snapshot+0xc91 #8 0xc0bdea10 at ffs_mount+0x1590 #9 0xc0a39c17 at vfs_donmount+0x1147 #10 0xc0a3a284 at nmount+0x84 #11 0xc09eb163 at syscallenter+0x263 #12 0xc0cd2caf at syscall+0x4f #13 0xc0cbc171 at Xint0x80_syscall+0x21 dev md5a fsync: giving up on dirty 0xc797d984: tag devfs, type VCHR usecount 1, writecount 0, refcount 2593 mountedhere 0xc8a2fe00 flags () v_object 0xcab6cdd0 ref 0 pages 10358 lock type devfs: EXCL by thread 0xc85488a0 (pid 78486) #0 0xc0990e0e at __lockmgr_args+0xbfe #1 0xc0a30485 at vop_stdlock+0x65 #2 0xc0cf5455 at VOP_LOCK1_APV+0xb5 #3 0xc0a50408 at _vn_lock+0x78 #4 0xc0bd8b77 at softdep_flushworklist+0x47 #5 0xc0bdcb3d at ffs_sync+0x2fd #6 0xc0a501e2 at vfs_write_suspend+0x122 #7 0xc0bc2011 at ffs_snapshot+0xc91 #8 0xc0bdea10 at ffs_mount+0x1590 #9 0xc0a39c17 at vfs_donmount+0x1147 #10 0xc0a3a284 at nmount+0x84 #11 0xc09eb163 at syscallenter+0x263 #12 0xc0cd2caf at syscall+0x4f #13 0xc0cbc171 at Xint0x80_syscall+0x21 dev md5a Expensive timeout(9) function: 0xc0999f70(0) 0.200042392 s interrupt total irq1: atkbd0 1 irq4: uart0 56056 irq6: fdc0 1 irq9: acpi0 1 irq14: ata0 14 irq16: ohci0 2 irq17: ohci1 ohci3 3 irq18: ohci2 ohci4 3 irq20: fwohci0 1 irq22: ahci0 1026334 cpu0:timer 11640492 irq256: re0 48725 cpu1:timer 12013394 cpu2:timer 12579861 cpu3:timer 12760523 Total 50125457 KDB: stack backtrace: db_trace_self_wrapper(c0e8a476,41138b,ef46936c,c0cdcd2e,53757e6d,...) at db_trace_self_wrapper+0x26 kdb_backtrace(c0e7ed0a,2fcda91,0,2fcda91,0,...) at kdb_backtrace+0x2a watchdog_fire(1,0,c0e7ebd7,216,c7494b80,...) at watchdog_fire+0xa9 hardclock_anycpu(1,0,ef46943c,c09b4bbd,0,...) at hardclock_anycpu+0x262 handleevents(ef46945c,0,0,ef4694a0,c09b5daf,53757e6d,3e65,c81f7726,1d928039,5b49800) at handleevents+0x108 timercb(c11e5f00,0,3,0,c6d5b1e0,...) at timercb+0x29d lapic_handle_timer(ef4694a0) at lapic_handle_timer+0x83 Xtimerint() at Xtimerint+0x20 --- interrupt, eip = 0xc09f18fc, esp = 0xef4694e0, ebp = 0xef46952c --- _isitmyx(c0e8e1ab,ef469594,c09f3626,c9e6e220,ef46955c,...) at _isitmyx+0xc isitmychild(c9e6e220,ef46955c,c09f279b,c0ebbe15,c0e7c1d2,...) at isitmychild+0x17 witness_checkorder(c9e6b8ec,9,c0ebbe0c,55a,0,...) at witness_checkorder+0x256 _mtx_lock_flags(c9e6b8ec,0,c0ebbe0c,55a,0,...) at _mtx_lock_flags+0xc4 ffs_sync(c7748b50,1,277,c0e97242,0,...) at ffs_sync+0x176 vfs_write_suspend(c7748b50,ef4698b8,0,4000,c6d9f000,...) at vfs_write_suspend+0x122 ffs_snapshot(c7748b50,c9e9e740,c0ebbe0c,174,ef469980,...) at ffs_snapshot+0xc91 ffs_mount(c7748b50,c8514900,ff,393,0,...) at ffs_mount+0x1590 vfs_donmount(c7494b80,211300,cc66c980,cc66c980,c8b32af0,...) at vfs_donmount+0x1147 nmount(c7494b80,ef469cec,ef469d28,c0e8c5de,0,...) at nmount+0x84 syscallenter(c7494b80,ef469ce4,ef469ce4,0,0,...) at syscallenter+0x263 syscall(ef469d28) at syscall+0x4f Xint0x80_syscall() at Xint0x80_syscall+0x21 --- syscall (378, FreeBSD ELF32, nmount), eip = 0x280da9db, esp = 0xbfbfe0cc, ebp = 0xbfbfe848 --- KDB: enter: watchdog timeout [ thread pid 78504 tid 100248 ] Stopped at kdb_enter+0x3a: movl $0,kdb_why db> run pho db:0:pho> bt Tracing pid 78504 tid 100248 td 0xc7494b80 kdb_enter(c0d29bf6,c0e19c79,0,2fcda91,0) at kdb_enter+0x3a watchdog_fire(1,0,c0e7ebd7,216,c7494b80,...) at watchdog_fire+0xbd hardclock_anycpu(1,0,ef46943c,c09b4bbd,0,...) at hardclock_anycpu+0x262 handleevents(ef46945c,0,0,ef4694a0,c09b5daf,53757e6d,3e65,c81f7726,1d928039,5b49800) at handleevents+0x108 timercb(c11e5f00,0,3,0,c6d5b1e0,...) at timercb+0x29d lapic_handle_timer(ef4694a0) at lapic_handle_timer+0x83 Xtimerint() at Xtimerint+0x20 --- interrupt, eip = 0xc09f18fc, esp = 0xef4694e0, ebp = 0xef46952c --- _isitmyx(c0e8e1ab,ef469594,c09f3626,c9e6e220,ef46955c,...) at _isitmyx+0xc isitmychild(c9e6e220,ef46955c,c09f279b,c0ebbe15,c0e7c1d2,...) at isitmychild+0x17 witness_checkorder(c9e6b8ec,9,c0ebbe0c,55a,0,...) at witness_checkorder+0x256 _mtx_lock_flags(c9e6b8ec,0,c0ebbe0c,55a,0,...) at _mtx_lock_flags+0xc4 ffs_sync(c7748b50,1,277,c0e97242,0,...) at ffs_sync+0x176 vfs_write_suspend(c7748b50,ef4698b8,0,4000,c6d9f000,...) at vfs_write_suspend+0x122 ffs_snapshot(c7748b50,c9e9e740,c0ebbe0c,174,ef469980,...) at ffs_snapshot+0xc91 ffs_mount(c7748b50,c8514900,ff,393,0,...) at ffs_mount+0x1590 vfs_donmount(c7494b80,211300,cc66c980,cc66c980,c8b32af0,...) at vfs_donmount+0x1147 nmount(c7494b80,ef469cec,ef469d28,c0e8c5de,0,...) at nmount+0x84 syscallenter(c7494b80,ef469ce4,ef469ce4,0,0,...) at syscallenter+0x263 syscall(ef469d28) at syscall+0x4f Xint0x80_syscall() at Xint0x80_syscall+0x21 --- syscall (378, FreeBSD ELF32, nmount), eip = 0x280da9db, esp = 0xbfbfe0cc, ebp = 0xbfbfe848 --- db:0:bt> show allpcpu Current CPU: 3 cpuid = 0 dynamic pcpu = 0x44e800 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 = 0x5b43800 curthread = 0xc6dbf2e0: pid 11 "idle: cpu1" curpcb = 0xc6b30d80 fpcurthread = none idlethread = 0xc6dbf2e0: tid 100005 "idle: cpu1" APIC ID = 1 currentldt = 0x50 spin locks held: cpuid = 2 dynamic pcpu = 0x5b46800 curthread = 0xc6dbf5c0: pid 11 "idle: cpu2" curpcb = 0xc6b2dd80 fpcurthread = none idlethread = 0xc6dbf5c0: tid 100004 "idle: cpu2" APIC ID = 2 currentldt = 0x50 spin locks held: cpuid = 3 dynamic pcpu = 0x5b49800 curthread = 0xc7494b80: pid 78504 "mksnap_ffs" curpcb = 0xef469d80 fpcurthread = none idlethread = 0xc6dbf8a0: tid 100003 "idle: cpu3" APIC ID = 3 currentldt = 0x50 spin locks held: db:0:allpcpu> show alllocks Process 78504 (mksnap_ffs) thread 0xc7494b80 (100248) exclusive sleep mutex struct mount mtx (struct mount mtx) r = 0 (0xc7748b50) locked @ kern/vfs_mount.c:1685 exclusive sleep mutex Giant (Giant) r = 0 (0xc1010d70) locked @ kern/vfs_mount.c:1068 Process 44114 (sshd) thread 0xc7da42e0 (100153) exclusive sx so_rcv_sx (so_rcv_sx) r = 0 (0xc7bf322c) locked @ kern/uipc_sockbuf.c:148 Process 44112 (sshd) thread 0xc7b032e0 (100136) exclusive sx so_rcv_sx (so_rcv_sx) r = 0 (0xc7bf2bec) locked @ kern/uipc_sockbuf.c:148 Process 44111 (sshd) thread 0xc741c2e0 (100090) exclusive sx so_rcv_sx (so_rcv_sx) r = 0 (0xc7bf3d8c) locked @ kern/uipc_sockbuf.c:148 Process 2237 (sshd) thread 0xc7da38a0 (100156) exclusive sx so_rcv_sx (so_rcv_sx) r = 0 (0xc7a0b3cc) locked @ kern/uipc_sockbuf.c:148 Process 2223 (sshd) thread 0xc7da35c0 (100157) exclusive sx so_rcv_sx (so_rcv_sx) r = 0 (0xc77dbbec) locked @ kern/uipc_sockbuf.c:148 db:0:alllocks> show lockedvnods Locked vnodes db:0:lockedvnods> show mount 0xc73f5b50 /dev/ad4s1a on / (ufs) 0xc73f6000 devfs on /dev (devfs) 0xc77485a8 /dev/ad4s1f on /home (ufs) 0xc73f55a8 /dev/ad4s1d on /usr (ufs) 0xc73f52d4 /dev/ad4s1e on /var (ufs) 0xc73f5000 procfs on /proc (procfs) 0xc77c0000 linprocfs on /usr/compat/linux/proc (linprocfs) 0xc77bfb50 /dev/label/tmp on /tmp (ufs) 0xc7748b50 /dev/md5a on /mnt (ufs) More info: show mount db:0:mount> ps pid ppid pgrp uid state wmesg wchan cmd 83262 44131 44130 1001 S nanslp 0xc1012684 sleep 82663 2226 82663 1001 D+ suspfs 0xc7748b98 ls 78551 78550 2134 0 D suspfs 0xc7748b98 ls 78550 2134 2134 0 S wait 0xc7df8000 sh 78504 78503 76092 0 R+ CPU 3 mksnap_ffs 78503 76092 76092 0 S+ wait 0xc8dd3578 dump 78400 78396 76112 1001 S+ suspfs 0xc7748b98 mkdir 78399 78396 76112 1001 S+ suspfs 0xc7748b98 mkdir 78398 78396 76112 1001 S+ suspfs 0xc7748b98 mkdir 78397 78394 76112 1001 S+ suspfs 0xc7748b98 creat 78396 78393 76112 1001 S+ wait 0xc7ef32bc mkdir 78395 78394 76112 1001 S+ suspfs 0xc7748b98 creat 78394 78392 76112 1001 S+ wait 0xc8507af0 creat 78393 76120 76112 1001 S+ wait 0xc7f01af0 mkdir 78392 76120 76112 1001 S+ wait 0xc979d000 creat 76120 76119 76112 1001 S+ wait 0xc8b23af0 run 76119 76118 76112 1001 S+ wait 0xc7f36578 run 76118 76113 76112 1001 S+ wait 0xc8a77af0 run 76113 76112 76112 1001 S+ wait 0xc8633834 sh 76112 76110 76112 1001 S+ wait 0xc7f052bc bash 76110 76092 76092 0 S+ wait 0xc923eaf0 su 76105 0 0 0 DL mdwait 0xc9171800 [md5] 76092 2252 76092 0 S+ wait 0xc8dd4834 sh 44132 44130 44130 1001 S piperd 0xc804dab8 awk 44131 44130 44130 1001 S wait 0xc8544000 sh 44130 44129 44130 1001 SWs wait 0xc74abaf0 sh 44129 44114 44114 1001 S select 0xc84c5164 sshd 44128 44125 44128 1001 Ls+ *Giant 0xc7447980 top 44127 44126 44127 1001 Ss kqread 0xc7bf7680 tail 44126 44112 44112 1001 S select 0xc7497ea4 sshd 44125 44111 44111 1001 S select 0xc84c51a4 sshd 44114 2089 44114 0 SWs sbwait 0xc7bf3258 sshd 44112 2089 44112 0 SWs sbwait 0xc7bf2c18 sshd 44111 2089 44111 0 SWs sbwait 0xc7bf3db8 sshd 2252 2248 2252 0 S+ wait 0xc78f3834 bash 2248 2247 2248 0 SW+ pause 0xc74ae5d0 csh 2247 2240 2247 1001 SW+ wait 0xc74ac2bc su 2240 2239 2240 1001 SWs+ wait 0xc78f3000 bash 2239 2237 2237 1001 S select 0xc73f1724 sshd 2237 2089 2237 0 SWs sbwait 0xc7a0b3f8 sshd 2226 2225 2226 1001 Ss+ ttyin 0xc7e07270 bash 2225 2223 2223 1001 S select 0xc716c564 sshd 2223 2089 2223 0 SWs sbwait 0xc77dbc18 sshd 2214 1 2214 0 Ss+ ttyin 0xc7182070 getty 2213 1 2213 0 Ss+ ttyin 0xc7182270 getty 2212 1 2212 0 Ss+ ttyin 0xc7182470 getty 2211 1 2211 0 Ss+ ttyin 0xc6f52070 getty 2210 1 2210 0 Ss+ ttyin 0xc6f52270 getty 2209 1 2209 0 Ss+ ttyin 0xc6f52470 getty 2208 1 2208 0 Ss+ ttyin 0xc6f52670 getty 2207 1 2207 0 Ss+ ttyin 0xc6f52870 getty 2206 1 2206 0 Ss+ ttyin 0xc6f52a70 getty 2161 1 2161 0 Ss select 0xc78fd0a4 inetd 2134 1 2134 0 Ss wait 0xc7493834 watchdogd 2109 1 2109 0 Ss nanslp 0xc1012684 cron 2101 1 2101 25 Ss pause 0xc7afe5d0 sendmail 2097 1 2097 0 Ss select 0xc716c4a4 sendmail 2089 1 2089 0 Ss select 0xc73e65a4 sshd 2025 1 2025 0 Ss select 0xc73e6724 moused 1965 1 1965 0 Ss select 0xc78fd124 ntpd 1847 1846 1846 0 S (threaded) nfsd 100125 S rpcsvc 0xc7a0ecd0 nfsd: service 100124 S rpcsvc 0xc7a0e810 nfsd: service 100123 S rpcsvc 0xc7a0e850 nfsd: service 100089 S rpcsvc 0xc7a0ed10 nfsd: master 1846 1 1846 0 Ss select 0xc73e6d24 nfsd 1836 1 1836 0 Ss select 0xc7497824 mountd 1737 1 1737 0 Ss select 0xc7497864 rpcbind 1710 1 1710 0 Ss select 0xc716c3a4 syslogd 1509 1 1509 0 Ss select 0xc73e6c64 devd 18 0 0 0 DL sdflush 0xc118ed80 [softdepflush] 17 0 0 0 DL syncer 0xc1188814 [syncer] 16 0 0 0 DL vlruwt 0xc73a4834 [vnlru] 9 0 0 0 DL psleep 0xc11884a8 [bufdaemon] 8 0 0 0 DL pgzero 0xc1190bdc [pagezero] 7 0 0 0 DL psleep 0xc11907c8 [vmdaemon] 6 0 0 0 DL psleep 0xc1190790 [pagedaemon] 5 0 0 0 DL ccb_scan 0xc0fd7554 [xpt_thrd] 4 0 0 0 DL waiting_ 0xc118a2d8 [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 - 0xc1011484 [yarrow] 13 0 0 0 DL (threaded) [geom] 100015 D - 0xc100f0c8 [g_down] 100014 D - 0xc100f0c4 [g_up] 100013 D - 0xc100f0bc [g_event] 12 0 0 0 LL (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 I [swi4: clock] 100009 L *Giant 0xc7447980 [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 Run CPU 1 [idle: cpu1] 100004 Run CPU 2 [idle: cpu2] 100003 CanRun [idle: cpu3] 1 0 1 0 SLs wait 0xc6dbdaf0 [init] 10 0 0 0 DL audit_wo 0xc118e500 [audit] 0 0 0 0 DLs (threaded) [kernel] 100076 D - 0xc71853c0 [mca taskq] 100066 D - 0xc1011484 [deadlkres] 100060 D - 0xc7073900 [fw0_taskq] 100026 D - 0xc6d92340 [kqueue taskq] 100025 D - 0xc6d92380 [acpi_task_2] 100024 D - 0xc6d92380 [acpi_task_1] 100023 D - 0xc6d92380 [acpi_task_0] 100022 D - 0xc6d923c0 [ffs_trim taskq] 100019 D - 0xc6d92500 [thread taskq] 100016 D - 0xc6d92a80 [firmware taskq] 100000 D sched 0xc100f1a0 [swapper] db:0:ps> allt Tracing command sleep pid 83262 tid 100140 td 0xc7b025c0 sched_switch(c7b025c0,0,104,191,c4d4af79,...) at sched_switch+0x3bc mi_switch(104,0,c0e8bca0,1f3,6c,...) at mi_switch+0x219 sleepq_switch(c7b025c0,0,c0e8bca0,1a7,6c,...) at sleepq_switch+0x162 sleepq_catch_signals(2711,c09e7830,c7b025c0,0,100,...) at sleepq_catch_signals+0xf9 sleepq_timedwait_sig(c1012684,6c,c0e87a97,100,0,...) at sleepq_timedwait_sig+0x1a _sleep(c1012684,0,16c,c0e87a97,2711,...) at _sleep+0x328 kern_nanosleep(c7b025c0,ef2f0c34,ef2f0c3c,a,0,...) at kern_nanosleep+0xc1 nanosleep(c7b025c0,ef2f0cec,ef2f0d28,c0e8c5de,0,...) at nanosleep+0x6f syscallenter(c7b025c0,ef2f0ce4,ef2f0ce4,0,0,...) at syscallenter+0x263 syscall(ef2f0d28) at syscall+0x4f Xint0x80_syscall() at Xint0x80_syscall+0x21 --- syscall (240, FreeBSD ELF32, nanosleep), eip = 0x28165b77, esp = 0xbfbfec5c, ebp = 0xbfbfeca8 --- Tracing command ls pid 82663 tid 100311 td 0xc8548b80 sched_switch(c8548b80,0,104,191,73b1d30f,...) at sched_switch+0x3bc mi_switch(104,0,c0e8bca0,1f3,77,...) at mi_switch+0x219 sleepq_switch(c8548b80,0,c0e8bca0,268,0,...) at sleepq_switch+0x162 sleepq_wait(c7748b98,77,c0e9723b,0,0,...) at sleepq_wait+0x63 _sleep(c7748b98,c7748b50,77,c0e9723b,0,...) at _sleep+0x372 vn_start_write(cb537000,ef55fb30,1,c0cf1b65,0,...) at vn_start_write+0xdd vn_close(cb537000,5,c6d9f280,c8548b80,c8548b80,...) at vn_close+0x87 vn_closefile(c74521c0,c8548b80,3,0,c74521c0,...) at vn_closefile+0xe4 _fdrop(c74521c0,c8548b80,ef55fbe8,c09f283c,0,c8548c30,c0fa1ac0,c1158c08,c0e80029,c8548b80,c77d8a2c,4ab,ef55fc10,c09b0997,c77d8a2c,8,c0e80020,4ab) at _fdrop+0x43 closef(c74521c0,c8548b80,4ab,490,c77d8a2c,...) at closef+0x290 kern_close(c8548b80,4,ef55fc7c,c09eb163,c8548b80,...) at kern_close+0x117 close(c8548b80,ef55fcec,ef55fd28,c0e8c5de,0,...) at close+0x1a syscallenter(c8548b80,ef55fce4,ef55fce4,0,0,...) at syscallenter+0x263 syscall(ef55fd28) at syscall+0x4f Xint0x80_syscall() at Xint0x80_syscall+0x21 --- syscall (6, FreeBSD ELF32, close), eip = 0x281d7603, esp = 0xbfbfe3dc, ebp = 0xbfbfe3f8 --- Tracing command ls pid 78551 tid 100481 td 0xc8a928a0 sched_switch(c8a928a0,0,104,191,4987a6a0,...) at sched_switch+0x3bc mi_switch(104,0,c0e8bca0,1f3,77,...) at mi_switch+0x219 sleepq_switch(c8a928a0,0,c0e8bca0,268,0,...) at sleepq_switch+0x162 sleepq_wait(c7748b98,77,c0e9723b,0,0,...) at sleepq_wait+0x63 _sleep(c7748b98,c7748b50,77,c0e9723b,0,...) at _sleep+0x372 vn_start_write(cb537000,ef808b30,1,c0cf1b65,0,...) at vn_start_write+0xdd vn_close(cb537000,5,c6d9ee80,c8a928a0,c8a928a0,...) at vn_close+0x87 vn_closefile(c780a7a8,c8a928a0,3,0,c780a7a8,...) at vn_closefile+0xe4 _fdrop(c780a7a8,c8a928a0,ef808be8,c09f283c,0,c8a92950,c0fa1ac0,c1159e40,c0e80029,c8a928a0,c78cdb2c,4ab,ef808c10,c09b0997,c78cdb2c,8,c0e80020,4ab) at _fdrop+0x43 closef(c780a7a8,c8a928a0,4ab,490,c78cdb2c,...) at closef+0x290 kern_close(c8a928a0,7,ef808c7c,c09eb163,c8a928a0,...) at kern_close+0x117 close(c8a928a0,ef808cec,ef808d28,c0e8c5de,0,...) at close+0x1a syscallenter(c8a928a0,ef808ce4,ef808ce4,0,0,...) at syscallenter+0x263 syscall(ef808d28) at syscall+0x4f Xint0x80_syscall() at Xint0x80_syscall+0x21 --- syscall (6, FreeBSD ELF32, close), eip = 0x281d7603, esp = 0xbfbfe5ec, ebp = 0xbfbfe608 --- Tracing command sh pid 78550 tid 100400 td 0xc920e5c0 sched_switch(c920e5c0,0,104,191,48025fcb,...) at sched_switch+0x3bc mi_switch(104,0,c0e8bca0,1f3,6c,...) at mi_switch+0x219 sleepq_switch(c920e5c0,0,c0e8bca0,1a7,6c,...) at sleepq_switch+0x162 sleepq_catch_signals(c0e8bca0,160,0,100,100,...) at sleepq_catch_signals+0xf9 sleepq_wait_sig(c7df8000,6c,c0e8ea32,100,0,...) at sleepq_wait_sig+0x17 _sleep(c7df8000,c7df8088,16c,c0e8ea32,0,...) at _sleep+0x35c kern_wait(c920e5c0,ffffffff,ef6b2c44,2,0,...) at kern_wait+0xbe6 wait4(c920e5c0,ef6b2cec,2820fd28,1,0,...) at wait4+0x3b syscallenter(c920e5c0,ef6b2ce4,c0cd350d,c1010d70,0,...) at syscallenter+0x263 syscall(ef6b2d28) at syscall+0x4f Xint0x80_syscall() at Xint0x80_syscall+0x21 --- syscall (7, FreeBSD ELF32, wait4), eip = 0x2816a93b, esp = 0xbfbfeb1c, ebp = 0xbfbfeb38 --- Tracing command mksnap_ffs pid 78504 tid 100248 td 0xc7494b80 kdb_enter(c0d29bf6,c0e19c79,0,2fcda91,0) at kdb_enter+0x3a watchdog_fire(1,0,c0e7ebd7,216,c7494b80,...) at watchdog_fire+0xbd hardclock_anycpu(1,0,ef46943c,c09b4bbd,0,...) at hardclock_anycpu+0x262 handleevents(ef46945c,0,0,ef4694a0,c09b5daf,53757e6d,3e65,c81f7726,1d928039,5b49800) at handleevents+0x108 timercb(c11e5f00,0,3,0,c6d5b1e0,...) at timercb+0x29d lapic_handle_timer(ef4694a0) at lapic_handle_timer+0x83 Xtimerint() at Xtimerint+0x20 --- interrupt, eip = 0xc09f18fc, esp = 0xef4694e0, ebp = 0xef46952c --- _isitmyx(c0e8e1ab,ef469594,c09f3626,c9e6e220,ef46955c,...) at _isitmyx+0xc isitmychild(c9e6e220,ef46955c,c09f279b,c0ebbe15,c0e7c1d2,...) at isitmychild+0x17 witness_checkorder(c9e6b8ec,9,c0ebbe0c,55a,0,...) at witness_checkorder+0x256 _mtx_lock_flags(c9e6b8ec,0,c0ebbe0c,55a,0,...) at _mtx_lock_flags+0xc4 ffs_sync(c7748b50,1,277,c0e97242,0,...) at ffs_sync+0x176 vfs_write_suspend(c7748b50,ef4698b8,0,4000,c6d9f000,...) at vfs_write_suspend+0x122 ffs_snapshot(c7748b50,c9e9e740,c0ebbe0c,174,ef469980,...) at ffs_snapshot+0xc91 ffs_mount(c7748b50,c8514900,ff,393,0,...) at ffs_mount+0x1590 vfs_donmount(c7494b80,211300,cc66c980,cc66c980,c8b32af0,...) at vfs_donmount+0x1147 nmount(c7494b80,ef469cec,ef469d28,c0e8c5de,0,...) at nmount+0x84 syscallenter(c7494b80,ef469ce4,ef469ce4,0,0,...) at syscallenter+0x263 syscall(ef469d28) at syscall+0x4f Xint0x80_syscall() at Xint0x80_syscall+0x21 --- syscall (378, FreeBSD ELF32, nmount), eip = 0x280da9db, esp = 0xbfbfe0cc, ebp = 0xbfbfe848 --- Tracing command dump pid 78503 tid 100497 td 0xc8a8d5c0 sched_switch(c8a8d5c0,0,104,191,9abbc30e,...) at sched_switch+0x3bc mi_switch(104,0,c0e8bca0,1f3,6c,...) at mi_switch+0x219 sleepq_switch(c8a8d5c0,0,c0e8bca0,1a7,6c,...) at sleepq_switch+0x162 sleepq_catch_signals(c0e8bca0,160,0,100,100,...) at sleepq_catch_signals+0xf9 sleepq_wait_sig(c8dd3578,6c,c0e8ea32,100,0,...) at sleepq_wait_sig+0x17 _sleep(c8dd3578,c8dd3600,16c,c0e8ea32,0,...) at _sleep+0x35c kern_wait(c8a8d5c0,132a8,ef838c44,0,0,...) at kern_wait+0xbe6 wait4(c8a8d5c0,ef838cec,2819fd28,1,0,...) at wait4+0x3b syscallenter(c8a8d5c0,ef838ce4,c0cd350d,c1010d70,0,...) at syscallenter+0x263 syscall(ef838d28) at syscall+0x4f Xint0x80_syscall() at Xint0x80_syscall+0x21 --- syscall (7, FreeBSD ELF32, wait4), eip = 0x280fa93b, esp = 0xbfbfdecc, ebp = 0xbfbfdf78 --- Tracing command mkdir pid 78400 tid 100197 td 0xc78f55c0 sched_switch(c78f55c0,0,104,191,72cf6493,...) at sched_switch+0x3bc mi_switch(104,0,c0e8bca0,1f3,77,...) at mi_switch+0x219 sleepq_switch(c78f55c0,0,c0e8bca0,1a7,77,...) at sleepq_switch+0x162 sleepq_catch_signals(c0e8bca0,160,0,100,100,...) at sleepq_catch_signals+0xf9 sleepq_wait_sig(c7748b98,77,c0e9723b,100,0,...) at sleepq_wait_sig+0x17 _sleep(c7748b98,c7748b50,177,c0e9723b,0,...) at _sleep+0x35c vn_start_write(0,ef39bc14,104,ef39bbdc,bfbf8697,...) at vn_start_write+0xdd kern_rmdirat(c78f55c0,ffffff9c,bfbf8697,0,ef39bc50,...) at kern_rmdirat+0x16b kern_rmdir(c78f55c0,bfbf8697,0,ef39bc7c,c09eb163,...) at kern_rmdir+0x27 rmdir(c78f55c0,ef39bcec,ef39bd28,c0e8c5de,0,...) at rmdir+0x22 syscallenter(c78f55c0,ef39bce4,ef39bce4,fffffffe,246,...) at syscallenter+0x263 syscall(ef39bd28) at syscall+0x4f Xint0x80_syscall() at Xint0x80_syscall+0x21 --- syscall (137, FreeBSD ELF32, rmdir), eip = 0x280ee91b, esp = 0xbfbf822c, ebp = 0xbfbf8668 --- Tracing command mkdir pid 78399 tid 100322 td 0xc8547000 sched_switch(c8547000,0,104,191,72b9cc27,...) at sched_switch+0x3bc mi_switch(104,0,c0e8bca0,1f3,77,...) at mi_switch+0x219 sleepq_switch(c8547000,0,c0e8bca0,1a7,77,...) at sleepq_switch+0x162 sleepq_catch_signals(c0e8bca0,160,0,100,100,...) at sleepq_catch_signals+0xf9 sleepq_wait_sig(c7748b98,77,c0e9723b,100,0,...) at sleepq_wait_sig+0x17 _sleep(c7748b98,c7748b50,177,c0e9723b,0,...) at _sleep+0x35c vn_start_write(0,ef588c0c,104,0,0,...) at vn_start_write+0xdd kern_mkdirat(c8547000,ffffff9c,bfbfd77b,0,1f8,...) at kern_mkdirat+0x18b kern_mkdir(c8547000,bfbfd77b,0,1f8,ef588c7c,...) at kern_mkdir+0x2e mkdir(c8547000,ef588cec,ef588d28,c0e8c5de,0,...) at mkdir+0x29 syscallenter(c8547000,ef588ce4,ef588ce4,fffffffe,246,...) at syscallenter+0x263 syscall(ef588d28) at syscall+0x4f Xint0x80_syscall() at Xint0x80_syscall+0x21 --- syscall (136, FreeBSD ELF32, mkdir), eip = 0x28186663, esp = 0xbfbfd32c, ebp = 0xbfbfd758 --- Tracing command mkdir pid 78398 tid 100332 td 0xc7f0eb80 sched_switch(c7f0eb80,0,104,191,72b9df35,...) at sched_switch+0x3bc mi_switch(104,0,c0e8bca0,1f3,77,...) at mi_switch+0x219 sleepq_switch(c7f0eb80,0,c0e8bca0,1a7,77,...) at sleepq_switch+0x162 sleepq_catch_signals(c0e8bca0,160,0,100,100,...) at sleepq_catch_signals+0xf9 sleepq_wait_sig(c7748b98,77,c0e9723b,100,0,...) at sleepq_wait_sig+0x17 _sleep(c7748b98,c7748b50,177,c0e9723b,0,...) at _sleep+0x35c vn_start_write(0,ef5b0c0c,104,0,0,...) at vn_start_write+0xdd kern_mkdirat(c7f0eb80,ffffff9c,bfbebeeb,0,1f8,...) at kern_mkdirat+0x18b kern_mkdir(c7f0eb80,bfbebeeb,0,1f8,ef5b0c7c,...) at kern_mkdir+0x2e mkdir(c7f0eb80,ef5b0cec,ef5b0d28,c0e8c5de,0,...) at mkdir+0x29 syscallenter(c7f0eb80,ef5b0ce4,ef5b0ce4,fffffffe,246,...) at syscallenter+0x263 syscall(ef5b0d28) at syscall+0x4f Xint0x80_syscall() at Xint0x80_syscall+0x21 --- syscall (136, FreeBSD ELF32, mkdir), eip = 0x28186663, esp = 0xbfbeba9c, ebp = 0xbfbebec8 --- Tracing command creat pid 78397 tid 100204 td 0xc85082e0 sched_switch(c85082e0,0,104,191,c7093d38,...) at sched_switch+0x3bc mi_switch(104,0,c0e8bca0,1f3,77,...) at mi_switch+0x219 sleepq_switch(c85082e0,0,c0e8bca0,1a7,77,...) at sleepq_switch+0x162 sleepq_catch_signals(c0e8bca0,160,0,100,100,...) at sleepq_catch_signals+0xf9 sleepq_wait_sig(c7748b98,77,c0e9723b,100,0,...) at sleepq_wait_sig+0x17 _sleep(c7748b98,c7748b50,177,c0e9723b,0,...) at _sleep+0x35c vn_start_write(0,ef3b0c14,104,ef3b0bdc,804cc60,...) at vn_start_write+0xdd kern_rmdirat(c85082e0,ffffff9c,804cc60,0,ef3b0c50,...) at kern_rmdirat+0x16b kern_rmdir(c85082e0,804cc60,0,ef3b0c7c,c09eb163,...) at kern_rmdir+0x27 rmdir(c85082e0,ef3b0cec,ef3b0d28,c0e8c5de,0,...) at rmdir+0x22 syscallenter(c85082e0,ef3b0ce4,ef3b0ce4,0,0,...) at syscallenter+0x263 syscall(ef3b0d28) at syscall+0x4f Xint0x80_syscall() at Xint0x80_syscall+0x21 --- syscall (137, FreeBSD ELF32, rmdir), eip = 0x280ee91b, esp = 0xbfbfe64c, ebp = 0xbfbfe668 --- Tracing command mkdir pid 78396 tid 100309 td 0xc85492e0 sched_switch(c85492e0,0,104,191,729300c5,...) at sched_switch+0x3bc mi_switch(104,0,c0e8bca0,1f3,6c,...) at mi_switch+0x219 sleepq_switch(c85492e0,0,c0e8bca0,1a7,6c,...) at sleepq_switch+0x162 sleepq_catch_signals(c0e8bca0,160,0,100,100,...) at sleepq_catch_signals+0xf9 sleepq_wait_sig(c7ef32bc,6c,c0e8ea32,100,0,...) at sleepq_wait_sig+0x17 _sleep(c7ef32bc,c7ef3344,16c,c0e8ea32,0,...) at _sleep+0x35c kern_wait(c85492e0,1323e,ef559c44,0,0,...) at kern_wait+0xbe6 wait4(c85492e0,ef559cec,ef559d28,c0e8c5de,0,...) at wait4+0x3b syscallenter(c85492e0,ef559ce4,ef559ce4,fffffffe,246,...) at syscallenter+0x263 syscall(ef559d28) at syscall+0x4f Xint0x80_syscall() at Xint0x80_syscall+0x21 --- syscall (7, FreeBSD ELF32, wait4), eip = 0x2810493b, esp = 0xbfbfe7fc, ebp = 0xbfbfe818 --- Tracing command creat pid 78395 tid 100362 td 0xc7f40b80 sched_switch(c7f40b80,0,104,191,c6f4c634,...) at sched_switch+0x3bc mi_switch(104,0,c0e8bca0,1f3,77,...) at mi_switch+0x219 sleepq_switch(c7f40b80,0,c0e8bca0,1a7,77,...) at sleepq_switch+0x162 sleepq_catch_signals(c0e8bca0,160,0,100,100,...) at sleepq_catch_signals+0xf9 sleepq_wait_sig(c7748b98,77,c0e9723b,100,0,...) at sleepq_wait_sig+0x17 _sleep(c7748b98,c7748b50,177,c0e9723b,0,...) at _sleep+0x35c vn_start_write(0,ef61fc10,104,0,0,...) at vn_start_write+0xdd kern_unlinkat(c7f40b80,ffffff9c,bfbfe788,0,0,...) at kern_unlinkat+0x19b kern_unlink(c7f40b80,bfbfe788,0,ef61fc7c,c09eb163,...) at kern_unlink+0x2f unlink(c7f40b80,ef61fcec,ef61fd28,c0e8c5de,0,...) at unlink+0x22 syscallenter(c7f40b80,ef61fce4,ef61fce4,fffffffe,246,...) at syscallenter+0x263 syscall(ef61fd28) at syscall+0x4f Xint0x80_syscall() at Xint0x80_syscall+0x21 --- syscall (10, FreeBSD ELF32, unlink), eip = 0x28183bcf, esp = 0xbfbfe75c, ebp = 0xbfbfe818 --- Tracing command creat pid 78394 tid 100229 td 0xc854eb80 sched_switch(c854eb80,0,104,191,c6ccc27f,...) at sched_switch+0x3bc mi_switch(104,0,c0e8bca0,1f3,6c,...) at mi_switch+0x219 sleepq_switch(c854eb80,0,c0e8bca0,1a7,6c,...) at sleepq_switch+0x162 sleepq_catch_signals(c0e8bca0,160,0,100,100,...) at sleepq_catch_signals+0xf9 sleepq_wait_sig(c8507af0,6c,c0e8ea32,100,0,...) at sleepq_wait_sig+0x17 _sleep(c8507af0,c8507b78,16c,c0e8ea32,0,...) at _sleep+0x35c kern_wait(c854eb80,1323b,ef430c44,0,0,...) at kern_wait+0xbe6 wait4(c854eb80,ef430cec,ef430d28,c0e8c5de,0,...) at wait4+0x3b syscallenter(c854eb80,ef430ce4,ef430ce4,fffffffe,246,...) at syscallenter+0x263 syscall(ef430d28) at syscall+0x4f Xint0x80_syscall() at Xint0x80_syscall+0x21 --- syscall (7, FreeBSD ELF32, wait4), eip = 0x2810493b, esp = 0xbfbfe7fc, ebp = 0xbfbfe818 --- Tracing command mkdir pid 78393 tid 100328 td 0xc7f0f8a0 sched_switch(c7f0f8a0,0,104,191,729157e9,...) at sched_switch+0x3bc mi_switch(104,0,c0e8bca0,1f3,6c,...) at mi_switch+0x219 sleepq_switch(c7f0f8a0,0,c0e8bca0,1a7,6c,...) at sleepq_switch+0x162 sleepq_catch_signals(c0e8bca0,160,0,100,100,...) at sleepq_catch_signals+0xf9 sleepq_wait_sig(c7f01af0,6c,c0e8ea32,100,0,...) at sleepq_wait_sig+0x17 _sleep(c7f01af0,c7f01b78,16c,c0e8ea32,0,...) at _sleep+0x35c kern_wait(c7f0f8a0,1323c,ef5a0c44,0,0,...) at kern_wait+0xbe6 wait4(c7f0f8a0,ef5a0cec,281a9d28,1,0,...) at wait4+0x3b syscallenter(c7f0f8a0,ef5a0ce4,c0cd350d,c1010d70,0,...) at syscallenter+0x263 syscall(ef5a0d28) at syscall+0x4f Xint0x80_syscall() at Xint0x80_syscall+0x21 --- syscall (7, FreeBSD ELF32, wait4), eip = 0x2810493b, esp = 0xbfbfe7fc, ebp = 0xbfbfe818 --- Tracing command creat pid 78392 tid 100455 td 0xc84c28a0 sched_switch(c84c28a0,0,104,191,c6cc98a8,...) at sched_switch+0x3bc mi_switch(104,0,c0e8bca0,1f3,6c,...) at mi_switch+0x219 sleepq_switch(c84c28a0,0,c0e8bca0,1a7,6c,...) at sleepq_switch+0x162 sleepq_catch_signals(c0e8bca0,160,0,100,100,...) at sleepq_catch_signals+0xf9 sleepq_wait_sig(c979d000,6c,c0e8ea32,100,0,...) at sleepq_wait_sig+0x17 _sleep(c979d000,c979d088,16c,c0e8ea32,0,...) at _sleep+0x35c kern_wait(c84c28a0,1323a,ef75bc44,0,0,...) at kern_wait+0xbe6 wait4(c84c28a0,ef75bcec,281a9d28,1,0,...) at wait4+0x3b syscallenter(c84c28a0,ef75bce4,c0cd350d,c1010d70,0,...) at syscallenter+0x263 syscall(ef75bd28) at syscall+0x4f Xint0x80_syscall() at Xint0x80_syscall+0x21 --- syscall (7, FreeBSD ELF32, wait4), eip = 0x2810493b, esp = 0xbfbfe7fc, ebp = 0xbfbfe818 --- Tracing command run pid 76120 tid 100258 td 0xc8bb6b80 sched_switch(c8bb6b80,0,104,191,baa8d875,...) at sched_switch+0x3bc mi_switch(104,0,c0e8bca0,1f3,6c,...) at mi_switch+0x219 sleepq_switch(c8bb6b80,0,c0e8bca0,1a7,6c,...) at sleepq_switch+0x162 sleepq_catch_signals(c0e8bca0,160,0,100,100,...) at sleepq_catch_signals+0xf9 sleepq_wait_sig(c8b23af0,6c,c0e8ea32,100,0,...) at sleepq_wait_sig+0x17 _sleep(c8b23af0,c8b23b78,16c,c0e8ea32,0,...) at _sleep+0x35c kern_wait(c8bb6b80,13238,ef487c44,0,0,...) at kern_wait+0xbe6 wait4(c8bb6b80,ef487cec,ef487d28,c0e8c5de,0,...) at wait4+0x3b syscallenter(c8bb6b80,ef487ce4,ef487ce4,fffffffe,0,...) at syscallenter+0x263 syscall(ef487d28) at syscall+0x4f Xint0x80_syscall() at Xint0x80_syscall+0x21 --- syscall (7, FreeBSD ELF32, wait4), eip = 0x2810393b, esp = 0xbfbfe2ac, ebp = 0xbfbfe2c8 --- Tracing command run pid 76119 tid 100348 td 0xc7f42b80 sched_switch(c7f42b80,0,104,191,baa7b963,...) at sched_switch+0x3bc mi_switch(104,0,c0e8bca0,1f3,6c,...) at mi_switch+0x219 sleepq_switch(c7f42b80,0,c0e8bca0,1a7,6c,...) at sleepq_switch+0x162 sleepq_catch_signals(c0e8bca0,160,0,100,100,...) at sleepq_catch_signals+0xf9 sleepq_wait_sig(c7f36578,6c,c0e8ea32,100,0,...) at sleepq_wait_sig+0x17 _sleep(c7f36578,c7f36600,16c,c0e8ea32,0,...) at _sleep+0x35c kern_wait(c7f42b80,12958,ef5e6c44,0,0,...) at kern_wait+0xbe6 wait4(c7f42b80,ef5e6cec,ef5e6d28,c0e8c5de,0,...) at wait4+0x3b syscallenter(c7f42b80,ef5e6ce4,ef5e6ce4,fffffffe,246,...) at syscallenter+0x263 syscall(ef5e6d28) at syscall+0x4f Xint0x80_syscall() at Xint0x80_syscall+0x21 --- syscall (7, FreeBSD ELF32, wait4), eip = 0x2810393b, esp = 0xbfbfe7cc, ebp = 0xbfbfe7e8 --- Tracing command run pid 76118 tid 100437 td 0xc9c6b5c0 sched_switch(c9c6b5c0,0,104,191,baa79d53,...) at sched_switch+0x3bc mi_switch(104,0,c0e8bca0,1f3,6c,...) at mi_switch+0x219 sleepq_switch(c9c6b5c0,0,c0e8bca0,1a7,6c,...) at sleepq_switch+0x162 sleepq_catch_signals(c0e8bca0,160,0,100,100,...) at sleepq_catch_signals+0xf9 sleepq_wait_sig(c8a77af0,6c,c0e8ea32,100,0,...) at sleepq_wait_sig+0x17 _sleep(c8a77af0,c8a77b78,16c,c0e8ea32,0,...) at _sleep+0x35c kern_wait(c9c6b5c0,12957,ef725c44,0,0,...) at kern_wait+0xbe6 wait4(c9c6b5c0,ef725cec,281a8d28,1,0,...) at wait4+0x3b syscallenter(c9c6b5c0,ef725ce4,c0cd350d,c1010d70,0,...) at syscallenter+0x263 syscall(ef725d28) at syscall+0x4f Xint0x80_syscall() at Xint0x80_syscall+0x21 --- syscall (7, FreeBSD ELF32, wait4), eip = 0x2810393b, esp = 0xbfbfe7cc, ebp = 0xbfbfe7e8 --- Tracing command sh pid 76113 tid 100407 td 0xc920b000 sched_switch(c920b000,0,104,191,907a7721,...) at sched_switch+0x3bc mi_switch(104,0,c0e8bca0,1f3,6c,...) at mi_switch+0x219 sleepq_switch(c920b000,0,c0e8bca0,1a7,6c,...) at sleepq_switch+0x162 sleepq_catch_signals(c0e8bca0,160,0,100,100,...) at sleepq_catch_signals+0xf9 sleepq_wait_sig(c8633834,6c,c0e8ea32,100,0,...) at sleepq_wait_sig+0x17 _sleep(c8633834,c86338bc,16c,c0e8ea32,0,...) at _sleep+0x35c kern_wait(c920b000,ffffffff,ef6c7c44,2,0,...) at kern_wait+0xbe6 wait4(c920b000,ef6c7cec,ef6c7d28,c0e8c5de,0,...) at wait4+0x3b syscallenter(c920b000,ef6c7ce4,ef6c7ce4,0,0,...) at syscallenter+0x263 syscall(ef6c7d28) at syscall+0x4f Xint0x80_syscall() at Xint0x80_syscall+0x21 --- syscall (7, FreeBSD ELF32, wait4), eip = 0x2816a93b, esp = 0xbfbfe61c, ebp = 0xbfbfe638 --- Tracing command bash pid 76112 tid 100321 td 0xc85472e0 sched_switch(c85472e0,0,104,191,83e16d96,...) at sched_switch+0x3bc mi_switch(104,0,c0e8bca0,1f3,6c,...) at mi_switch+0x219 sleepq_switch(c85472e0,0,c0e8bca0,1a7,6c,...) at sleepq_switch+0x162 sleepq_catch_signals(c0e8bca0,160,0,100,100,...) at sleepq_catch_signals+0xf9 sleepq_wait_sig(c7f052bc,6c,c0e8ea32,100,0,...) at sleepq_wait_sig+0x17 _sleep(c7f052bc,c7f05344,16c,c0e8ea32,0,...) at _sleep+0x35c kern_wait(c85472e0,ffffffff,ef584c44,0,0,...) at kern_wait+0xbe6 wait4(c85472e0,ef584cec,28368d28,1,0,...) at wait4+0x3b syscallenter(c85472e0,ef584ce4,c0cd350d,c1010d70,0,...) at syscallenter+0x263 syscall(ef584d28) at syscall+0x4f Xint0x80_syscall() at Xint0x80_syscall+0x21 --- syscall (7, FreeBSD ELF32, wait4), eip = 0x282c393b, esp = 0xbfbfe3cc, ebp = 0xbfbfe3e8 --- Tracing command su pid 76110 tid 100294 td 0xc92308a0 sched_switch(c92308a0,0,104,191,7e3bfe28,...) at sched_switch+0x3bc mi_switch(104,0,c0e8bca0,1f3,6c,...) at mi_switch+0x219 sleepq_switch(c92308a0,0,c0e8bca0,1a7,6c,...) at sleepq_switch+0x162 sleepq_catch_signals(c0e8bca0,160,0,100,100,...) at sleepq_catch_signals+0xf9 sleepq_wait_sig(c923eaf0,6c,c0e8ea32,100,0,...) at sleepq_wait_sig+0x17 _sleep(c923eaf0,c923eb78,16c,c0e8ea32,0,...) at _sleep+0x35c kern_wait(c92308a0,12950,ef527c44,2,0,...) at kern_wait+0xbe6 wait4(c92308a0,ef527cec,281c8d28,1,0,...) at wait4+0x3b syscallenter(c92308a0,ef527ce4,c0cd350d,c1010d70,0,...) at syscallenter+0x263 syscall(ef527d28) at syscall+0x4f Xint0x80_syscall() at Xint0x80_syscall+0x21 --- syscall (7, FreeBSD ELF32, wait4), eip = 0x2812393b, esp = 0xbfbfe30c, ebp = 0xbfbfe328 --- Tracing command md5 pid 76105 tid 100367 td 0xc7f10b80 sched_switch(c7f10b80,0,104,191,73b488b2,...) at sched_switch+0x3bc mi_switch(104,0,c0e8bca0,1f3,5c,...) at mi_switch+0x219 sleepq_switch(c7f10b80,0,c0e8bca0,268,0,...) at sleepq_switch+0x162 sleepq_wait(c9171800,5c,c0e325b1,0,0,...) at sleepq_wait+0x63 _sleep(c9171800,c9171820,25c,c0e325b1,0,...) at _sleep+0x372 md_kthread(c9171800,ef638d28,c0e80e8c,390,c7f34578,...) at md_kthread+0x11a fork_exit(c0727800,c9171800,ef638d28) at fork_exit+0xb8 fork_trampoline() at fork_trampoline+0x8 --- trap 0, eip = 0, esp = 0xef638d60, ebp = 0 --- Tracing command sh pid 76092 tid 100491 td 0xc8a8e8a0 sched_switch(c8a8e8a0,0,104,191,9a5e8653,...) at sched_switch+0x3bc mi_switch(104,0,c0e8bca0,1f3,6c,...) at mi_switch+0x219 sleepq_switch(c8a8e8a0,0,c0e8bca0,1a7,6c,...) at sleepq_switch+0x162 sleepq_catch_signals(c0e8bca0,160,0,100,100,...) at sleepq_catch_signals+0xf9 sleepq_wait_sig(c8dd4834,6c,c0e8ea32,100,0,...) at sleepq_wait_sig+0x17 _sleep(c8dd4834,c8dd48bc,16c,c0e8ea32,0,...) at _sleep+0x35c kern_wait(c8a8e8a0,ffffffff,ef826c44,2,0,...) at kern_wait+0xbe6 wait4(c8a8e8a0,ef826cec,ef826d28,c0e8c5de,0,...) at wait4+0x3b syscallenter(c8a8e8a0,ef826ce4,ef826ce4,0,0,...) at syscallenter+0x263 syscall(ef826d28) at syscall+0x4f Xint0x80_syscall() at Xint0x80_syscall+0x21 --- syscall (7, FreeBSD ELF32, wait4), eip = 0x2816a93b, esp = 0xbfbfe7bc, ebp = 0xbfbfe7d8 --- Tracing command awk pid 44132 tid 100233 td 0xc854e000 sched_switch(c854e000,0,104,191,c48ee886,...) at sched_switch+0x3bc mi_switch(104,0,c0e8bca0,1f3,5c,...) at mi_switch+0x219 sleepq_switch(c854e000,0,c0e8bca0,1a7,5c,...) at sleepq_switch+0x162 sleepq_catch_signals(c0e8bca0,160,0,100,100,...) at sleepq_catch_signals+0xf9 sleepq_wait_sig(c804dab8,5c,c0e8e463,100,0,...) at sleepq_wait_sig+0x17 _sleep(c804dab8,c804dc28,15c,c0e8e463,0,...) at _sleep+0x35c pipe_read(c780a268,ef43cc28,c8553d80,0,c854e000,...) at pipe_read+0x417 dofileread(ef43cc28,ffffffff,ffffffff,0,c780a268,...) at dofileread+0x9e kern_readv(c854e000,0,ef43cc28,ef43cc48,1,...) at kern_readv+0x58 read(c854e000,ef43ccec,ef43cd80,ef43cc88,0,...) at read+0x4f syscallenter(c854e000,ef43cce4,c0cd31c6,0,0,...) at syscallenter+0x263 syscall(ef43cd28) at syscall+0x4f Xint0x80_syscall() at Xint0x80_syscall+0x21 --- syscall (3, FreeBSD ELF32, read), eip = 0x281b8643, esp = 0xbfbfe93c, ebp = 0xbfbfe958 --- Tracing command sh pid 44131 tid 100245 td 0xc854b5c0 sched_switch(c854b5c0,0,104,191,c4a23158,...) at sched_switch+0x3bc mi_switch(104,0,c0e8bca0,1f3,6c,...) at mi_switch+0x219 sleepq_switch(c854b5c0,0,c0e8bca0,1a7,6c,...) at sleepq_switch+0x162 sleepq_catch_signals(c0e8bca0,160,0,100,100,...) at sleepq_catch_signals+0xf9 sleepq_wait_sig(c8544000,6c,c0e8ea32,100,0,...) at sleepq_wait_sig+0x17 _sleep(c8544000,c8544088,16c,c0e8ea32,0,...) at _sleep+0x35c kern_wait(c854b5c0,ffffffff,ef460c44,2,0,...) at kern_wait+0xbe6 wait4(c854b5c0,ef460cec,ef460d28,c0e8c5de,0,...) at wait4+0x3b syscallenter(c854b5c0,ef460ce4,ef460ce4,0,0,...) at syscallenter+0x263 syscall(ef460d28) at syscall+0x4f Xint0x80_syscall() at Xint0x80_syscall+0x21 --- syscall (7, FreeBSD ELF32, wait4), eip = 0x2816a93b, esp = 0xbfbfe98c, ebp = 0xbfbfe9a8 --- Tracing command sh pid 44130 tid 100097 td 0xc7445000 Tracing command sshd pid 44129 tid 100085 td 0xc741cb80 sched_switch(c741cb80,0,104,191,5a21c330,...) at sched_switch+0x3bc mi_switch(104,0,c0e8bca0,1f3,0,...) at mi_switch+0x219 sleepq_switch(c741cb80,0,c0e8bca0,1a7,0,...) at sleepq_switch+0x162 sleepq_catch_signals(c0998cca,c84c5150,0,c0e84b27,c741cb80,...) at sleepq_catch_signals+0xf9 sleepq_wait_sig(c84c5164,0,ef1ada4c,101,0,...) at sleepq_wait_sig+0x17 _cv_wait_sig(c84c5164,c84c5150,c0e8e2a5,627,c856c8c0,...) at _cv_wait_sig+0x243 seltdwait(c856c8c0,58,c850b200,c741cb80,246,...) at seltdwait+0xa2 kern_select(c741cb80,c,288060b4,288060bc,0,0,20,c73a6af0,c73a6af0) at kern_select+0x504 select(c741cb80,ef1adcec,ef1add28,c0e8c5de,0,...) at select+0x66 syscallenter(c741cb80,ef1adce4,ef1adce4,0,0,...) at syscallenter+0x263 syscall(ef1add28) at syscall+0x4f Xint0x80_syscall() at Xint0x80_syscall+0x21 --- syscall (93, FreeBSD ELF32, select), eip = 0x284c45c3, esp = 0xbfbfe19c, ebp = 0xbfbfe1e8 --- Tracing command top pid 44128 tid 100086 td 0xc749a000 sched_switch(c749a000,0,103,18c,74a7d4a4,...) at sched_switch+0x3bc mi_switch(103,0,c0e8c6b0,2e1,138,...) at mi_switch+0x219 turnstile_wait(c7447980,c7494b80,0,1ac,c1010d70,...) at turnstile_wait+0x4a4 _mtx_lock_sleep(c1010d70,c749a000,0,c0e873c8,5c6,...) at _mtx_lock_sleep+0x14d _mtx_lock_flags(c1010d70,0,c0e873c8,5c6,ef1b3b74,...) at _mtx_lock_flags+0xf7 sysctl_root(ef1b3b74,0,c0e873c8,634,c749a000,...) at sysctl_root+0x1c7 userland_sysctl(c749a000,ef1b3be0,2,bfbfeb20,bfbfeb34,...) at userland_sysctl+0x17a __sysctl(c749a000,ef1b3cec,ef1b3d28,c0e8c5de,0,...) at __sysctl+0x94 syscallenter(c749a000,ef1b3ce4,ef1b3ce4,0,c101f980,...) at syscallenter+0x263 syscall(ef1b3d28) at syscall+0x4f Xint0x80_syscall() at Xint0x80_syscall+0x21 --- syscall (202, FreeBSD ELF32, __sysctl), eip = 0x281eec97, esp = 0xbfbfea5c, ebp = 0xbfbfea88 --- Tracing command tail pid 44127 tid 100103 td 0xc74995c0 sched_switch(c74995c0,0,104,191,74c462dd,...) at sched_switch+0x3bc mi_switch(104,0,c0e8bca0,1f3,68,...) at mi_switch+0x219 sleepq_switch(c74995c0,0,c0e8bca0,1a7,68,...) at sleepq_switch+0x162 sleepq_catch_signals(3e9,c09e7830,c74995c0,0,100,...) at sleepq_catch_signals+0xf9 sleepq_timedwait_sig(c7bf7680,68,c0e80a90,100,0,...) at sleepq_timedwait_sig+0x1a _sleep(c7bf7680,c7bf7680,168,c0e80a90,3e9,...) at _sleep+0x328 kern_kevent(c74995c0,4,0,1,ef22ac28,...) at kern_kevent+0x364 kevent(c74995c0,ef22acec,ef22ad28,c0e8c5de,0,...) at kevent+0x19e syscallenter(c74995c0,ef22ace4,ef22ace4,0,74b,...) at syscallenter+0x263 syscall(ef22ad28) at syscall+0x4f Xint0x80_syscall() at Xint0x80_syscall+0x21 --- syscall (363, FreeBSD ELF32, kevent), eip = 0x28169cab, esp = 0xbfbfeb1c, ebp = 0xbfbfebd8 --- Tracing command sshd pid 44126 tid 100209 td 0xc84f42e0 sched_switch(c84f42e0,0,104,191,173e4ee1,...) at sched_switch+0x3bc mi_switch(104,0,c0e8bca0,1f3,0,...) at mi_switch+0x219 sleepq_switch(c84f42e0,0,c0e8bca0,1a7,0,...) at sleepq_switch+0x162 sleepq_catch_signals(c0998cca,c7497e90,0,c0e84b27,c84f42e0,...) at sleepq_catch_signals+0xf9 sleepq_wait_sig(c7497ea4,0,ef3bfa4c,101,0,...) at sleepq_wait_sig+0x17 _cv_wait_sig(c7497ea4,c7497e90,c0e8e2a5,627,c85a2e70,...) at _cv_wait_sig+0x243 seltdwait(c85a2e70,58,c8560580,c84f42e0,246,...) at seltdwait+0xa2 kern_select(c84f42e0,c,288060b4,288060bc,0,0,20,c8505578,c8505578) at kern_select+0x504 select(c84f42e0,ef3bfcec,ef3bfd28,c0e8c5de,0,...) at select+0x66 syscallenter(c84f42e0,ef3bfce4,ef3bfce4,0,0,...) at syscallenter+0x263 syscall(ef3bfd28) at syscall+0x4f Xint0x80_syscall() at Xint0x80_syscall+0x21 --- syscall (93, FreeBSD ELF32, select), eip = 0x284c45c3, esp = 0xbfbfe19c, ebp = 0xbfbfe1e8 --- Tracing command sshd pid 44125 tid 100168 td 0xc7da25c0 sched_switch(c7da25c0,0,104,191,c935ef3f,...) at sched_switch+0x3bc mi_switch(104,0,c0e8bca0,1f3,0,...) at mi_switch+0x219 sleepq_switch(c7da25c0,0,c0e8bca0,1a7,0,...) at sleepq_switch+0x162 sleepq_catch_signals(c0998cca,c84c5190,0,c0e84b27,c7da25c0,...) at sleepq_catch_signals+0xf9 sleepq_wait_sig(c84c51a4,0,ef344a4c,101,0,...) at sleepq_wait_sig+0x17 _cv_wait_sig(c84c51a4,c84c5190,c0e8e2a5,627,c856ca10,...) at _cv_wait_sig+0x243 seltdwait(c856ca10,58,c8553180,c7da25c0,246,...) at seltdwait+0xa2 kern_select(c7da25c0,a,288060b4,288060bc,0,0,20,c834c000,c834c000) at kern_select+0x504 select(c7da25c0,ef344cec,ef344d28,c0e8c5de,0,...) at select+0x66 syscallenter(c7da25c0,ef344ce4,ef344ce4,0,0,...) at syscallenter+0x263 syscall(ef344d28) at syscall+0x4f Xint0x80_syscall() at Xint0x80_syscall+0x21 --- syscall (93, FreeBSD ELF32, select), eip = 0x284c45c3, esp = 0xbfbfe19c, ebp = 0xbfbfe1e8 --- Tracing command sshd pid 44114 tid 100153 td 0xc7da42e0 Tracing command sshd pid 44112 tid 100136 td 0xc7b032e0 Tracing command sshd pid 44111 tid 100090 td 0xc741c2e0 Tracing command bash pid 2252 tid 100141 td 0xc78ff5c0 sched_switch(c78ff5c0,0,104,191,4ae82d4f,...) at sched_switch+0x3bc mi_switch(104,0,c0e8bca0,1f3,6c,...) at mi_switch+0x219 sleepq_switch(c78ff5c0,0,c0e8bca0,1a7,6c,...) at sleepq_switch+0x162 sleepq_catch_signals(c0e8bca0,160,0,100,100,...) at sleepq_catch_signals+0xf9 sleepq_wait_sig(c78f3834,6c,c0e8ea32,100,0,...) at sleepq_wait_sig+0x17 _sleep(c78f3834,c78f38bc,16c,c0e8ea32,0,...) at _sleep+0x35c kern_wait(c78ff5c0,ffffffff,ef2f3c44,6,0,...) at kern_wait+0xbe6 wait4(c78ff5c0,ef2f3cec,ef2f3d28,c0e8c5de,0,...) at wait4+0x3b syscallenter(c78ff5c0,ef2f3ce4,ef2f3ce4,0,0,...) at syscallenter+0x263 syscall(ef2f3d28) at syscall+0x4f Xint0x80_syscall() at Xint0x80_syscall+0x21 --- syscall (7, FreeBSD ELF32, wait4), eip = 0x282c393b, esp = 0xbfbfe66c, ebp = 0xbfbfe688 --- Tracing command csh pid 2248 tid 100120 td 0xc78e35c0 Tracing command su pid 2247 tid 100095 td 0xc74455c0 Tracing command bash pid 2240 tid 100144 td 0xc78feb80 Tracing command sshd pid 2239 tid 100128 td 0xc749ab80 sched_switch(c749ab80,0,104,191,67419e87,...) at sched_switch+0x3bc mi_switch(104,0,c0e8bca0,1f3,0,...) at mi_switch+0x219 sleepq_switch(c749ab80,0,c0e8bca0,1a7,0,...) at sleepq_switch+0x162 sleepq_catch_signals(c0998cca,c73f1710,0,c0e84b27,c749ab80,...) at sleepq_catch_signals+0xf9 sleepq_wait_sig(c73f1724,0,ef2cca4c,101,0,...) at sleepq_wait_sig+0x17 _cv_wait_sig(c73f1724,c73f1710,c0e8e2a5,627,c78ee8c0,...) at _cv_wait_sig+0x243 seltdwait(c78ee8c0,58,c7512100,c749ab80,246,...) at seltdwait+0xa2 kern_select(c749ab80,c,288060b4,288060bc,0,0,20,c7aff834,c7aff834) at kern_select+0x504 select(c749ab80,ef2cccec,ef2ccd28,c0e8c5de,0,...) at select+0x66 syscallenter(c749ab80,ef2ccce4,ef2ccce4,0,0,...) at syscallenter+0x263 syscall(ef2ccd28) at syscall+0x4f Xint0x80_syscall() at Xint0x80_syscall+0x21 --- syscall (93, FreeBSD ELF32, select), eip = 0x284c45c3, esp = 0xbfbfe19c, ebp = 0xbfbfe1e8 --- Tracing command sshd pid 2237 tid 100156 td 0xc7da38a0 Tracing command bash pid 2226 tid 100159 td 0xc7da3000 sched_switch(c7da3000,0,104,191,6cd69b6a,...) at sched_switch+0x3bc mi_switch(104,0,c0e8bca0,1f3,0,...) at mi_switch+0x219 sleepq_switch(c7da3000,0,c0e8bca0,1a7,0,...) at sleepq_switch+0x162 sleepq_catch_signals(c0998cca,c7e07204,0,c0e84b27,c7da3000,...) at sleepq_catch_signals+0xf9 sleepq_wait_sig(c7e07270,0,ef329ad8,101,0,...) at sleepq_wait_sig+0x17 _cv_wait_sig(c7e07270,c7e07204,c0e90310,514,0,...) at _cv_wait_sig+0x243 tty_wait(c7e07200,c7e07270,ef329c28,1,0,...) at tty_wait+0x71 ttydisc_read(c7e07200,ef329c28,0,9f,0,...) at ttydisc_read+0x22c ttydev_read(c7383e00,ef329c28,0,0,1,...) at ttydev_read+0xaa devfs_read_f(c78ee9a0,ef329c28,c6d9f280,0,c7da3000,...) at devfs_read_f+0x7e dofileread(ef329c28,ffffffff,ffffffff,0,c78ee9a0,...) at dofileread+0x9e kern_readv(c7da3000,0,ef329c28,ef329c48,1,...) at kern_readv+0x58 read(c7da3000,ef329cec,ef329d28,c0e8c5de,0,...) at read+0x4f syscallenter(c7da3000,ef329ce4,ef329ce4,0,0,...) at syscallenter+0x263 syscall(ef329d28) at syscall+0x4f Xint0x80_syscall() at Xint0x80_syscall+0x21 --- syscall (3, FreeBSD ELF32, read), eip = 0x28354643, esp = 0xbfbfdfcc, ebp = 0xbfbfdff8 --- Tracing command sshd pid 2225 tid 100158 td 0xc7da32e0 sched_switch(c7da32e0,0,104,191,6cd8007a,...) at sched_switch+0x3bc mi_switch(104,0,c0e8bca0,1f3,0,...) at mi_switch+0x219 sleepq_switch(c7da32e0,0,c0e8bca0,1a7,0,...) at sleepq_switch+0x162 sleepq_catch_signals(c0998cca,c716c550,0,c0e84b27,c7da32e0,...) at sleepq_catch_signals+0xf9 sleepq_wait_sig(c716c564,0,ef326a4c,101,0,...) at sleepq_wait_sig+0x17 _cv_wait_sig(c716c564,c716c550,c0e8e2a5,627,c78ee968,...) at _cv_wait_sig+0x243 seltdwait(c78ee968,58,c715b380,c7da32e0,246,...) at seltdwait+0xa2 kern_select(c7da32e0,c,288060b4,288060bc,0,0,20,c7d9d578,c7d9d578) at kern_select+0x504 select(c7da32e0,ef326cec,ef326d28,c0e8c5de,0,...) at select+0x66 syscallenter(c7da32e0,ef326ce4,ef326ce4,0,c101f980,...) at syscallenter+0x263 syscall(ef326d28) at syscall+0x4f Xint0x80_syscall() at Xint0x80_syscall+0x21 --- syscall (93, FreeBSD ELF32, select), eip = 0x284c45c3, esp = 0xbfbfe19c, ebp = 0xbfbfe1e8 --- Tracing command sshd pid 2223 tid 100157 td 0xc7da35c0 Tracing command getty pid 2214 tid 100130 td 0xc749a5c0 sched_switch(c749a5c0,0,104,191,621a96b3,...) at sched_switch+0x3bc mi_switch(104,0,c0e8bca0,1f3,0,...) at mi_switch+0x219 sleepq_switch(c749a5c0,0,c0e8bca0,1a7,0,...) at sleepq_switch+0x162 sleepq_catch_signals(c0e8bca0,160,0,c749a5c0,c749a5c0,...) at sleepq_catch_signals+0xf9 sleepq_wait_sig(c7182070,0,c0e90972,101,0,...) at sleepq_wait_sig+0x17 _cv_wait_sig(c7182070,c1010d70,c0e90310,514,0,...) at _cv_wait_sig+0x243 tty_wait(c7182000,c7182070,ef2d2c28,1,0,...) at tty_wait+0x71 ttydisc_read(c7182000,ef2d2c28,0,9f,0,...) at ttydisc_read+0x22c ttydev_read(c717b800,ef2d2c28,0,0,1,...) at ttydev_read+0xaa devfs_read_f(c78e9d58,ef2d2c28,c6d9ee80,0,c749a5c0,...) at devfs_read_f+0x7e dofileread(ef2d2c28,ffffffff,ffffffff,0,c78e9d58,...) at dofileread+0x9e kern_readv(c749a5c0,0,ef2d2c28,ef2d2c48,1,...) at kern_readv+0x58 read(c749a5c0,ef2d2cec,ef2d2d28,c0e8c5de,0,...) at read+0x4f syscallenter(c749a5c0,ef2d2ce4,ef2d2ce4,0,0,...) at syscallenter+0x263 syscall(ef2d2d28) at syscall+0x4f Xint0x80_syscall() at Xint0x80_syscall+0x21 --- syscall (3, FreeBSD ELF32, read), eip = 0x28196643, esp = 0xbfbfed8c, ebp = 0xbfbfedb8 --- Tracing command getty pid 2213 tid 100098 td 0xc7444b80 sched_switch(c7444b80,0,104,191,61f0a889,...) at sched_switch+0x3bc mi_switch(104,0,c0e8bca0,1f3,0,...) at mi_switch+0x219 sleepq_switch(c7444b80,0,c0e8bca0,1a7,0,...) at sleepq_switch+0x162 sleepq_catch_signals(c0e8bca0,160,0,c7444b80,c7444b80,...) at sleepq_catch_signals+0xf9 sleepq_wait_sig(c7182270,0,c0e90972,101,0,...) at sleepq_wait_sig+0x17 _cv_wait_sig(c7182270,c1010d70,c0e90310,514,0,...) at _cv_wait_sig+0x243 tty_wait(c7182200,c7182270,ef1edc28,1,0,...) at tty_wait+0x71 ttydisc_read(c7182200,ef1edc28,0,9f,0,...) at ttydisc_read+0x22c ttydev_read(c717b900,ef1edc28,0,0,1,...) at ttydev_read+0xaa devfs_read_f(c74b21f8,ef1edc28,c6d9ee80,0,c7444b80,...) at devfs_read_f+0x7e dofileread(ef1edc28,ffffffff,ffffffff,0,c74b21f8,...) at dofileread+0x9e kern_readv(c7444b80,0,ef1edc28,ef1edc48,1,...) at kern_readv+0x58 read(c7444b80,ef1edcec,ef1edd28,c0e8c5de,0,...) at read+0x4f syscallenter(c7444b80,ef1edce4,ef1edce4,0,0,...) at syscallenter+0x263 syscall(ef1edd28) at syscall+0x4f Xint0x80_syscall() at Xint0x80_syscall+0x21 --- syscall (3, FreeBSD ELF32, read), eip = 0x28196643, esp = 0xbfbfed8c, ebp = 0xbfbfedb8 --- Tracing command getty pid 2212 tid 100114 td 0xc78e48a0 sched_switch(c78e48a0,0,104,191,620add0e,...) at sched_switch+0x3bc mi_switch(104,0,c0e8bca0,1f3,0,...) at mi_switch+0x219 sleepq_switch(c78e48a0,0,c0e8bca0,1a7,0,...) at sleepq_switch+0x162 sleepq_catch_signals(c0e8bca0,160,0,c78e48a0,c78e48a0,...) at sleepq_catch_signals+0xf9 sleepq_wait_sig(c7182470,0,c0e90972,101,0,...) at sleepq_wait_sig+0x17 _cv_wait_sig(c7182470,c1010d70,c0e90310,514,0,...) at _cv_wait_sig+0x243 tty_wait(c7182400,c7182470,ef25ac28,1,0,...) at tty_wait+0x71 ttydisc_read(c7182400,ef25ac28,0,9f,0,...) at ttydisc_read+0x22c ttydev_read(c717ba00,ef25ac28,0,0,1,...) at ttydev_read+0xaa devfs_read_f(c78e9578,ef25ac28,c6d9ee80,0,c78e48a0,...) at devfs_read_f+0x7e dofileread(ef25ac28,ffffffff,ffffffff,0,c78e9578,...) at dofileread+0x9e kern_readv(c78e48a0,0,ef25ac28,ef25ac48,1,...) at kern_readv+0x58 read(c78e48a0,ef25acec,ef25ad28,c0e8c5de,0,...) at read+0x4f syscallenter(c78e48a0,ef25ace4,ef25ace4,0,0,...) at syscallenter+0x263 syscall(ef25ad28) at syscall+0x4f Xint0x80_syscall() at Xint0x80_syscall+0x21 --- syscall (3, FreeBSD ELF32, read), eip = 0x28196643, esp = 0xbfbfed8c, ebp = 0xbfbfedb8 --- Tracing command getty pid 2211 tid 100077 td 0xc741fb80 sched_switch(c741fb80,0,104,191,6213ad19,...) at sched_switch+0x3bc mi_switch(104,0,c0e8bca0,1f3,0,...) at mi_switch+0x219 sleepq_switch(c741fb80,0,c0e8bca0,1a7,0,...) at sleepq_switch+0x162 sleepq_catch_signals(c0e8bca0,160,0,c741fb80,c741fb80,...) at sleepq_catch_signals+0xf9 sleepq_wait_sig(c6f52070,0,c0e90972,101,0,...) at sleepq_wait_sig+0x17 _cv_wait_sig(c6f52070,c1010d70,c0e90310,514,0,...) at _cv_wait_sig+0x243 tty_wait(c6f52000,c6f52070,ef189c28,1,0,...) at tty_wait+0x71 ttydisc_read(c6f52000,ef189c28,0,9f,0,...) at ttydisc_read+0x22c ttydev_read(c717bb00,ef189c28,0,0,1,...) at ttydev_read+0xaa devfs_read_f(c742ac40,ef189c28,c6d9ee80,0,c741fb80,...) at devfs_read_f+0x7e dofileread(ef189c28,ffffffff,ffffffff,0,c742ac40,...) at dofileread+0x9e kern_readv(c741fb80,0,ef189c28,ef189c48,1,...) at kern_readv+0x58 read(c741fb80,ef189cec,ef189d28,c0e8c5de,0,...) at read+0x4f syscallenter(c741fb80,ef189ce4,ef189ce4,0,0,...) at syscallenter+0x263 syscall(ef189d28) at syscall+0x4f Xint0x80_syscall() at Xint0x80_syscall+0x21 --- syscall (3, FreeBSD ELF32, read), eip = 0x28196643, esp = 0xbfbfed8c, ebp = 0xbfbfedb8 --- Tracing command getty pid 2210 tid 100137 td 0xc7b03000 sched_switch(c7b03000,0,104,191,6202fb59,...) at sched_switch+0x3bc mi_switch(104,0,c0e8bca0,1f3,0,...) at mi_switch+0x219 sleepq_switch(c7b03000,0,c0e8bca0,1a7,0,...) at sleepq_switch+0x162 sleepq_catch_signals(c0e8bca0,160,0,c7b03000,c7b03000,...) at sleepq_catch_signals+0xf9 sleepq_wait_sig(c6f52270,0,c0e90972,101,0,...) at sleepq_wait_sig+0x17 _cv_wait_sig(c6f52270,c1010d70,c0e90310,514,0,...) at _cv_wait_sig+0x243 tty_wait(c6f52200,c6f52270,ef2e7c28,1,0,...) at tty_wait+0x71 ttydisc_read(c6f52200,ef2e7c28,0,9f,0,...) at ttydisc_read+0x22c ttydev_read(c717bc00,ef2e7c28,0,0,1,...) at ttydev_read+0xaa devfs_read_f(c7452dc8,ef2e7c28,c6d9ee80,0,c7b03000,...) at devfs_read_f+0x7e dofileread(ef2e7c28,ffffffff,ffffffff,0,c7452dc8,...) at dofileread+0x9e kern_readv(c7b03000,0,ef2e7c28,ef2e7c48,1,...) at kern_readv+0x58 read(c7b03000,ef2e7cec,ef2e7d28,c0e8c5de,0,...) at read+0x4f syscallenter(c7b03000,ef2e7ce4,ef2e7ce4,0,0,...) at syscallenter+0x263 syscall(ef2e7d28) at syscall+0x4f Xint0x80_syscall() at Xint0x80_syscall+0x21 --- syscall (3, FreeBSD ELF32, read), eip = 0x28196643, esp = 0xbfbfed8c, ebp = 0xbfbfedb8 --- Tracing command getty pid 2209 tid 100118 td 0xc78e3b80 sched_switch(c78e3b80,0,104,191,6200bbc1,...) at sched_switch+0x3bc mi_switch(104,0,c0e8bca0,1f3,0,...) at mi_switch+0x219 sleepq_switch(c78e3b80,0,c0e8bca0,1a7,0,...) at sleepq_switch+0x162 sleepq_catch_signals(c0e8bca0,160,0,c78e3b80,c78e3b80,...) at sleepq_catch_signals+0xf9 sleepq_wait_sig(c6f52470,0,c0e90972,101,0,...) at sleepq_wait_sig+0x17 _cv_wait_sig(c6f52470,c1010d70,c0e90310,514,0,...) at _cv_wait_sig+0x243 tty_wait(c6f52400,c6f52470,ef266c28,1,0,...) at tty_wait+0x71 ttydisc_read(c6f52400,ef266c28,0,9f,0,...) at ttydisc_read+0x22c ttydev_read(c717bd00,ef266c28,0,0,1,...) at ttydev_read+0xaa devfs_read_f(c74b20a8,ef266c28,c6d9ee80,0,c78e3b80,...) at devfs_read_f+0x7e dofileread(ef266c28,ffffffff,ffffffff,0,c74b20a8,...) at dofileread+0x9e kern_readv(c78e3b80,0,ef266c28,ef266c48,1,...) at kern_readv+0x58 read(c78e3b80,ef266cec,ef266d28,c0e8c5de,0,...) at read+0x4f syscallenter(c78e3b80,ef266ce4,ef266ce4,0,0,...) at syscallenter+0x263 syscall(ef266d28) at syscall+0x4f Xint0x80_syscall() at Xint0x80_syscall+0x21 --- syscall (3, FreeBSD ELF32, read), eip = 0x28196643, esp = 0xbfbfed8c, ebp = 0xbfbfedb8 --- Tracing command getty pid 2208 tid 100079 td 0xc74468a0 sched_switch(c74468a0,0,104,191,61ffd694,...) at sched_switch+0x3bc mi_switch(104,0,c0e8bca0,1f3,0,...) at mi_switch+0x219 sleepq_switch(c74468a0,0,c0e8bca0,1a7,0,...) at sleepq_switch+0x162 sleepq_catch_signals(c0e8bca0,160,0,c74468a0,c74468a0,...) at sleepq_catch_signals+0xf9 sleepq_wait_sig(c6f52670,0,c0e90972,101,0,...) at sleepq_wait_sig+0x17 _cv_wait_sig(c6f52670,c1010d70,c0e90310,514,0,...) at _cv_wait_sig+0x243 tty_wait(c6f52600,c6f52670,ef191c28,1,0,...) at tty_wait+0x71 ttydisc_read(c6f52600,ef191c28,0,9f,0,...) at ttydisc_read+0x22c ttydev_read(c717be00,ef191c28,0,0,1,...) at ttydev_read+0xaa devfs_read_f(c7c90348,ef191c28,c6d9ee80,0,c74468a0,...) at devfs_read_f+0x7e dofileread(ef191c28,ffffffff,ffffffff,0,c7c90348,...) at dofileread+0x9e kern_readv(c74468a0,0,ef191c28,ef191c48,1,...) at kern_readv+0x58 read(c74468a0,ef191cec,ef191d28,c0e8c5de,0,...) at read+0x4f syscallenter(c74468a0,ef191ce4,ef191ce4,0,0,...) at syscallenter+0x263 syscall(ef191d28) at syscall+0x4f Xint0x80_syscall() at Xint0x80_syscall+0x21 --- syscall (3, FreeBSD ELF32, read), eip = 0x28196643, esp = 0xbfbfed8c, ebp = 0xbfbfedb8 --- Tracing command getty pid 2207 tid 100110 td 0xc7444000 sched_switch(c7444000,0,104,191,62055e4f,...) at sched_switch+0x3bc mi_switch(104,0,c0e8bca0,1f3,0,...) at mi_switch+0x219 sleepq_switch(c7444000,0,c0e8bca0,1a7,0,...) at sleepq_switch+0x162 sleepq_catch_signals(c0e8bca0,160,0,c7444000,c7444000,...) at sleepq_catch_signals+0xf9 sleepq_wait_sig(c6f52870,0,c0e90972,101,0,...) at sleepq_wait_sig+0x17 _cv_wait_sig(c6f52870,c1010d70,c0e90310,514,0,...) at _cv_wait_sig+0x243 tty_wait(c6f52800,c6f52870,ef24ec28,1,0,...) at tty_wait+0x71 ttydisc_read(c6f52800,ef24ec28,0,9f,0,...) at ttydisc_read+0x22c ttydev_read(c717c000,ef24ec28,0,0,1,...) at ttydev_read+0xaa devfs_read_f(c78e9930,ef24ec28,c6d9ee80,0,c7444000,...) at devfs_read_f+0x7e dofileread(ef24ec28,ffffffff,ffffffff,0,c78e9930,...) at dofileread+0x9e kern_readv(c7444000,0,ef24ec28,ef24ec48,1,...) at kern_readv+0x58 read(c7444000,ef24ecec,ef24ed28,c0e8c5de,0,...) at read+0x4f syscallenter(c7444000,ef24ece4,ef24ece4,0,0,...) at syscallenter+0x263 syscall(ef24ed28) at syscall+0x4f Xint0x80_syscall() at Xint0x80_syscall+0x21 --- syscall (3, FreeBSD ELF32, read), eip = 0x28196643, esp = 0xbfbfed8c, ebp = 0xbfbfedb8 --- Tracing command getty pid 2206 tid 100112 td 0xc78e5000 sched_switch(c78e5000,0,104,191,1e44c486,...) at sched_switch+0x3bc mi_switch(104,0,c0e8bca0,1f3,0,...) at mi_switch+0x219 sleepq_switch(c78e5000,0,c0e8bca0,1a7,0,...) at sleepq_switch+0x162 sleepq_catch_signals(c0998cca,c6f52a04,0,c0e84b27,c78e5000,...) at sleepq_catch_signals+0xf9 sleepq_wait_sig(c6f52a70,0,ef254ad8,101,0,...) at sleepq_wait_sig+0x17 _cv_wait_sig(c6f52a70,c6f52a04,c0e90310,514,0,...) at _cv_wait_sig+0x243 tty_wait(c6f52a00,c6f52a70,ef254c28,1,0,...) at tty_wait+0x71 ttydisc_read(c6f52a00,ef254c28,0,9f,0,...) at ttydisc_read+0x22c ttydev_read(c6da2800,ef254c28,0,0,1,...) at ttydev_read+0xaa devfs_read_f(c74520a8,ef254c28,c6d9ee80,0,c78e5000,...) at devfs_read_f+0x7e dofileread(ef254c28,ffffffff,ffffffff,0,c74520a8,...) at dofileread+0x9e kern_readv(c78e5000,0,ef254c28,ef254c48,1,...) at kern_readv+0x58 read(c78e5000,ef254cec,ef254d28,c0e8c5de,0,...) at read+0x4f syscallenter(c78e5000,ef254ce4,ef254ce4,0,0,...) at syscallenter+0x263 syscall(ef254d28) at syscall+0x4f Xint0x80_syscall() at Xint0x80_syscall+0x21 --- syscall (3, FreeBSD ELF32, read), eip = 0x28196643, esp = 0xbfbfed8c, ebp = 0xbfbfedb8 --- Tracing command inetd pid 2161 tid 100129 td 0xc749a8a0 sched_switch(c749a8a0,0,104,191,428cdb6b,...) at sched_switch+0x3bc mi_switch(104,0,c0e8bca0,1f3,0,...) at mi_switch+0x219 sleepq_switch(c749a8a0,0,c0e8bca0,1a7,0,...) at sleepq_switch+0x162 sleepq_catch_signals(c0998cca,c78fd090,0,c0e84b27,c749a8a0,...) at sleepq_catch_signals+0xf9 sleepq_wait_sig(c78fd0a4,0,ef2cfa4c,101,0,...) at sleepq_wait_sig+0x17 _cv_wait_sig(c78fd0a4,c78fd090,c0e8e2a5,627,c78eea48,...) at _cv_wait_sig+0x243 seltdwait(c78eea48,58,c6d9ee80,c749a8a0,c0e84b27,...) at seltdwait+0xa2 kern_select(c749a8a0,6,bfbfdfa0,0,0,0,20,c7aff578,c7aff578) at kern_select+0x504 select(c749a8a0,ef2cfcec,ef2cfd28,c0e8c5de,0,...) at select+0x66 syscallenter(c749a8a0,ef2cfce4,ef2cfce4,0,0,...) at syscallenter+0x263 syscall(ef2cfd28) at syscall+0x4f Xint0x80_syscall() at Xint0x80_syscall+0x21 --- syscall (93, FreeBSD ELF32, select), eip = 0x281a85c3, esp = 0xbfbfdf5c, ebp = 0xbfbfede8 --- Tracing command watchdogd pid 2134 tid 100087 td 0xc7499b80 sched_switch(c7499b80,0,104,191,47a0a0a4,...) at sched_switch+0x3bc mi_switch(104,0,c0e8bca0,1f3,6c,...) at mi_switch+0x219 sleepq_switch(c7499b80,0,c0e8bca0,1a7,6c,...) at sleepq_switch+0x162 sleepq_catch_signals(c0e8bca0,160,0,100,100,...) at sleepq_catch_signals+0xf9 sleepq_wait_sig(c7493834,6c,c0e8ea32,100,0,...) at sleepq_wait_sig+0x17 _sleep(c7493834,c74938bc,16c,c0e8ea32,0,...) at _sleep+0x35c kern_wait(c7499b80,132d6,ef1b7c44,0,0,...) at kern_wait+0xbe6 wait4(c7499b80,ef1b7cec,bfbfec4c,1,0,...) at wait4+0x3b syscallenter(c7499b80,ef1b7ce4,c0cd350d,c1010d70,0,...) at syscallenter+0x263 syscall(ef1b7d28) at syscall+0x4f Xint0x80_syscall() at Xint0x80_syscall+0x21 --- syscall (7, FreeBSD ELF32, wait4), eip = 0x2811c93b, esp = 0xbfbfec3c, ebp = 0xbfbfece8 --- Tracing command cron pid 2109 tid 100139 td 0xc7b028a0 sched_switch(c7b028a0,0,104,191,80b4a88a,...) at sched_switch+0x3bc mi_switch(104,0,c0e8bca0,1f3,6c,...) at mi_switch+0x219 sleepq_switch(c7b028a0,0,c0e8bca0,1a7,6c,...) at sleepq_switch+0x162 sleepq_catch_signals(ea61,c09e7830,c7b028a0,3,100,...) at sleepq_catch_signals+0xf9 sleepq_timedwait_sig(c1012684,6c,c0e87a97,100,0,...) at sleepq_timedwait_sig+0x1a _sleep(c1012684,0,16c,c0e87a97,ea61,...) at _sleep+0x328 kern_nanosleep(c7b028a0,ef2edc34,ef2edc3c,3c,0,...) at kern_nanosleep+0xc1 nanosleep(c7b028a0,ef2edcec,ef2edd28,c0e8c5de,0,...) at nanosleep+0x6f syscallenter(c7b028a0,ef2edce4,ef2edce4,0,0,...) at syscallenter+0x263 syscall(ef2edd28) at syscall+0x4f Xint0x80_syscall() at Xint0x80_syscall+0x21 --- syscall (240, FreeBSD ELF32, nanosleep), eip = 0x28184b77, esp = 0xbfbfec4c, ebp = 0xbfbfec78 --- Tracing command sendmail pid 2101 tid 100134 td 0xc7b038a0 sched_switch(c7b038a0,0,104,191,e7d5657c,...) at sched_switch+0x3bc mi_switch(104,0,c0e8bca0,1f3,74,...) at mi_switch+0x219 sleepq_switch(c7b038a0,0,c0e8bca0,1a7,74,...) at sleepq_switch+0x162 sleepq_catch_signals(c0e8bca0,160,0,100,100,...) at sleepq_catch_signals+0xf9 sleepq_wait_sig(c7afe5d0,74,c0d2160e,100,0,...) at sleepq_wait_sig+0x17 _sleep(c7afe5d0,c7afe600,174,c0d2160e,0,...) at _sleep+0x35c kern_sigsuspend(c7b038a0,0,0,0,0,...) at kern_sigsuspend+0xba sigsuspend(c7b038a0,ef2decec,ef2ded28,c0e8c5de,0,...) at sigsuspend+0x4d syscallenter(c7b038a0,ef2dece4,ef2dece4,0,0,...) at syscallenter+0x263 syscall(ef2ded28) at syscall+0x4f Xint0x80_syscall() at Xint0x80_syscall+0x21 --- syscall (4, FreeBSD ELF32, write), eip = 0x28338c7b, esp = 0xbfbfcf9c, ebp = 0xbfbfcfc8 --- Tracing command sendmail pid 2097 tid 100131 td 0xc749a2e0 sched_switch(c749a2e0,0,104,191,9e4af0c3,...) at sched_switch+0x3bc mi_switch(104,0,c0e8bca0,1f3,0,...) at mi_switch+0x219 sleepq_switch(c749a2e0,0,c0e8bca0,1a7,0,...) at sleepq_switch+0x162 sleepq_catch_signals(ef2d5a14,c0998cca,c716c490,0,c749a2e0,...) at sleepq_catch_signals+0xf9 sleepq_timedwait_sig(c716c4a4,0,ef2d5a4c,101,0,...) at sleepq_timedwait_sig+0x1a _cv_timedwait_sig(c716c4a4,c716c490,1389,627,c78eebd0,...) at _cv_timedwait_sig+0x252 seltdwait(ef2d5bf8,ef2d5c00,c79d1000,c749a2e0,ef2d5af8,...) at seltdwait+0x8a kern_select(c749a2e0,5,bfbfc510,0,0,ef2d5c40,20,5,0) at kern_select+0x504 select(c749a2e0,ef2d5cec,ef2d5d28,c0e8c5de,0,...) at select+0x66 syscallenter(c749a2e0,ef2d5ce4,ef2d5ce4,0,c101f980,...) at syscallenter+0x263 syscall(ef2d5d28) at syscall+0x4f Xint0x80_syscall() at Xint0x80_syscall+0x21 --- syscall (93, FreeBSD ELF32, select), eip = 0x283e05c3, esp = 0xbfbfc47c, ebp = 0xbfbfcfa8 --- Tracing command sshd pid 2089 tid 100138 td 0xc7b02b80 sched_switch(c7b02b80,0,104,191,70134d43,...) at sched_switch+0x3bc mi_switch(104,0,c0e8bca0,1f3,0,...) at mi_switch+0x219 sleepq_switch(c7b02b80,0,c0e8bca0,1a7,0,...) at sleepq_switch+0x162 sleepq_catch_signals(c0998cca,c73e6590,0,c0e84b27,c7b02b80,...) at sleepq_catch_signals+0xf9 sleepq_wait_sig(c73e65a4,0,ef2eaa4c,101,0,...) at sleepq_wait_sig+0x17 _cv_wait_sig(c73e65a4,c73e6590,c0e8e2a5,627,c7452e00,...) at _cv_wait_sig+0x243 seltdwait(c7452e00,58,c79d1300,c7b02b80,0,...) at seltdwait+0xa2 kern_select(c7b02b80,5,288cc0b4,0,0,0,20,c78f4834,c78f4834) at kern_select+0x504 select(c7b02b80,ef2eacec,ef2ead28,c0e8c5de,0,...) at select+0x66 syscallenter(c7b02b80,ef2eace4,ef2eace4,fffffffe,0,...) at syscallenter+0x263 syscall(ef2ead28) at syscall+0x4f Xint0x80_syscall() at Xint0x80_syscall+0x21 --- syscall (93, FreeBSD ELF32, select), eip = 0x284c45c3, esp = 0xbfbfe25c, ebp = 0xbfbfedf8 --- Tracing command moused pid 2025 tid 100082 td 0xc741f5c0 sched_switch(c741f5c0,0,104,191,7f2cb49c,...) at sched_switch+0x3bc mi_switch(104,0,c0e8bca0,1f3,0,...) at mi_switch+0x219 sleepq_switch(c741f5c0,0,c0e8bca0,1a7,0,...) at sleepq_switch+0x162 sleepq_catch_signals(c0998cca,c73e6710,0,c0e84b27,c741f5c0,...) at sleepq_catch_signals+0xf9 sleepq_wait_sig(c73e6724,0,ef1a0a4c,101,0,...) at sleepq_wait_sig+0x17 _cv_wait_sig(c73e6724,c73e6710,c0e8e2a5,627,c78ee2d8,...) at _cv_wait_sig+0x243 seltdwait(c78ee2d8,58,c6d9ee80,c741f5c0,14,...) at seltdwait+0xa2 kern_select(c741f5c0,6,bfbfea04,0,0,0,20,c741a578,c741a578) at kern_select+0x504 select(c741f5c0,ef1a0cec,ef1a0d28,c0e8c5de,0,...) at select+0x66 syscallenter(c741f5c0,ef1a0ce4,ef1a0ce4,0,0,...) at syscallenter+0x263 syscall(ef1a0d28) at syscall+0x4f Xint0x80_syscall() at Xint0x80_syscall+0x21 --- syscall (93, FreeBSD ELF32, select), eip = 0x281b35c3, esp = 0xbfbfe99c, ebp = 0xbfbfeb28 --- Tracing command ntpd pid 1965 tid 100105 td 0xc7499000 sched_switch(c7499000,0,104,191,f7eec94e,...) at sched_switch+0x3bc mi_switch(104,0,c0e8bca0,1f3,0,...) at mi_switch+0x219 sleepq_switch(c7499000,0,c0e8bca0,1a7,0,...) at sleepq_switch+0x162 sleepq_catch_signals(c0998cca,c78fd110,0,c0e84b27,c7499000,...) at sleepq_catch_signals+0xf9 sleepq_wait_sig(c78fd124,0,ef232a4c,101,0,...) at sleepq_wait_sig+0x17 _cv_wait_sig(c78fd124,c78fd110,c0e8e2a5,627,c74299a0,...) at _cv_wait_sig+0x243 seltdwait(c74299a0,58,c6d9ee80,c7499000,c0e921e2,...) at seltdwait+0xa2 kern_select(c7499000,1c,bfbfece8,0,0,0,20,c7491af0,c7491af0) at kern_select+0x504 select(c7499000,ef232cec,ef232d28,c0e8c5de,0,...) at select+0x66 syscallenter(c7499000,ef232ce4,ef232ce4,0,246,...) at syscallenter+0x263 syscall(ef232d28) at syscall+0x4f Xint0x80_syscall() at Xint0x80_syscall+0x21 --- syscall (93, FreeBSD ELF32, select), eip = 0x283625c3, esp = 0xbfbfecbc, ebp = 0xbfbfed88 --- Tracing command nfsd pid 1847 tid 100125 td 0xc71728a0 sched_switch(c71728a0,0,104,191,1d6ef6ea,...) at sched_switch+0x3bc mi_switch(104,0,c0e8bca0,1f3,0,...) at mi_switch+0x219 sleepq_switch(c71728a0,0,c0e8bca0,1a7,0,...) at sleepq_switch+0x162 sleepq_catch_signals(ef2c3be0,c0998cca,c7196e80,0,c71728a0,...) at sleepq_catch_signals+0xf9 sleepq_timedwait_sig(c7a0ecd0,0,ef2c3c18,101,0,...) at sleepq_timedwait_sig+0x1a _cv_timedwait_sig(c7a0ecd0,c7196e80,1388,3b1,0,...) at _cv_timedwait_sig+0x252 svc_run_internal(ef2c3d14,c097bf88,c7196e80,ef2c3d28,c0e80e8c,...) at svc_run_internal+0x356 svc_thread_start(c7196e80,ef2c3d28,c0e80e8c,390,c73a6578,...) at svc_thread_start+0x10 fork_exit(c0b8b360,c7196e80,ef2c3d28) at fork_exit+0xb8 fork_trampoline() at fork_trampoline+0x8 --- trap 0x804c12e, eip = 0xc, esp = 0x33, ebp = 0x1 --- Tracing command nfsd pid 1847 tid 100124 td 0xc7172b80 sched_switch(c7172b80,0,104,191,f268f211,...) at sched_switch+0x3bc mi_switch(104,0,c0e8bca0,1f3,0,...) at mi_switch+0x219 sleepq_switch(c7172b80,0,c0e8bca0,1a7,0,...) at sleepq_switch+0x162 sleepq_catch_signals(ef2c0be0,c0998cca,c7196e80,0,c7172b80,...) at sleepq_catch_signals+0xf9 sleepq_timedwait_sig(c7a0e810,0,ef2c0c18,101,0,...) at sleepq_timedwait_sig+0x1a _cv_timedwait_sig(c7a0e810,c7196e80,1388,3b1,0,...) at _cv_timedwait_sig+0x252 svc_run_internal(ef2c0d14,c097bf88,c7196e80,ef2c0d28,c0e80e8c,...) at svc_run_internal+0x356 svc_thread_start(c7196e80,ef2c0d28,c0e80e8c,390,c73a6578,...) at svc_thread_start+0x10 fork_exit(c0b8b360,c7196e80,ef2c0d28) at fork_exit+0xb8 fork_trampoline() at fork_trampoline+0x8 --- trap 0x804c12e, eip = 0xc, esp = 0x33, ebp = 0x1 --- Tracing command nfsd pid 1847 tid 100123 td 0xc741c000 sched_switch(c741c000,0,104,191,349a1ab5,...) at sched_switch+0x3bc mi_switch(104,0,c0e8bca0,1f3,0,...) at mi_switch+0x219 sleepq_switch(c741c000,0,c0e8bca0,1a7,0,...) at sleepq_switch+0x162 sleepq_catch_signals(ef2bdbe0,c0998cca,c7196e80,0,c741c000,...) at sleepq_catch_signals+0xf9 sleepq_timedwait_sig(c7a0e850,0,ef2bdc18,101,0,...) at sleepq_timedwait_sig+0x1a _cv_timedwait_sig(c7a0e850,c7196e80,1388,3b1,947d3d24,...) at _cv_timedwait_sig+0x252 svc_run_internal(ef2bdd14,c097bf88,c7196e80,ef2bdd28,c0e80e8c,...) at svc_run_internal+0x356 svc_thread_start(c7196e80,ef2bdd28,c0e80e8c,390,c73a6578,...) at svc_thread_start+0x10 fork_exit(c0b8b360,c7196e80,ef2bdd28) at fork_exit+0xb8 fork_trampoline() at fork_trampoline+0x8 --- trap 0x804c12e, eip = 0xc, esp = 0x33, ebp = 0x1 --- Tracing command nfsd pid 1847 tid 100089 td 0xc741c5c0 sched_switch(c741c5c0,0,104,191,5db36c2e,...) at sched_switch+0x3bc mi_switch(104,0,c0e8bca0,1f3,0,...) at mi_switch+0x219 sleepq_switch(c741c5c0,0,c0e8bca0,1a7,0,...) at sleepq_switch+0x162 sleepq_catch_signals(ef1c15b4,c0998cca,c7196e80,0,c741c5c0,...) at sleepq_catch_signals+0xf9 sleepq_timedwait_sig(c7a0ed10,0,ef1c15ec,101,0,...) at sleepq_timedwait_sig+0x1a _cv_timedwait_sig(c7a0ed10,c7196e80,1388,3b1,c71728a0,...) at _cv_timedwait_sig+0x252 svc_run_internal(c741c770,14,c0eb485a,c0e78c1b,ef1c17f4,...) at svc_run_internal+0x356 svc_run(c7196e80,0,c0e78bf6,19d,ef1c1c38,...) at svc_run+0x7b nfsrvd_nfsd(c741c5c0,ef1c17f4,c,c118f680,ef1c1720,...) at nfsrvd_nfsd+0x8e nfssvc_nfsd(c741c5c0,ef1c1cec,c73a6578,0,ef1c1c7c,...) at nfssvc_nfsd+0x167 nfssvc(c741c5c0,ef1c1cec,ef1c1d28,c0e8c5de,0,...) at nfssvc+0xeb syscallenter(c741c5c0,ef1c1ce4,ef1c1ce4,0,0,...) at syscallenter+0x263 syscall(ef1c1d28) at syscall+0x4f Xint0x80_syscall() at Xint0x80_syscall+0x21 --- syscall (155, FreeBSD ELF32, nfssvc), eip = 0x280dd85b, esp = 0xbfbfe82c, ebp = 0xbfbfea98 --- Tracing command nfsd pid 1846 tid 100115 td 0xc78e45c0 sched_switch(c78e45c0,0,104,191,6c3bdde5,...) at sched_switch+0x3bc mi_switch(104,0,c0e8bca0,1f3,0,...) at mi_switch+0x219 sleepq_switch(c78e45c0,0,c0e8bca0,1a7,0,...) at sleepq_switch+0x162 sleepq_catch_signals(c0998cca,c73e6d10,0,c0e84b27,c78e45c0,...) at sleepq_catch_signals+0xf9 sleepq_wait_sig(c73e6d24,0,ef25da4c,101,0,...) at sleepq_wait_sig+0x17 _cv_wait_sig(c73e6d24,c73e6d10,c0e8e2a5,627,c78e90e0,...) at _cv_wait_sig+0x243 seltdwait(c78e90e0,58,c6d9ee80,c78e45c0,f33,...) at seltdwait+0xa2 kern_select(c78e45c0,7,bfbfecb4,0,0,0,20,c78e0578,c78e0578) at kern_select+0x504 select(c78e45c0,ef25dcec,bfbffff4,1,0,...) at select+0x66 syscallenter(c78e45c0,ef25dce4,c0cd350d,c1010d70,0,...) at syscallenter+0x263 syscall(ef25dd28) at syscall+0x4f Xint0x80_syscall() at Xint0x80_syscall+0x21 --- syscall (93, FreeBSD ELF32, select), eip = 0x281845c3, esp = 0xbfbfea9c, ebp = 0xbfbfede8 --- Tracing command mountd pid 1836 tid 100096 td 0xc74452e0 sched_switch(c74452e0,0,104,191,7d60c509,...) at sched_switch+0x3bc mi_switch(104,0,c0e8bca0,1f3,0,...) at mi_switch+0x219 sleepq_switch(c74452e0,0,c0e8bca0,1a7,0,...) at sleepq_switch+0x162 sleepq_catch_signals(c0998cca,c7497810,0,c0e84b27,c74452e0,...) at sleepq_catch_signals+0xf9 sleepq_wait_sig(c7497824,0,ef1e7a4c,101,0,...) at sleepq_wait_sig+0x17 _cv_wait_sig(c7497824,c7497810,c0e8e2a5,627,c7452d58,...) at _cv_wait_sig+0x243 seltdwait(c7452d58,58,c6d9ee80,c74452e0,c115b7b0,...) at seltdwait+0xa2 kern_select(c74452e0,9,bfbfed3c,0,0,0,20,c74ac000,c74ac000) at kern_select+0x504 select(c74452e0,ef1e7cec,ef1e7d28,c0e8c5de,0,...) at select+0x66 syscallenter(c74452e0,ef1e7ce4,ef1e7ce4,0,0,...) at syscallenter+0x263 syscall(ef1e7d28) at syscall+0x4f Xint0x80_syscall() at Xint0x80_syscall+0x21 --- syscall (93, FreeBSD ELF32, select), eip = 0x2819a5c3, esp = 0xbfbfed0c, ebp = 0xbfbfedd8 --- Tracing command rpcbind pid 1737 tid 100119 td 0xc78e38a0 sched_switch(c78e38a0,0,104,191,61babdbb,...) at sched_switch+0x3bc mi_switch(104,0,c0e8bca0,1f3,0,...) at mi_switch+0x219 sleepq_switch(c78e38a0,0,c0e8bca0,1a7,0,...) at sleepq_switch+0x162 sleepq_catch_signals(ef269a6c,c0998cca,c7497850,0,c78e38a0,...) at sleepq_catch_signals+0xf9 sleepq_timedwait_sig(c7497864,0,ef269aa4,101,0,...) at sleepq_timedwait_sig+0x1a _cv_timedwait_sig(c7497864,c7497850,7531,627,ef269b5c,...) at _cv_timedwait_sig+0x252 seltdwait(ef269c2c,ef269c34,535,c78e38a0,ef269b2c,...) at seltdwait+0x8a poll(c78e38a0,ef269cec,ef269d28,c0e8c5de,0,...) at poll+0x300 syscallenter(c78e38a0,ef269ce4,ef269ce4,0,74b,...) at syscallenter+0x263 syscall(ef269d28) at syscall+0x4f Xint0x80_syscall() at Xint0x80_syscall+0x21 --- syscall (209, FreeBSD ELF32, poll), eip = 0x2813f7ab, esp = 0xbfbfcbac, ebp = 0xbfbfed78 --- Tracing command syslogd pid 1710 tid 100099 td 0xc74448a0 sched_switch(c74448a0,0,104,191,b209f99f,...) at sched_switch+0x3bc mi_switch(104,0,c0e8bca0,1f3,0,...) at mi_switch+0x219 sleepq_switch(c74448a0,0,c0e8bca0,1a7,0,...) at sleepq_switch+0x162 sleepq_catch_signals(c0998cca,c716c390,0,c0e84b27,c74448a0,...) at sleepq_catch_signals+0xf9 sleepq_wait_sig(c716c3a4,0,ef1f0a4c,101,0,...) at sleepq_wait_sig+0x17 _cv_wait_sig(c716c3a4,c716c390,c0e8e2a5,627,c780ae38,...) at _cv_wait_sig+0x243 seltdwait(c780ae38,58,c6d9ee80,c74448a0,0,...) at seltdwait+0xa2 kern_select(c74448a0,9,2847f0ac,0,0,0,20,c74ab578,c74ab578) at kern_select+0x504 select(c74448a0,ef1f0cec,ef1f0d28,c0e8c5de,0,...) at select+0x66 syscallenter(c74448a0,ef1f0ce4,ef1f0ce4,0,246,...) at syscallenter+0x263 syscall(ef1f0d28) at syscall+0x4f Xint0x80_syscall() at Xint0x80_syscall+0x21 --- syscall (93, FreeBSD ELF32, select), eip = 0x281995c3, esp = 0xbfbfe29c, ebp = 0xbfbfede8 --- Tracing command devd pid 1509 tid 100092 td 0xc7446000 sched_switch(c7446000,0,104,191,6a49d4ce,...) at sched_switch+0x3bc mi_switch(104,0,c0e8bca0,1f3,0,...) at mi_switch+0x219 sleepq_switch(c7446000,0,c0e8bca0,1a7,0,...) at sleepq_switch+0x162 sleepq_catch_signals(c0998cca,c73e6c50,0,c0e84b27,c7446000,...) at sleepq_catch_signals+0xf9 sleepq_wait_sig(c73e6c64,0,ef1d4a4c,101,0,...) at sleepq_wait_sig+0x17 _cv_wait_sig(c73e6c64,c73e6c50,c0e8e2a5,627,c742ac78,...) at _cv_wait_sig+0x243 seltdwait(c742ac78,58,c6d9ee80,c7446000,c0ebdf55,...) at seltdwait+0xa2 kern_select(c7446000,5,bfbfe960,0,0,0,20,c74acaf0,c74acaf0) at kern_select+0x504 select(c7446000,ef1d4cec,ef1d4d28,c0e8c5de,0,...) at select+0x66 syscallenter(c7446000,ef1d4ce4,ef1d4ce4,0,0,...) at syscallenter+0x263 syscall(ef1d4d28) 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,74b20f40,...) at sched_switch+0x3bc mi_switch(104,0,c0e8bca0,1f3,54,...) at mi_switch+0x219 sleepq_switch(c7045b80,0,c0e8bca0,28b,0,...) at sleepq_switch+0x162 sleepq_timedwait(c118ed80,54,c0ebb5f8,0,0,...) at sleepq_timedwait+0x6b _sleep(c118ed80,c118ed2c,54,c0ebb5f8,3e8,...) at _sleep+0x342 softdep_flush(0,ecf96d28,c0e80e8c,390,c73a42bc,...) at softdep_flush+0x256 fork_exit(c0bd8d40,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,74a815a1,...) at sched_switch+0x3bc mi_switch(104,0,c0e8bca0,1f3,0,...) at mi_switch+0x219 sleepq_switch(c7170000,0,c0e8bca0,28b,c7170000,...) at sleepq_switch+0x162 sleepq_timedwait(c1188814,0,ecf93c78,1,0,...) at sleepq_timedwait+0x6b _cv_timedwait(c1188814,c1188800,3e8,76a,4e20,...) at _cv_timedwait+0x252 sched_sync(0,ecf93d28,c0e80e8c,390,c73a4578,...) at sched_sync+0x595 fork_exit(c0a42d50,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,74a7f68b,...) at sched_switch+0x3bc mi_switch(104,0,c0e8bca0,1f3,60,...) at mi_switch+0x219 sleepq_switch(c71702e0,0,c0e8bca0,28b,0,...) at sleepq_switch+0x162 sleepq_timedwait(c73a4834,60,c0e96924,0,0,...) at sleepq_timedwait+0x6b _sleep(c73a4834,c11887d4,260,c0e96924,3e8,...) at _sleep+0x342 vnlru_proc(0,ecf90d28,c0e80e8c,390,c73a4834,...) at vnlru_proc+0xe7 fork_exit(c0a44dc0,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,74a81807,...) at sched_switch+0x3bc mi_switch(104,0,c0e8bca0,1f3,54,...) at mi_switch+0x219 sleepq_switch(c71705c0,0,c0e8bca0,28b,0,...) at sleepq_switch+0x162 sleepq_timedwait(c11884a8,54,c0e93952,0,0,...) at sleepq_timedwait+0x6b _sleep(c11884a8,c11884b0,54,c0e93952,3e8,...) at _sleep+0x342 buf_daemon(0,ecf8dd28,c0e80e8c,390,c73a4af0,...) at buf_daemon+0x175 fork_exit(c0a2a4c0,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,72c62c6c,...) at sched_switch+0x3bc mi_switch(104,0,c0e8bca0,1f3,0,...) at mi_switch+0x219 sleepq_switch(c71708a0,0,c0e8bca0,28b,0,...) at sleepq_switch+0x162 sleepq_timedwait(c1190bdc,0,c0ec1a08,0,0,...) at sleepq_timedwait+0x6b _sleep(c1190bdc,c118f680,0,c0ec1a08,493e0,...) at _sleep+0x342 vm_pagezero(0,ecf8ad28,c0e80e8c,390,c73a6000,...) at vm_pagezero+0xdc fork_exit(c0c1b4c0,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,f1e115a,...) at sched_switch+0x3bc mi_switch(104,0,c0e8bca0,1f3,74,...) at mi_switch+0x219 sleepq_switch(c7170b80,0,c0e8bca0,268,0,...) at sleepq_switch+0x162 sleepq_wait(c11907c8,74,c0e93952,0,0,...) at sleepq_wait+0x63 _sleep(c11907c8,c11907cc,74,c0e93952,0,...) at _sleep+0x372 vm_daemon(0,ecf87d28,c0e80e8c,390,c6dbe2bc,...) at vm_daemon+0x59 fork_exit(c0c15080,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,5db38d5d,...) at sched_switch+0x3bc mi_switch(104,0,c0e8bca0,1f3,54,...) at mi_switch+0x219 sleepq_switch(c7171000,0,c0e8bca0,28b,0,...) at sleepq_switch+0x162 sleepq_timedwait(c1190790,54,c0e93952,0,0,...) at sleepq_timedwait+0x6b _sleep(c1190790,c118f680,54,c0e93952,1388,...) at _sleep+0x342 vm_pageout(0,ecf84d28,c0e80e8c,390,c6dbe578,...) at vm_pageout+0x2c7 fork_exit(c0c160a0,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,a2e06b8f,...) at sched_switch+0x3bc mi_switch(104,0,c0e8bca0,1f3,5c,...) at mi_switch+0x219 sleepq_switch(c71712e0,0,c0e8bca0,268,0,...) at sleepq_switch+0x162 sleepq_wait(c0fd7554,5c,c0cfa432,0,0,...) at sleepq_wait+0x63 _sleep(c0fd7554,c0fd7598,5c,c0cfa432,0,...) at _sleep+0x372 xpt_scanner_thread(0,ecf81d28,c0e80e8c,390,c6dbe834,...) at xpt_scanner_thread+0x47 fork_exit(c048bb80,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,78511fa0,...) at sched_switch+0x3bc mi_switch(104,0,c0e8bca0,1f3,0,...) at mi_switch+0x219 sleepq_switch(c71715c0,0,c0e8bca0,268,0,...) at sleepq_switch+0x162 sleepq_wait(c118a2d8,0,c0ea98ff,0,0,...) at sleepq_wait+0x63 _sleep(c118a2d8,c118a2a0,0,c0ea98ff,0,...) at _sleep+0x372 sctp_iterator_thread(0,ecf7ed28,c0e80e8c,390,c6dbeaf0,...) at sctp_iterator_thread+0x5c fork_exit(c0ad3ea0,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,74a7b23b,...) at sched_switch+0x3bc mi_switch(104,0,c0e8bca0,1f3,5c,...) at mi_switch+0x219 sleepq_switch(c70362e0,0,c0e8bca0,28b,0,...) at sleepq_switch+0x162 sleepq_timedwait(c6fe143c,5c,c0e79692,0,0,...) at sleepq_timedwait+0x6b _sleep(c6fe143c,c6fe14f0,5c,c0e79692,3e8,...) at _sleep+0x342 fdc_thread(c6fe1400,ecf72d28,c0e80e8c,390,c701e000,...) at fdc_thread+0x27d fork_exit(c0c9a630,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,a312d00b,...) at sched_switch+0x3bc mi_switch(104,0,c0e8bca0,1f3,6c,...) at mi_switch+0x219 sleepq_switch(c70368a0,0,c0e8bca0,1a7,6c,...) at sleepq_switch+0x162 sleepq_catch_signals(c0e8bca0,160,0,100,100,...) at sleepq_catch_signals+0xf9 sleepq_wait_sig(c706b000,6c,c0e79692,100,0,...) at sleepq_wait_sig+0x17 _sleep(c706b000,c706f488,16c,c0e79692,0,...) at _sleep+0x35c fw_bus_probe_thread(c706b000,ecf62d28,c0e80e8c,390,c701e2bc,...) at fw_bus_probe_thread+0xa08 fork_exit(c06aabc0,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,9041acf8,...) at sched_switch+0x3bc mi_switch(104,0,c0e8bca0,1f3,0,...) at mi_switch+0x219 sleepq_switch(c70435c0,0,c0e8bca0,268,c70435c0,...) at sleepq_switch+0x162 sleepq_wait(c704bd34,0,ecf4fcac,1,0,...) at sleepq_wait+0x63 _cv_wait(c704bd34,c704bdd4,c0e57d7e,6b,c704bd3c,...) at _cv_wait+0x243 usb_process(c704bd2c,ecf4fd28,c0e80e8c,390,c701e578,...) at usb_process+0x193 fork_exit(c08504a0,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,48411517,...) at sched_switch+0x3bc mi_switch(104,0,c0e8bca0,1f3,0,...) at mi_switch+0x219 sleepq_switch(c70438a0,0,c0e8bca0,268,c70438a0,...) at sleepq_switch+0x162 sleepq_wait(c704bd04,0,ecf4ccac,1,0,...) at sleepq_wait+0x63 _cv_wait(c704bd04,c704bdd4,c0e57d7e,6b,c704bd0c,...) at _cv_wait+0x243 usb_process(c704bcfc,ecf4cd28,c0e80e8c,390,c701e578,...) at usb_process+0x193 fork_exit(c08504a0,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,8fd9037c,...) at sched_switch+0x3bc mi_switch(104,0,c0e8bca0,1f3,0,...) at mi_switch+0x219 sleepq_switch(c7043b80,0,c0e8bca0,268,c7043b80,...) at sleepq_switch+0x162 sleepq_wait(c704bcd4,0,ecf49cac,1,0,...) at sleepq_wait+0x63 _cv_wait(c704bcd4,c704bdd4,c0e57d7e,6b,c704bcdc,...) at _cv_wait+0x243 usb_process(c704bccc,ecf49d28,c0e80e8c,390,c701e578,...) at usb_process+0x193 fork_exit(c08504a0,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,8fd8ef39,...) at sched_switch+0x3bc mi_switch(104,0,c0e8bca0,1f3,0,...) at mi_switch+0x219 sleepq_switch(c7045000,0,c0e8bca0,268,c7045000,...) at sleepq_switch+0x162 sleepq_wait(c704bca4,0,ecf46cac,1,0,...) at sleepq_wait+0x63 _cv_wait(c704bca4,c704bdd4,c0e57d7e,6b,c704bcac,...) at _cv_wait+0x243 usb_process(c704bc9c,ecf46d28,c0e80e8c,390,c701e578,...) at usb_process+0x193 fork_exit(c08504a0,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,8fd8d95a,...) at sched_switch+0x3bc mi_switch(104,0,c0e8bca0,1f3,0,...) at mi_switch+0x219 sleepq_switch(c70455c0,0,c0e8bca0,268,c70455c0,...) at sleepq_switch+0x162 sleepq_wait(c7040b5c,0,ecf3dcac,1,0,...) at sleepq_wait+0x63 _cv_wait(c7040b5c,c7040bfc,c0e57d7e,6b,c7040b64,...) at _cv_wait+0x243 usb_process(c7040b54,ecf3dd28,c0e80e8c,390,c701e578,...) at usb_process+0x193 fork_exit(c08504a0,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,48404b61,...) at sched_switch+0x3bc mi_switch(104,0,c0e8bca0,1f3,0,...) at mi_switch+0x219 sleepq_switch(c7034000,0,c0e8bca0,268,c7034000,...) at sleepq_switch+0x162 sleepq_wait(c7040b2c,0,ecf3acac,1,0,...) at sleepq_wait+0x63 _cv_wait(c7040b2c,c7040bfc,c0e57d7e,6b,c7040b34,...) at _cv_wait+0x243 usb_process(c7040b24,ecf3ad28,c0e80e8c,390,c701e578,...) at usb_process+0x193 fork_exit(c08504a0,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,8f72063e,...) at sched_switch+0x3bc mi_switch(104,0,c0e8bca0,1f3,0,...) at mi_switch+0x219 sleepq_switch(c70342e0,0,c0e8bca0,268,c70342e0,...) at sleepq_switch+0x162 sleepq_wait(c7040afc,0,ecf37cac,1,0,...) at sleepq_wait+0x63 _cv_wait(c7040afc,c7040bfc,c0e57d7e,6b,c7040b04,...) at _cv_wait+0x243 usb_process(c7040af4,ecf37d28,c0e80e8c,390,c701e578,...) at usb_process+0x193 fork_exit(c08504a0,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,8f71f3e8,...) at sched_switch+0x3bc mi_switch(104,0,c0e8bca0,1f3,0,...) at mi_switch+0x219 sleepq_switch(c70345c0,0,c0e8bca0,268,c70345c0,...) at sleepq_switch+0x162 sleepq_wait(c7040acc,0,ecf34cac,1,0,...) at sleepq_wait+0x63 _cv_wait(c7040acc,c7040bfc,c0e57d7e,6b,c7040ad4,...) at _cv_wait+0x243 usb_process(c7040ac4,ecf34d28,c0e80e8c,390,c701e578,...) at usb_process+0x193 fork_exit(c08504a0,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,8f71dc9f,...) at sched_switch+0x3bc mi_switch(104,0,c0e8bca0,1f3,0,...) at mi_switch+0x219 sleepq_switch(c70348a0,0,c0e8bca0,268,c70348a0,...) at sleepq_switch+0x162 sleepq_wait(c7039b5c,0,e0bffcac,1,0,...) at sleepq_wait+0x63 _cv_wait(c7039b5c,c7039bfc,c0e57d7e,6b,c7039b64,...) at _cv_wait+0x243 usb_process(c7039b54,e0bffd28,c0e80e8c,390,c701e578,...) at usb_process+0x193 fork_exit(c08504a0,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,483fd55c,...) at sched_switch+0x3bc mi_switch(104,0,c0e8bca0,1f3,0,...) at mi_switch+0x219 sleepq_switch(c7034b80,0,c0e8bca0,268,c7034b80,...) at sleepq_switch+0x162 sleepq_wait(c7039b2c,0,e0bfccac,1,0,...) at sleepq_wait+0x63 _cv_wait(c7039b2c,c7039bfc,c0e57d7e,6b,c7039b34,...) at _cv_wait+0x243 usb_process(c7039b24,e0bfcd28,c0e80e8c,390,c701e578,...) at usb_process+0x193 fork_exit(c08504a0,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,8981fb44,...) at sched_switch+0x3bc mi_switch(104,0,c0e8bca0,1f3,0,...) at mi_switch+0x219 sleepq_switch(c7035000,0,c0e8bca0,268,c7035000,...) at sleepq_switch+0x162 sleepq_wait(c7039afc,0,e0bf9cac,1,0,...) at sleepq_wait+0x63 _cv_wait(c7039afc,c7039bfc,c0e57d7e,6b,c7039b04,...) at _cv_wait+0x243 usb_process(c7039af4,e0bf9d28,c0e80e8c,390,c701e578,...) at usb_process+0x193 fork_exit(c08504a0,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,8981eb46,...) at sched_switch+0x3bc mi_switch(104,0,c0e8bca0,1f3,0,...) at mi_switch+0x219 sleepq_switch(c70352e0,0,c0e8bca0,268,c70352e0,...) at sleepq_switch+0x162 sleepq_wait(c7039acc,0,e0bf6cac,1,0,...) at sleepq_wait+0x63 _cv_wait(c7039acc,c7039bfc,c0e57d7e,6b,c7039ad4,...) at _cv_wait+0x243 usb_process(c7039ac4,e0bf6d28,c0e80e8c,390,c701e578,...) at usb_process+0x193 fork_exit(c08504a0,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,8981d331,...) at sched_switch+0x3bc mi_switch(104,0,c0e8bca0,1f3,0,...) at mi_switch+0x219 sleepq_switch(c70355c0,0,c0e8bca0,268,c70355c0,...) at sleepq_switch+0x162 sleepq_wait(c702fb5c,0,e0bf2cac,1,0,...) at sleepq_wait+0x63 _cv_wait(c702fb5c,c702fbfc,c0e57d7e,6b,c702fb64,...) at _cv_wait+0x243 usb_process(c702fb54,e0bf2d28,c0e80e8c,390,c701e578,...) at usb_process+0x193 fork_exit(c08504a0,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,483f8ab0,...) at sched_switch+0x3bc mi_switch(104,0,c0e8bca0,1f3,0,...) at mi_switch+0x219 sleepq_switch(c70358a0,0,c0e8bca0,268,c70358a0,...) at sleepq_switch+0x162 sleepq_wait(c702fb2c,0,e0befcac,1,0,...) at sleepq_wait+0x63 _cv_wait(c702fb2c,c702fbfc,c0e57d7e,6b,c702fb34,...) at _cv_wait+0x243 usb_process(c702fb24,e0befd28,c0e80e8c,390,c701e578,...) at usb_process+0x193 fork_exit(c08504a0,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,891b4ae3,...) at sched_switch+0x3bc mi_switch(104,0,c0e8bca0,1f3,0,...) at mi_switch+0x219 sleepq_switch(c7035b80,0,c0e8bca0,268,c7035b80,...) at sleepq_switch+0x162 sleepq_wait(c702fafc,0,e0beccac,1,0,...) at sleepq_wait+0x63 _cv_wait(c702fafc,c702fbfc,c0e57d7e,6b,c702fb04,...) at _cv_wait+0x243 usb_process(c702faf4,e0becd28,c0e80e8c,390,c701e578,...) at usb_process+0x193 fork_exit(c08504a0,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,891b3676,...) at sched_switch+0x3bc mi_switch(104,0,c0e8bca0,1f3,0,...) at mi_switch+0x219 sleepq_switch(c7036000,0,c0e8bca0,268,c7036000,...) at sleepq_switch+0x162 sleepq_wait(c702facc,0,e0be9cac,1,0,...) at sleepq_wait+0x63 _cv_wait(c702facc,c702fbfc,c0e57d7e,6b,c702fad4,...) at _cv_wait+0x243 usb_process(c702fac4,e0be9d28,c0e80e8c,390,c701e578,...) at usb_process+0x193 fork_exit(c08504a0,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,891b2194,...) at sched_switch+0x3bc mi_switch(104,0,c0e8bca0,1f3,0,...) at mi_switch+0x219 sleepq_switch(c701f2e0,0,c0e8bca0,268,c701f2e0,...) at sleepq_switch+0x162 sleepq_wait(c7029b5c,0,e0be2cac,1,0,...) at sleepq_wait+0x63 _cv_wait(c7029b5c,c7029bfc,c0e57d7e,6b,c7029b64,...) at _cv_wait+0x243 usb_process(c7029b54,e0be2d28,c0e80e8c,390,c701e578,...) at usb_process+0x193 fork_exit(c08504a0,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,483edbbe,...) at sched_switch+0x3bc mi_switch(104,0,c0e8bca0,1f3,0,...) at mi_switch+0x219 sleepq_switch(c701f5c0,0,c0e8bca0,268,c701f5c0,...) at sleepq_switch+0x162 sleepq_wait(c7029b2c,0,e0bdfcac,1,0,...) at sleepq_wait+0x63 _cv_wait(c7029b2c,c7029bfc,c0e57d7e,6b,c7029b34,...) at _cv_wait+0x243 usb_process(c7029b24,e0bdfd28,c0e80e8c,390,c701e578,...) at usb_process+0x193 fork_exit(c08504a0,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,88b505f7,...) at sched_switch+0x3bc mi_switch(104,0,c0e8bca0,1f3,0,...) at mi_switch+0x219 sleepq_switch(c701f8a0,0,c0e8bca0,268,c701f8a0,...) at sleepq_switch+0x162 sleepq_wait(c7029afc,0,e0bdccac,1,0,...) at sleepq_wait+0x63 _cv_wait(c7029afc,c7029bfc,c0e57d7e,6b,c7029b04,...) at _cv_wait+0x243 usb_process(c7029af4,e0bdcd28,c0e80e8c,390,c701e578,...) at usb_process+0x193 fork_exit(c08504a0,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,88b4f2b3,...) at sched_switch+0x3bc mi_switch(104,0,c0e8bca0,1f3,0,...) at mi_switch+0x219 sleepq_switch(c701fb80,0,c0e8bca0,268,c701fb80,...) at sleepq_switch+0x162 sleepq_wait(c7029acc,0,e0bd9cac,1,0,...) at sleepq_wait+0x63 _cv_wait(c7029acc,c7029bfc,c0e57d7e,6b,c7029ad4,...) at _cv_wait+0x243 usb_process(c7029ac4,e0bd9d28,c0e80e8c,390,c701e578,...) at usb_process+0x193 fork_exit(c08504a0,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,88b4dc5a,...) at sched_switch+0x3bc mi_switch(104,0,c0e8bca0,1f3,0,...) at mi_switch+0x219 sleepq_switch(c70222e0,0,c0e8bca0,268,c70222e0,...) at sleepq_switch+0x162 sleepq_wait(c7019b5c,0,e0bd2cac,1,0,...) at sleepq_wait+0x63 _cv_wait(c7019b5c,c7019bfc,c0e57d7e,6b,c7019b64,...) at _cv_wait+0x243 usb_process(c7019b54,e0bd2d28,c0e80e8c,390,c701e578,...) at usb_process+0x193 fork_exit(c08504a0,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,483ea26f,...) at sched_switch+0x3bc mi_switch(104,0,c0e8bca0,1f3,0,...) at mi_switch+0x219 sleepq_switch(c70225c0,0,c0e8bca0,268,c70225c0,...) at sleepq_switch+0x162 sleepq_wait(c7019b2c,0,e0bcfcac,1,0,...) at sleepq_wait+0x63 _cv_wait(c7019b2c,c7019bfc,c0e57d7e,6b,c7019b34,...) at _cv_wait+0x243 usb_process(c7019b24,e0bcfd28,c0e80e8c,390,c701e578,...) at usb_process+0x193 fork_exit(c08504a0,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,884e069f,...) at sched_switch+0x3bc mi_switch(104,0,c0e8bca0,1f3,0,...) at mi_switch+0x219 sleepq_switch(c70228a0,0,c0e8bca0,268,c70228a0,...) at sleepq_switch+0x162 sleepq_wait(c7019afc,0,e0bcccac,1,0,...) at sleepq_wait+0x63 _cv_wait(c7019afc,c7019bfc,c0e57d7e,6b,c7019b04,...) at _cv_wait+0x243 usb_process(c7019af4,e0bccd28,c0e80e8c,390,c701e578,...) at usb_process+0x193 fork_exit(c08504a0,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,884df32b,...) at sched_switch+0x3bc mi_switch(104,0,c0e8bca0,1f3,0,...) at mi_switch+0x219 sleepq_switch(c7022b80,0,c0e8bca0,268,c7022b80,...) at sleepq_switch+0x162 sleepq_wait(c7019acc,0,e0bc9cac,1,0,...) at sleepq_wait+0x63 _cv_wait(c7019acc,c7019bfc,c0e57d7e,6b,c7019ad4,...) at _cv_wait+0x243 usb_process(c7019ac4,e0bc9d28,c0e80e8c,390,c701e578,...) at usb_process+0x193 fork_exit(c08504a0,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,7f629430,...) at sched_switch+0x3bc mi_switch(104,0,c0e8bca0,1f3,0,...) at mi_switch+0x219 sleepq_switch(c6ecb5c0,0,c0e8bca0,28b,2,...) at sleepq_switch+0x162 sleepq_timedwait(c1011484,0,c0e79692,2,0,...) at sleepq_timedwait+0x6b _sleep(c1011484,0,0,c0e79692,64,...) at _sleep+0x342 pause(c0e79692,64,c0e4678e,111,0,...) at pause+0x47 random_kthread(0,c6b55d28,c0e80e8c,390,c6dbd000,...) at random_kthread+0x1ef fork_exit(c07bb5b0,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,45415bb1,...) at sched_switch+0x3bc mi_switch(104,0,c0e8bca0,1f3,5c,...) at mi_switch+0x219 sleepq_switch(c6ecbb80,0,c0e8bca0,268,0,...) at sleepq_switch+0x162 sleepq_wait(c100f0c8,5c,c0e79692,0,0,...) at sleepq_wait+0x63 _sleep(c100f0c8,c100f028,25c,c0e79692,0,...) at _sleep+0x372 g_io_schedule_down(c6ecbb80,0,c0e7b1e5,6c,c6b4fd14,...) at g_io_schedule_down+0x5b g_down_procbody(0,c6b4fd28,c0e80e8c,390,c6dbd2bc,...) at g_down_procbody+0x9d fork_exit(c093e880,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,454ebe0f,...) at sched_switch+0x3bc mi_switch(104,0,c0e8bca0,1f3,5c,...) at mi_switch+0x219 sleepq_switch(c6ecc000,0,c0e8bca0,268,0,...) at sleepq_switch+0x162 sleepq_wait(c100f0c4,5c,c0e79692,0,0,...) at sleepq_wait+0x63 _sleep(c100f0c4,c100f048,25c,c0e79692,0,...) at _sleep+0x372 g_io_schedule_up(c6ecc000,0,c0e7b1e5,5f,c6b4cd14,...) at g_io_schedule_up+0x134 g_up_procbody(0,c6b4cd28,c0e80e8c,390,c6dbd2bc,...) at g_up_procbody+0x9d fork_exit(c093e920,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,6a477fb9,...) at sched_switch+0x3bc mi_switch(104,0,c0e8bca0,1f3,5c,...) at mi_switch+0x219 sleepq_switch(c6dc02e0,0,c0e8bca0,268,0,...) at sleepq_switch+0x162 sleepq_wait(c100f0bc,5c,c0e79692,0,0,...) at sleepq_wait+0x63 _sleep(c100f0bc,c100efec,25c,c0e79692,0,...) at _sleep+0x372 g_run_events(c101f300,0,c0e7b1e5,79,c6b49d14,...) at g_run_events+0x526 g_event_procbody(0,c6b49d28,c0e80e8c,390,c6dbd2bc,...) at g_event_procbody+0x90 fork_exit(c093e9c0,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,884b014e,...) at sched_switch+0x3bc mi_switch(109,0,c0e811b1,554,c7172000,...) at mi_switch+0x219 ithread_loop(c7162ae0,ecf75d28,c0e80e8c,390,c6dbd578,...) at ithread_loop+0x1fb fork_exit(c097fb10,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,a193d4e3,...) at sched_switch+0x3bc mi_switch(109,0,c0e811b1,554,c70365c0,...) at mi_switch+0x219 ithread_loop(c7162b70,ecf65d28,c0e80e8c,390,c6dbd578,...) at ithread_loop+0x1fb fork_exit(c097fb10,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,884aacf1,...) at sched_switch+0x3bc mi_switch(109,0,c0e811b1,554,c7043000,...) at mi_switch+0x219 ithread_loop(c701db60,ecf59d28,c0e80e8c,390,c6dbd578,...) at ithread_loop+0x1fb fork_exit(c097fb10,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,a3e8d65f,...) at sched_switch+0x3bc mi_switch(109,0,c0e811b1,554,c70432e0,...) at mi_switch+0x219 ithread_loop(c701d210,ecf55d28,c0e80e8c,390,c6dbd578,...) at ithread_loop+0x1fb fork_exit(c097fb10,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,ad23112f,...) at sched_switch+0x3bc mi_switch(109,0,c0e811b1,554,c701f000,...) at mi_switch+0x219 ithread_loop(c70028a0,e0be6d28,c0e80e8c,390,c6dbd578,...) at ithread_loop+0x1fb fork_exit(c097fb10,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,a7fcdb6a,...) at sched_switch+0x3bc mi_switch(109,0,c0e811b1,554,c7022000,...) at mi_switch+0x219 ithread_loop(c7002ab0,e0bd6d28,c0e80e8c,390,c6dbd578,...) at ithread_loop+0x1fb fork_exit(c097fb10,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,a60ea174,...) at sched_switch+0x3bc mi_switch(109,0,c0e811b1,554,c6ecc2e0,...) at mi_switch+0x219 ithread_loop(c701d080,e0bc6d28,c0e80e8c,390,c6dbd578,...) at ithread_loop+0x1fb fork_exit(c097fb10,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,454dcb34,...) at sched_switch+0x3bc mi_switch(109,0,c0e811b1,554,c6ecc5c0,...) at mi_switch+0x219 ithread_loop(c7002340,e0a70d28,c0e80e8c,390,c6dbd578,...) at ithread_loop+0x1fb fork_exit(c097fb10,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,f7eddbf7,...) at sched_switch+0x3bc mi_switch(109,0,c0e811b1,554,c6ecc8a0,...) at mi_switch+0x219 ithread_loop(c70024e0,e0a6cd28,c0e80e8c,390,c6dbd578,...) at ithread_loop+0x1fb fork_exit(c097fb10,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,454e2926,...) at sched_switch+0x3bc mi_switch(109,0,c0e811b1,554,c6eccb80,...) at mi_switch+0x219 ithread_loop(c6d83380,c6b73d28,c0e80e8c,390,c6dbd578,...) at ithread_loop+0x1fb fork_exit(c097fb10,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,4f1d8135,...) at sched_switch+0x3bc mi_switch(109,0,c0e811b1,554,c6e068a0,...) at mi_switch+0x219 ithread_loop(c6d83430,c6b61d28,c0e80e8c,390,c6dbd578,...) at ithread_loop+0x1fb fork_exit(c097fb10,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 sched_switch(c6e06b80,0,109,191,3109de72,...) at sched_switch+0x3bc mi_switch(109,0,c0e811b1,554,c6e06b80,...) at mi_switch+0x219 ithread_loop(c6d83440,c6b5ed28,c0e80e8c,390,c6dbd578,...) at ithread_loop+0x1fb fork_exit(c097fb10,c6d83440,c6b5ed28) at fork_exit+0xb8 fork_trampoline() at fork_trampoline+0x8 --- trap 0, eip = 0, esp = 0xc6b5ed60, ebp = 0 --- 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,b68b7970,...) at sched_switch+0x3bc mi_switch(109,0,c0e811b1,554,c6dc05c0,...) at mi_switch+0x219 ithread_loop(c6d836d0,c6b46d28,c0e80e8c,390,c6dbd578,...) at ithread_loop+0x1fb fork_exit(c097fb10,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,b509a728,...) at sched_switch+0x3bc mi_switch(109,0,c0e811b1,554,c6dc08a0,...) at mi_switch+0x219 ithread_loop(c6d836e0,c6b43d28,c0e80e8c,390,c6dbd578,...) at ithread_loop+0x1fb fork_exit(c097fb10,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,7f6246ab,...) at sched_switch+0x3bc mi_switch(109,0,c0e811b1,554,c6dc0b80,...) at mi_switch+0x219 ithread_loop(c6d836f0,c6b40d28,c0e80e8c,390,c6dbd578,...) at ithread_loop+0x1fb fork_exit(c097fb10,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,103,18c,74a7f371,...) at sched_switch+0x3bc mi_switch(103,0,c0e8c6b0,2e1,138,...) at mi_switch+0x219 turnstile_wait(c7447980,c7494b80,0,1ac,c1010d70,...) at turnstile_wait+0x4a4 _mtx_lock_sleep(c1010d70,c6e06000,0,c0e84b27,93,...) at _mtx_lock_sleep+0x14d _mtx_lock_flags(c1010d70,0,c0e84b27,93,c6b3dc90,...) at _mtx_lock_flags+0xf7 lock_mtx(c1010d70,1,c0e87c3e,20f,c1020ac0,...) at lock_mtx+0x29 softclock(c10126c0,c6b3dcb8,c09988a4,c101f300,c6e042b8,...) at softclock+0x1ea intr_event_execute_handlers(c6dbd578,c6e04280,c0e811b1,55e,c6e06000,...) at intr_event_execute_handlers+0x125 ithread_loop(c6d83700,c6b3dd28,c0e80e8c,390,c6dbd578,...) at ithread_loop+0xa9 fork_exit(c097fb10,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,b6c30966,...) at sched_switch+0x3bc mi_switch(109,0,c0e811b1,554,c6e065c0,...) at mi_switch+0x219 ithread_loop(c6d83720,c6b37d28,c0e80e8c,390,c6dbd578,...) at ithread_loop+0x1fb fork_exit(c097fb10,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,c6b33c04,c0cd2dc6,c7447980,4,...) at cpustop_handler+0x34 ipi_nmi_handler(c7447980,4,0,c11b3620,c6dbd834,...) at ipi_nmi_handler+0x2f trap(c6b33c10) at trap+0x36 calltrap() at calltrap+0x6 --- trap 0x13, eip = 0xc0cb7ad5, esp = 0xc6b33c50, ebp = 0xc6b33c50 --- acpi_cpu_c1(c6b33c6c,c0fd77d0,0,300,3e65,...) at acpi_cpu_c1+0x5 acpi_cpu_idle(0,c6b33ca0,c0cc5cf0,0,ffffffff,...) at acpi_cpu_idle+0x122 cpu_idle_acpi(0,ffffffff,c101f300,2,c6b33ce8,...) at cpu_idle_acpi+0x2f cpu_idle(0,c6b33cc4,c0e8856b,3bb,c6dbf000,...) at cpu_idle+0x90 sched_idletd(0,c6b33d28,c0e80e8c,390,c6dbd834,...) at sched_idletd+0x263 fork_exit(c09ce8f0,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 cpustop_handler(2,c6b30c04,c0cd2dc6,f4,0,...) at cpustop_handler+0x34 ipi_nmi_handler(f4,0,125f138,c0cb7ad5,c6dbd834,...) at ipi_nmi_handler+0x2f trap(c6b30c10) at trap+0x36 calltrap() at calltrap+0x6 --- trap 0x13, eip = 0xc0cb7ad5, esp = 0xc6b30c50, ebp = 0xc6b30c50 --- acpi_cpu_c1(c6b30c6c,c0fd77d0,1,300,3e65,...) at acpi_cpu_c1+0x5 acpi_cpu_idle(0,c6b30ca0,c0cc5cf0,0,ffffffff,...) at acpi_cpu_idle+0x122 cpu_idle_acpi(0,ffffffff,c101f980,2,c6b30ce8,...) at cpu_idle_acpi+0x2f cpu_idle(0,c6b30cc4,c0e8856b,3bb,c6dbf2e0,...) at cpu_idle+0x90 sched_idletd(0,c6b30d28,c0e80e8c,390,c6dbd834,...) at sched_idletd+0x263 fork_exit(c09ce8f0,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 cpustop_handler(4,c6b2dc04,c0cd2dc6,c716a020,c6dbf5c0,...) at cpustop_handler+0x34 ipi_nmi_handler(c716a020,c6dbf5c0,c6b2db8c,0,c6dbd834,...) at ipi_nmi_handler+0x2f trap(c6b2dc10) at trap+0x36 calltrap() at calltrap+0x6 --- trap 0x13, eip = 0xc0cb7ad5, esp = 0xc6b2dc50, ebp = 0xc6b2dc50 --- acpi_cpu_c1(c6b2dc6c,c0fd77d0,2,300,3e66,...) at acpi_cpu_c1+0x5 acpi_cpu_idle(0,c6b2dca0,c0cc5cf0,0,2710,...) at acpi_cpu_idle+0x122 cpu_idle_acpi(0,2710,c1020000,2,c6b2dce8,...) at cpu_idle_acpi+0x2f cpu_idle(0,c6b2dcc4,c0e8856b,3bb,c6dbf5c0,...) at cpu_idle+0x90 sched_idletd(0,c6b2dd28,c0e80e8c,390,c6dbd834,...) at sched_idletd+0x263 fork_exit(c09ce8f0,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,7029d005,...) at sched_switch+0x3bc mi_switch(108,0,c0e8856b,3b9,c6dbf8a0,...) at mi_switch+0x219 sched_idletd(0,c6b2ad28,c0e80e8c,390,c6dbd834,...) at sched_idletd+0x19f fork_exit(c09ce8f0,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,d12629b2,...) at sched_switch+0x3bc mi_switch(104,0,c0e8bca0,1f3,6c,...) at mi_switch+0x219 sleepq_switch(c6dbfb80,0,c0e8bca0,1a7,6c,...) at sleepq_switch+0x162 sleepq_catch_signals(c0e8bca0,160,0,100,100,...) at sleepq_catch_signals+0xf9 sleepq_wait_sig(c6dbdaf0,6c,c0e8ea32,100,0,...) at sleepq_wait_sig+0x17 _sleep(c6dbdaf0,c6dbdb78,16c,c0e8ea32,0,...) at _sleep+0x35c kern_wait(c6dbfb80,ffffffff,c6b26c44,0,0,...) at kern_wait+0xbe6 wait4(c6dbfb80,c6b26cec,c6b26d28,c0e8c5de,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 = 0x8060df7, esp = 0xbfbfe8bc, ebp = 0xbfbfe8d8 --- Tracing command audit pid 10 tid 100001 td 0xc6dc0000 sched_switch(c6dc0000,0,104,191,884bd82a,...) at sched_switch+0x3bc mi_switch(104,0,c0e8bca0,1f3,0,...) at mi_switch+0x219 sleepq_switch(c6dc0000,0,c0e8bca0,268,c6dc0000,...) at sleepq_switch+0x162 sleepq_wait(c118e500,0,c6b23c8c,1,0,...) at sleepq_wait+0x63 _cv_wait(c118e500,c118e4e4,c0eb62d7,194,0,...) at _cv_wait+0x243 audit_worker(0,c6b23d28,c0e80e8c,390,c6dbe000,...) at audit_worker+0x84 fork_exit(c0b9b4a0,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,51918dff,...) at sched_switch+0x3bc mi_switch(104,0,c0e8bca0,1f3,0,...) at mi_switch+0x219 sleepq_switch(c70458a0,0,c0e8bca0,268,0,...) at sleepq_switch+0x162 sleepq_wait(c71853c0,0,c0e79692,0,0,...) at sleepq_wait+0x63 _sleep(c71853c0,c71853d8,0,c0e79692,0,...) at _sleep+0x372 taskqueue_thread_loop(c11e5fa0,ef185d28,c0e80e8c,390,c100f1a0,...) at taskqueue_thread_loop+0xb5 fork_exit(c09eada0,c11e5fa0,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,b50c4326,...) at sched_switch+0x3bc mi_switch(104,0,c0e8bca0,1f3,0,...) at mi_switch+0x219 sleepq_switch(c71718a0,0,c0e8bca0,28b,2,...) at sleepq_switch+0x162 sleepq_timedwait(c1011484,0,c0e79692,2,0,...) at sleepq_timedwait+0x6b _sleep(c1011484,0,0,c0e79692,bb8,...) at _sleep+0x342 pause(c0e79692,bb8,124,122,c100f228,...) at pause+0x47 deadlkres(0,ecf7bd28,c0e80e8c,390,c100f1a0,...) at deadlkres+0x324 fork_exit(c09603a0,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,95db183,...) at sched_switch+0x3bc mi_switch(104,0,c0e8bca0,1f3,0,...) at mi_switch+0x219 sleepq_switch(c7036b80,0,c0e8bca0,268,c7494b80,...) at sleepq_switch+0x162 sleepq_wait(c7073900,0,c0e872c1,c0e79692,0,...) at sleepq_wait+0x63 msleep_spin(c7073900,c7073918,c0e79692,0,c0e84b27,...) at msleep_spin+0x21d taskqueue_thread_loop(c706f49c,ecf5fd28,c0e80e8c,390,c100f1a0,...) at taskqueue_thread_loop+0x8f fork_exit(c09eada0,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,a2e77ed4,...) at sched_switch+0x3bc mi_switch(104,0,c0e8bca0,1f3,0,...) at mi_switch+0x219 sleepq_switch(c6fab000,0,c0e8bca0,268,0,...) at sleepq_switch+0x162 sleepq_wait(c6d92340,0,c0e79692,0,0,...) at sleepq_wait+0x63 _sleep(c6d92340,c6d92358,0,c0e79692,0,...) at _sleep+0x372 taskqueue_thread_loop(c100fb18,c6b70d28,c0e80e8c,390,c100f1a0,...) at taskqueue_thread_loop+0xb5 fork_exit(c09eada0,c100fb18,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,a2e76d9a,...) at sched_switch+0x3bc mi_switch(104,0,c0e8bca0,1f3,0,...) at mi_switch+0x219 sleepq_switch(c6fab2e0,0,c0e8bca0,268,0,...) at sleepq_switch+0x162 sleepq_wait(c6d92380,0,c0e872c1,c0e79692,0,...) at sleepq_wait+0x63 msleep_spin(c6d92380,c6d92398,c0e79692,0,c0e84b27,...) at msleep_spin+0x21d taskqueue_thread_loop(c0fda438,c6b6dd28,c0e80e8c,390,c100f1a0,...) at taskqueue_thread_loop+0x8f fork_exit(c09eada0,c0fda438,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,a2e75f41,...) at sched_switch+0x3bc mi_switch(104,0,c0e8bca0,1f3,0,...) at mi_switch+0x219 sleepq_switch(c6fab5c0,0,c0e8bca0,268,0,...) at sleepq_switch+0x162 sleepq_wait(c6d92380,0,c0e872c1,c0e79692,0,...) at sleepq_wait+0x63 msleep_spin(c6d92380,c6d92398,c0e79692,0,c0e84b27,...) at msleep_spin+0x21d taskqueue_thread_loop(c0fda438,c6b6ad28,c0e80e8c,390,c100f1a0,...) at taskqueue_thread_loop+0x8f fork_exit(c09eada0,c0fda438,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,a2e750ba,...) at sched_switch+0x3bc mi_switch(104,0,c0e8bca0,1f3,0,...) at mi_switch+0x219 sleepq_switch(c6fab8a0,0,c0e8bca0,268,0,...) at sleepq_switch+0x162 sleepq_wait(c6d92380,0,c0e872c1,c0e79692,0,...) at sleepq_wait+0x63 msleep_spin(c6d92380,c6d92398,c0e79692,0,c0e84b27,...) at msleep_spin+0x21d taskqueue_thread_loop(c0fda438,c6b67d28,c0e80e8c,390,c100f1a0,...) at taskqueue_thread_loop+0x8f fork_exit(c09eada0,c0fda438,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,a2e0e07f,...) at sched_switch+0x3bc mi_switch(104,0,c0e8bca0,1f3,0,...) at mi_switch+0x219 sleepq_switch(c6fabb80,0,c0e8bca0,268,0,...) at sleepq_switch+0x162 sleepq_wait(c6d923c0,0,c0e79692,0,0,...) at sleepq_wait+0x63 _sleep(c6d923c0,c6d923d8,0,c0e79692,0,...) at _sleep+0x372 taskqueue_thread_loop(c118eae4,c6b64d28,c0e80e8c,390,c100f1a0,...) at taskqueue_thread_loop+0xb5 fork_exit(c09eada0,c118eae4,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,a58845eb,...) at sched_switch+0x3bc mi_switch(104,0,c0e8bca0,1f3,0,...) at mi_switch+0x219 sleepq_switch(c6ecb000,0,c0e8bca0,268,0,...) at sleepq_switch+0x162 sleepq_wait(c6d92500,0,c0e79692,0,0,...) at sleepq_wait+0x63 _sleep(c6d92500,c6d92518,0,c0e79692,0,...) at _sleep+0x372 taskqueue_thread_loop(c102e028,c6b5bd28,c0e80e8c,390,c100f1a0,...) at taskqueue_thread_loop+0xb5 fork_exit(c09eada0,c102e028,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,cd7ba6db,...) at sched_switch+0x3bc mi_switch(104,0,c0e8bca0,1f3,0,...) at mi_switch+0x219 sleepq_switch(c6ecb8a0,0,c0e8bca0,268,0,...) at sleepq_switch+0x162 sleepq_wait(c6d92a80,0,c0e79692,0,0,...) at sleepq_wait+0x63 _sleep(c6d92a80,c6d92a98,0,c0e79692,0,...) at _sleep+0x372 taskqueue_thread_loop(c102caa0,c6b52d28,c0e80e8c,390,c100f1a0,...) at taskqueue_thread_loop+0xb5 fork_exit(c09eada0,c102caa0,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 0xc100f460 sched_switch(c100f460,0,104,191,c5fff74b,...) at sched_switch+0x3bc mi_switch(104,0,c0e8bca0,1f3,54,...) at mi_switch+0x219 sleepq_switch(c100f460,0,c0e8bca0,28b,0,...) at sleepq_switch+0x162 sleepq_timedwait(c100f1a0,54,c0e88e7f,0,0,...) at sleepq_timedwait+0x6b _sleep(c100f1a0,0,54,c0e88e7f,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 293 MB: 278 262 246 230 214 198 182 166 150 134 118 102 86 70 54 38 22 6 Dump complete = 0xf db:0:doadump> reset cpu_reset: Restarting BSP cpu_reset_proxy: Stopped CPU 3 (kgdb) proc 78504 [Switching to thread 142 (Thread 100248)]#0 doadump () at pcpu.h:244 244 __asm("movl %%fs:0,%0" : "=r" (td)); (kgdb) bt #0 doadump () at pcpu.h:244 #1 0xc04ddcc9 in db_fncall (dummy1=0xc09dce7a, dummy2=0x0, dummy3=0xffffffff, dummy4=0xef46906c "\200\220Fï") at ../../../ddb/db_command.c:548 #2 0xc04de0ff in db_command (last_cmdp=0xc0fd85fc, cmd_table=0x0, dopager=0x0) at ../../../ddb/db_command.c:445 #3 0xc04de1b4 in db_command_script (command=0xc0fd9508 "call doadump") at ../../../ddb/db_command.c:516 #4 0xc04e2480 in db_script_exec (scriptname=0xc0fd8e60 "doadump", warnifnotfound=Variable "warnifnotfound" is not available. ) at ../../../ddb/db_script.c:302 #5 0xc04e2511 in db_run_cmd (addr=0x1, have_addr=0x0, count=0xc11b0f80, modif=0xef4691a4 "") at ../../../ddb/db_script.c:375 #6 0xc04de0c1 in db_command (last_cmdp=0xc0fd85fc, cmd_table=0x0, dopager=0x1) at ../../../ddb/db_command.c:445 #7 0xc04de21a in db_command_loop () at ../../../ddb/db_command.c:498 #8 0xc04e019d in db_trap (type=0x3, code=0x0) at ../../../ddb/db_main.c:229 #9 0xc09dcff2 in kdb_trap (type=0x3, code=0x0, tf=0xef469354) at ../../../kern/subr_kdb.c:533 #10 0xc0cd33fb in trap (frame=0xef469354) at ../../../i386/i386/trap.c:719 #11 0xc0cbc10c in calltrap () at ../../../i386/i386/exception.s:168 #12 0xc09dce7a in kdb_enter (why=0xc0d29bf6 "watchdog", msg=0xc0e19c79 "watchdog timeout") at cpufunc.h:71 #13 0xc0960ffd in watchdog_fire () at ../../../kern/kern_clock.c:858 #14 0xc09612f2 in hardclock_anycpu (cnt=0x1, usermode=0x0) at ../../../kern/kern_clock.c:556 #15 0xc0cdb488 in handleevents (now=0xef46945c, fake=0x0) at ../../../kern/kern_clocksource.c:205 #16 0xc0cdc54d in timercb (et=0xc11e5f00, arg=0x0) at ../../../kern/kern_clocksource.c:367 #17 0xc0cec5a3 in lapic_handle_timer (frame=0xef4694a0) at ../../../x86/x86/local_apic.c:818 #18 0xc0cbc680 in Xtimerint () at apic_vector.s:108 #19 0xc09f18fc in _isitmyx (w1=0xc6d5b450, w2=0xc6d5b1e0, rmask=0x1, fname=0xc0e8e1ab "isitmychild") at ../../../kern/subr_witness.c:1909 #20 0xc09f1ab7 in isitmychild (parent=Variable "parent" is not available. ) at ../../../kern/subr_witness.c:1942 #21 0xc09f3626 in witness_checkorder (lock=0xc9e6b8ec, flags=0x9, file=0xc0ebbe15 "ufs/ffs/ffs_vfsops.c", line=0x55a, interlock=0x0) at ../../../kern/subr_witness.c:2742 #22 0xc0999024 in _mtx_lock_flags (m=0xc9e6b8ec, opts=0x0, file=0xc0ebbe0c "../../../ufs/ffs/ffs_vfsops.c", line=0x55a) at ../../../kern/kern_mutex.c:200 #23 0xc0bdc9b6 in ffs_sync (mp=0xc7748b50, waitfor=0x1) at ../../../ufs/ffs/ffs_vfsops.c:1370 #24 0xc0a501e2 in vfs_write_suspend (mp=0xc7748b50) at ../../../kern/vfs_vnops.c:1149 #25 0xc0bc2011 in ffs_snapshot (mp=0xc7748b50, snapfile=0xc9e9e740 "/mnt/.snap/dump_snapshot") at ../../../ufs/ffs/ffs_snapshot.c:415 #26 0xc0bdea10 in ffs_mount (mp=0xc7748b50) at ../../../ufs/ffs/ffs_vfsops.c:395 #27 0xc0a39c17 in vfs_donmount (td=0xc7494b80, fsflags=0x211300, fsoptions=0xcc66c980) at ../../../kern/vfs_mount.c:924 #28 0xc0a3a284 in nmount (td=0xc7494b80, uap=0xef469cec) at ../../../kern/vfs_mount.c:409 #29 0xc09eb163 in syscallenter (td=0xc7494b80, sa=0xef469ce4) at ../../../kern/subr_trap.c:344 #30 0xc0cd2caf in syscall (frame=0xef469d28) at ../../../i386/i386/trap.c:1082 #31 0xc0cbc171 in Xint0x80_syscall () at ../../../i386/i386/exception.s:266 #32 0x00000033 in ?? () Previous frame inner to this frame (corrupt stack?) (kgdb) f 23 #23 0xc0bdc9b6 in ffs_sync (mp=0xc7748b50, waitfor=0x1) at ../../../ufs/ffs/ffs_vfsops.c:1370 1370 VI_LOCK(vp); (kgdb) l 1365 * Depend on the mntvnode_slock to keep things stable enough 1366 * for a quick test. Since there might be hundreds of 1367 * thousands of vnodes, we cannot afford even a subroutine 1368 * call unless there's a good chance that we have work to do. 1369 */ 1370 VI_LOCK(vp); 1371 if (vp->v_iflag & VI_DOOMED) { 1372 VI_UNLOCK(vp); 1373 continue; 1374 } (kgdb) info loc mvp = (struct vnode *) 0xc9723e00 vp = (struct vnode *) 0xc9e6b828 devvp = Variable "devvp" is not available. (kgdb) p *vp $1 = {v_type = VREG, v_tag = 0xc0e7d22e "ufs", v_op = 0xc0fbb100, v_data = 0xcae9e0e8, v_mount = 0xc7748b50, v_nmntvnodes = {tqe_next = 0xc9723e00, tqe_prev = 0xc9e6e170}, v_un = {vu_mount = 0x0, vu_socket = 0x0, vu_cdev = 0x0, vu_fifoinfo = 0x0}, v_hashlist = {le_next = 0x0, le_prev = 0xc723b448}, v_hash = 0x1cc63, v_cache_src = { lh_first = 0x0}, v_cache_dst = {tqh_first = 0x0, tqh_last = 0xc9e6b858}, v_cache_dd = 0x0, v_cstart = 0x0, v_lasta = 0x0, v_lastw = 0x0, v_clen = 0x0, v_lock = { lock_object = {lo_name = 0xc0e7d22e "ufs", lo_flags = 0x57b0000, lo_data = 0x0, lo_witness = 0xc6d61e58}, lk_lock = 0x1, lk_exslpfail = 0x0, lk_timo = 0x33, lk_pri = 0x60, lk_stack = {depth = 0xd, pcs = {0xc0990e0e, 0xc0be1531, 0xc0cf5455, 0xc0a50408, 0xc0a50e38, 0xc0a51024, 0xc096c053, 0xc096e200, 0xc096e5a7, 0xc096e74a, 0xc09eb163, 0xc0cd2caf, 0xc0cbc171, 0x0, 0x0, 0x0, 0x0, 0x0}}}, v_interlock = {lock_object = {lo_name = 0xc0e8df8d "vnode interlock", lo_flags = 0x1030000, lo_data = 0x0, lo_witness = 0xc6d5b1e0}, mtx_lock = 0x4}, v_vnlock = 0xc9e6b880, v_holdcnt = 0x0, v_usecount = 0x0, v_iflag = 0x100, v_vflag = 0x0, v_writecount = 0x0, v_freelist = {tqe_next = 0xc8c72570, tqe_prev = 0xc9e6e24c}, v_bufobj = {bo_mtx = {lock_object = {lo_name = 0xc0e968f9 "bufobj interlock", lo_flags = 0x1030000, lo_data = 0x0, lo_witness = 0xc6d60730}, mtx_lock = 0x4}, bo_clean = {bv_hd = {tqh_first = 0x0, tqh_last = 0xc9e6b934}, bv_root = 0x0, bv_cnt = 0x0}, bo_dirty = { bv_hd = {tqh_first = 0x0, tqh_last = 0xc9e6b944}, bv_root = 0x0, bv_cnt = 0x0}, bo_numoutput = 0x0, bo_flag = 0x0, bo_ops = 0xc0fa84c0, bo_bsize = 0x4000, bo_object = 0xc93ea770, bo_synclist = {le_next = 0x0, le_prev = 0x0}, bo_private = 0xc9e6b828, __bo_vnode = 0xc9e6b828}, v_pollinfo = 0x0, v_label = 0x0, v_lockf = 0x0} (kgdb) p *mp $2 = {mnt_mtx = {lock_object = {lo_name = 0xc0e78e31 "struct mount mtx", lo_flags = 0x1030000, lo_data = 0x0, lo_witness = 0xc6d5b450}, mtx_lock = 0xc7494b80}, mnt_gen = 0x1, mnt_list = {tqe_next = 0x0, tqe_prev = 0xc77bfb68}, mnt_op = 0xc0fbaea0, mnt_vfc = 0xc0fbad00, mnt_vnodecovered = 0xc79c8c3c, mnt_syncer = 0xcc6206cc, mnt_ref = 0x594, mnt_nvnodelist = {tqh_first = 0xcb537000, tqh_last = 0xcd409dac}, mnt_nvnodelistsize = 0x58b, mnt_writeopcount = 0x0, mnt_kern_flag = 0x68000144, mnt_flag = 0x1211300, mnt_xflag = 0x0, mnt_noasync = 0x1, mnt_opt = 0xc774f620, mnt_optnew = 0xc7802b40, mnt_maxsymlinklen = 0x78, mnt_stat = {f_version = 0x20030518, f_type = 0x2, f_flags = 0x201300, f_bsize = 0x800, f_iosize = 0x4000, f_blocks = 0xf7513, f_bfree = 0xf5821, f_bavail = 0xe1b91, f_files = 0x44ffe, f_ffree = 0x44a74, f_syncwrites = 0x0, f_asyncwrites = 0x0, f_syncreads = 0x0, f_asyncreads = 0x0, f_spare = {0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}, f_namemax = 0xff, f_owner = 0x0, f_fsid = {val = {0x4dd27d97, 0x2951c137}}, f_charspare = '\0' , f_fstypename = "ufs", '\0' , f_mntfromname = "/dev/md5a", '\0' , f_mntonname = "/mnt", '\0' }, mnt_cred = 0xc79d1700, mnt_data = 0xc7004200, mnt_time = 0x0, mnt_iosize_max = 0x20000, mnt_export = 0xc7e7f300, mnt_label = 0x0, mnt_hashseed = 0x5d10b4af, mnt_lockref = 0x1, mnt_secondary_writes = 0x0, mnt_secondary_accwrites = 0x1dc8b20, mnt_susp_owner = 0xc7494b80, mnt_gjprovider = 0x0, mnt_explock = {lock_object = {lo_name = 0xc0e78e42 "explock", lo_flags = 0x5730000, lo_data = 0x0, lo_witness = 0xc6d60c78}, lk_lock = 0x1, lk_exslpfail = 0x0, lk_timo = 0x0, lk_pri = 0x60, lk_stack = {depth = 0x7, pcs = {0xc0990e0e, 0xc0a31b47, 0xc0a39c66, 0xc0a3a284, 0xc09eb163, 0xc0cd2caf, 0xc0cbc171, 0x0 }}}} (kgdb) p *mvp $3 = {v_type = VMARKER, v_tag = 0x0, v_op = 0x0, v_data = 0x0, v_mount = 0xc7748b50, v_nmntvnodes = {tqe_next = 0xc8c72570, tqe_prev = 0xc9e6b83c}, v_un = {vu_mount = 0x0, vu_socket = 0x0, vu_cdev = 0x0, vu_fifoinfo = 0x0}, v_hashlist = {le_next = 0x0, le_prev = 0x0}, v_hash = 0x0, v_cache_src = {lh_first = 0x0}, v_cache_dst = { tqh_first = 0x0, tqh_last = 0x0}, v_cache_dd = 0x0, v_cstart = 0x0, v_lasta = 0x0, v_lastw = 0x0, v_clen = 0x0, v_lock = {lock_object = {lo_name = 0x0, lo_flags = 0x0, lo_data = 0x0, lo_witness = 0x0}, lk_lock = 0x0, lk_exslpfail = 0x0, lk_timo = 0x0, lk_pri = 0x0, lk_stack = {depth = 0x0, pcs = {0x0 }}}, v_interlock = {lock_object = {lo_name = 0x0, lo_flags = 0x0, lo_data = 0x0, lo_witness = 0x0}, mtx_lock = 0x0}, v_vnlock = 0x0, v_holdcnt = 0x0, v_usecount = 0x0, v_iflag = 0x0, v_vflag = 0x0, v_writecount = 0x0, v_freelist = {tqe_next = 0x0, tqe_prev = 0x0}, v_bufobj = {bo_mtx = {lock_object = {lo_name = 0x0, lo_flags = 0x0, lo_data = 0x0, lo_witness = 0x0}, mtx_lock = 0x0}, bo_clean = {bv_hd = {tqh_first = 0x0, tqh_last = 0x0}, bv_root = 0x0, bv_cnt = 0x0}, bo_dirty = {bv_hd = { tqh_first = 0x0, tqh_last = 0x0}, bv_root = 0x0, bv_cnt = 0x0}, bo_numoutput = 0x0, bo_flag = 0x0, bo_ops = 0x0, bo_bsize = 0x0, bo_object = 0x0, bo_synclist = { le_next = 0x0, le_prev = 0x0}, bo_private = 0x0, __bo_vnode = 0x0}, v_pollinfo = 0x0, v_label = 0x0, v_lockf = 0x0} (kgdb) p *(struct ufsmount *)((mp)->mnt_data) $2 = {um_mountp = 0xc7748b50, um_dev = 0xc8a2fe00, um_cp = 0xc7cec5c0, um_bo = 0xc797da7c, um_devvp = 0xc797d984, um_fstype = 0x2, um_fs = 0xc7759800, um_extattr = { uepm_lock = {lock_object = {lo_name = 0x0, lo_flags = 0x0, lo_data = 0x0, lo_witness = 0x0}, sx_lock = 0x0}, uepm_list = {lh_first = 0x0}, uepm_ucred = 0x0, uepm_flags = 0x0}, um_nindir = 0x800, um_bptrtodb = 0x2, um_seqinc = 0x8, um_lock = {lock_object = {lo_name = 0xc0ebc267 "FFS", lo_flags = 0x1030000, lo_data = 0x0, lo_witness = 0xc6d61df0}, mtx_lock = 0x4}, um_numindirdeps = 0x0, softdep_workitem_pending = {lh_first = 0x0}, softdep_worklist_tail = 0xc7004260, softdep_journal_pending = {lh_first = 0x0}, softdep_journal_tail = 0xc7004268, softdep_jblocks = 0xcc708d80, softdep_unlinked = {tqh_first = 0x0, tqh_last = 0xc7004274}, softdep_dirtycg = {lh_first = 0x0}, softdep_on_journal = 0x0, softdep_on_worklist = 0x0, softdep_deps = 0x395, softdep_accdeps = 0x7628913, softdep_req = 0x0, um_quotas = { 0x0, 0x0}, um_cred = {0x0, 0x0}, um_btime = {0x0, 0x0}, um_itime = {0x0, 0x0}, um_qflags = "\000", um_savedmaxfilesize = 0x0, um_candelete = 0x0, um_balloc = 0xc0bb67a0 , um_blkatoff = 0xc0bdaf20 , um_truncate = 0xc0bbad10 , um_update = 0xc0bba9d0 , um_valloc = 0xc0bb1720 , um_vfree = 0xc0bb0420 , um_ifree = 0xc0bdc110 , um_rdonly = 0xc0bba2e0 , um_snapgone = 0xc0bbc9c0 } (kgdb) p dep_current $4 = {0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2, 0x0, 0x0, 0x0, 0x0, 0x0, 0x91, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2fe, 0x4, 0x0, 0x0, 0x0} (kgdb) $ ps -M /var/crash/vmcore.141 -lp78504 UID PID PPID CPU PRI NI VSZ RSS MWCHAN STAT TT TIME COMMAND 0 78504 78503 0 -60 0 9536 972 - R ?? 67:49,51 [mksnap_ffs] $ $ svn diff -x -p /usr/src/sys Index: /usr/src/sys/ufs/ufs/ufsmount.h =================================================================== --- /usr/src/sys/ufs/ufs/ufsmount.h (revision 222007) +++ /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,10 +83,10 @@ 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 */ int softdep_deps; /* Total dependency count */ int softdep_accdeps; /* accumulated dep count */ int softdep_req; /* Wakeup when deps hits 0. */ Index: /usr/src/sys/ufs/ffs/ffs_vfsops.c =================================================================== --- /usr/src/sys/ufs/ffs/ffs_vfsops.c (revision 222007) +++ /usr/src/sys/ufs/ffs/ffs_vfsops.c (working copy) @@ -30,7 +30,7 @@ */ #include -__FBSDID("$FreeBSD$"); +__FBSDID("$FreeBSD: head/sys/ufs/ffs/ffs_vfsops.c 219804 2011-03-20 21:05:09Z kib $"); #include "opt_quota.h" #include "opt_ufs.h" @@ -2033,12 +2033,10 @@ ffs_geom_strategy(struct bufobj *bo, struct buf *b static void db_print_ffs(struct ufsmount *ump) { - db_printf("mp %p %s devvp %p fs %p su_wl %d su_wl_in %d su_deps %d " - "su_req %d\n", + db_printf("mp %p %s devvp %p fs %p su_wl %d su_deps %d su_req %d\n", ump->um_mountp, ump->um_mountp->mnt_stat.f_mntonname, ump->um_devvp, ump->um_fs, ump->softdep_on_worklist, - ump->softdep_on_worklist_inprogress, ump->softdep_deps, - ump->softdep_req); + ump->softdep_deps, ump->softdep_req); } DB_SHOW_COMMAND(ffs, db_show_ffs) Index: /usr/src/sys/ufs/ffs/ffs_softdep.c =================================================================== --- /usr/src/sys/ufs/ffs/ffs_softdep.c (revision 222007) +++ /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; @@ -614,10 +627,12 @@ FEATURE(softupdates, "FFS soft-updates support"); #define D_JSEGDEP 23 #define D_SBDEP 24 #define D_JTRUNC 25 -#define D_LAST D_JTRUNC +#define D_SENTINAL 26 +#define D_LAST D_SENTINAL 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 +640,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"); @@ -734,10 +753,12 @@ static void clear_unlinked_inodedep(struct inodede static struct inodedep *first_unlinked_inodedep(struct ufsmount *); static int flush_pagedep_deps(struct vnode *, struct mount *, struct diraddhd *); -static void free_pagedep(struct pagedep *); +static int 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 +773,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 +790,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 *); @@ -777,10 +801,12 @@ static void initiate_write_bmsafemap(struct bmsafe static void initiate_write_inodeblock_ufs1(struct inodedep *, struct buf *); static void initiate_write_inodeblock_ufs2(struct inodedep *, struct buf *); static void handle_workitem_freefile(struct freefile *); -static void handle_workitem_remove(struct dirrem *, struct vnode *); +static int handle_workitem_remove(struct dirrem *, int); 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 +821,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 +849,29 @@ 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 newblk_freefrag(struct newblk*); 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 int handle_workitem_freeblocks(struct freeblks *, int); +static int 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); @@ -868,9 +898,11 @@ static int pagedep_find(struct pagedep_hashhead *, struct mount *mp, int, struct pagedep **); static void pause_timer(void *); static int request_cleanup(struct mount *, int); -static int process_worklist_item(struct mount *, int); +static int process_worklist_item(struct mount *, int, 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 +926,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 +1097,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. */ @@ -1088,6 +1145,8 @@ workitem_free(item, type) panic("workitem_free: type mismatch %s != %s", TYPENAME(item->wk_type), TYPENAME(type)); #endif + if (item->wk_state & IOWAITING) + wakeup(item); ump = VFSTOUFS(item->wk_mp); if (--ump->softdep_deps == 0 && ump->softdep_req) wakeup(&ump->softdep_deps); @@ -1101,14 +1160,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); } @@ -1270,8 +1333,7 @@ softdep_flush(void) vfslocked = VFS_LOCK_GIANT(mp); progress += softdep_process_worklist(mp, 0); ump = VFSTOUFS(mp); - remaining += ump->softdep_on_worklist - - ump->softdep_on_worklist_inprogress; + remaining += ump->softdep_on_worklist; VFS_UNLOCK_GIANT(vfslocked); mtx_lock(&mountlist_mtx); nmp = TAILQ_NEXT(mp, mnt_list); @@ -1314,10 +1376,14 @@ softdep_speedup(void) * The following routine is the only one that removes items * and does so in order from first to last. */ + +#define WK_HEAD 0x0001 /* Add to HEAD. */ +#define WK_NODELAY 0x0002 /* Process immediately. */ + static void -add_to_worklist(wk, nodelay) +add_to_worklist(wk, flags) struct worklist *wk; - int nodelay; + int flags; { struct ufsmount *ump; @@ -1327,13 +1393,17 @@ static void panic("add_to_worklist: %s(0x%X) already on list", TYPENAME(wk->wk_type), wk->wk_state); wk->wk_state |= ONWORKLIST; - if (LIST_EMPTY(&ump->softdep_workitem_pending)) + if (ump->softdep_on_worklist == 0) { LIST_INSERT_HEAD(&ump->softdep_workitem_pending, wk, wk_list); - else + ump->softdep_worklist_tail = wk; + } else if (flags & WK_HEAD) { + LIST_INSERT_HEAD(&ump->softdep_workitem_pending, wk, wk_list); + } else { LIST_INSERT_AFTER(ump->softdep_worklist_tail, wk, wk_list); - ump->softdep_worklist_tail = wk; + ump->softdep_worklist_tail = wk; + } ump->softdep_on_worklist += 1; - if (nodelay) + if (flags & WK_NODELAY) worklist_speedup(); } @@ -1346,16 +1416,12 @@ remove_from_worklist(wk) struct worklist *wk; { struct ufsmount *ump; - struct worklist *wkend; ump = VFSTOUFS(wk->wk_mp); WORKLIST_REMOVE(wk); - if (wk == ump->softdep_worklist_tail) { - LIST_FOREACH(wkend, &ump->softdep_workitem_pending, wk_list) - if (LIST_NEXT(wkend, wk_list) == NULL) - break; - ump->softdep_worklist_tail = wkend; - } + if (ump->softdep_worklist_tail == wk) + ump->softdep_worklist_tail = + (struct worklist *)wk->wk_list.le_prev; ump->softdep_on_worklist -= 1; } @@ -1389,7 +1455,7 @@ softdep_process_worklist(mp, full) starttime = time_second; softdep_process_journal(mp, NULL, full?MNT_WAIT:0); while (ump->softdep_on_worklist > 0) { - if ((cnt = process_worklist_item(mp, LK_NOWAIT)) == -1) + if ((cnt = process_worklist_item(mp, 10, LK_NOWAIT)) == 0) break; else matchcnt += cnt; @@ -1451,44 +1517,97 @@ process_removes(vp) for (;;) { if (inodedep_lookup(mp, inum, 0, &inodedep) == 0) return; - LIST_FOREACH(dirrem, &inodedep->id_dirremhd, dm_inonext) - if ((dirrem->dm_state & (COMPLETE | ONWORKLIST)) == + LIST_FOREACH(dirrem, &inodedep->id_dirremhd, dm_inonext) { + /* + * If another thread is trying to lock this vnode + * it will fail but we must wait for it to do so + * before we can proceed. + */ + if (dirrem->dm_state & INPROGRESS) { + dirrem->dm_state |= IOWAITING; + msleep(&dirrem->dm_list, &lk, PVM, + "pwrwait", 0); + continue; + } + if ((dirrem->dm_state & (COMPLETE | ONWORKLIST)) == (COMPLETE | ONWORKLIST)) break; + } if (dirrem == NULL) return; - /* - * If another thread is trying to lock this vnode it will - * fail but we must wait for it to do so before we can - * proceed. - */ - if (dirrem->dm_state & INPROGRESS) { - dirrem->dm_state |= IOWAITING; - msleep(&dirrem->dm_list, &lk, PVM, "pwrwait", 0); - continue; - } remove_from_worklist(&dirrem->dm_list); FREE_LOCK(&lk); if (vn_start_secondary_write(NULL, &mp, V_NOWAIT)) panic("process_removes: suspended filesystem"); - handle_workitem_remove(dirrem, vp); + handle_workitem_remove(dirrem, 0); vn_finished_secondary_write(mp); ACQUIRE_LOCK(&lk); } } /* + * 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 another thread is trying to lock this vnode + * it will fail but we must wait for it to do so + * before we can proceed. + */ + if (freeblks->fb_state & INPROGRESS) { + freeblks->fb_state |= IOWAITING; + msleep(&freeblks->fb_list, &lk, PVM, + "ptrwait", 0); + continue; + } + 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 -process_worklist_item(mp, flags) +process_worklist_item(mp, target, flags) struct mount *mp; + int target; int flags; { + struct worklist sentinal; struct worklist *wk; struct ufsmount *ump; - struct vnode *vp; - int matchcnt = 0; + int matchcnt; + int error; mtx_assert(&lk, MA_OWNED); KASSERT(mp != NULL, ("process_worklist_item: NULL mp")); @@ -1499,77 +1618,87 @@ static int */ if (curthread->td_pflags & TDP_COWINPROGRESS) return (-1); - /* - * Normally we just process each item on the worklist in order. - * However, if we are in a situation where we cannot lock any - * inodes, we have to skip over any dirrem requests whose - * vnodes are resident and locked. - */ - vp = NULL; + PHOLD(curproc); /* Don't let the stack go away. */ ump = VFSTOUFS(mp); - LIST_FOREACH(wk, &ump->softdep_workitem_pending, wk_list) { - if (wk->wk_state & INPROGRESS) + matchcnt = 0; + sentinal.wk_mp = NULL; + sentinal.wk_type = D_SENTINAL; + LIST_INSERT_HEAD(&ump->softdep_workitem_pending, &sentinal, wk_list); + for (wk = LIST_NEXT(&sentinal, wk_list); wk != NULL; + wk = LIST_NEXT(&sentinal, wk_list)) { + if (wk->wk_type == D_SENTINAL) { + LIST_REMOVE(&sentinal, wk_list); + LIST_INSERT_AFTER(wk, &sentinal, wk_list); continue; - if ((flags & LK_NOWAIT) == 0 || wk->wk_type != D_DIRREM) - break; + } wk->wk_state |= INPROGRESS; - ump->softdep_on_worklist_inprogress++; + remove_from_worklist(wk); FREE_LOCK(&lk); - ffs_vgetf(mp, WK_DIRREM(wk)->dm_oldinum, - LK_NOWAIT | LK_EXCLUSIVE, &vp, FFSV_FORCEINSMQ); - ACQUIRE_LOCK(&lk); - if (wk->wk_state & IOWAITING) { - wk->wk_state &= ~IOWAITING; - wakeup(wk); - } - wk->wk_state &= ~INPROGRESS; - ump->softdep_on_worklist_inprogress--; - if (vp != NULL) + if (vn_start_secondary_write(NULL, &mp, V_NOWAIT)) + panic("process_worklist_item: suspended filesystem"); + switch (wk->wk_type) { + case D_DIRREM: + /* removal of a directory entry */ + error = handle_workitem_remove(WK_DIRREM(wk), flags); break; - } - if (wk == 0) - return (-1); - remove_from_worklist(wk); - FREE_LOCK(&lk); - if (vn_start_secondary_write(NULL, &mp, V_NOWAIT)) - panic("process_worklist_item: suspended filesystem"); - matchcnt++; - switch (wk->wk_type) { - case D_DIRREM: - /* removal of a directory entry */ - handle_workitem_remove(WK_DIRREM(wk), vp); - if (vp) - vput(vp); - break; + case D_FREEBLKS: + /* releasing blocks and/or fragments from a file */ + error = handle_workitem_freeblocks(WK_FREEBLKS(wk), + flags); + break; - case D_FREEBLKS: - /* releasing blocks and/or fragments from a file */ - handle_workitem_freeblocks(WK_FREEBLKS(wk), flags & LK_NOWAIT); - break; + case D_FREEFRAG: + /* releasing a fragment when replaced as a file grows */ + handle_workitem_freefrag(WK_FREEFRAG(wk)); + error = 0; + break; - case D_FREEFRAG: - /* releasing a fragment when replaced as a file grows */ - handle_workitem_freefrag(WK_FREEFRAG(wk)); - break; + case D_FREEFILE: + /* releasing an inode when its link count drops to 0 */ + handle_workitem_freefile(WK_FREEFILE(wk)); + error = 0; + break; - case D_FREEFILE: - /* releasing an inode when its link count drops to 0 */ - handle_workitem_freefile(WK_FREEFILE(wk)); - break; + case D_FREEWORK: + /* Final block in an indirect was freed. */ + ACQUIRE_LOCK(&lk); + handle_workitem_indirblk(WK_FREEWORK(wk)); + error = 0; + FREE_LOCK(&lk); + break; - case D_FREEWORK: - /* Final block in an indirect was freed. */ - handle_workitem_indirblk(WK_FREEWORK(wk)); - break; - - default: - panic("%s_process_worklist: Unknown type %s", - "softdep", TYPENAME(wk->wk_type)); - /* NOTREACHED */ + default: + panic("%s_process_worklist: Unknown type %s", + "softdep", TYPENAME(wk->wk_type)); + /* NOTREACHED */ + } + vn_finished_secondary_write(mp); + ACQUIRE_LOCK(&lk); + if (error == 0) { + if (++matchcnt == target) + break; + continue; + } + /* + * We have to retry the worklist item later. Wake up any + * waiters who may be able to complete it immediately and + * add the item back to the head so we don't try to execute + * it again. + */ + wk->wk_state &= ~INPROGRESS; + if (wk->wk_state & IOWAITING) { + wk->wk_state &= ~IOWAITING; + wakeup(wk); + } + add_to_worklist(wk, WK_HEAD); } - vn_finished_secondary_write(mp); - ACQUIRE_LOCK(&lk); + LIST_REMOVE(&sentinal, wk_list); + /* Sentinal could've become the tail from remove_from_worklist. */ + if (ump->softdep_worklist_tail == &sentinal) + ump->softdep_worklist_tail = + (struct worklist *)sentinal.wk_list.le_prev; + PRELE(curproc); return (matchcnt); } @@ -1922,6 +2051,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 +2138,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 +2225,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 +2255,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 +2287,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 +2750,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,12 +2785,14 @@ 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); + process_worklist_item(UFSTOVFS(ump), 2, LK_NOWAIT); if (journal_space(ump, 0) == 0) { softdep_speedup(); if (journal_space(ump, 1) == 0) @@ -2753,6 +2936,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 +3197,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 +3211,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 +3266,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, WK_NODELAY); + } + WORKITEM_FREE(jtrunc, D_JTRUNC); +} + static inline struct jsegdep * inoref_jseg(inoref) struct inoref *inoref; @@ -3123,7 +3328,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 +3388,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 +3410,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 +3429,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 +3452,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 +3521,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 +3551,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); - add_to_worklist(&freeblks->fb_list, 1); - } + (freeblks->fb_state & ALLCOMPLETE) == ALLCOMPLETE) + add_to_worklist(&freeblks->fb_list, WK_NODELAY); free_jfreeblk(jfreeblk); } @@ -3482,7 +3678,7 @@ free_freedep(freedep) { if (--freedep->fd_freework->fw_ref == 0) - add_to_worklist(&freedep->fd_freework->fw_list, 1); + add_to_worklist(&freedep->fd_freework->fw_list, WK_NODELAY); WORKITEM_FREE(freedep, D_FREEDEP); } @@ -3493,51 +3689,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 +3769,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 +3869,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 +3958,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 +3976,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 +4012,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 +4145,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 +4678,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 +4687,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); } @@ -4751,7 +4909,6 @@ allocdirect_merge(adphead, newadp, oldadp) { struct worklist *wk; struct freefrag *freefrag; - struct newdirblk *newdirblk; freefrag = NULL; mtx_assert(&lk, MA_OWNED); @@ -4791,11 +4948,10 @@ allocdirect_merge(adphead, newadp, oldadp) * move it from the old allocdirect to the new allocdirect. */ if ((wk = LIST_FIRST(&oldadp->ad_newdirblk)) != NULL) { - newdirblk = WK_NEWDIRBLK(wk); - WORKLIST_REMOVE(&newdirblk->db_list); + WORKLIST_REMOVE(wk); if (!LIST_EMPTY(&oldadp->ad_newdirblk)) panic("allocdirect_merge: extra newdirblk"); - WORKLIST_INSERT(&newadp->ad_newdirblk, &newdirblk->db_list); + WORKLIST_INSERT(&newadp->ad_newdirblk, wk); } TAILQ_REMOVE(adphead, oldadp, ad_next); /* @@ -4814,9 +4970,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 +5239,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 +5266,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 +5287,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 +5314,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 +5326,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 +5341,134 @@ 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); 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. */ @@ -5310,7 +5477,6 @@ allocindir_merge(aip, oldaip) struct allocindir *aip; struct allocindir *oldaip; { - struct newdirblk *newdirblk; struct freefrag *freefrag; struct worklist *wk; @@ -5326,11 +5492,10 @@ allocindir_merge(aip, oldaip) * move it from the old allocindir to the new allocindir. */ if ((wk = LIST_FIRST(&oldaip->ai_newdirblk)) != NULL) { - newdirblk = WK_NEWDIRBLK(wk); - WORKLIST_REMOVE(&newdirblk->db_list); + WORKLIST_REMOVE(wk); if (!LIST_EMPTY(&oldaip->ai_newdirblk)) panic("allocindir_merge: extra newdirblk"); - WORKLIST_INSERT(&aip->ai_newdirblk, &newdirblk->db_list); + WORKLIST_INSERT(&aip->ai_newdirblk, wk); } /* * We can skip journaling for this freefrag and just complete @@ -5363,7 +5528,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 +5547,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 +5565,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 +5580,512 @@ 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 = NULL; + } + /* + * 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; + } + /* Complete when the real copy is written. */ + WORKLIST_INSERT(&bp->b_dep, &freework->fw_list); + FREE_LOCK(&lk); + bqrelse(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; + struct mount *mp; + ufs2_daddr_t extblocks, datablocks; + ufs_lbn_t tmpval, lbn, lastlbn; + int frags; + int lastoff, iboff; + int allocblock; + int error, i; + int needj; + + fs = ip->i_fs; + mp = UFSTOVFS(ip->i_ump); + vp = ITOV(ip); + needj = 1; + iboff = -1; + allocblock = 0; + extblocks = 0; + datablocks = 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; + lastoff = blkoff(fs, length); + /* + * Compute frags we are keeping in lastlbn. 0 means all. + */ + if (lastlbn >= 0 && lastlbn < NDADDR) { + 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; + /* + * Traverse partially truncated indirect tree. + */ + if (lbn <= lastlbn && lbn + tmpval - 1 > lastlbn) + setup_trunc_indir(freeblks, ip, -lbn - i, + lastlbn, DIP(ip, i_ib[i]), needj); + } + /* + * Handle partial truncation to a frag boundary. + */ + if (frags) { + 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) + allocblock = 1; + } + ip->i_size = length; + 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 && frags) + 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) { + ip->i_size = length - lastoff; + DIP_SET(ip, i_size, ip->i_size); + 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); + } else if (lastoff != 0 && vp->v_type != VDIR) { + int size; + + /* + * Zero the end of a truncated frag or block. + */ + size = sblksize(fs, length, 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); + 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 +6125,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 +6132,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 +6202,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 +6216,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 @@ -5603,18 +6241,16 @@ softdep_setup_freeblocks(ip, length, flags) * the request here than in the !delay case. */ if ((freeblks->fb_state & ALLCOMPLETE) == ALLCOMPLETE) - add_to_worklist(&freeblks->fb_list, 1); - } - if (needj && LIST_EMPTY(&freeblks->fb_jfreeblkhd)) - needj = 0; - + add_to_worklist(&freeblks->fb_list, WK_NODELAY); + } 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 +6258,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,26 +6278,48 @@ 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)) - bp->b_flags |= B_INVAL | B_NOCACHE; - FREE_LOCK(&lk); - brelse(bp); + if (deallocate_dependencies(bp, freeblks, blkoff)) + bqrelse(bp); + else + brelse(bp); BO_LOCK(bo); goto restart; } @@ -5668,69 +6327,67 @@ 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) + return (0); + /* + * 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); + if (free_pagedep(pagedep) == 0) + panic("Failed to free pagedep %p", pagedep); return (0); } @@ -5739,58 +6396,82 @@ static int * be reallocated to a new vnode. The buffer must be locked, thus, * no I/O completion operations can occur while we are manipulating * its associated dependencies. The mutex is held so that other I/O's - * associated with related dependencies do not occur. Returns 1 if - * all dependencies were cleared, 0 otherwise. + * associated with related dependencies do not occur. */ 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) { + ACQUIRE_LOCK(&lk); + 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)) { + FREE_LOCK(&lk); + 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_FREEWORK: + /* + * A truncation is waiting for the zero'd pointers + * to be written. It can be freed when the freeblks + * is journaled. + */ + WORKLIST_REMOVE(wk); + wk->wk_state |= ONDEPLIST; + WORKLIST_INSERT(&freeblks->fb_freeworkhd, wk); + break; + 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 */ } } + FREE_LOCK(&lk); + /* + * Don't throw away this buf, we were partially truncating and + * some deps may always remain. + */ + if (off) { + allocbuf(bp, off); + bp->b_vflags |= BV_SCANNED; + return (EBUSY); + } + bp->b_flags |= B_INVAL | B_NOCACHE; - return (1); + return (0); } /* @@ -5800,20 +6481,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 +6518,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 +6538,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,17 +6562,44 @@ 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; } if (!LIST_EMPTY(&newblk->nb_jwork)) jwork_move(wkhd, &newblk->nb_jwork); + /* + * When truncating we must free the newdirblk early to remove + * the pagedep from the hash before returning. + */ + if ((wk = LIST_FIRST(&newblk->nb_newdirblk)) != NULL) + free_newdirblk(WK_NEWDIRBLK(wk)); + if (!LIST_EMPTY(&newblk->nb_newdirblk)) + panic("cancel_newblk: extra newdirblk"); return (jnewblk); } /* + * Schedule the freefrag associated with a newblk to be released once + * the pointers are written and the previous block is no longer needed. + */ +static void +newblk_freefrag(newblk) + struct newblk *newblk; +{ + struct freefrag *freefrag; + + if (newblk->nb_freefrag == NULL) + return; + freefrag = newblk->nb_freefrag; + newblk->nb_freefrag = NULL; + freefrag->ff_state |= COMPLETE; + if ((freefrag->ff_state & ALLCOMPLETE) == ALLCOMPLETE) + add_to_worklist(&freefrag->ff_list, 0); +} + +/* * Free a newblk. Generate a new freefrag work request if appropriate. * This must be called after the inode pointer and any direct block pointers * are valid or fully removed via truncate or frag extension. @@ -5924,34 +6609,23 @@ 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); + newblk_freefrag(newblk); if (newblk->nb_state & ONDEPLIST) LIST_REMOVE(newblk, nb_deps); if (newblk->nb_state & ONWORKLIST) WORKLIST_REMOVE(&newblk->nb_list); LIST_REMOVE(newblk, nb_hash); - if ((freefrag = newblk->nb_freefrag) != NULL) { - freefrag->ff_state |= COMPLETE; - 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); @@ -5968,9 +6642,9 @@ free_newdirblk(newdirblk) struct pagedep *pagedep; struct diradd *dap; struct worklist *wk; - 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 @@ -5983,21 +6657,13 @@ free_newdirblk(newdirblk) */ pagedep = newdirblk->db_pagedep; pagedep->pd_state &= ~NEWBLOCK; - if ((pagedep->pd_state & ONWORKLIST) == 0) + if ((pagedep->pd_state & ONWORKLIST) == 0) { while ((dap = LIST_FIRST(&pagedep->pd_pendinghd)) != NULL) free_diradd(dap, NULL); - /* - * If no dependencies remain, the pagedep will be freed. - */ - for (i = 0; i < DAHASHSZ; i++) - if (!LIST_EMPTY(&pagedep->pd_diraddhd[i])) - break; - if (i == DAHASHSZ && (pagedep->pd_state & ONWORKLIST) == 0 && - LIST_EMPTY(&pagedep->pd_jmvrefhd)) { - KASSERT(LIST_FIRST(&pagedep->pd_dirremhd) == NULL, - ("free_newdirblk: Freeing non-free pagedep %p", pagedep)); - LIST_REMOVE(pagedep, pd_hash); - WORKITEM_FREE(pagedep, D_PAGEDEP); + /* + * If no dependencies remain, the pagedep will be freed. + */ + free_pagedep(pagedep); } /* Should only ever be one item in the list. */ while ((wk = LIST_FIRST(&newdirblk->db_mkdir)) != NULL) { @@ -6020,6 +6686,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 +6715,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 +6831,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 +6859,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 +6929,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 +6957,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, WK_NODELAY); + } else if (--freeblks->fb_ref == 0) + add_to_worklist(&freeblks->fb_list, WK_NODELAY); + 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); } /* @@ -6320,38 +6978,79 @@ handle_written_freework(freework) * to the number of blocks allocated for the file) are also * performed in this function. */ -static void +static int handle_workitem_freeblocks(freeblks, flags) struct freeblks *freeblks; 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); - return; - } - freeblks->fb_ref++; + if (LIST_EMPTY(&freeblks->fb_freeworkhd)) + return handle_complete_freeblocks(freeblks, flags); + 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) + if (--freeblks->fb_ref != 0) { + freeblks->fb_state &= ~INPROGRESS; + if (freeblks->fb_state & IOWAITING) { + freeblks->fb_state &= ~IOWAITING; + wakeup(&freeblks->fb_list); + } freeblks = NULL; + } FREE_LOCK(&lk); if (freeblks) - handle_complete_freeblocks(freeblks); + return handle_complete_freeblocks(freeblks, flags); + return (0); } /* @@ -6359,41 +7058,73 @@ handle_workitem_freeblocks(freeblks, flags) * freeblocks dependency and any journal work awaiting completion. This * can not be called until all other dependencies are stable on disk. */ -static void -handle_complete_freeblocks(freeblks) +static int +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; + 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) + return (EBUSY); 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. @@ -6401,13 +7132,19 @@ handle_workitem_freeblocks(freeblks, flags) handle_jwork(&freeblks->fb_jwork); WORKITEM_FREE(freeblks, D_FREEBLKS); FREE_LOCK(&lk); + return (0); } /* - * 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 +7154,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 +7266,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 +7289,103 @@ 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) { + freework->fw_state |= ALLCOMPLETE; + 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); } /* @@ -6757,10 +7450,14 @@ setup_newdir(dap, newinum, dinum, newdirbp, mkdirp break; if (wk == NULL) panic("setup_newdir: lost allocdirect"); + if (pagedep->pd_state & NEWBLOCK) + panic("setup_newdir: NEWBLOCK already set"); newblk = WK_NEWBLK(wk); pagedep->pd_state |= NEWBLOCK; pagedep->pd_newdirblk = newdirblk; newdirblk->db_pagedep = pagedep; + if (!LIST_EMPTY(&newblk->nb_newdirblk)) + panic("setup_newdir: newdirblk already present in newblk."); WORKLIST_INSERT(&newblk->nb_newdirblk, &newdirblk->db_list); WORKLIST_INSERT(&newdirblk->db_mkdir, &mkdir1->md_list); /* @@ -6788,7 +7485,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; @@ -7327,7 +8024,7 @@ softdep_setup_remove(bp, dp, ip, isrmdir) direct = LIST_EMPTY(&dirrem->dm_jremrefhd); FREE_LOCK(&lk); if (direct) - handle_workitem_remove(dirrem, NULL); + handle_workitem_remove(dirrem, 0); } } @@ -7540,6 +8237,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 @@ -8092,10 +8790,10 @@ clear_unlinked_inodedep(inodedep) * This workitem decrements the inode's link count. * If the link count reaches zero, the file is removed. */ -static void -handle_workitem_remove(dirrem, xp) +static int +handle_workitem_remove(dirrem, flags) struct dirrem *dirrem; - struct vnode *xp; + int flags; { struct inodedep *inodedep; struct workhead dotdotwk; @@ -8105,7 +8803,6 @@ clear_unlinked_inodedep(inodedep) struct vnode *vp; struct inode *ip; ino_t oldinum; - int error; if (dirrem->dm_state & ONWORKLIST) panic("handle_workitem_remove: dirrem %p still on worklist", @@ -8113,12 +8810,9 @@ clear_unlinked_inodedep(inodedep) oldinum = dirrem->dm_oldinum; mp = dirrem->dm_list.wk_mp; ump = VFSTOUFS(mp); - if ((vp = xp) == NULL && - (error = ffs_vgetf(mp, oldinum, LK_EXCLUSIVE, &vp, - FFSV_FORCEINSMQ)) != 0) { - softdep_error("handle_workitem_remove: vget", error); - return; - } + flags |= LK_EXCLUSIVE; + if (ffs_vgetf(mp, oldinum, flags, &vp, FFSV_FORCEINSMQ) != 0) + return (EBUSY); ip = VTOI(vp); ACQUIRE_LOCK(&lk); if ((inodedep_lookup(mp, oldinum, 0, &inodedep)) == 0) @@ -8209,22 +8903,17 @@ clear_unlinked_inodedep(inodedep) if (inodedep == NULL || (inodedep->id_state & (DEPCOMPLETE | UNLINKED)) == UNLINKED || check_inode_unwritten(inodedep)) { - if (xp != NULL) - add_to_worklist(&dirrem->dm_list, 0); FREE_LOCK(&lk); - if (xp == NULL) { - vput(vp); - handle_workitem_remove(dirrem, NULL); - } - return; + vput(vp); + return handle_workitem_remove(dirrem, flags); } WORKLIST_INSERT(&inodedep->id_inowait, &dirrem->dm_list); FREE_LOCK(&lk); ip->i_flag |= IN_CHANGE; out: ffs_update(vp, 0); - if (xp == NULL) - vput(vp); + vput(vp); + return (0); } /* @@ -8372,7 +9061,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 +9085,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 +9589,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 +9612,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 +9654,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 +9664,10 @@ 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)); + KASSERT(indirdep->ir_saveddata == NULL, + ("free_indirdep: %p still has saved data.", indirdep)); if (indirdep->ir_state & ONWORKLIST) WORKLIST_REMOVE(&indirdep->ir_list); WORKITEM_FREE(indirdep, D_INDIRDEP); @@ -8984,22 +9684,25 @@ initiate_write_indirdep(indirdep, bp) struct buf *bp; { + indirdep->ir_state |= IOSTARTED; if (indirdep->ir_state & GOINGAWAY) panic("disk_io_initiation: indirdep gone"); - /* * 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 +9769,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 +9784,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 +9824,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 +9943,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 +9963,7 @@ softdep_disk_write_complete(bp) struct worklist *wk; struct worklist *owk; struct workhead reattach; + struct freeblks *freeblks; struct buf *sbp; /* @@ -9277,6 +9981,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,18 +10023,16 @@ softdep_disk_write_complete(bp) case D_FREEBLKS: wk->wk_state |= COMPLETE; - if ((wk->wk_state & ALLCOMPLETE) == ALLCOMPLETE) - add_to_worklist(wk, 1); + freeblks = WK_FREEBLKS(wk); + if ((wk->wk_state & ALLCOMPLETE) == ALLCOMPLETE && + LIST_EMPTY(&freeblks->fb_jfreeblkhd)) + add_to_worklist(wk, WK_NODELAY); continue; case D_FREEWORK: 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 +10162,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 +10197,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 +10565,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 = NULL; + } 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 +10596,7 @@ handle_written_indirdep(indirdep, bp, bpp) if ((indirdep->ir_state & DEPCOMPLETE) == 0) { LIST_INSERT_HEAD(&indirdep->ir_completehd, aip, ai_next); + newblk_freefrag(&aip->ai_block); continue; } free_newblk(&aip->ai_block); @@ -9886,50 +10605,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 +10685,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 +10697,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 +10781,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); } @@ -10113,25 +10832,29 @@ handle_written_mkdir(mkdir, type) complete_mkdir(mkdir); } -static void +static int free_pagedep(pagedep) struct pagedep *pagedep; { int i; - if (pagedep->pd_state & (NEWBLOCK | ONWORKLIST)) - return; + if (pagedep->pd_state & NEWBLOCK) + return (0); + if (!LIST_EMPTY(&pagedep->pd_dirremhd)) + return (0); for (i = 0; i < DAHASHSZ; i++) if (!LIST_EMPTY(&pagedep->pd_diraddhd[i])) - return; + return (0); + if (!LIST_EMPTY(&pagedep->pd_pendinghd)) + return (0); if (!LIST_EMPTY(&pagedep->pd_jmvrefhd)) - return; - if (!LIST_EMPTY(&pagedep->pd_dirremhd)) - return; - if (!LIST_EMPTY(&pagedep->pd_pendinghd)) - return; + return (0); + if (pagedep->pd_state & ONWORKLIST) + WORKLIST_REMOVE(&pagedep->pd_list); LIST_REMOVE(pagedep, pd_hash); WORKITEM_FREE(pagedep, D_PAGEDEP); + + return (1); } /* @@ -10217,11 +10940,7 @@ handle_written_filepage(pagedep, bp) * Otherwise it will remain to track any new entries on * the page in case they are fsync'ed. */ - if ((pagedep->pd_state & NEWBLOCK) == 0 && - LIST_EMPTY(&pagedep->pd_jmvrefhd)) { - LIST_REMOVE(pagedep, pd_hash); - WORKITEM_FREE(pagedep, D_PAGEDEP); - } + free_pagedep(pagedep); return (0); } @@ -10655,6 +11374,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 +11421,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 +11437,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 +11514,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++; @@ -10799,6 +11595,9 @@ loop: } continue; + case D_FREEWORK: + continue; + default: panic("softdep_sync_metadata: Unknown type %s", TYPENAME(wk->wk_type)); @@ -10851,11 +11650,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 +11741,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. @@ -11237,6 +12084,8 @@ softdep_slowdown(vp) softdep_speedup(); stat_sync_limit_hit += 1; FREE_LOCK(&lk); + if (DOINGSUJ(vp)) + return (0); return (1); } @@ -11338,8 +12187,9 @@ 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) { + process_worklist_item(UFSTOVFS(ump), 1, LK_NOWAIT) != 0) { stat_worklist_push += 1; FREE_LOCK(&lk); UFS_LOCK(ump); @@ -11363,24 +12213,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 +12234,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; @@ -11432,8 +12281,7 @@ request_cleanup(mp, resource) */ if (ump->softdep_on_worklist > max_softdeps / 10) { td->td_pflags |= TDP_SOFTDEP; - process_worklist_item(mp, LK_NOWAIT); - process_worklist_item(mp, LK_NOWAIT); + process_worklist_item(mp, 2, LK_NOWAIT); td->td_pflags &= ~TDP_SOFTDEP; stat_worklist_push += 2; return(1); @@ -11664,6 +12512,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 +12560,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 222007) +++ /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 222007) +++ /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 222007) +++ /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 222007) +++ /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 222007) +++ /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 222007) +++ /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 222007) +++ /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/kern/vfs_subr.c =================================================================== --- /usr/src/sys/kern/vfs_subr.c (revision 222007) +++ /usr/src/sys/kern/vfs_subr.c (working copy) @@ -1376,7 +1376,7 @@ restart: } } - if (length > 0) { + if (length > 0 && (vp->v_mount->mnt_kern_flag & MNTK_SUJ) == 0) { restartsync: TAILQ_FOREACH_SAFE(bp, &bo->bo_dirty.bv_hd, b_bobufs, nbp) { if (bp->b_lblkno > 0) Index: /usr/src/sys/sys/vnode.h =================================================================== --- /usr/src/sys/sys/vnode.h (revision 222007) +++ /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