GENERIC from Fri Dec 21 16:41:19 2012 +0200, r244441+vm1 3c1cfa6, vmcore.16 GDB: no debug ports present KDB: debugger backends: ddb KDB: current backend: ddb Copyright (c) 1992-2012 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 10.0-CURRENT #0 r244441+3c1cfa6: Fri Dec 21 20:18:03 CET 2012 pho@x4.osted.lan:/var/tmp/deviant2/sys/amd64/compile/PHO amd64 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 K8-class CPU) Origin = "AuthenticAMD" Id = 0x100f23 Family = 0x10 Model = 0x2 Stepping = 3 Features=0x178bfbff Features2=0x802009 AMD Features=0xee500800 AMD Features2=0x7ff TSC: P-state invariant real memory = 4294967296 (4096 MB) avail memory = 3949309952 (3766 MB) : Trying to mount root from ufs:/dev/ufs/root [rw]... Enter full pathname of shell or RETURN for /bin/sh: Cannot read termcap database; using dumb terminal settings. # ls -l /dev total 6 crw-r--r-- 1 root wheel 0x23 Dec 21 21:29 acpi lrwxr-xr-x 1 root wheel 4 Dec 21 21:29 ad4 -> ada0 lrwxr-xr-x 1 root wheel 6 Dec 21 21:29 ad4s1 -> ada0s1 lrwxr-xr-x 1 root wheel 7 Dec 21 21:29 ad4s1a -> ada0s1a lrwxr-xr-x 1 root wheel 7 Dec 21 21:29 ad4s1b -> ada0s1b lrwxr-xr-x 1 root wheel 7 Dec 21 21:29 ad4s1d -> ada0s1d lrwxr-xr-x 1 root wheel 7 Dec 21 21:29 ad4s1e -> ada0s1e lrwxr-xr-x 1 root wheel 7 Dec 21 21:29 ad4s1f -> ada0s1f lrwxr-xr-x 1 root wheel 7 Dec 21 21:29 ad4s1g -> ada0s1g lrwxr-xr-x 1 root wheel 6 Dec 21 21:29 ad4s2 -> ada0s2 lrwxr-xr-x 1 root wheel 7 Dec 21 21:29 ad4s2a -> ada0s2a lrwxr-xr-x 1 root wheel 7 Dec 21 21:29 ad4s2d -> ada0s2d lrwxr-xr-x 1 root wheel 7 Dec 21 21:29 ad4s2e -> ada0s2e lrwxr-xr-x 1 root wheel 6 Dec 21 21:29 ad4s3 -> ada0s3 lrwxr-xr-x 1 root wheel 7 Dec 21 21:29 ad4s3a -> ada0s3a lrwxr-xr-x 1 root wheel 7 Dec 21 21:29 ad4s3d -> ada0s3d lrwxr-xr-x 1 root wheel 7 Dec 21 21:29 ad4s3e -> ada0s3e crw-r----- 1 root operator 0x63 Dec 21 21:29 ada0 crw-r----- 1 root operator 0x65 Dec 21 21:29 ada0s1 crw-r----- 1 root operator 0x6c Dec 21 21:29 ada0s1a crw-r----- 1 root operator 0x6e Dec 21 21:29 ada0s1b crw-r----- 1 root operator 0x70 Dec 21 21:29 ada0s1d crw-r----- 1 root operator 0x72 Dec 21 21:29 ada0s1e crw-r----- 1 root operator 0x74 Dec 21 21:29 ada0s1f crw-r----- 1 root operator 0x76 Dec 21 21:29 ada0s1g crw-r----- 1 root operator 0x67 Dec 21 21:29 ada0s2 crw-r----- 1 root operator 0x78 Dec 21 21:29 ada0s2a crw-r----- 1 root operator 0x7a Dec 21 21:29 ada0s2d crw-r----- 1 root operator 0x7c Dec 21 21:29 ada0s2e crw-r----- 1 root operator 0x69 Dec 21 21:29 ada0s3 crw-r----- 1 root operator 0x7e Dec 21 21:29 ada0s3a crw-r----- 1 root operator 0x80 Dec 21 21:29 ada0s3d crw-r----- 1 root operator 0x82 Dec 21 21:29 ada0s3e crw-rw-r-- 1 root operator 0x25 Dec 21 21:29 apm crw-rw---- 1 root operator 0x24 Dec 21 21:29 apmctl crw------- 1 root wheel 0x30 Dec 21 21:29 atkbd0 crw------- 1 root kmem 0x9 Dec 21 21:29 audit crw------- 1 root wheel 0x18 Dec 21 21:29 bpf lrwxr-xr-x 1 root wheel 3 Dec 21 21:29 bpf0 -> bpf crw-rw-rw- 1 root wheel 0x33 Dec 21 21:29 bpsm0 dr-xr-xr-x 2 root wheel 512 Dec 21 21:29 cam crw-r----- 1 root operator 0x6b Dec 21 21:29 cd0 crw------- 1 root wheel 0x5 Dec 21 21:29 console crw------- 1 root wheel 0x44 Dec 21 21:29 consolectl crw-rw-rw- 1 root wheel 0xe Dec 21 21:29 ctty crw-rw---- 1 uucp dialer 0x2d Dec 21 21:29 cuau0 crw-rw---- 1 uucp dialer 0x2e Dec 21 21:29 cuau0.init crw-rw---- 1 uucp dialer 0x2f Dec 21 21:29 cuau0.lock crw------- 1 root wheel 0xa Dec 21 21:29 dcons crw------- 1 root wheel 0x4 Dec 21 21:29 devctl cr-------- 1 root wheel 0x60 Dec 21 21:29 devstat crw------- 1 root wheel 0xb Dec 21 21:29 dgdb dr-xr-xr-x 2 root wheel 512 Dec 21 21:29 fd crw------- 1 root wheel 0x1f Dec 21 21:29 fido lrwxr-xr-x 1 root wheel 5 Dec 21 21:29 fw0 -> fw0.0 crw-rw---- 1 root operator 0x26 Dec 21 21:29 fw0.0 lrwxr-xr-x 1 root wheel 8 Dec 21 21:29 fwmem0 -> fwmem0.0 crw-rw---- 1 root operator 0x27 Dec 21 21:29 fwmem0.0 crw-r----- 1 root operator 0x3 Dec 21 21:29 geom.ctl crw------- 1 root wheel 0x1a Dec 21 21:29 io lrwxr-xr-x 1 root wheel 6 Dec 21 21:29 kbd0 -> atkbd0 lrwxr-xr-x 1 root wheel 7 Dec 21 21:29 kbd1 -> kbdmux0 crw------- 1 root wheel 0x1d Dec 21 21:29 kbdmux0 crw------- 1 root wheel 0x7 Dec 21 21:29 klog crw-r----- 1 root kmem 0x21 Dec 21 21:29 kmem dr-xr-xr-x 2 root wheel 512 Dec 21 21:29 label crw------- 1 root wheel 0x4d Dec 21 21:29 mdctl crw-r----- 1 root kmem 0x20 Dec 21 21:29 mem crw-rw-rw- 1 root wheel 0x1b Dec 21 21:29 midistat crw-rw-rw- 1 root wheel 0x49 Dec 21 21:29 mixer0 crw-rw-rw- 1 root wheel 0x4a Dec 21 21:29 mixer1 crw-rw-rw- 1 root wheel 0x4b Dec 21 21:29 mixer2 crw-rw-rw- 1 root wheel 0x4c Dec 21 21:29 mixer3 crw------- 1 root kmem 0x8 Dec 21 21:29 nfslock crw-rw-rw- 1 root wheel 0xc Dec 21 21:29 null crw------- 1 root operator 0x61 Dec 21 21:29 pass0 crw------- 1 root operator 0x62 Dec 21 21:29 pass1 crw-r--r-- 1 root wheel 0xf Dec 21 21:29 pci crw-rw-rw- 1 root wheel 0x32 Dec 21 21:29 psm0 crw-rw-rw- 1 root wheel 0x10 Dec 21 21:29 random cr--r--r-- 1 root wheel 0x6 Dec 21 21:29 sndstat lrwxr-xr-x 1 root wheel 4 Dec 21 21:29 stderr -> fd/2 lrwxr-xr-x 1 root wheel 4 Dec 21 21:29 stdin -> fd/0 lrwxr-xr-x 1 root wheel 4 Dec 21 21:29 stdout -> fd/1 crw------- 1 root wheel 0x1c Dec 21 21:29 sysmouse crw------- 1 root wheel 0x2a Dec 21 21:29 ttyu0 crw------- 1 root wheel 0x2b Dec 21 21:29 ttyu0.init crw------- 1 root wheel 0x2c Dec 21 21:29 ttyu0.lock crw------- 1 root wheel 0x34 Dec 21 21:29 ttyv0 crw------- 1 root wheel 0x35 Dec 21 21:29 ttyv1 crw------- 1 root wheel 0x36 Dec 21 21:29 ttyv2 crw------- 1 root wheel 0x37 Dec 21 21:29 ttyv3 crw------- 1 root wheel 0x38 Dec 21 21:29 ttyv4 crw------- 1 root wheel 0x39 Dec 21 21:29 ttyv5 crw------- 1 root wheel 0x3a Dec 21 21:29 ttyv6 crw------- 1 root wheel 0x3b Dec 21 21:29 ttyv7 crw------- 1 root wheel 0x3c Dec 21 21:29 ttyv8 crw------- 1 root wheel 0x3d Dec 21 21:29 ttyv9 crw------- 1 root wheel 0x3e Dec 21 21:29 ttyva crw------- 1 root wheel 0x3f Dec 21 21:29 ttyvb crw------- 1 root wheel 0x40 Dec 21 21:29 ttyvc crw------- 1 root wheel 0x41 Dec 21 21:29 ttyvd crw------- 1 root wheel 0x42 Dec 21 21:29 ttyve crw------- 1 root wheel 0x43 Dec 21 21:29 ttyvf dr-xr-xr-x 2 root wheel 512 Dec 21 21:29 ufs dr-xr-xr-x 2 root wheel 512 Dec 21 21:29 ufsid crw------- 1 root wheel 0x45 Dec 21 21:29 ufssuspend lrwxr-xr-x 1 root wheel 9 Dec 21 21:29 ugen0.1 -> usb/0.1.0 lrwxr-xr-x 1 root wheel 9 Dec 21 21:29 ugen1.1 -> usb/1.1.0 lrwxr-xr-x 1 root wheel 9 Dec 21 21:29 ugen2.1 -> usb/2.1.0 lrwxr-xr-x 1 root wheel 9 Dec 21 21:29 ugen3.1 -> usb/3.1.0 lrwxr-xr-x 1 root wheel 9 Dec 21 21:29 ugen4.1 -> usb/4.1.0 lrwxr-xr-x 1 root wheel 9 Dec 21 21:29 ugen5.1 -> usb/5.1.0 lrwxr-xr-x 1 root wheel 6 Dec 21 21:29 urandom -> random dr-xr-xr-x 2 root wheel 512 Dec 21 21:29 usb crw-r--r-- 1 root operator 0x47 Dec 21 21:29 usbctl crw------- 1 root operator 0x48 Dec 21 21:29 xpt0 crw-rw-rw- 1 root wheel 0xd Dec 21 21:29 zero # exit Setting hostuuid: 00000000-0000-0000-0000-00218515337d. Setting hostid: 0x6b64ac17. Starting ddb. Entropy harvesting: interrupts ethernet point_to_point kickstart. Fast boot: skipping disk checks. 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=600003 inet 127.0.0.1 netmask 0xff000000 inet6 ::1 prefixlen 128 inet6 fe80::1%lo0 prefixlen 64 scopeid 0x4 nd6 options=21 re0: flags=8843 metric 0 mtu 1500 options=8209b 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 nd6 options=29 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 nd6 options=29 Starting devd. Starting Network: fwe0. fwe0: flags=8802 metric 0 mtu 1500 options=8 ether 02:dc:10:62:ad:eb nd6 options=29 ch 1 dma -1 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 nd6 options=29 re0: link state changed to UP 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/compat/pkg /usr/local/lib/qt4 32-bit compatibility ldconfig path: /usr/lib32 Creating and/or trimming log files. Starting syslogd. savecore: couldn't find media and/or sector size of /var/crash: Inappropriate ioctl for device Dec 21 21:29:59 x4 savecore: couldn't find media and/or sector size of /var/crash: Inappropriate ioctl for device No core dumps found. Additional ABI support: linux. Starting rpcbind. NFS access cache time=60 lock order reversal: 1st 0xffffff80ef05ae00 bufwait (bufwait) @ kern/vfs_bio.c:2743 2nd 0xfffffe0008e78c00 dirhash (dirhash) @ ufs/ufs/ufs_dirhash.c:284 KDB: stack backtrace: db_trace_self_wrapper() at db_trace_self_wrapper+0x2a/frame 0xffffff811e5d0400 kdb_backtrace() at kdb_backtrace+0x37/frame 0xffffff811e5d04c0 _witness_debugger() at _witness_debugger+0x2c/frame 0xffffff811e5d04e0 witness_checkorder() at witness_checkorder+0x82d/frame 0xffffff811e5d0590 _sx_xlock() at _sx_xlock+0x6d/frame 0xffffff811e5d05c0 ufsdirhash_acquire() at ufsdirhash_acquire+0x44/frame 0xffffff811e5d05e0 ufsdirhash_add() at ufsdirhash_add+0x19/frame 0xffffff811e5d0610 ufs_direnter() at ufs_direnter+0x6c1/frame 0xffffff811e5d06e0 ufs_mkdir() at ufs_mkdir+0x50a/frame 0xffffff811e5d08d0 VOP_MKDIR_APV() at VOP_MKDIR_APV+0xaa/frame 0xffffff811e5d08f0 kern_mkdirat() at kern_mkdirat+0x212/frame 0xffffff811e5d0ad0 amd64_syscall() at amd64_syscall+0x2d3/frame 0xffffff811e5d0bf0 Xfast_syscall() at Xfast_syscall+0xf7/frame 0xffffff811e5d0bf0 --- syscall (136, FreeBSD ELF64, sys_mkdir), rip = 0x800924bfa, rsp = 0x7fffffffd788, rbp = 0x801006050 --- Clearing /tmp (X related). Starting mountd. Starting nfsd. Recovering vi editor sessions:. Updating motd:. Starting ntpd. Configuring syscons: keymap blanktime. Starting sshd. Starting cron. Starting default moused. Starting inetd. Fri Dec 21 21:30:04 CET 2012 FreeBSD/amd64 (x4.osted.lan) (console) login: g_vfs_done():label/tmp[WRITE(offset=549584896, length=114688)]error = 11 /tmp: got error 11 while accessing filesystem panic: softdep_deallocate_dependencies: unrecovered I/O error cpuid = 1 KDB: enter: panic [ thread pid 13 tid 100014 ] Stopped at kdb_enter+0x3b: movq $0,0xa8dfc2(%rip) db> run pho db:0:pho> bt Tracing pid 13 tid 100014 td 0xfffffe0002936480 kdb_enter() at kdb_enter+0x3b/frame 0xffffff8000289900 vpanic() at vpanic+0xe1/frame 0xffffff8000289940 panic() at panic+0x67/frame 0xffffff8000289a20 softdep_deallocate_dependencies() at softdep_deallocate_dependencies+0x72/frame 0xffffff8000289a40 brelse() at brelse+0x6d/frame 0xffffff8000289ac0 bufdone() at bufdone+0x78/frame 0xffffff8000289ae0 cluster_callback() at cluster_callback+0x4d/frame 0xffffff8000289b10 bufdone() at bufdone+0x44/frame 0xffffff8000289b30 biodone() at biodone+0x8c/frame 0xffffff8000289b70 g_io_schedule_up() at g_io_schedule_up+0xed/frame 0xffffff8000289b90 g_up_procbody() at g_up_procbody+0x7c/frame 0xffffff8000289ba0 fork_exit() at fork_exit+0x139/frame 0xffffff8000289bf0 fork_trampoline() at fork_trampoline+0xe/frame 0xffffff8000289bf0 --- trap 0, rip = 0, rsp = 0xffffff8000289cb0, rbp = 0 --- db:0:bt> show allpcpu Current CPU: 1 cpuid = 0 dynamic pcpu = 0x5db200 curthread = 0xfffffe011212f480: pid 2678 "rot2" curpcb = 0xffffff811e738cc0 fpcurthread = none idlethread = 0xfffffe000291d480: tid 100003 "idle: cpu0" curpmap = 0xfffffe0112e4a440 tssp = 0xffffffff81571680 commontssp = 0xffffffff81571680 rsp0 = 0xffffff811e738cc0 gs32p = 0xffffffff8156f7b8 ldt = 0xffffffff8156f7f8 tss = 0xffffffff8156f7e8 spin locks held: cpuid = 1 dynamic pcpu = 0xffffff807ef13200 curthread = 0xfffffe0002936480: pid 13 "g_up" curpcb = 0xffffff8000289cc0 fpcurthread = none idlethread = 0xfffffe000291d000: tid 100004 "idle: cpu1" curpmap = 0xffffffff81361b70 tssp = 0xffffffff815716e8 commontssp = 0xffffffff815716e8 rsp0 = 0xffffff8000289cc0 gs32p = 0xffffffff8156f820 ldt = 0xffffffff8156f860 tss = 0xffffffff8156f850 spin locks held: cpuid = 2 dynamic pcpu = 0xffffff807ef1a200 curthread = 0xfffffe011212e000: pid 2659 "rot2" curpcb = 0xffffff811e756cc0 fpcurthread = none idlethread = 0xfffffe0002928900: tid 100005 "idle: cpu2" curpmap = 0xfffffe0008f19be8 tssp = 0xffffffff81571750 commontssp = 0xffffffff81571750 rsp0 = 0xffffff811e756cc0 gs32p = 0xffffffff8156f888 ldt = 0xffffffff8156f8c8 tss = 0xffffffff8156f8b8 spin locks held: cpuid = 3 dynamic pcpu = 0xffffff807ef21200 curthread = 0xfffffe005b026900: pid 2660 "rot2" curpcb = 0xffffff811e670cc0 fpcurthread = none idlethread = 0xfffffe0002928480: tid 100006 "idle: cpu3" curpmap = 0xfffffe0112844ef8 tssp = 0xffffffff815717b8 commontssp = 0xffffffff815717b8 rsp0 = 0xffffff811e670cc0 gs32p = 0xffffffff8156f8f0 ldt = 0xffffffff8156f930 tss = 0xffffffff8156f920 spin locks held: db:0:allpcpu> show alllocks Process 17 (syncer) thread 0xfffffe0008a2e000 (100076) exclusive lockmgr bufwait (bufwait) r = 0 (0xffffff80ef1b8600) locked @ kern/vfs_cluster.c:772 exclusive lockmgr ufs (ufs) r = 0 (0xfffffe005b3175a8) locked @ kern/vfs_subr.c:2162 exclusive lockmgr syncer (syncer) r = 0 (0xfffffe0008dcb098) locked @ kern/vfs_subr.c:1781 db:0:alllocks> show lockedvnods Locked vnodes 0xfffffe0008dcb000: tag syncer, type VNON usecount 1, writecount 0, refcount 2 mountedhere 0 flags (VI_ACTIVE) lock type syncer: EXCL by thread 0xfffffe0008a2e000 (pid 17, syncer, tid 100076) #0 0xffffffff808d2741 at __lockmgr_args+0x6a1 #1 0xffffffff80981b39 at vop_stdlock+0x39 #2 0xffffffff80d22908 at VOP_LOCK1_APV+0x88 #3 0xffffffff809a1ccd at _vn_lock+0x8d #4 0xffffffff80998879 at sched_sync+0x339 #5 0xffffffff808bdc99 at fork_exit+0x139 #6 0xffffffff80c7a69e at fork_trampoline+0xe 0xfffffe005b317510: tag ufs, type VREG usecount 5, writecount 2, refcount 680 mountedhere 0 flags (VI_ACTIVE) v_object 0xfffffe005b8119f8 ref 3 pages 8170 lock type ufs: EXCL by thread 0xfffffe0008a2e000 (pid 17, syncer, tid 100076) with exclusive waiters pending #0 0xffffffff808d2741 at __lockmgr_args+0x6a1 #1 0xffffffff80b45b1b at ffs_lock+0x9b #2 0xffffffff80d22908 at VOP_LOCK1_APV+0x88 #3 0xffffffff809a1ccd at _vn_lock+0x8d #4 0xffffffff80996663 at vget+0x63 #5 0xffffffff80997c52 at vfs_msync+0x72 #6 0xffffffff80997e46 at sync_fsync+0x126 #7 0xffffffff80d20856 at VOP_FSYNC_APV+0xa6 #8 0xffffffff809988a2 at sched_sync+0x362 #9 0xffffffff808bdc99 at fork_exit+0x139 #10 0xffffffff80c7a69e at fork_trampoline+0xe ino 600, on dev label/tmp db:0:lockedvnods> show mount 0xfffffe0008cbfb58 /dev/ufs/root on / (ufs) 0xfffffe0008cc0000 devfs on /dev (devfs) 0xfffffe0008e69790 /dev/ufs/home on /home (ufs) 0xfffffe0008e693c8 /dev/label/tmp on /tmp (ufs) 0xfffffe0008e69000 /dev/ufs/usr on /usr (ufs) 0xfffffe0008cc0b58 /dev/ufs/var on /var (ufs) More info: show mount db:0:mount> ps pid ppid pgrp uid state wmesg wchan cmd 2678 1505 1505 1001 R+ CPU 0 rot2 2677 1505 1505 1001 R+ rot2 2676 1505 1505 1001 R+ rot2 2675 1505 1505 1001 R+ rot2 2674 1505 1505 1001 D+ ufs 0xfffffe005b3175a8 rot2 2673 1505 1505 1001 R+ rot2 2672 1505 1505 1001 R+ rot2 2671 1505 1505 1001 R+ rot2 2670 1505 1505 1001 R+ rot2 2669 1505 1505 1001 R+ rot2 2668 1505 1505 1001 R+ rot2 2667 1505 1505 1001 R+ rot2 2666 1505 1505 1001 R+ rot2 2665 1505 1505 1001 R+ rot2 2664 1505 1505 1001 R+ rot2 2663 1505 1505 1001 R+ rot2 2662 1505 1505 1001 R+ rot2 2661 1505 1505 1001 R+ rot2 2660 1505 1505 1001 R+ CPU 3 rot2 2659 1505 1505 1001 R+ CPU 2 rot2 2658 1538 1537 1001 S nanslp 0xffffffff813690e8 sleep 1539 1537 1537 1001 S piperd 0xfffffe0008d988b8 awk 1538 1537 1537 1001 S wait 0xfffffe005b88e950 sh 1537 1535 1537 1001 Ss wait 0xfffffe005b88f000 sh 1536 1534 1536 1001 Ss kqread 0xfffffe0008c3e000 tail 1535 1528 1528 1001 S select 0xfffffe0008ad79c0 sshd 1534 1527 1527 1001 S select 0xfffffe0008cc2840 sshd 1533 1532 1533 1001 Ss+ select 0xfffffe0008cc18c0 top 1532 1526 1526 1001 S select 0xfffffe0008cc2bc0 sshd 1528 1352 1528 0 Ss select 0xfffffe0008ad7a40 sshd 1527 1352 1527 0 Ss select 0xfffffe0008b84640 sshd 1526 1352 1526 0 Ss select 0xfffffe0008b846c0 sshd 1505 1479 1505 1001 S+ wait 0xfffffe005b02e950 rot2 1479 1478 1479 1001 Ss+ wait 0xfffffe0008d774a8 bash 1478 1476 1476 1001 S select 0xfffffe0008b84b40 sshd 1476 1352 1476 0 Ss select 0xfffffe0008cc20c0 sshd 1475 1 1475 0 Ss+ ttyin 0xfffffe0002cee8a8 getty 1474 1 1474 0 Ss+ ttyin 0xfffffe0002f9c0a8 getty 1473 1 1473 0 Ss+ ttyin 0xfffffe0002f9c8a8 getty 1472 1 1472 0 Ss+ ttyin 0xfffffe0002ceeca8 getty 1471 1 1471 0 Ss+ ttyin 0xfffffe0002f9d0a8 getty 1470 1 1470 0 Ss+ ttyin 0xfffffe0002f9d4a8 getty 1469 1 1469 0 Ss+ ttyin 0xfffffe0002f9c4a8 getty 1468 1 1468 0 Ss+ ttyin 0xfffffe0002cee4a8 getty 1467 1 1467 0 Ss+ ttyin 0xfffffe000299a4a8 getty 1428 1 1428 0 Ss select 0xfffffe0008ad8040 inetd 1395 1 1395 0 Ss select 0xfffffe0008cc22c0 moused 1371 1 1371 0 Ss nanslp 0xffffffff813690e8 cron 1364 1 1364 25 Ss pause 0xfffffe0008e11548 sendmail 1360 1 1360 0 Ss select 0xfffffe0008b84d40 sendmail 1352 1 1352 0 Ss select 0xfffffe0008ec73c0 sshd 1306 1 1306 0 Ss select 0xfffffe0008cc24c0 ntpd 1169 1168 1168 0 S (threaded) nfsd 100122 S rpcsvc 0xfffffe0008dd68a0 nfsd: service 100121 S rpcsvc 0xfffffe0008dd6920 nfsd: service 100120 S rpcsvc 0xfffffe0008dd69a0 nfsd: service 100115 S rpcsvc 0xfffffe0008cb1220 nfsd: master 1168 1 1168 0 Ss select 0xfffffe0008cc2540 nfsd 1159 1 1159 0 Ss select 0xfffffe0008cc25c0 mountd 1061 1 1061 0 Ss select 0xfffffe0008ad81c0 rpcbind 1035 1 1035 0 Ss select 0xfffffe0008b85140 syslogd 834 1 834 0 Ss select 0xfffffe0008ad8540 devd 19 0 0 0 DL sdflush 0xffffffff81564638 [softdepflush] 18 0 0 0 DL vlruwt 0xfffffe0008a334a8 [vnlru] 17 0 0 0 DL wswbuf0 0xffffffff812f86c0 [syncer] 16 0 0 0 DL psleep 0xffffffff81558700 [bufdaemon] 9 0 0 0 DL pgzero 0xffffffff8156e63c [pagezero] 8 0 0 0 DL psleep 0xffffffff8156d808 [vmdaemon] 7 0 0 0 DL psleep 0xffffffff8156d7cc [pagedaemon] 6 0 0 0 DL ccb_scan 0xffffffff81322ce0 [xpt_thrd] 5 0 0 0 DL waiting_ 0xffffffff8155e980 [sctp_iterator] 4 0 0 0 DL - 0xfffffe0002d18848 [fdc0] 3 0 0 0 SL - 0xffffff8002658000 [fw0_probe] 15 0 0 0 DL (threaded) [usb] 100059 D - 0xffffff8002655e18 [usbus5] 100058 D - 0xffffff8002655dc0 [usbus5] 100057 D - 0xffffff8002655d68 [usbus5] 100056 D - 0xffffff8002655d10 [usbus5] 100054 D - 0xffffff800264d460 [usbus4] 100053 D - 0xffffff800264d408 [usbus4] 100052 D - 0xffffff800264d3b0 [usbus4] 100051 D - 0xffffff800264d358 [usbus4] 100050 D - 0xffffff800264a460 [usbus3] 100049 D - 0xffffff800264a408 [usbus3] 100048 D - 0xffffff800264a3b0 [usbus3] 100047 D - 0xffffff800264a358 [usbus3] 100046 D - 0xffffff8002647460 [usbus2] 100045 D - 0xffffff8002647408 [usbus2] 100044 D - 0xffffff80026473b0 [usbus2] 100043 D - 0xffffff8002647358 [usbus2] 100041 D - 0xffffff8002644460 [usbus1] 100040 D - 0xffffff8002644408 [usbus1] 100039 D - 0xffffff80026443b0 [usbus1] 100038 D - 0xffffff8002644358 [usbus1] 100036 D - 0xffffff8002641460 [usbus0] 100035 D - 0xffffff8002641408 [usbus0] 100034 D - 0xffffff80026413b0 [usbus0] 100033 D - 0xffffff8002641358 [usbus0] 2 0 0 0 DL ctl_work 0xffffff8001310000 [ctl_thrd] 14 0 0 0 DL - 0xffffffff81367d84 [yarrow] 13 0 0 0 RL (threaded) [geom] 100015 D g_d_tra 0xffffffff81367d84 [g_down] 100014 Run CPU 1 [g_up] 100013 D - 0xffffffff81360df8 [g_event] 12 0 0 0 WL (threaded) [intr] 100067 I [irq12: psm0] 100066 I [irq1: atkbd0] 100064 I [swi0: uart] 100061 I [irq20: fwohci0] 100060 I [irq14: ata0] 100055 I [irq19: ehci0] 100042 I [irq18: ohci2 ohci4] 100037 I [irq17: ohci1 ohci3] 100032 I [irq16: hdac1 ohci0] 100031 I [irq22: ahci0] 100030 I [irq257: re0] 100029 I [irq256: hdac0] 100027 I [swi6: task queue] 100026 I [swi6: Giant taskq] 100023 I [swi5: fast taskq] 100022 I [swi2: cambio] 100012 I [swi3: vm] 100011 I [swi4: clock] 100010 I [swi4: clock] 100009 I [swi4: clock] 100008 I [swi4: clock] 100007 I [swi1: netisr 0] 11 0 0 0 RL (threaded) [idle] 100006 CanRun [idle: cpu3] 100005 CanRun [idle: cpu2] 100004 CanRun [idle: cpu1] 100003 CanRun [idle: cpu0] 1 0 1 0 SLs wait 0xfffffe000291b950 [init] 10 0 0 0 DL audit_wo 0xffffffff815635b0 [audit] 0 0 0 0 DLs (threaded) [kernel] 100069 D - 0xffffffff81367d84 [deadlkres] 100068 D - 0xfffffe0002f6b000 [mca taskq] 100062 D - 0xfffffe0002f6b880 [fw0_taskq] 100025 D - 0xfffffe000294c280 [thread taskq] 100024 D - 0xfffffe000294c300 [ffs_trim taskq] 100021 D - 0xfffffe000294ca00 [acpi_task_2] 100020 D - 0xfffffe000294ca00 [acpi_task_1] 100019 D - 0xfffffe000294ca00 [acpi_task_0] 100018 D - 0xfffffe000294ca80 [kqueue taskq] 100016 D - 0xfffffe0002929500 [firmware taskq] 100000 D sched 0xffffffff81361120 [swapper] db:0:ps> allt Tracing command rot2 pid 2678 tid 100167 td 0xfffffe011212f480 cpustop_handler() at cpustop_handler+0x2c/frame 0xffffffff8157ee60 ipi_nmi_handler() at ipi_nmi_handler+0x3d/frame 0xffffffff8157ee80 trap() at trap+0x325/frame 0xffffffff8157f080 nmi_calltrap() at nmi_calltrap+0x8/frame 0xffffffff8157f080 --- trap 0x13, rip = 0xffffffff8093fa69, rsp = 0xffffffff8157f140, rbp = 0xffffff811e738810 --- witness_unlock() at witness_unlock+0x59/frame 0xffffff811e738810 vputx() at vputx+0xbf/frame 0xffffff811e738870 vm_mmap() at vm_mmap+0x378/frame 0xffffff811e738a00 sys_mmap() at sys_mmap+0x1d6/frame 0xffffff811e738ad0 amd64_syscall() at amd64_syscall+0x2d3/frame 0xffffff811e738bf0 Xfast_syscall() at Xfast_syscall+0xf7/frame 0xffffff811e738bf0 --- syscall (477, FreeBSD ELF64, sys_mmap), rip = 0x8008aa5ea, rsp = 0x7fffffffd8e8, rbp = 0x1000 --- Tracing command rot2 pid 2677 tid 100155 td 0xfffffe01124ab000 sched_switch() at sched_switch+0x1b4/frame 0xffffff811e6fcb60 mi_switch() at mi_switch+0x238/frame 0xffffff811e6fcbb0 ast() at ast+0x1b2/frame 0xffffff811e6fcbf0 Xfast_syscall() at Xfast_syscall+0x15c/frame 0xffffff811e6fcbf0 --- syscall (58642432), rip = 0x8008aa5ea, rsp = 0x7fffffffd8e8, rbp = 0x1000 --- Tracing command rot2 pid 2676 tid 100205 td 0xfffffe0112ba1000 sched_switch() at sched_switch+0x1b4/frame 0xffffff811e7f6b60 mi_switch() at mi_switch+0x238/frame 0xffffff811e7f6bb0 ast() at ast+0x1b2/frame 0xffffff811e7f6bf0 doreti_ast() at doreti_ast+0x1f/frame 0x203 Tracing command rot2 pid 2675 tid 100164 td 0xfffffe01124a7000 sched_switch() at sched_switch+0x1b4/frame 0xffffff811e729b60 mi_switch() at mi_switch+0x238/frame 0xffffff811e729bb0 ast() at ast+0x1b2/frame 0xffffff811e729bf0 doreti_ast() at doreti_ast+0x1f/frame 0x269d000 Tracing command rot2 pid 2674 tid 100172 td 0xfffffe011212e480 sched_switch() at sched_switch+0x1b4/frame 0xffffff811e751590 mi_switch() at mi_switch+0x238/frame 0xffffff811e7515e0 sleepq_switch() at sleepq_switch+0xfe/frame 0xffffff811e751620 sleepq_wait() at sleepq_wait+0x4d/frame 0xffffff811e751650 __lockmgr_args() at __lockmgr_args+0x6b1/frame 0xffffff811e751730 ffs_lock() at ffs_lock+0x9b/frame 0xffffff811e751780 VOP_LOCK1_APV() at VOP_LOCK1_APV+0x88/frame 0xffffff811e7517a0 _vn_lock() at _vn_lock+0x8d/frame 0xffffff811e751820 vget() at vget+0x63/frame 0xffffff811e751870 vm_mmap() at vm_mmap+0x312/frame 0xffffff811e751a00 sys_mmap() at sys_mmap+0x1d6/frame 0xffffff811e751ad0 amd64_syscall() at amd64_syscall+0x2d3/frame 0xffffff811e751bf0 Xfast_syscall() at Xfast_syscall+0xf7/frame 0xffffff811e751bf0 --- syscall (477, FreeBSD ELF64, sys_mmap), rip = 0x8008aa5ea, rsp = 0x7fffffffd8e8, rbp = 0x1fda000 --- Tracing command rot2 pid 2673 tid 100207 td 0xfffffe01124f8480 sched_switch() at sched_switch+0x1b4/frame 0xffffff811e800b60 mi_switch() at mi_switch+0x238/frame 0xffffff811e800bb0 ast() at ast+0x1b2/frame 0xffffff811e800bf0 doreti_ast() at doreti_ast+0x1f Tracing command rot2 pid 2672 tid 100190 td 0xfffffe00211bd480 sched_switch() at sched_switch+0x1b4/frame 0xffffff811e7abb60 mi_switch() at mi_switch+0x238/frame 0xffffff811e7abbb0 ast() at ast+0x1b2/frame 0xffffff811e7abbf0 Xfast_syscall() at Xfast_syscall+0x15c/frame 0xffffff811e7abbf0 --- syscall (63221760), rip = 0x8008aa5ea, rsp = 0x7fffffffd8e8, rbp = 0x1000 --- Tracing command rot2 pid 2671 tid 100180 td 0xfffffe0008e19900 sched_switch() at sched_switch+0x1b4/frame 0xffffff811e779b60 mi_switch() at mi_switch+0x238/frame 0xffffff811e779bb0 ast() at ast+0x1b2/frame 0xffffff811e779bf0 Xfast_syscall() at Xfast_syscall+0x15c/frame 0xffffff811e779bf0 --- syscall (62197760), rip = 0x8008aa5ea, rsp = 0x7fffffffd8e8, rbp = 0x1000 --- Tracing command rot2 pid 2670 tid 100188 td 0xfffffe00211be000 sched_switch() at sched_switch+0x1b4/frame 0xffffff811e7a1b60 mi_switch() at mi_switch+0x238/frame 0xffffff811e7a1bb0 ast() at ast+0x1b2/frame 0xffffff811e7a1bf0 Xfast_syscall() at Xfast_syscall+0x15c/frame 0xffffff811e7a1bf0 --- syscall (71258112), rip = 0x8008aa5ea, rsp = 0x7fffffffd8e8, rbp = 0x1000 --- Tracing command rot2 pid 2669 tid 100138 td 0xfffffe005b804900 sched_switch() at sched_switch+0x1b4/frame 0xffffff811e6a7b60 mi_switch() at mi_switch+0x238/frame 0xffffff811e6a7bb0 ast() at ast+0x1b2/frame 0xffffff811e6a7bf0 doreti_ast() at doreti_ast+0x1f/frame 0x6a6 Tracing command rot2 pid 2668 tid 100200 td 0xfffffe0021880900 sched_switch() at sched_switch+0x1b4/frame 0xffffff811e7ddb60 mi_switch() at mi_switch+0x238/frame 0xffffff811e7ddbb0 ast() at ast+0x1b2/frame 0xffffff811e7ddbf0 doreti_ast() at doreti_ast+0x1f/frame 0xa04 Tracing command rot2 pid 2667 tid 100165 td 0xfffffe0112130000 sched_switch() at sched_switch+0x1b4/frame 0xffffff811e72eb60 mi_switch() at mi_switch+0x238/frame 0xffffff811e72ebb0 ast() at ast+0x1b2/frame 0xffffff811e72ebf0 doreti_ast() at doreti_ast+0x1f/frame 0xfcc Tracing command rot2 pid 2666 tid 100181 td 0xfffffe0008e19480 sched_switch() at sched_switch+0x1b4/frame 0xffffff811e77eb60 mi_switch() at mi_switch+0x238/frame 0xffffff811e77ebb0 ast() at ast+0x1b2/frame 0xffffff811e77ebf0 doreti_ast() at doreti_ast+0x1f/frame 0x229 Tracing command rot2 pid 2665 tid 100218 td 0xfffffe0112845480 sched_switch() at sched_switch+0x1b4/frame 0xffffff811e837b60 mi_switch() at mi_switch+0x238/frame 0xffffff811e837bb0 ast() at ast+0x1b2/frame 0xffffff811e837bf0 Xfast_syscall() at Xfast_syscall+0x15c/frame 0xffffff811e837bf0 --- syscall (65564672), rip = 0x8008aa5ea, rsp = 0x7fffffffd8e8, rbp = 0x1000 --- Tracing command rot2 pid 2664 tid 100135 td 0xfffffe005b805900 sched_switch() at sched_switch+0x1b4/frame 0xffffff811e698b60 mi_switch() at mi_switch+0x238/frame 0xffffff811e698bb0 ast() at ast+0x1b2/frame 0xffffff811e698bf0 Xfast_syscall() at Xfast_syscall+0x15c/frame 0xffffff811e698bf0 --- syscall (67522560), rip = 0x8008aa5ea, rsp = 0x7fffffffd8e8, rbp = 0x1000 --- Tracing command rot2 pid 2663 tid 100187 td 0xfffffe00211be480 sched_switch() at sched_switch+0x1b4/frame 0xffffff811e79cb60 mi_switch() at mi_switch+0x238/frame 0xffffff811e79cbb0 ast() at ast+0x1b2/frame 0xffffff811e79cbf0 doreti_ast() at doreti_ast+0x1f/frame 0x35c Tracing command rot2 pid 2662 tid 100137 td 0xfffffe005b805000 sched_switch() at sched_switch+0x1b4/frame 0xffffff811e6a2b40 mi_switch() at mi_switch+0x238/frame 0xffffff811e6a2b90 critical_exit() at critical_exit+0xb0/frame 0xffffff811e6a2bb0 ipi_bitmap_handler() at ipi_bitmap_handler+0x87/frame 0xffffff811e6a2bf0 Xipi_intr_bitmap_handler() at Xipi_intr_bitmap_handler+0x97/frame 0xffffff811e6a2bf0 --- interrupt, rip = 0x400d84, rsp = 0x7fffffffd8f0, rbp = 0x546 --- Tracing command rot2 pid 2661 tid 100175 td 0xfffffe01124a5000 sched_switch() at sched_switch+0x1b4/frame 0xffffff811e760b60 mi_switch() at mi_switch+0x238/frame 0xffffff811e760bb0 ast() at ast+0x1b2/frame 0xffffff811e760bf0 Xfast_syscall() at Xfast_syscall+0x15c/frame 0xffffff811e760bf0 --- syscall (70496256), rip = 0x8008aa5ea, rsp = 0x7fffffffd8e8, rbp = 0x1000 --- Tracing command rot2 pid 2660 tid 100127 td 0xfffffe005b026900 cpustop_handler() at cpustop_handler+0x2c/frame 0xffffff8000241d00 ipi_nmi_handler() at ipi_nmi_handler+0x3d/frame 0xffffff8000241d20 trap() at trap+0x325/frame 0xffffff8000241f20 nmi_calltrap() at nmi_calltrap+0x8/frame 0xffffff8000241f20 --- trap 0x13, rip = 0x400d84, rsp = 0x7fffffffd8f0, rbp = 0x753 --- Tracing command rot2 pid 2659 tid 100173 td 0xfffffe011212e000 cpustop_handler() at cpustop_handler+0x2c/frame 0xffffff800023ad00 ipi_nmi_handler() at ipi_nmi_handler+0x3d/frame 0xffffff800023ad20 trap() at trap+0x325/frame 0xffffff800023af20 nmi_calltrap() at nmi_calltrap+0x8/frame 0xffffff800023af20 --- trap 0x13, rip = 0x400d84, rsp = 0x7fffffffd8f0, rbp = 0x789 --- Tracing command sleep pid 2658 tid 100128 td 0xfffffe005b026480 sched_switch() at sched_switch+0x1b4/frame 0xffffff811e675850 mi_switch() at mi_switch+0x238/frame 0xffffff811e6758a0 sleepq_switch() at sleepq_switch+0xfe/frame 0xffffff811e6758e0 sleepq_catch_signals() at sleepq_catch_signals+0x2c6/frame 0xffffff811e675940 sleepq_timedwait_sig() at sleepq_timedwait_sig+0x19/frame 0xffffff811e675970 _sleep() at _sleep+0x3c3/frame 0xffffff811e675a00 kern_nanosleep() at kern_nanosleep+0x118/frame 0xffffff811e675a70 sys_nanosleep() at sys_nanosleep+0x6e/frame 0xffffff811e675ad0 amd64_syscall() at amd64_syscall+0x2d3/frame 0xffffff811e675bf0 Xfast_syscall() at Xfast_syscall+0xf7/frame 0xffffff811e675bf0 --- syscall (240, FreeBSD ELF64, sys_nanosleep), rip = 0x80091342a, rsp = 0x7fffffffdb48, rbp = 0x7fffffffdbd0 --- Tracing command awk pid 1539 tid 100148 td 0xfffffe0112130900 sched_switch() at sched_switch+0x1b4/frame 0xffffff811e6d9800 mi_switch() at mi_switch+0x238/frame 0xffffff811e6d9850 sleepq_switch() at sleepq_switch+0xfe/frame 0xffffff811e6d9890 sleepq_catch_signals() at sleepq_catch_signals+0x2c6/frame 0xffffff811e6d98f0 sleepq_wait_sig() at sleepq_wait_sig+0x16/frame 0xffffff811e6d9910 _sleep() at _sleep+0x37d/frame 0xffffff811e6d99a0 pipe_read() at pipe_read+0x432/frame 0xffffff811e6d99f0 dofileread() at dofileread+0xa1/frame 0xffffff811e6d9a40 kern_readv() at kern_readv+0x6c/frame 0xffffff811e6d9a80 sys_read() at sys_read+0x64/frame 0xffffff811e6d9ad0 amd64_syscall() at amd64_syscall+0x2d3/frame 0xffffff811e6d9bf0 Xfast_syscall() at Xfast_syscall+0xf7/frame 0xffffff811e6d9bf0 --- syscall (3, FreeBSD ELF64, sys_read), rip = 0x800b76f5a, rsp = 0x7fffffffd848, rbp = 0x800db4d60 --- Tracing command sh pid 1538 tid 100147 td 0xfffffe0112133000 sched_switch() at sched_switch+0x1b4/frame 0xffffff811e6d4650 mi_switch() at mi_switch+0x238/frame 0xffffff811e6d46a0 sleepq_switch() at sleepq_switch+0xfe/frame 0xffffff811e6d46e0 sleepq_catch_signals() at sleepq_catch_signals+0x2c6/frame 0xffffff811e6d4740 sleepq_wait_sig() at sleepq_wait_sig+0x16/frame 0xffffff811e6d4760 _sleep() at _sleep+0x37d/frame 0xffffff811e6d47f0 kern_wait6() at kern_wait6+0x5b3/frame 0xffffff811e6d4890 kern_wait() at kern_wait+0x12d/frame 0xffffff811e6d4a10 sys_wait4() at sys_wait4+0x35/frame 0xffffff811e6d4ad0 amd64_syscall() at amd64_syscall+0x2d3/frame 0xffffff811e6d4bf0 Xfast_syscall() at Xfast_syscall+0xf7/frame 0xffffff811e6d4bf0 --- syscall (7, FreeBSD ELF64, sys_wait4), rip = 0x800d2fd0a, rsp = 0x7fffffffd658, rbp = 0x1 --- Tracing command sh pid 1537 tid 100143 td 0xfffffe0008a30480 sched_switch() at sched_switch+0x1b4/frame 0xffffff811e6c0650 mi_switch() at mi_switch+0x238/frame 0xffffff811e6c06a0 sleepq_switch() at sleepq_switch+0xfe/frame 0xffffff811e6c06e0 sleepq_catch_signals() at sleepq_catch_signals+0x2c6/frame 0xffffff811e6c0740 sleepq_wait_sig() at sleepq_wait_sig+0x16/frame 0xffffff811e6c0760 _sleep() at _sleep+0x37d/frame 0xffffff811e6c07f0 kern_wait6() at kern_wait6+0x5b3/frame 0xffffff811e6c0890 kern_wait() at kern_wait+0x12d/frame 0xffffff811e6c0a10 sys_wait4() at sys_wait4+0x35/frame 0xffffff811e6c0ad0 amd64_syscall() at amd64_syscall+0x2d3/frame 0xffffff811e6c0bf0 Xfast_syscall() at Xfast_syscall+0xf7/frame 0xffffff811e6c0bf0 --- syscall (7, FreeBSD ELF64, sys_wait4), rip = 0x800d2fd0a, rsp = 0x7fffffffd938, rbp = 0x1 --- Tracing command tail pid 1536 tid 100146 td 0xfffffe005b803000 sched_switch() at sched_switch+0x1b4/frame 0xffffff811e6cf680 mi_switch() at mi_switch+0x238/frame 0xffffff811e6cf6d0 sleepq_switch() at sleepq_switch+0xfe/frame 0xffffff811e6cf710 sleepq_catch_signals() at sleepq_catch_signals+0x2c6/frame 0xffffff811e6cf770 sleepq_timedwait_sig() at sleepq_timedwait_sig+0x19/frame 0xffffff811e6cf7a0 _sleep() at _sleep+0x3c3/frame 0xffffff811e6cf830 kern_kevent() at kern_kevent+0x33a/frame 0xffffff811e6cfa10 sys_kevent() at sys_kevent+0x90/frame 0xffffff811e6cfad0 amd64_syscall() at amd64_syscall+0x2d3/frame 0xffffff811e6cfbf0 Xfast_syscall() at Xfast_syscall+0xf7/frame 0xffffff811e6cfbf0 --- syscall (363, FreeBSD ELF64, sys_kevent), rip = 0x8009183ba, rsp = 0x7fffffffd9e8, rbp = 0x8010060a8 --- Tracing command sshd pid 1535 tid 100145 td 0xfffffe005b803480 sched_switch() at sched_switch+0x1b4/frame 0xffffff811e6ca690 mi_switch() at mi_switch+0x238/frame 0xffffff811e6ca6e0 sleepq_switch() at sleepq_switch+0xfe/frame 0xffffff811e6ca720 sleepq_catch_signals() at sleepq_catch_signals+0x2c6/frame 0xffffff811e6ca780 sleepq_wait_sig() at sleepq_wait_sig+0x16/frame 0xffffff811e6ca7a0 _cv_wait_sig() at _cv_wait_sig+0x181/frame 0xffffff811e6ca800 seltdwait() at seltdwait+0xad/frame 0xffffff811e6ca830 kern_select() at kern_select+0x79f/frame 0xffffff811e6caa80 sys_select() at sys_select+0x5d/frame 0xffffff811e6caad0 amd64_syscall() at amd64_syscall+0x2d3/frame 0xffffff811e6cabf0 Xfast_syscall() at Xfast_syscall+0xf7/frame 0xffffff811e6cabf0 --- syscall (93, FreeBSD ELF64, sys_select), rip = 0x80255deda, rsp = 0x7fffffffcc58, rbp = 0x7fffffffcce0 --- Tracing command sshd pid 1534 tid 100082 td 0xfffffe0008d91900 sched_switch() at sched_switch+0x1b4/frame 0xffffff811e58f690 mi_switch() at mi_switch+0x238/frame 0xffffff811e58f6e0 sleepq_switch() at sleepq_switch+0xfe/frame 0xffffff811e58f720 sleepq_catch_signals() at sleepq_catch_signals+0x2c6/frame 0xffffff811e58f780 sleepq_wait_sig() at sleepq_wait_sig+0x16/frame 0xffffff811e58f7a0 _cv_wait_sig() at _cv_wait_sig+0x181/frame 0xffffff811e58f800 seltdwait() at seltdwait+0xad/frame 0xffffff811e58f830 kern_select() at kern_select+0x79f/frame 0xffffff811e58fa80 sys_select() at sys_select+0x5d/frame 0xffffff811e58fad0 amd64_syscall() at amd64_syscall+0x2d3/frame 0xffffff811e58fbf0 Xfast_syscall() at Xfast_syscall+0xf7/frame 0xffffff811e58fbf0 --- syscall (93, FreeBSD ELF64, sys_select), rip = 0x80255deda, rsp = 0x7fffffffcc58, rbp = 0x7fffffffcce0 --- Tracing command top pid 1533 tid 100144 td 0xfffffe005b803900 sched_switch() at sched_switch+0x1b4/frame 0xffffff811e6c5680 mi_switch() at mi_switch+0x238/frame 0xffffff811e6c56d0 sleepq_switch() at sleepq_switch+0xfe/frame 0xffffff811e6c5710 sleepq_catch_signals() at sleepq_catch_signals+0x2c6/frame 0xffffff811e6c5770 sleepq_timedwait_sig() at sleepq_timedwait_sig+0x19/frame 0xffffff811e6c57a0 _cv_timedwait_sig() at _cv_timedwait_sig+0x18f/frame 0xffffff811e6c5800 seltdwait() at seltdwait+0x57/frame 0xffffff811e6c5830 kern_select() at kern_select+0x79f/frame 0xffffff811e6c5a80 sys_select() at sys_select+0x5d/frame 0xffffff811e6c5ad0 amd64_syscall() at amd64_syscall+0x2d3/frame 0xffffff811e6c5bf0 Xfast_syscall() at Xfast_syscall+0xf7/frame 0xffffff811e6c5bf0 --- syscall (93, FreeBSD ELF64, sys_select), rip = 0x800fb8eda, rsp = 0x7fffffffd988, rbp = 0xe --- Tracing command sshd pid 1532 tid 100098 td 0xfffffe0008d46900 sched_switch() at sched_switch+0x1b4/frame 0xffffff811e5df690 mi_switch() at mi_switch+0x238/frame 0xffffff811e5df6e0 sleepq_switch() at sleepq_switch+0xfe/frame 0xffffff811e5df720 sleepq_catch_signals() at sleepq_catch_signals+0x2c6/frame 0xffffff811e5df780 sleepq_wait_sig() at sleepq_wait_sig+0x16/frame 0xffffff811e5df7a0 _cv_wait_sig() at _cv_wait_sig+0x181/frame 0xffffff811e5df800 seltdwait() at seltdwait+0xad/frame 0xffffff811e5df830 kern_select() at kern_select+0x79f/frame 0xffffff811e5dfa80 sys_select() at sys_select+0x5d/frame 0xffffff811e5dfad0 amd64_syscall() at amd64_syscall+0x2d3/frame 0xffffff811e5dfbf0 Xfast_syscall() at Xfast_syscall+0xf7/frame 0xffffff811e5dfbf0 --- syscall (93, FreeBSD ELF64, sys_select), rip = 0x80255deda, rsp = 0x7fffffffcc58, rbp = 0x7fffffffcce0 --- Tracing command sshd pid 1528 tid 100141 td 0xfffffe0008d43000 sched_switch() at sched_switch+0x1b4/frame 0xffffff811e6b6760 mi_switch() at mi_switch+0x238/frame 0xffffff811e6b67b0 sleepq_switch() at sleepq_switch+0xfe/frame 0xffffff811e6b67f0 sleepq_catch_signals() at sleepq_catch_signals+0x2c6/frame 0xffffff811e6b6850 sleepq_wait_sig() at sleepq_wait_sig+0x16/frame 0xffffff811e6b6870 _cv_wait_sig() at _cv_wait_sig+0x181/frame 0xffffff811e6b68d0 seltdwait() at seltdwait+0xad/frame 0xffffff811e6b6900 sys_poll() at sys_poll+0x3e6/frame 0xffffff811e6b6ad0 amd64_syscall() at amd64_syscall+0x2d3/frame 0xffffff811e6b6bf0 Xfast_syscall() at Xfast_syscall+0xf7/frame 0xffffff811e6b6bf0 --- syscall (209, FreeBSD ELF64, sys_poll), rip = 0x8024f7e1a, rsp = 0x7fffffffccf8, rbp = 0x803c22190 --- Tracing command sshd pid 1527 tid 100090 td 0xfffffe0008e20900 sched_switch() at sched_switch+0x1b4/frame 0xffffff811e5b7760 mi_switch() at mi_switch+0x238/frame 0xffffff811e5b77b0 sleepq_switch() at sleepq_switch+0xfe/frame 0xffffff811e5b77f0 sleepq_catch_signals() at sleepq_catch_signals+0x2c6/frame 0xffffff811e5b7850 sleepq_wait_sig() at sleepq_wait_sig+0x16/frame 0xffffff811e5b7870 _cv_wait_sig() at _cv_wait_sig+0x181/frame 0xffffff811e5b78d0 seltdwait() at seltdwait+0xad/frame 0xffffff811e5b7900 sys_poll() at sys_poll+0x3e6/frame 0xffffff811e5b7ad0 amd64_syscall() at amd64_syscall+0x2d3/frame 0xffffff811e5b7bf0 Xfast_syscall() at Xfast_syscall+0xf7/frame 0xffffff811e5b7bf0 --- syscall (209, FreeBSD ELF64, sys_poll), rip = 0x8024f7e1a, rsp = 0x7fffffffccf8, rbp = 0x803c22190 --- Tracing command sshd pid 1526 tid 100095 td 0xfffffe0008e1f900 sched_switch() at sched_switch+0x1b4/frame 0xffffff811e5d0760 mi_switch() at mi_switch+0x238/frame 0xffffff811e5d07b0 sleepq_switch() at sleepq_switch+0xfe/frame 0xffffff811e5d07f0 sleepq_catch_signals() at sleepq_catch_signals+0x2c6/frame 0xffffff811e5d0850 sleepq_wait_sig() at sleepq_wait_sig+0x16/frame 0xffffff811e5d0870 _cv_wait_sig() at _cv_wait_sig+0x181/frame 0xffffff811e5d08d0 seltdwait() at seltdwait+0xad/frame 0xffffff811e5d0900 sys_poll() at sys_poll+0x3e6/frame 0xffffff811e5d0ad0 amd64_syscall() at amd64_syscall+0x2d3/frame 0xffffff811e5d0bf0 Xfast_syscall() at Xfast_syscall+0xf7/frame 0xffffff811e5d0bf0 --- syscall (209, FreeBSD ELF64, sys_poll), rip = 0x8024f7e1a, rsp = 0x7fffffffccf8, rbp = 0x803c22190 --- Tracing command rot2 pid 1505 tid 100112 td 0xfffffe0008a2b000 sched_switch() at sched_switch+0x1b4/frame 0xffffff811e625650 mi_switch() at mi_switch+0x238/frame 0xffffff811e6256a0 sleepq_switch() at sleepq_switch+0xfe/frame 0xffffff811e6256e0 sleepq_catch_signals() at sleepq_catch_signals+0x2c6/frame 0xffffff811e625740 sleepq_wait_sig() at sleepq_wait_sig+0x16/frame 0xffffff811e625760 _sleep() at _sleep+0x37d/frame 0xffffff811e6257f0 kern_wait6() at kern_wait6+0x5b3/frame 0xffffff811e625890 kern_wait() at kern_wait+0x12d/frame 0xffffff811e625a10 sys_wait4() at sys_wait4+0x35/frame 0xffffff811e625ad0 amd64_syscall() at amd64_syscall+0x2d3/frame 0xffffff811e625bf0 Xfast_syscall() at Xfast_syscall+0xf7/frame 0xffffff811e625bf0 --- syscall (7, FreeBSD ELF64, sys_wait4), rip = 0x800899d0a, rsp = 0x7fffffffd9b8, rbp = 0x14 --- Tracing command bash pid 1479 tid 100093 td 0xfffffe0008d90480 sched_switch() at sched_switch+0x1b4/frame 0xffffff811e5c6650 mi_switch() at mi_switch+0x238/frame 0xffffff811e5c66a0 sleepq_switch() at sleepq_switch+0xfe/frame 0xffffff811e5c66e0 sleepq_catch_signals() at sleepq_catch_signals+0x2c6/frame 0xffffff811e5c6740 sleepq_wait_sig() at sleepq_wait_sig+0x16/frame 0xffffff811e5c6760 _sleep() at _sleep+0x37d/frame 0xffffff811e5c67f0 kern_wait6() at kern_wait6+0x5b3/frame 0xffffff811e5c6890 kern_wait() at kern_wait+0x12d/frame 0xffffff811e5c6a10 sys_wait4() at sys_wait4+0x35/frame 0xffffff811e5c6ad0 amd64_syscall() at amd64_syscall+0x2d3/frame 0xffffff811e5c6bf0 Xfast_syscall() at Xfast_syscall+0xf7/frame 0xffffff811e5c6bf0 --- syscall (7, FreeBSD ELF64, sys_wait4), rip = 0x8010a0d0a, rsp = 0x7fffffffd8c8, rbp = 0x801901500 --- Tracing command sshd pid 1478 tid 100088 td 0xfffffe0008d47480 sched_switch() at sched_switch+0x1b4/frame 0xffffff811e5ad690 mi_switch() at mi_switch+0x238/frame 0xffffff811e5ad6e0 sleepq_switch() at sleepq_switch+0xfe/frame 0xffffff811e5ad720 sleepq_catch_signals() at sleepq_catch_signals+0x2c6/frame 0xffffff811e5ad780 sleepq_wait_sig() at sleepq_wait_sig+0x16/frame 0xffffff811e5ad7a0 _cv_wait_sig() at _cv_wait_sig+0x181/frame 0xffffff811e5ad800 seltdwait() at seltdwait+0xad/frame 0xffffff811e5ad830 kern_select() at kern_select+0x79f/frame 0xffffff811e5ada80 sys_select() at sys_select+0x5d/frame 0xffffff811e5adad0 amd64_syscall() at amd64_syscall+0x2d3/frame 0xffffff811e5adbf0 Xfast_syscall() at Xfast_syscall+0xf7/frame 0xffffff811e5adbf0 --- syscall (93, FreeBSD ELF64, sys_select), rip = 0x80255deda, rsp = 0x7fffffffcc58, rbp = 0x7fffffffcce0 --- Tracing command sshd pid 1476 tid 100096 td 0xfffffe0008d47000 sched_switch() at sched_switch+0x1b4/frame 0xffffff811e5d5760 mi_switch() at mi_switch+0x238/frame 0xffffff811e5d57b0 sleepq_switch() at sleepq_switch+0xfe/frame 0xffffff811e5d57f0 sleepq_catch_signals() at sleepq_catch_signals+0x2c6/frame 0xffffff811e5d5850 sleepq_wait_sig() at sleepq_wait_sig+0x16/frame 0xffffff811e5d5870 _cv_wait_sig() at _cv_wait_sig+0x181/frame 0xffffff811e5d58d0 seltdwait() at seltdwait+0xad/frame 0xffffff811e5d5900 sys_poll() at sys_poll+0x3e6/frame 0xffffff811e5d5ad0 amd64_syscall() at amd64_syscall+0x2d3/frame 0xffffff811e5d5bf0 Xfast_syscall() at Xfast_syscall+0xf7/frame 0xffffff811e5d5bf0 --- syscall (209, FreeBSD ELF64, sys_poll), rip = 0x8024f7e1a, rsp = 0x7fffffffccf8, rbp = 0x803c22190 --- Tracing command getty pid 1475 tid 100118 td 0xfffffe005b00b900 sched_switch() at sched_switch+0x1b4/frame 0xffffff811e643710 mi_switch() at mi_switch+0x238/frame 0xffffff811e643760 sleepq_switch() at sleepq_switch+0xfe/frame 0xffffff811e6437a0 sleepq_catch_signals() at sleepq_catch_signals+0x2c6/frame 0xffffff811e643800 sleepq_wait_sig() at sleepq_wait_sig+0x16/frame 0xffffff811e643820 _cv_wait_sig() at _cv_wait_sig+0x181/frame 0xffffff811e643880 tty_wait() at tty_wait+0x4c/frame 0xffffff811e6438b0 ttydisc_read() at ttydisc_read+0x38e/frame 0xffffff811e643950 ttydev_read() at ttydev_read+0x95/frame 0xffffff811e643980 devfs_read_f() at devfs_read_f+0x90/frame 0xffffff811e6439f0 dofileread() at dofileread+0xa1/frame 0xffffff811e643a40 kern_readv() at kern_readv+0x6c/frame 0xffffff811e643a80 sys_read() at sys_read+0x64/frame 0xffffff811e643ad0 amd64_syscall() at amd64_syscall+0x2d3/frame 0xffffff811e643bf0 Xfast_syscall() at Xfast_syscall+0xf7/frame 0xffffff811e643bf0 --- syscall (3, FreeBSD ELF64, sys_read), rip = 0x800b4af5a, rsp = 0x7fffffffdc98, rbp = 0 --- Tracing command getty pid 1474 tid 100116 td 0xfffffe005b021480 sched_switch() at sched_switch+0x1b4/frame 0xffffff811e639710 mi_switch() at mi_switch+0x238/frame 0xffffff811e639760 sleepq_switch() at sleepq_switch+0xfe/frame 0xffffff811e6397a0 sleepq_catch_signals() at sleepq_catch_signals+0x2c6/frame 0xffffff811e639800 sleepq_wait_sig() at sleepq_wait_sig+0x16/frame 0xffffff811e639820 _cv_wait_sig() at _cv_wait_sig+0x181/frame 0xffffff811e639880 tty_wait() at tty_wait+0x4c/frame 0xffffff811e6398b0 ttydisc_read() at ttydisc_read+0x38e/frame 0xffffff811e639950 ttydev_read() at ttydev_read+0x95/frame 0xffffff811e639980 devfs_read_f() at devfs_read_f+0x90/frame 0xffffff811e6399f0 dofileread() at dofileread+0xa1/frame 0xffffff811e639a40 kern_readv() at kern_readv+0x6c/frame 0xffffff811e639a80 sys_read() at sys_read+0x64/frame 0xffffff811e639ad0 amd64_syscall() at amd64_syscall+0x2d3/frame 0xffffff811e639bf0 Xfast_syscall() at Xfast_syscall+0xf7/frame 0xffffff811e639bf0 --- syscall (3, FreeBSD ELF64, sys_read), rip = 0x800b4af5a, rsp = 0x7fffffffdc98, rbp = 0 --- Tracing command getty pid 1473 tid 100113 td 0xfffffe005b022480 sched_switch() at sched_switch+0x1b4/frame 0xffffff811e62a710 mi_switch() at mi_switch+0x238/frame 0xffffff811e62a760 sleepq_switch() at sleepq_switch+0xfe/frame 0xffffff811e62a7a0 sleepq_catch_signals() at sleepq_catch_signals+0x2c6/frame 0xffffff811e62a800 sleepq_wait_sig() at sleepq_wait_sig+0x16/frame 0xffffff811e62a820 _cv_wait_sig() at _cv_wait_sig+0x181/frame 0xffffff811e62a880 tty_wait() at tty_wait+0x4c/frame 0xffffff811e62a8b0 ttydisc_read() at ttydisc_read+0x38e/frame 0xffffff811e62a950 ttydev_read() at ttydev_read+0x95/frame 0xffffff811e62a980 devfs_read_f() at devfs_read_f+0x90/frame 0xffffff811e62a9f0 dofileread() at dofileread+0xa1/frame 0xffffff811e62aa40 kern_readv() at kern_readv+0x6c/frame 0xffffff811e62aa80 sys_read() at sys_read+0x64/frame 0xffffff811e62aad0 amd64_syscall() at amd64_syscall+0x2d3/frame 0xffffff811e62abf0 Xfast_syscall() at Xfast_syscall+0xf7/frame 0xffffff811e62abf0 --- syscall (3, FreeBSD ELF64, sys_read), rip = 0x800b4af5a, rsp = 0x7fffffffdc98, rbp = 0 --- Tracing command getty pid 1472 tid 100089 td 0xfffffe0008e23000 sched_switch() at sched_switch+0x1b4/frame 0xffffff811e5b2710 mi_switch() at mi_switch+0x238/frame 0xffffff811e5b2760 sleepq_switch() at sleepq_switch+0xfe/frame 0xffffff811e5b27a0 sleepq_catch_signals() at sleepq_catch_signals+0x2c6/frame 0xffffff811e5b2800 sleepq_wait_sig() at sleepq_wait_sig+0x16/frame 0xffffff811e5b2820 _cv_wait_sig() at _cv_wait_sig+0x181/frame 0xffffff811e5b2880 tty_wait() at tty_wait+0x4c/frame 0xffffff811e5b28b0 ttydisc_read() at ttydisc_read+0x38e/frame 0xffffff811e5b2950 ttydev_read() at ttydev_read+0x95/frame 0xffffff811e5b2980 devfs_read_f() at devfs_read_f+0x90/frame 0xffffff811e5b29f0 dofileread() at dofileread+0xa1/frame 0xffffff811e5b2a40 kern_readv() at kern_readv+0x6c/frame 0xffffff811e5b2a80 sys_read() at sys_read+0x64/frame 0xffffff811e5b2ad0 amd64_syscall() at amd64_syscall+0x2d3/frame 0xffffff811e5b2bf0 Xfast_syscall() at Xfast_syscall+0xf7/frame 0xffffff811e5b2bf0 --- syscall (3, FreeBSD ELF64, sys_read), rip = 0x800b4af5a, rsp = 0x7fffffffdc98, rbp = 0 --- Tracing command getty pid 1471 tid 100105 td 0xfffffe0008e1f000 sched_switch() at sched_switch+0x1b4/frame 0xffffff811e602710 mi_switch() at mi_switch+0x238/frame 0xffffff811e602760 sleepq_switch() at sleepq_switch+0xfe/frame 0xffffff811e6027a0 sleepq_catch_signals() at sleepq_catch_signals+0x2c6/frame 0xffffff811e602800 sleepq_wait_sig() at sleepq_wait_sig+0x16/frame 0xffffff811e602820 _cv_wait_sig() at _cv_wait_sig+0x181/frame 0xffffff811e602880 tty_wait() at tty_wait+0x4c/frame 0xffffff811e6028b0 ttydisc_read() at ttydisc_read+0x38e/frame 0xffffff811e602950 ttydev_read() at ttydev_read+0x95/frame 0xffffff811e602980 devfs_read_f() at devfs_read_f+0x90/frame 0xffffff811e6029f0 dofileread() at dofileread+0xa1/frame 0xffffff811e602a40 kern_readv() at kern_readv+0x6c/frame 0xffffff811e602a80 sys_read() at sys_read+0x64/frame 0xffffff811e602ad0 amd64_syscall() at amd64_syscall+0x2d3/frame 0xffffff811e602bf0 Xfast_syscall() at Xfast_syscall+0xf7/frame 0xffffff811e602bf0 --- syscall (3, FreeBSD ELF64, sys_read), rip = 0x800b4af5a, rsp = 0x7fffffffdc98, rbp = 0 --- Tracing command getty pid 1470 tid 100086 td 0xfffffe0008d48000 sched_switch() at sched_switch+0x1b4/frame 0xffffff811e5a3710 mi_switch() at mi_switch+0x238/frame 0xffffff811e5a3760 sleepq_switch() at sleepq_switch+0xfe/frame 0xffffff811e5a37a0 sleepq_catch_signals() at sleepq_catch_signals+0x2c6/frame 0xffffff811e5a3800 sleepq_wait_sig() at sleepq_wait_sig+0x16/frame 0xffffff811e5a3820 _cv_wait_sig() at _cv_wait_sig+0x181/frame 0xffffff811e5a3880 tty_wait() at tty_wait+0x4c/frame 0xffffff811e5a38b0 ttydisc_read() at ttydisc_read+0x38e/frame 0xffffff811e5a3950 ttydev_read() at ttydev_read+0x95/frame 0xffffff811e5a3980 devfs_read_f() at devfs_read_f+0x90/frame 0xffffff811e5a39f0 dofileread() at dofileread+0xa1/frame 0xffffff811e5a3a40 kern_readv() at kern_readv+0x6c/frame 0xffffff811e5a3a80 sys_read() at sys_read+0x64/frame 0xffffff811e5a3ad0 amd64_syscall() at amd64_syscall+0x2d3/frame 0xffffff811e5a3bf0 Xfast_syscall() at Xfast_syscall+0xf7/frame 0xffffff811e5a3bf0 --- syscall (3, FreeBSD ELF64, sys_read), rip = 0x800b4af5a, rsp = 0x7fffffffdc98, rbp = 0 --- Tracing command getty pid 1469 tid 100110 td 0xfffffe0008a2b900 sched_switch() at sched_switch+0x1b4/frame 0xffffff811e61b710 mi_switch() at mi_switch+0x238/frame 0xffffff811e61b760 sleepq_switch() at sleepq_switch+0xfe/frame 0xffffff811e61b7a0 sleepq_catch_signals() at sleepq_catch_signals+0x2c6/frame 0xffffff811e61b800 sleepq_wait_sig() at sleepq_wait_sig+0x16/frame 0xffffff811e61b820 _cv_wait_sig() at _cv_wait_sig+0x181/frame 0xffffff811e61b880 tty_wait() at tty_wait+0x4c/frame 0xffffff811e61b8b0 ttydisc_read() at ttydisc_read+0x38e/frame 0xffffff811e61b950 ttydev_read() at ttydev_read+0x95/frame 0xffffff811e61b980 devfs_read_f() at devfs_read_f+0x90/frame 0xffffff811e61b9f0 dofileread() at dofileread+0xa1/frame 0xffffff811e61ba40 kern_readv() at kern_readv+0x6c/frame 0xffffff811e61ba80 sys_read() at sys_read+0x64/frame 0xffffff811e61bad0 amd64_syscall() at amd64_syscall+0x2d3/frame 0xffffff811e61bbf0 Xfast_syscall() at Xfast_syscall+0xf7/frame 0xffffff811e61bbf0 --- syscall (3, FreeBSD ELF64, sys_read), rip = 0x800b4af5a, rsp = 0x7fffffffdc98, rbp = 0 --- Tracing command getty pid 1468 tid 100108 td 0xfffffe0008e1e000 sched_switch() at sched_switch+0x1b4/frame 0xffffff811e611710 mi_switch() at mi_switch+0x238/frame 0xffffff811e611760 sleepq_switch() at sleepq_switch+0xfe/frame 0xffffff811e6117a0 sleepq_catch_signals() at sleepq_catch_signals+0x2c6/frame 0xffffff811e611800 sleepq_wait_sig() at sleepq_wait_sig+0x16/frame 0xffffff811e611820 _cv_wait_sig() at _cv_wait_sig+0x181/frame 0xffffff811e611880 tty_wait() at tty_wait+0x4c/frame 0xffffff811e6118b0 ttydisc_read() at ttydisc_read+0x38e/frame 0xffffff811e611950 ttydev_read() at ttydev_read+0x95/frame 0xffffff811e611980 devfs_read_f() at devfs_read_f+0x90/frame 0xffffff811e6119f0 dofileread() at dofileread+0xa1/frame 0xffffff811e611a40 kern_readv() at kern_readv+0x6c/frame 0xffffff811e611a80 sys_read() at sys_read+0x64/frame 0xffffff811e611ad0 amd64_syscall() at amd64_syscall+0x2d3/frame 0xffffff811e611bf0 Xfast_syscall() at Xfast_syscall+0xf7/frame 0xffffff811e611bf0 --- syscall (3, FreeBSD ELF64, sys_read), rip = 0x800b4af5a, rsp = 0x7fffffffdc98, rbp = 0 --- Tracing command getty pid 1467 tid 100080 td 0xfffffe0008d48900 sched_switch() at sched_switch+0x1b4/frame 0xffffff811e585710 mi_switch() at mi_switch+0x238/frame 0xffffff811e585760 sleepq_switch() at sleepq_switch+0xfe/frame 0xffffff811e5857a0 sleepq_catch_signals() at sleepq_catch_signals+0x2c6/frame 0xffffff811e585800 sleepq_wait_sig() at sleepq_wait_sig+0x16/frame 0xffffff811e585820 _cv_wait_sig() at _cv_wait_sig+0x181/frame 0xffffff811e585880 tty_wait() at tty_wait+0x4c/frame 0xffffff811e5858b0 ttydisc_read() at ttydisc_read+0x38e/frame 0xffffff811e585950 ttydev_read() at ttydev_read+0x95/frame 0xffffff811e585980 devfs_read_f() at devfs_read_f+0x90/frame 0xffffff811e5859f0 dofileread() at dofileread+0xa1/frame 0xffffff811e585a40 kern_readv() at kern_readv+0x6c/frame 0xffffff811e585a80 sys_read() at sys_read+0x64/frame 0xffffff811e585ad0 amd64_syscall() at amd64_syscall+0x2d3/frame 0xffffff811e585bf0 Xfast_syscall() at Xfast_syscall+0xf7/frame 0xffffff811e585bf0 --- syscall (3, FreeBSD ELF64, sys_read), rip = 0x800b4af5a, rsp = 0x7fffffffdc98, rbp = 0 --- Tracing command inetd pid 1428 tid 100111 td 0xfffffe0008a2b480 sched_switch() at sched_switch+0x1b4/frame 0xffffff811e620690 mi_switch() at mi_switch+0x238/frame 0xffffff811e6206e0 sleepq_switch() at sleepq_switch+0xfe/frame 0xffffff811e620720 sleepq_catch_signals() at sleepq_catch_signals+0x2c6/frame 0xffffff811e620780 sleepq_wait_sig() at sleepq_wait_sig+0x16/frame 0xffffff811e6207a0 _cv_wait_sig() at _cv_wait_sig+0x181/frame 0xffffff811e620800 seltdwait() at seltdwait+0xad/frame 0xffffff811e620830 kern_select() at kern_select+0x79f/frame 0xffffff811e620a80 sys_select() at sys_select+0x5d/frame 0xffffff811e620ad0 amd64_syscall() at amd64_syscall+0x2d3/frame 0xffffff811e620bf0 Xfast_syscall() at Xfast_syscall+0xf7/frame 0xffffff811e620bf0 --- syscall (93, FreeBSD ELF64, sys_select), rip = 0x800f5feda, rsp = 0x7fffffffcd68, rbp = 0x1 --- Tracing command moused pid 1395 tid 100106 td 0xfffffe0008e1e900 sched_switch() at sched_switch+0x1b4/frame 0xffffff811e607690 mi_switch() at mi_switch+0x238/frame 0xffffff811e6076e0 sleepq_switch() at sleepq_switch+0xfe/frame 0xffffff811e607720 sleepq_catch_signals() at sleepq_catch_signals+0x2c6/frame 0xffffff811e607780 sleepq_wait_sig() at sleepq_wait_sig+0x16/frame 0xffffff811e6077a0 _cv_wait_sig() at _cv_wait_sig+0x181/frame 0xffffff811e607800 seltdwait() at seltdwait+0xad/frame 0xffffff811e607830 kern_select() at kern_select+0x79f/frame 0xffffff811e607a80 sys_select() at sys_select+0x5d/frame 0xffffff811e607ad0 amd64_syscall() at amd64_syscall+0x2d3/frame 0xffffff811e607bf0 Xfast_syscall() at Xfast_syscall+0xf7/frame 0xffffff811e607bf0 --- syscall (93, FreeBSD ELF64, sys_select), rip = 0x800d71eda, rsp = 0x7fffffffd858, rbp = 0 --- Tracing command cron pid 1371 tid 100097 td 0xfffffe0008d90000 sched_switch() at sched_switch+0x1b4/frame 0xffffff811e5da850 mi_switch() at mi_switch+0x238/frame 0xffffff811e5da8a0 sleepq_switch() at sleepq_switch+0xfe/frame 0xffffff811e5da8e0 sleepq_catch_signals() at sleepq_catch_signals+0x2c6/frame 0xffffff811e5da940 sleepq_timedwait_sig() at sleepq_timedwait_sig+0x19/frame 0xffffff811e5da970 _sleep() at _sleep+0x3c3/frame 0xffffff811e5daa00 kern_nanosleep() at kern_nanosleep+0x118/frame 0xffffff811e5daa70 sys_nanosleep() at sys_nanosleep+0x6e/frame 0xffffff811e5daad0 amd64_syscall() at amd64_syscall+0x2d3/frame 0xffffff811e5dabf0 Xfast_syscall() at Xfast_syscall+0xf7/frame 0xffffff811e5dabf0 --- syscall (240, FreeBSD ELF64, sys_nanosleep), rip = 0x800d3942a, rsp = 0x7fffffffdac8, rbp = 0x3c --- Tracing command sendmail pid 1364 tid 100107 td 0xfffffe0008e1e480 sched_switch() at sched_switch+0x1b4/frame 0xffffff811e60c8b0 mi_switch() at mi_switch+0x238/frame 0xffffff811e60c900 sleepq_switch() at sleepq_switch+0xfe/frame 0xffffff811e60c940 sleepq_catch_signals() at sleepq_catch_signals+0x2c6/frame 0xffffff811e60c9a0 sleepq_wait_sig() at sleepq_wait_sig+0x16/frame 0xffffff811e60c9c0 _sleep() at _sleep+0x37d/frame 0xffffff811e60ca50 kern_sigsuspend() at kern_sigsuspend+0xaa/frame 0xffffff811e60caa0 sys_sigsuspend() at sys_sigsuspend+0x34/frame 0xffffff811e60cad0 amd64_syscall() at amd64_syscall+0x2d3/frame 0xffffff811e60cbf0 Xfast_syscall() at Xfast_syscall+0xf7/frame 0xffffff811e60cbf0 --- syscall (4, FreeBSD ELF64, sys_write), rip = 0x80139516a, rsp = 0x7fffffffbda8, rbp = 0x1 --- Tracing command sendmail pid 1360 tid 100092 td 0xfffffe0008d90900 sched_switch() at sched_switch+0x1b4/frame 0xffffff811e5c1680 mi_switch() at mi_switch+0x238/frame 0xffffff811e5c16d0 sleepq_switch() at sleepq_switch+0xfe/frame 0xffffff811e5c1710 sleepq_catch_signals() at sleepq_catch_signals+0x2c6/frame 0xffffff811e5c1770 sleepq_timedwait_sig() at sleepq_timedwait_sig+0x19/frame 0xffffff811e5c17a0 _cv_timedwait_sig() at _cv_timedwait_sig+0x18f/frame 0xffffff811e5c1800 seltdwait() at seltdwait+0x57/frame 0xffffff811e5c1830 kern_select() at kern_select+0x79f/frame 0xffffff811e5c1a80 sys_select() at sys_select+0x5d/frame 0xffffff811e5c1ad0 amd64_syscall() at amd64_syscall+0x2d3/frame 0xffffff811e5c1bf0 Xfast_syscall() at Xfast_syscall+0xf7/frame 0xffffff811e5c1bf0 --- syscall (93, FreeBSD ELF64, sys_select), rip = 0x801447eda, rsp = 0x7fffffffb218, rbp = 0x7fffffffb2b0 --- Tracing command sshd pid 1352 tid 100114 td 0xfffffe005b022000 sched_switch() at sched_switch+0x1b4/frame 0xffffff811e62f690 mi_switch() at mi_switch+0x238/frame 0xffffff811e62f6e0 sleepq_switch() at sleepq_switch+0xfe/frame 0xffffff811e62f720 sleepq_catch_signals() at sleepq_catch_signals+0x2c6/frame 0xffffff811e62f780 sleepq_wait_sig() at sleepq_wait_sig+0x16/frame 0xffffff811e62f7a0 _cv_wait_sig() at _cv_wait_sig+0x181/frame 0xffffff811e62f800 seltdwait() at seltdwait+0xad/frame 0xffffff811e62f830 kern_select() at kern_select+0x79f/frame 0xffffff811e62fa80 sys_select() at sys_select+0x5d/frame 0xffffff811e62fad0 amd64_syscall() at amd64_syscall+0x2d3/frame 0xffffff811e62fbf0 Xfast_syscall() at Xfast_syscall+0xf7/frame 0xffffff811e62fbf0 --- syscall (93, FreeBSD ELF64, sys_select), rip = 0x80255deda, rsp = 0x7fffffffcd78, rbp = 0x2 --- Tracing command ntpd pid 1306 tid 100091 td 0xfffffe0008e20480 sched_switch() at sched_switch+0x1b4/frame 0xffffff811e5bc690 mi_switch() at mi_switch+0x238/frame 0xffffff811e5bc6e0 sleepq_switch() at sleepq_switch+0xfe/frame 0xffffff811e5bc720 sleepq_catch_signals() at sleepq_catch_signals+0x2c6/frame 0xffffff811e5bc780 sleepq_wait_sig() at sleepq_wait_sig+0x16/frame 0xffffff811e5bc7a0 _cv_wait_sig() at _cv_wait_sig+0x181/frame 0xffffff811e5bc800 seltdwait() at seltdwait+0xad/frame 0xffffff811e5bc830 kern_select() at kern_select+0x79f/frame 0xffffff811e5bca80 sys_select() at sys_select+0x5d/frame 0xffffff811e5bcad0 amd64_syscall() at amd64_syscall+0x2d3/frame 0xffffff811e5bcbf0 Xfast_syscall() at Xfast_syscall+0xf7/frame 0xffffff811e5bcbf0 --- syscall (93, FreeBSD ELF64, sys_select), rip = 0x8013a7eda, rsp = 0x7fffffffdbc8, rbp = 0x7fffffffdd08 --- Tracing command nfsd pid 1169 tid 100122 td 0xfffffe0008d43480 sched_switch() at sched_switch+0x1b4/frame 0xffffff811e6578e0 mi_switch() at mi_switch+0x238/frame 0xffffff811e657930 sleepq_switch() at sleepq_switch+0xfe/frame 0xffffff811e657970 sleepq_catch_signals() at sleepq_catch_signals+0x2c6/frame 0xffffff811e6579d0 sleepq_timedwait_sig() at sleepq_timedwait_sig+0x19/frame 0xffffff811e657a00 _cv_timedwait_sig() at _cv_timedwait_sig+0x18f/frame 0xffffff811e657a60 svc_run_internal() at svc_run_internal+0x87e/frame 0xffffff811e657b90 svc_thread_start() at svc_thread_start+0xb/frame 0xffffff811e657ba0 fork_exit() at fork_exit+0x139/frame 0xffffff811e657bf0 fork_trampoline() at fork_trampoline+0xe/frame 0xffffff811e657bf0 --- trap 0xc, rip = 0x800885dca, rsp = 0x7fffffffd678, rbp = 0x5 --- Tracing command nfsd pid 1169 tid 100121 td 0xfffffe0008d43900 sched_switch() at sched_switch+0x1b4/frame 0xffffff811e6528e0 mi_switch() at mi_switch+0x238/frame 0xffffff811e652930 sleepq_switch() at sleepq_switch+0xfe/frame 0xffffff811e652970 sleepq_catch_signals() at sleepq_catch_signals+0x2c6/frame 0xffffff811e6529d0 sleepq_timedwait_sig() at sleepq_timedwait_sig+0x19/frame 0xffffff811e652a00 _cv_timedwait_sig() at _cv_timedwait_sig+0x18f/frame 0xffffff811e652a60 svc_run_internal() at svc_run_internal+0x87e/frame 0xffffff811e652b90 svc_thread_start() at svc_thread_start+0xb/frame 0xffffff811e652ba0 fork_exit() at fork_exit+0x139/frame 0xffffff811e652bf0 fork_trampoline() at fork_trampoline+0xe/frame 0xffffff811e652bf0 --- trap 0xc, rip = 0x800885dca, rsp = 0x7fffffffd678, rbp = 0x5 --- Tracing command nfsd pid 1169 tid 100120 td 0xfffffe0008d46000 sched_switch() at sched_switch+0x1b4/frame 0xffffff811e64d8e0 mi_switch() at mi_switch+0x238/frame 0xffffff811e64d930 sleepq_switch() at sleepq_switch+0xfe/frame 0xffffff811e64d970 sleepq_catch_signals() at sleepq_catch_signals+0x2c6/frame 0xffffff811e64d9d0 sleepq_timedwait_sig() at sleepq_timedwait_sig+0x19/frame 0xffffff811e64da00 _cv_timedwait_sig() at _cv_timedwait_sig+0x18f/frame 0xffffff811e64da60 svc_run_internal() at svc_run_internal+0x87e/frame 0xffffff811e64db90 svc_thread_start() at svc_thread_start+0xb/frame 0xffffff811e64dba0 fork_exit() at fork_exit+0x139/frame 0xffffff811e64dbf0 fork_trampoline() at fork_trampoline+0xe/frame 0xffffff811e64dbf0 --- trap 0xc, rip = 0x800885dca, rsp = 0x7fffffffd678, rbp = 0x5 --- Tracing command nfsd pid 1169 tid 100115 td 0xfffffe005b021900 sched_switch() at sched_switch+0x1b4/frame 0xffffff811e634070 mi_switch() at mi_switch+0x238/frame 0xffffff811e6340c0 sleepq_switch() at sleepq_switch+0xfe/frame 0xffffff811e634100 sleepq_catch_signals() at sleepq_catch_signals+0x2c6/frame 0xffffff811e634160 sleepq_timedwait_sig() at sleepq_timedwait_sig+0x19/frame 0xffffff811e634190 _cv_timedwait_sig() at _cv_timedwait_sig+0x18f/frame 0xffffff811e6341f0 svc_run_internal() at svc_run_internal+0x87e/frame 0xffffff811e634320 svc_run() at svc_run+0x94/frame 0xffffff811e634340 nfsrvd_nfsd() at nfsrvd_nfsd+0x1c7/frame 0xffffff811e634490 nfssvc_nfsd() at nfssvc_nfsd+0x9b/frame 0xffffff811e634ab0 sys_nfssvc() at sys_nfssvc+0xb0/frame 0xffffff811e634ad0 amd64_syscall() at amd64_syscall+0x2d3/frame 0xffffff811e634bf0 Xfast_syscall() at Xfast_syscall+0xf7/frame 0xffffff811e634bf0 --- syscall (155, FreeBSD ELF64, sys_nfssvc), rip = 0x800885dca, rsp = 0x7fffffffd678, rbp = 0x5 --- Tracing command nfsd pid 1168 tid 100104 td 0xfffffe0008e1f480 sched_switch() at sched_switch+0x1b4/frame 0xffffff811e5fd690 mi_switch() at mi_switch+0x238/frame 0xffffff811e5fd6e0 sleepq_switch() at sleepq_switch+0xfe/frame 0xffffff811e5fd720 sleepq_catch_signals() at sleepq_catch_signals+0x2c6/frame 0xffffff811e5fd780 sleepq_wait_sig() at sleepq_wait_sig+0x16/frame 0xffffff811e5fd7a0 _cv_wait_sig() at _cv_wait_sig+0x181/frame 0xffffff811e5fd800 seltdwait() at seltdwait+0xad/frame 0xffffff811e5fd830 kern_select() at kern_select+0x79f/frame 0xffffff811e5fda80 sys_select() at sys_select+0x5d/frame 0xffffff811e5fdad0 amd64_syscall() at amd64_syscall+0x2d3/frame 0xffffff811e5fdbf0 Xfast_syscall() at Xfast_syscall+0xf7/frame 0xffffff811e5fdbf0 --- syscall (93, FreeBSD ELF64, sys_select), rip = 0x800937eda, rsp = 0x7fffffffd928, rbp = 0x7fffffffdc00 --- Tracing command mountd pid 1159 tid 100084 td 0xfffffe0008d91000 sched_switch() at sched_switch+0x1b4/frame 0xffffff811e599690 mi_switch() at mi_switch+0x238/frame 0xffffff811e5996e0 sleepq_switch() at sleepq_switch+0xfe/frame 0xffffff811e599720 sleepq_catch_signals() at sleepq_catch_signals+0x2c6/frame 0xffffff811e599780 sleepq_wait_sig() at sleepq_wait_sig+0x16/frame 0xffffff811e5997a0 _cv_wait_sig() at _cv_wait_sig+0x181/frame 0xffffff811e599800 seltdwait() at seltdwait+0xad/frame 0xffffff811e599830 kern_select() at kern_select+0x79f/frame 0xffffff811e599a80 sys_select() at sys_select+0x5d/frame 0xffffff811e599ad0 amd64_syscall() at amd64_syscall+0x2d3/frame 0xffffff811e599bf0 Xfast_syscall() at Xfast_syscall+0xf7/frame 0xffffff811e599bf0 --- syscall (93, FreeBSD ELF64, sys_select), rip = 0x800b4feda, rsp = 0x7fffffffdb78, rbp = 0x80143b060 --- Tracing command rpcbind pid 1061 tid 100085 td 0xfffffe0008d48480 sched_switch() at sched_switch+0x1b4/frame 0xffffff811e59e750 mi_switch() at mi_switch+0x238/frame 0xffffff811e59e7a0 sleepq_switch() at sleepq_switch+0xfe/frame 0xffffff811e59e7e0 sleepq_catch_signals() at sleepq_catch_signals+0x2c6/frame 0xffffff811e59e840 sleepq_timedwait_sig() at sleepq_timedwait_sig+0x19/frame 0xffffff811e59e870 _cv_timedwait_sig() at _cv_timedwait_sig+0x18f/frame 0xffffff811e59e8d0 seltdwait() at seltdwait+0x57/frame 0xffffff811e59e900 sys_poll() at sys_poll+0x3e6/frame 0xffffff811e59ead0 amd64_syscall() at amd64_syscall+0x2d3/frame 0xffffff811e59ebf0 Xfast_syscall() at Xfast_syscall+0xf7/frame 0xffffff811e59ebf0 --- syscall (209, FreeBSD ELF64, sys_poll), rip = 0x800cf2e1a, rsp = 0x7fffffffba48, rbp = 0x80141b020 --- Tracing command syslogd pid 1035 tid 100102 td 0xfffffe0008d8f480 sched_switch() at sched_switch+0x1b4/frame 0xffffff811e5f3690 mi_switch() at mi_switch+0x238/frame 0xffffff811e5f36e0 sleepq_switch() at sleepq_switch+0xfe/frame 0xffffff811e5f3720 sleepq_catch_signals() at sleepq_catch_signals+0x2c6/frame 0xffffff811e5f3780 sleepq_wait_sig() at sleepq_wait_sig+0x16/frame 0xffffff811e5f37a0 _cv_wait_sig() at _cv_wait_sig+0x181/frame 0xffffff811e5f3800 seltdwait() at seltdwait+0xad/frame 0xffffff811e5f3830 kern_select() at kern_select+0x79f/frame 0xffffff811e5f3a80 sys_select() at sys_select+0x5d/frame 0xffffff811e5f3ad0 amd64_syscall() at amd64_syscall+0x2d3/frame 0xffffff811e5f3bf0 Xfast_syscall() at Xfast_syscall+0xf7/frame 0xffffff811e5f3bf0 --- syscall (93, FreeBSD ELF64, sys_select), rip = 0x800b4deda, rsp = 0x7fffffffd118, rbp = 0x80142c108 --- Tracing command devd pid 834 tid 100103 td 0xfffffe0008d8f000 sched_switch() at sched_switch+0x1b4/frame 0xffffff811e5f8690 mi_switch() at mi_switch+0x238/frame 0xffffff811e5f86e0 sleepq_switch() at sleepq_switch+0xfe/frame 0xffffff811e5f8720 sleepq_catch_signals() at sleepq_catch_signals+0x2c6/frame 0xffffff811e5f8780 sleepq_wait_sig() at sleepq_wait_sig+0x16/frame 0xffffff811e5f87a0 _cv_wait_sig() at _cv_wait_sig+0x181/frame 0xffffff811e5f8800 seltdwait() at seltdwait+0xad/frame 0xffffff811e5f8830 kern_select() at kern_select+0x79f/frame 0xffffff811e5f8a80 sys_select() at sys_select+0x5d/frame 0xffffff811e5f8ad0 amd64_syscall() at amd64_syscall+0x2d3/frame 0xffffff811e5f8bf0 Xfast_syscall() at Xfast_syscall+0xf7/frame 0xffffff811e5f8bf0 --- syscall (93, FreeBSD ELF64, sys_select), rip = 0x442baa, rsp = 0x7fffffffd828, rbp = 0x7fffffffd840 --- Tracing command softdepflush pid 19 tid 100078 td 0xfffffe0008a2d480 sched_switch() at sched_switch+0x1b4/frame 0xffffff81152fea10 mi_switch() at mi_switch+0x238/frame 0xffffff81152fea60 sleepq_switch() at sleepq_switch+0xfe/frame 0xffffff81152feaa0 sleepq_timedwait() at sleepq_timedwait+0x4d/frame 0xffffff81152fead0 _sleep() at _sleep+0x29a/frame 0xffffff81152feb60 softdep_flush() at softdep_flush+0x20d/frame 0xffffff81152feba0 fork_exit() at fork_exit+0x139/frame 0xffffff81152febf0 fork_trampoline() at fork_trampoline+0xe/frame 0xffffff81152febf0 --- trap 0, rip = 0, rsp = 0xffffff81152fecb0, rbp = 0 --- Tracing command vnlru pid 18 tid 100077 td 0xfffffe0008a2d900 sched_switch() at sched_switch+0x1b4/frame 0xffffff81152f99d0 mi_switch() at mi_switch+0x238/frame 0xffffff81152f9a20 sleepq_switch() at sleepq_switch+0xfe/frame 0xffffff81152f9a60 sleepq_timedwait() at sleepq_timedwait+0x4d/frame 0xffffff81152f9a90 _sleep() at _sleep+0x29a/frame 0xffffff81152f9b20 vnlru_proc() at vnlru_proc+0x537/frame 0xffffff81152f9ba0 fork_exit() at fork_exit+0x139/frame 0xffffff81152f9bf0 fork_trampoline() at fork_trampoline+0xe/frame 0xffffff81152f9bf0 --- trap 0, rip = 0, rsp = 0xffffff81152f9cb0, rbp = 0 --- Tracing command syncer pid 17 tid 100076 td 0xfffffe0008a2e000 sched_switch() at sched_switch+0x1b4/frame 0xffffff81152f41b0 mi_switch() at mi_switch+0x238/frame 0xffffff81152f4200 sleepq_switch() at sleepq_switch+0xfe/frame 0xffffff81152f4240 sleepq_wait() at sleepq_wait+0x4d/frame 0xffffff81152f4270 _sleep() at _sleep+0x3e9/frame 0xffffff81152f4300 getpbuf() at getpbuf+0x4e/frame 0xffffff81152f4320 cluster_wbuild() at cluster_wbuild+0x20f/frame 0xffffff81152f43d0 cluster_write() at cluster_write+0x648/frame 0xffffff81152f44e0 ffs_write() at ffs_write+0x5ee/frame 0xffffff81152f4580 VOP_WRITE_APV() at VOP_WRITE_APV+0x114/frame 0xffffff81152f4680 vnode_pager_generic_putpages() at vnode_pager_generic_putpages+0x1a9/frame 0xffffff81152f4770 VOP_PUTPAGES_APV() at VOP_PUTPAGES_APV+0xa6/frame 0xffffff81152f4790 vnode_pager_putpages() at vnode_pager_putpages+0x9b/frame 0xffffff81152f4810 vm_pageout_flush() at vm_pageout_flush+0x103/frame 0xffffff81152f48f0 vm_object_page_collect_flush() at vm_object_page_collect_flush+0x184/frame 0xffffff81152f49f0 vm_object_page_clean() at vm_object_page_clean+0x173/frame 0xffffff81152f4a60 vfs_msync() at vfs_msync+0xc1/frame 0xffffff81152f4ac0 sync_fsync() at sync_fsync+0x126/frame 0xffffff81152f4af0 VOP_FSYNC_APV() at VOP_FSYNC_APV+0xa6/frame 0xffffff81152f4b10 sched_sync() at sched_sync+0x362/frame 0xffffff81152f4ba0 fork_exit() at fork_exit+0x139/frame 0xffffff81152f4bf0 fork_trampoline() at fork_trampoline+0xe/frame 0xffffff81152f4bf0 --- trap 0, rip = 0, rsp = 0xffffff81152f4cb0, rbp = 0 --- Tracing command bufdaemon pid 16 tid 100075 td 0xfffffe0008a2e480 sched_switch() at sched_switch+0x1b4/frame 0xffffff81152efa30 mi_switch() at mi_switch+0x238/frame 0xffffff81152efa80 sleepq_switch() at sleepq_switch+0xfe/frame 0xffffff81152efac0 sleepq_timedwait() at sleepq_timedwait+0x4d/frame 0xffffff81152efaf0 _sleep() at _sleep+0x29a/frame 0xffffff81152efb80 buf_daemon() at buf_daemon+0x192/frame 0xffffff81152efba0 fork_exit() at fork_exit+0x139/frame 0xffffff81152efbf0 fork_trampoline() at fork_trampoline+0xe/frame 0xffffff81152efbf0 --- trap 0, rip = 0, rsp = 0xffffff81152efcb0, rbp = 0 --- Tracing command pagezero pid 9 tid 100074 td 0xfffffe0008a2e900 sched_switch() at sched_switch+0x1b4/frame 0xffffff81152eaa30 mi_switch() at mi_switch+0x238/frame 0xffffff81152eaa80 sleepq_switch() at sleepq_switch+0xfe/frame 0xffffff81152eaac0 sleepq_timedwait() at sleepq_timedwait+0x4d/frame 0xffffff81152eaaf0 _sleep() at _sleep+0x29a/frame 0xffffff81152eab80 vm_pagezero() at vm_pagezero+0x73/frame 0xffffff81152eaba0 fork_exit() at fork_exit+0x139/frame 0xffffff81152eabf0 fork_trampoline() at fork_trampoline+0xe/frame 0xffffff81152eabf0 --- trap 0, rip = 0, rsp = 0xffffff81152eacb0, rbp = 0 --- Tracing command vmdaemon pid 8 tid 100073 td 0xfffffe0008a30000 sched_switch() at sched_switch+0x1b4/frame 0xffffff81152e59e0 mi_switch() at mi_switch+0x238/frame 0xffffff81152e5a30 sleepq_switch() at sleepq_switch+0xfe/frame 0xffffff81152e5a70 sleepq_wait() at sleepq_wait+0x4d/frame 0xffffff81152e5aa0 _sleep() at _sleep+0x3e9/frame 0xffffff81152e5b30 vm_daemon() at vm_daemon+0x4d/frame 0xffffff81152e5ba0 fork_exit() at fork_exit+0x139/frame 0xffffff81152e5bf0 fork_trampoline() at fork_trampoline+0xe/frame 0xffffff81152e5bf0 --- trap 0, rip = 0, rsp = 0xffffff81152e5cb0, rbp = 0 --- Tracing command pagedaemon pid 7 tid 100072 td 0xfffffe0002f69000 sched_switch() at sched_switch+0x1b4/frame 0xffffff81152e0940 mi_switch() at mi_switch+0x238/frame 0xffffff81152e0990 sleepq_switch() at sleepq_switch+0xfe/frame 0xffffff81152e09d0 sleepq_timedwait() at sleepq_timedwait+0x4d/frame 0xffffff81152e0a00 _sleep() at _sleep+0x29a/frame 0xffffff81152e0a90 vm_pageout() at vm_pageout+0xb8e/frame 0xffffff81152e0ba0 fork_exit() at fork_exit+0x139/frame 0xffffff81152e0bf0 fork_trampoline() at fork_trampoline+0xe/frame 0xffffff81152e0bf0 --- trap 0, rip = 0, rsp = 0xffffff81152e0cb0, rbp = 0 --- Tracing command xpt_thrd pid 6 tid 100071 td 0xfffffe0002f69480 sched_switch() at sched_switch+0x1b4/frame 0xffffff811515ba30 mi_switch() at mi_switch+0x238/frame 0xffffff811515ba80 sleepq_switch() at sleepq_switch+0xfe/frame 0xffffff811515bac0 sleepq_wait() at sleepq_wait+0x4d/frame 0xffffff811515baf0 _sleep() at _sleep+0x3e9/frame 0xffffff811515bb80 xpt_scanner_thread() at xpt_scanner_thread+0xdd/frame 0xffffff811515bba0 fork_exit() at fork_exit+0x139/frame 0xffffff811515bbf0 fork_trampoline() at fork_trampoline+0xe/frame 0xffffff811515bbf0 --- trap 0, rip = 0, rsp = 0xffffff811515bcb0, rbp = 0 --- Tracing command sctp_iterator pid 5 tid 100070 td 0xfffffe0002f69900 sched_switch() at sched_switch+0x1b4/frame 0xffffff8115156a40 mi_switch() at mi_switch+0x238/frame 0xffffff8115156a90 sleepq_switch() at sleepq_switch+0xfe/frame 0xffffff8115156ad0 sleepq_wait() at sleepq_wait+0x4d/frame 0xffffff8115156b00 _sleep() at _sleep+0x3e9/frame 0xffffff8115156b90 sctp_iterator_thread() at sctp_iterator_thread+0x3f/frame 0xffffff8115156ba0 fork_exit() at fork_exit+0x139/frame 0xffffff8115156bf0 fork_trampoline() at fork_trampoline+0xe/frame 0xffffff8115156bf0 --- trap 0, rip = 0, rsp = 0xffffff8115156cb0, rbp = 0 --- Tracing command fdc0 pid 4 tid 100065 td 0xfffffe0002f6f480 sched_switch() at sched_switch+0x1b4/frame 0xffffff8115138990 mi_switch() at mi_switch+0x238/frame 0xffffff81151389e0 sleepq_switch() at sleepq_switch+0xfe/frame 0xffffff8115138a20 sleepq_timedwait() at sleepq_timedwait+0x4d/frame 0xffffff8115138a50 _sleep() at _sleep+0x29a/frame 0xffffff8115138ae0 fdc_thread() at fdc_thread+0x7f4/frame 0xffffff8115138ba0 fork_exit() at fork_exit+0x139/frame 0xffffff8115138bf0 fork_trampoline() at fork_trampoline+0xe/frame 0xffffff8115138bf0 --- trap 0, rip = 0, rsp = 0xffffff8115138cb0, rbp = 0 --- Tracing command fw0_probe pid 3 tid 100063 td 0xfffffe0002f70000 sched_switch() at sched_switch+0x1b4/frame 0xffffff8115120480 mi_switch() at mi_switch+0x238/frame 0xffffff81151204d0 sleepq_switch() at sleepq_switch+0xfe/frame 0xffffff8115120510 sleepq_catch_signals() at sleepq_catch_signals+0x2c6/frame 0xffffff8115120570 sleepq_wait_sig() at sleepq_wait_sig+0x16/frame 0xffffff8115120590 _sleep() at _sleep+0x37d/frame 0xffffff8115120620 fw_bus_probe_thread() at fw_bus_probe_thread+0xca/frame 0xffffff8115120ba0 fork_exit() at fork_exit+0x139/frame 0xffffff8115120bf0 fork_trampoline() at fork_trampoline+0xe/frame 0xffffff8115120bf0 --- trap 0, rip = 0, rsp = 0xffffff8115120cb0, rbp = 0 --- Tracing command usb pid 15 tid 100059 td 0xfffffe0002f48900 sched_switch() at sched_switch+0x1b4/frame 0xffffff8114db5a50 mi_switch() at mi_switch+0x238/frame 0xffffff8114db5aa0 sleepq_switch() at sleepq_switch+0xfe/frame 0xffffff8114db5ae0 sleepq_wait() at sleepq_wait+0x4d/frame 0xffffff8114db5b10 _cv_wait() at _cv_wait+0x17d/frame 0xffffff8114db5b70 usb_process() at usb_process+0x172/frame 0xffffff8114db5ba0 fork_exit() at fork_exit+0x139/frame 0xffffff8114db5bf0 fork_trampoline() at fork_trampoline+0xe/frame 0xffffff8114db5bf0 --- trap 0, rip = 0, rsp = 0xffffff8114db5cb0, rbp = 0 --- Tracing command usb pid 15 tid 100058 td 0xfffffe0002f4f000 sched_switch() at sched_switch+0x1b4/frame 0xffffff8114db0a50 mi_switch() at mi_switch+0x238/frame 0xffffff8114db0aa0 sleepq_switch() at sleepq_switch+0xfe/frame 0xffffff8114db0ae0 sleepq_wait() at sleepq_wait+0x4d/frame 0xffffff8114db0b10 _cv_wait() at _cv_wait+0x17d/frame 0xffffff8114db0b70 usb_process() at usb_process+0x172/frame 0xffffff8114db0ba0 fork_exit() at fork_exit+0x139/frame 0xffffff8114db0bf0 fork_trampoline() at fork_trampoline+0xe/frame 0xffffff8114db0bf0 --- trap 0, rip = 0, rsp = 0xffffff8114db0cb0, rbp = 0 --- Tracing command usb pid 15 tid 100057 td 0xfffffe0002f4f480 sched_switch() at sched_switch+0x1b4/frame 0xffffff8114daba50 mi_switch() at mi_switch+0x238/frame 0xffffff8114dabaa0 sleepq_switch() at sleepq_switch+0xfe/frame 0xffffff8114dabae0 sleepq_wait() at sleepq_wait+0x4d/frame 0xffffff8114dabb10 _cv_wait() at _cv_wait+0x17d/frame 0xffffff8114dabb70 usb_process() at usb_process+0x172/frame 0xffffff8114dabba0 fork_exit() at fork_exit+0x139/frame 0xffffff8114dabbf0 fork_trampoline() at fork_trampoline+0xe/frame 0xffffff8114dabbf0 --- trap 0, rip = 0, rsp = 0xffffff8114dabcb0, rbp = 0 --- Tracing command usb pid 15 tid 100056 td 0xfffffe0002f4f900 sched_switch() at sched_switch+0x1b4/frame 0xffffff8114da6a50 mi_switch() at mi_switch+0x238/frame 0xffffff8114da6aa0 sleepq_switch() at sleepq_switch+0xfe/frame 0xffffff8114da6ae0 sleepq_wait() at sleepq_wait+0x4d/frame 0xffffff8114da6b10 _cv_wait() at _cv_wait+0x17d/frame 0xffffff8114da6b70 usb_process() at usb_process+0x172/frame 0xffffff8114da6ba0 fork_exit() at fork_exit+0x139/frame 0xffffff8114da6bf0 fork_trampoline() at fork_trampoline+0xe/frame 0xffffff8114da6bf0 --- trap 0, rip = 0, rsp = 0xffffff8114da6cb0, rbp = 0 --- Tracing command usb pid 15 tid 100054 td 0xfffffe0002f50480 sched_switch() at sched_switch+0x1b4/frame 0xffffff8114c19a50 mi_switch() at mi_switch+0x238/frame 0xffffff8114c19aa0 sleepq_switch() at sleepq_switch+0xfe/frame 0xffffff8114c19ae0 sleepq_wait() at sleepq_wait+0x4d/frame 0xffffff8114c19b10 _cv_wait() at _cv_wait+0x17d/frame 0xffffff8114c19b70 usb_process() at usb_process+0x172/frame 0xffffff8114c19ba0 fork_exit() at fork_exit+0x139/frame 0xffffff8114c19bf0 fork_trampoline() at fork_trampoline+0xe/frame 0xffffff8114c19bf0 --- trap 0, rip = 0, rsp = 0xffffff8114c19cb0, rbp = 0 --- Tracing command usb pid 15 tid 100053 td 0xfffffe0002f50900 sched_switch() at sched_switch+0x1b4/frame 0xffffff8114c14a50 mi_switch() at mi_switch+0x238/frame 0xffffff8114c14aa0 sleepq_switch() at sleepq_switch+0xfe/frame 0xffffff8114c14ae0 sleepq_wait() at sleepq_wait+0x4d/frame 0xffffff8114c14b10 _cv_wait() at _cv_wait+0x17d/frame 0xffffff8114c14b70 usb_process() at usb_process+0x172/frame 0xffffff8114c14ba0 fork_exit() at fork_exit+0x139/frame 0xffffff8114c14bf0 fork_trampoline() at fork_trampoline+0xe/frame 0xffffff8114c14bf0 --- trap 0, rip = 0, rsp = 0xffffff8114c14cb0, rbp = 0 --- Tracing command usb pid 15 tid 100052 td 0xfffffe0002f51000 sched_switch() at sched_switch+0x1b4/frame 0xffffff8114c0fa50 mi_switch() at mi_switch+0x238/frame 0xffffff8114c0faa0 sleepq_switch() at sleepq_switch+0xfe/frame 0xffffff8114c0fae0 sleepq_wait() at sleepq_wait+0x4d/frame 0xffffff8114c0fb10 _cv_wait() at _cv_wait+0x17d/frame 0xffffff8114c0fb70 usb_process() at usb_process+0x172/frame 0xffffff8114c0fba0 fork_exit() at fork_exit+0x139/frame 0xffffff8114c0fbf0 fork_trampoline() at fork_trampoline+0xe/frame 0xffffff8114c0fbf0 --- trap 0, rip = 0, rsp = 0xffffff8114c0fcb0, rbp = 0 --- Tracing command usb pid 15 tid 100051 td 0xfffffe0002f51480 sched_switch() at sched_switch+0x1b4/frame 0xffffff8114c0aa50 mi_switch() at mi_switch+0x238/frame 0xffffff8114c0aaa0 sleepq_switch() at sleepq_switch+0xfe/frame 0xffffff8114c0aae0 sleepq_wait() at sleepq_wait+0x4d/frame 0xffffff8114c0ab10 _cv_wait() at _cv_wait+0x17d/frame 0xffffff8114c0ab70 usb_process() at usb_process+0x172/frame 0xffffff8114c0aba0 fork_exit() at fork_exit+0x139/frame 0xffffff8114c0abf0 fork_trampoline() at fork_trampoline+0xe/frame 0xffffff8114c0abf0 --- trap 0, rip = 0, rsp = 0xffffff8114c0acb0, rbp = 0 --- Tracing command usb pid 15 tid 100050 td 0xfffffe0002f51900 sched_switch() at sched_switch+0x1b4/frame 0xffffff8114bc1a50 mi_switch() at mi_switch+0x238/frame 0xffffff8114bc1aa0 sleepq_switch() at sleepq_switch+0xfe/frame 0xffffff8114bc1ae0 sleepq_wait() at sleepq_wait+0x4d/frame 0xffffff8114bc1b10 _cv_wait() at _cv_wait+0x17d/frame 0xffffff8114bc1b70 usb_process() at usb_process+0x172/frame 0xffffff8114bc1ba0 fork_exit() at fork_exit+0x139/frame 0xffffff8114bc1bf0 fork_trampoline() at fork_trampoline+0xe/frame 0xffffff8114bc1bf0 --- trap 0, rip = 0, rsp = 0xffffff8114bc1cb0, rbp = 0 --- Tracing command usb pid 15 tid 100049 td 0xfffffe0002f42000 sched_switch() at sched_switch+0x1b4/frame 0xffffff8114bbca50 mi_switch() at mi_switch+0x238/frame 0xffffff8114bbcaa0 sleepq_switch() at sleepq_switch+0xfe/frame 0xffffff8114bbcae0 sleepq_wait() at sleepq_wait+0x4d/frame 0xffffff8114bbcb10 _cv_wait() at _cv_wait+0x17d/frame 0xffffff8114bbcb70 usb_process() at usb_process+0x172/frame 0xffffff8114bbcba0 fork_exit() at fork_exit+0x139/frame 0xffffff8114bbcbf0 fork_trampoline() at fork_trampoline+0xe/frame 0xffffff8114bbcbf0 --- trap 0, rip = 0, rsp = 0xffffff8114bbccb0, rbp = 0 --- Tracing command usb pid 15 tid 100048 td 0xfffffe0002f42480 sched_switch() at sched_switch+0x1b4/frame 0xffffff8114bb7a50 mi_switch() at mi_switch+0x238/frame 0xffffff8114bb7aa0 sleepq_switch() at sleepq_switch+0xfe/frame 0xffffff8114bb7ae0 sleepq_wait() at sleepq_wait+0x4d/frame 0xffffff8114bb7b10 _cv_wait() at _cv_wait+0x17d/frame 0xffffff8114bb7b70 usb_process() at usb_process+0x172/frame 0xffffff8114bb7ba0 fork_exit() at fork_exit+0x139/frame 0xffffff8114bb7bf0 fork_trampoline() at fork_trampoline+0xe/frame 0xffffff8114bb7bf0 --- trap 0, rip = 0, rsp = 0xffffff8114bb7cb0, rbp = 0 --- Tracing command usb pid 15 tid 100047 td 0xfffffe0002f42900 sched_switch() at sched_switch+0x1b4/frame 0xffffff8114bb2a50 mi_switch() at mi_switch+0x238/frame 0xffffff8114bb2aa0 sleepq_switch() at sleepq_switch+0xfe/frame 0xffffff8114bb2ae0 sleepq_wait() at sleepq_wait+0x4d/frame 0xffffff8114bb2b10 _cv_wait() at _cv_wait+0x17d/frame 0xffffff8114bb2b70 usb_process() at usb_process+0x172/frame 0xffffff8114bb2ba0 fork_exit() at fork_exit+0x139/frame 0xffffff8114bb2bf0 fork_trampoline() at fork_trampoline+0xe/frame 0xffffff8114bb2bf0 --- trap 0, rip = 0, rsp = 0xffffff8114bb2cb0, rbp = 0 --- Tracing command usb pid 15 tid 100046 td 0xfffffe0002f45000 sched_switch() at sched_switch+0x1b4/frame 0xffffff8114b69a50 mi_switch() at mi_switch+0x238/frame 0xffffff8114b69aa0 sleepq_switch() at sleepq_switch+0xfe/frame 0xffffff8114b69ae0 sleepq_wait() at sleepq_wait+0x4d/frame 0xffffff8114b69b10 _cv_wait() at _cv_wait+0x17d/frame 0xffffff8114b69b70 usb_process() at usb_process+0x172/frame 0xffffff8114b69ba0 fork_exit() at fork_exit+0x139/frame 0xffffff8114b69bf0 fork_trampoline() at fork_trampoline+0xe/frame 0xffffff8114b69bf0 --- trap 0, rip = 0, rsp = 0xffffff8114b69cb0, rbp = 0 --- Tracing command usb pid 15 tid 100045 td 0xfffffe0002f45480 sched_switch() at sched_switch+0x1b4/frame 0xffffff8114b64a50 mi_switch() at mi_switch+0x238/frame 0xffffff8114b64aa0 sleepq_switch() at sleepq_switch+0xfe/frame 0xffffff8114b64ae0 sleepq_wait() at sleepq_wait+0x4d/frame 0xffffff8114b64b10 _cv_wait() at _cv_wait+0x17d/frame 0xffffff8114b64b70 usb_process() at usb_process+0x172/frame 0xffffff8114b64ba0 fork_exit() at fork_exit+0x139/frame 0xffffff8114b64bf0 fork_trampoline() at fork_trampoline+0xe/frame 0xffffff8114b64bf0 --- trap 0, rip = 0, rsp = 0xffffff8114b64cb0, rbp = 0 --- Tracing command usb pid 15 tid 100044 td 0xfffffe0002f45900 sched_switch() at sched_switch+0x1b4/frame 0xffffff8114b5fa50 mi_switch() at mi_switch+0x238/frame 0xffffff8114b5faa0 sleepq_switch() at sleepq_switch+0xfe/frame 0xffffff8114b5fae0 sleepq_wait() at sleepq_wait+0x4d/frame 0xffffff8114b5fb10 _cv_wait() at _cv_wait+0x17d/frame 0xffffff8114b5fb70 usb_process() at usb_process+0x172/frame 0xffffff8114b5fba0 fork_exit() at fork_exit+0x139/frame 0xffffff8114b5fbf0 fork_trampoline() at fork_trampoline+0xe/frame 0xffffff8114b5fbf0 --- trap 0, rip = 0, rsp = 0xffffff8114b5fcb0, rbp = 0 --- Tracing command usb pid 15 tid 100043 td 0xfffffe0002f47000 sched_switch() at sched_switch+0x1b4/frame 0xffffff8114b5aa50 mi_switch() at mi_switch+0x238/frame 0xffffff8114b5aaa0 sleepq_switch() at sleepq_switch+0xfe/frame 0xffffff8114b5aae0 sleepq_wait() at sleepq_wait+0x4d/frame 0xffffff8114b5ab10 _cv_wait() at _cv_wait+0x17d/frame 0xffffff8114b5ab70 usb_process() at usb_process+0x172/frame 0xffffff8114b5aba0 fork_exit() at fork_exit+0x139/frame 0xffffff8114b5abf0 fork_trampoline() at fork_trampoline+0xe/frame 0xffffff8114b5abf0 --- trap 0, rip = 0, rsp = 0xffffff8114b5acb0, rbp = 0 --- Tracing command usb pid 15 tid 100041 td 0xfffffe0002f47900 sched_switch() at sched_switch+0x1b4/frame 0xffffff8114b0ca50 mi_switch() at mi_switch+0x238/frame 0xffffff8114b0caa0 sleepq_switch() at sleepq_switch+0xfe/frame 0xffffff8114b0cae0 sleepq_wait() at sleepq_wait+0x4d/frame 0xffffff8114b0cb10 _cv_wait() at _cv_wait+0x17d/frame 0xffffff8114b0cb70 usb_process() at usb_process+0x172/frame 0xffffff8114b0cba0 fork_exit() at fork_exit+0x139/frame 0xffffff8114b0cbf0 fork_trampoline() at fork_trampoline+0xe/frame 0xffffff8114b0cbf0 --- trap 0, rip = 0, rsp = 0xffffff8114b0ccb0, rbp = 0 --- Tracing command usb pid 15 tid 100040 td 0xfffffe0002f48000 sched_switch() at sched_switch+0x1b4/frame 0xffffff8114b07a50 mi_switch() at mi_switch+0x238/frame 0xffffff8114b07aa0 sleepq_switch() at sleepq_switch+0xfe/frame 0xffffff8114b07ae0 sleepq_wait() at sleepq_wait+0x4d/frame 0xffffff8114b07b10 _cv_wait() at _cv_wait+0x17d/frame 0xffffff8114b07b70 usb_process() at usb_process+0x172/frame 0xffffff8114b07ba0 fork_exit() at fork_exit+0x139/frame 0xffffff8114b07bf0 fork_trampoline() at fork_trampoline+0xe/frame 0xffffff8114b07bf0 --- trap 0, rip = 0, rsp = 0xffffff8114b07cb0, rbp = 0 --- Tracing command usb pid 15 tid 100039 td 0xfffffe0002e55000 sched_switch() at sched_switch+0x1b4/frame 0xffffff8114b02a50 mi_switch() at mi_switch+0x238/frame 0xffffff8114b02aa0 sleepq_switch() at sleepq_switch+0xfe/frame 0xffffff8114b02ae0 sleepq_wait() at sleepq_wait+0x4d/frame 0xffffff8114b02b10 _cv_wait() at _cv_wait+0x17d/frame 0xffffff8114b02b70 usb_process() at usb_process+0x172/frame 0xffffff8114b02ba0 fork_exit() at fork_exit+0x139/frame 0xffffff8114b02bf0 fork_trampoline() at fork_trampoline+0xe/frame 0xffffff8114b02bf0 --- trap 0, rip = 0, rsp = 0xffffff8114b02cb0, rbp = 0 --- Tracing command usb pid 15 tid 100038 td 0xfffffe0002e55480 sched_switch() at sched_switch+0x1b4/frame 0xffffff8114afda50 mi_switch() at mi_switch+0x238/frame 0xffffff8114afdaa0 sleepq_switch() at sleepq_switch+0xfe/frame 0xffffff8114afdae0 sleepq_wait() at sleepq_wait+0x4d/frame 0xffffff8114afdb10 _cv_wait() at _cv_wait+0x17d/frame 0xffffff8114afdb70 usb_process() at usb_process+0x172/frame 0xffffff8114afdba0 fork_exit() at fork_exit+0x139/frame 0xffffff8114afdbf0 fork_trampoline() at fork_trampoline+0xe/frame 0xffffff8114afdbf0 --- trap 0, rip = 0, rsp = 0xffffff8114afdcb0, rbp = 0 --- Tracing command usb pid 15 tid 100036 td 0xfffffe0002e56000 sched_switch() at sched_switch+0x1b4/frame 0xffffff8114aafa50 mi_switch() at mi_switch+0x238/frame 0xffffff8114aafaa0 sleepq_switch() at sleepq_switch+0xfe/frame 0xffffff8114aafae0 sleepq_wait() at sleepq_wait+0x4d/frame 0xffffff8114aafb10 _cv_wait() at _cv_wait+0x17d/frame 0xffffff8114aafb70 usb_process() at usb_process+0x172/frame 0xffffff8114aafba0 fork_exit() at fork_exit+0x139/frame 0xffffff8114aafbf0 fork_trampoline() at fork_trampoline+0xe/frame 0xffffff8114aafbf0 --- trap 0, rip = 0, rsp = 0xffffff8114aafcb0, rbp = 0 --- Tracing command usb pid 15 tid 100035 td 0xfffffe0002e56480 sched_switch() at sched_switch+0x1b4/frame 0xffffff8114aaaa50 mi_switch() at mi_switch+0x238/frame 0xffffff8114aaaaa0 sleepq_switch() at sleepq_switch+0xfe/frame 0xffffff8114aaaae0 sleepq_wait() at sleepq_wait+0x4d/frame 0xffffff8114aaab10 _cv_wait() at _cv_wait+0x17d/frame 0xffffff8114aaab70 usb_process() at usb_process+0x172/frame 0xffffff8114aaaba0 fork_exit() at fork_exit+0x139/frame 0xffffff8114aaabf0 fork_trampoline() at fork_trampoline+0xe/frame 0xffffff8114aaabf0 --- trap 0, rip = 0, rsp = 0xffffff8114aaacb0, rbp = 0 --- Tracing command usb pid 15 tid 100034 td 0xfffffe0002e56900 sched_switch() at sched_switch+0x1b4/frame 0xffffff8114aa5a50 mi_switch() at mi_switch+0x238/frame 0xffffff8114aa5aa0 sleepq_switch() at sleepq_switch+0xfe/frame 0xffffff8114aa5ae0 sleepq_wait() at sleepq_wait+0x4d/frame 0xffffff8114aa5b10 _cv_wait() at _cv_wait+0x17d/frame 0xffffff8114aa5b70 usb_process() at usb_process+0x172/frame 0xffffff8114aa5ba0 fork_exit() at fork_exit+0x139/frame 0xffffff8114aa5bf0 fork_trampoline() at fork_trampoline+0xe/frame 0xffffff8114aa5bf0 --- trap 0, rip = 0, rsp = 0xffffff8114aa5cb0, rbp = 0 --- Tracing command usb pid 15 tid 100033 td 0xfffffe0002e57000 sched_switch() at sched_switch+0x1b4/frame 0xffffff8114aa0a50 mi_switch() at mi_switch+0x238/frame 0xffffff8114aa0aa0 sleepq_switch() at sleepq_switch+0xfe/frame 0xffffff8114aa0ae0 sleepq_wait() at sleepq_wait+0x4d/frame 0xffffff8114aa0b10 _cv_wait() at _cv_wait+0x17d/frame 0xffffff8114aa0b70 usb_process() at usb_process+0x172/frame 0xffffff8114aa0ba0 fork_exit() at fork_exit+0x139/frame 0xffffff8114aa0bf0 fork_trampoline() at fork_trampoline+0xe/frame 0xffffff8114aa0bf0 --- trap 0, rip = 0, rsp = 0xffffff8114aa0cb0, rbp = 0 --- Tracing command ctl_thrd pid 2 tid 100028 td 0xfffffe0002ae1000 sched_switch() at sched_switch+0x1b4/frame 0xffffff80002d03f0 mi_switch() at mi_switch+0x238/frame 0xffffff80002d0440 sleepq_switch() at sleepq_switch+0xfe/frame 0xffffff80002d0480 sleepq_wait() at sleepq_wait+0x4d/frame 0xffffff80002d04b0 _sleep() at _sleep+0x3e9/frame 0xffffff80002d0540 ctl_work_thread() at ctl_work_thread+0x1ce8/frame 0xffffff80002d0ba0 fork_exit() at fork_exit+0x139/frame 0xffffff80002d0bf0 fork_trampoline() at fork_trampoline+0xe/frame 0xffffff80002d0bf0 --- trap 0, rip = 0, rsp = 0xffffff80002d0cb0, rbp = 0 --- Tracing command yarrow pid 14 tid 100017 td 0xfffffe0002949900 sched_switch() at sched_switch+0x1b4/frame 0xffffff8000298a10 mi_switch() at mi_switch+0x238/frame 0xffffff8000298a60 sleepq_switch() at sleepq_switch+0xfe/frame 0xffffff8000298aa0 sleepq_timedwait() at sleepq_timedwait+0x4d/frame 0xffffff8000298ad0 _sleep() at _sleep+0x29a/frame 0xffffff8000298b60 random_kthread() at random_kthread+0x1ad/frame 0xffffff8000298ba0 fork_exit() at fork_exit+0x139/frame 0xffffff8000298bf0 fork_trampoline() at fork_trampoline+0xe/frame 0xffffff8000298bf0 --- trap 0, rip = 0, rsp = 0xffffff8000298cb0, rbp = 0 --- Tracing command geom pid 13 tid 100015 td 0xfffffe0002936000 sched_switch() at sched_switch+0x1b4/frame 0xffffff800028e9f0 mi_switch() at mi_switch+0x238/frame 0xffffff800028ea40 sleepq_switch() at sleepq_switch+0xfe/frame 0xffffff800028ea80 sleepq_timedwait() at sleepq_timedwait+0x4d/frame 0xffffff800028eab0 _sleep() at _sleep+0x29a/frame 0xffffff800028eb40 g_io_schedule_down() at g_io_schedule_down+0x31c/frame 0xffffff800028eb90 g_down_procbody() at g_down_procbody+0x7c/frame 0xffffff800028eba0 fork_exit() at fork_exit+0x139/frame 0xffffff800028ebf0 fork_trampoline() at fork_trampoline+0xe/frame 0xffffff800028ebf0 --- trap 0, rip = 0, rsp = 0xffffff800028ecb0, rbp = 0 --- Tracing command geom pid 13 tid 100014 td 0xfffffe0002936480 kdb_enter() at kdb_enter+0x3b/frame 0xffffff8000289900 vpanic() at vpanic+0xe1/frame 0xffffff8000289940 panic() at panic+0x67/frame 0xffffff8000289a20 softdep_deallocate_dependencies() at softdep_deallocate_dependencies+0x72/frame 0xffffff8000289a40 brelse() at brelse+0x6d/frame 0xffffff8000289ac0 bufdone() at bufdone+0x78/frame 0xffffff8000289ae0 cluster_callback() at cluster_callback+0x4d/frame 0xffffff8000289b10 bufdone() at bufdone+0x44/frame 0xffffff8000289b30 biodone() at biodone+0x8c/frame 0xffffff8000289b70 g_io_schedule_up() at g_io_schedule_up+0xed/frame 0xffffff8000289b90 g_up_procbody() at g_up_procbody+0x7c/frame 0xffffff8000289ba0 fork_exit() at fork_exit+0x139/frame 0xffffff8000289bf0 fork_trampoline() at fork_trampoline+0xe/frame 0xffffff8000289bf0 --- trap 0, rip = 0, rsp = 0xffffff8000289cb0, rbp = 0 --- Tracing command geom pid 13 tid 100013 td 0xfffffe0002936900 sched_switch() at sched_switch+0x1b4/frame 0xffffff8000284a20 mi_switch() at mi_switch+0x238/frame 0xffffff8000284a70 sleepq_switch() at sleepq_switch+0xfe/frame 0xffffff8000284ab0 sleepq_wait() at sleepq_wait+0x4d/frame 0xffffff8000284ae0 _sleep() at _sleep+0x3e9/frame 0xffffff8000284b70 g_run_events() at g_run_events+0x449/frame 0xffffff8000284ba0 fork_exit() at fork_exit+0x139/frame 0xffffff8000284bf0 fork_trampoline() at fork_trampoline+0xe/frame 0xffffff8000284bf0 --- trap 0, rip = 0, rsp = 0xffffff8000284cb0, rbp = 0 --- Tracing command intr pid 12 tid 100067 td 0xfffffe0002f6d900 sched_switch() at sched_switch+0x1b4/frame 0xffffff8115142b00 mi_switch() at mi_switch+0x238/frame 0xffffff8115142b50 ithread_loop() at ithread_loop+0x273/frame 0xffffff8115142ba0 fork_exit() at fork_exit+0x139/frame 0xffffff8115142bf0 fork_trampoline() at fork_trampoline+0xe/frame 0xffffff8115142bf0 --- trap 0, rip = 0, rsp = 0xffffff8115142cb0, rbp = 0 --- Tracing command intr pid 12 tid 100066 td 0xfffffe0002f6f000 sched_switch() at sched_switch+0x1b4/frame 0xffffff811513db00 mi_switch() at mi_switch+0x238/frame 0xffffff811513db50 ithread_loop() at ithread_loop+0x273/frame 0xffffff811513dba0 fork_exit() at fork_exit+0x139/frame 0xffffff811513dbf0 fork_trampoline() at fork_trampoline+0xe/frame 0xffffff811513dbf0 --- trap 0, rip = 0, rsp = 0xffffff811513dcb0, rbp = 0 --- Tracing command intr pid 12 tid 100064 td 0xfffffe0002f6f900 sched_switch() at sched_switch+0x1b4/frame 0xffffff8115129b00 mi_switch() at mi_switch+0x238/frame 0xffffff8115129b50 ithread_loop() at ithread_loop+0x273/frame 0xffffff8115129ba0 fork_exit() at fork_exit+0x139/frame 0xffffff8115129bf0 fork_trampoline() at fork_trampoline+0xe/frame 0xffffff8115129bf0 --- trap 0, rip = 0, rsp = 0xffffff8115129cb0, rbp = 0 --- Tracing command intr pid 12 tid 100061 td 0xfffffe0002f70900 sched_switch() at sched_switch+0x1b4/frame 0xffffff8114decb00 mi_switch() at mi_switch+0x238/frame 0xffffff8114decb50 ithread_loop() at ithread_loop+0x273/frame 0xffffff8114decba0 fork_exit() at fork_exit+0x139/frame 0xffffff8114decbf0 fork_trampoline() at fork_trampoline+0xe/frame 0xffffff8114decbf0 --- trap 0, rip = 0, rsp = 0xffffff8114deccb0, rbp = 0 --- Tracing command intr pid 12 tid 100060 td 0xfffffe0002f48480 sched_switch() at sched_switch+0x1b4/frame 0xffffff8114dddb00 mi_switch() at mi_switch+0x238/frame 0xffffff8114dddb50 ithread_loop() at ithread_loop+0x273/frame 0xffffff8114dddba0 fork_exit() at fork_exit+0x139/frame 0xffffff8114dddbf0 fork_trampoline() at fork_trampoline+0xe/frame 0xffffff8114dddbf0 --- trap 0, rip = 0, rsp = 0xffffff8114dddcb0, rbp = 0 --- Tracing command intr pid 12 tid 100055 td 0xfffffe0002f50000 fork_trampoline() at fork_trampoline Tracing command intr pid 12 tid 100042 td 0xfffffe0002f47480 sched_switch() at sched_switch+0x1b4/frame 0xffffff8114b55b00 mi_switch() at mi_switch+0x238/frame 0xffffff8114b55b50 ithread_loop() at ithread_loop+0x273/frame 0xffffff8114b55ba0 fork_exit() at fork_exit+0x139/frame 0xffffff8114b55bf0 fork_trampoline() at fork_trampoline+0xe/frame 0xffffff8114b55bf0 --- trap 0, rip = 0, rsp = 0xffffff8114b55cb0, rbp = 0 --- Tracing command intr pid 12 tid 100037 td 0xfffffe0002e55900 sched_switch() at sched_switch+0x1b4/frame 0xffffff8114af8b00 mi_switch() at mi_switch+0x238/frame 0xffffff8114af8b50 ithread_loop() at ithread_loop+0x273/frame 0xffffff8114af8ba0 fork_exit() at fork_exit+0x139/frame 0xffffff8114af8bf0 fork_trampoline() at fork_trampoline+0xe/frame 0xffffff8114af8bf0 --- trap 0, rip = 0, rsp = 0xffffff8114af8cb0, rbp = 0 --- Tracing command intr pid 12 tid 100032 td 0xfffffe0002e57480 sched_switch() at sched_switch+0x1b4/frame 0xffffff8114a9bb00 mi_switch() at mi_switch+0x238/frame 0xffffff8114a9bb50 ithread_loop() at ithread_loop+0x273/frame 0xffffff8114a9bba0 fork_exit() at fork_exit+0x139/frame 0xffffff8114a9bbf0 fork_trampoline() at fork_trampoline+0xe/frame 0xffffff8114a9bbf0 --- trap 0, rip = 0, rsp = 0xffffff8114a9bcb0, rbp = 0 --- Tracing command intr pid 12 tid 100031 td 0xfffffe0002e57900 sched_switch() at sched_switch+0x1b4/frame 0xffffff80003e6b00 mi_switch() at mi_switch+0x238/frame 0xffffff80003e6b50 ithread_loop() at ithread_loop+0x273/frame 0xffffff80003e6ba0 fork_exit() at fork_exit+0x139/frame 0xffffff80003e6bf0 fork_trampoline() at fork_trampoline+0xe/frame 0xffffff80003e6bf0 --- trap 0, rip = 0, rsp = 0xffffff80003e6cb0, rbp = 0 --- Tracing command intr pid 12 tid 100030 td 0xfffffe000294b480 sched_switch() at sched_switch+0x1b4/frame 0xffffff80003e1b00 mi_switch() at mi_switch+0x238/frame 0xffffff80003e1b50 ithread_loop() at ithread_loop+0x273/frame 0xffffff80003e1ba0 fork_exit() at fork_exit+0x139/frame 0xffffff80003e1bf0 fork_trampoline() at fork_trampoline+0xe/frame 0xffffff80003e1bf0 --- trap 0, rip = 0, rsp = 0xffffff80003e1cb0, rbp = 0 --- Tracing command intr pid 12 tid 100029 td 0xfffffe000294b900 sched_switch() at sched_switch+0x1b4/frame 0xffffff80002d5b00 mi_switch() at mi_switch+0x238/frame 0xffffff80002d5b50 ithread_loop() at ithread_loop+0x273/frame 0xffffff80002d5ba0 fork_exit() at fork_exit+0x139/frame 0xffffff80002d5bf0 fork_trampoline() at fork_trampoline+0xe/frame 0xffffff80002d5bf0 --- trap 0, rip = 0, rsp = 0xffffff80002d5cb0, rbp = 0 --- Tracing command intr pid 12 tid 100027 td 0xfffffe0002ae1480 sched_switch() at sched_switch+0x1b4/frame 0xffffff80002cbb00 mi_switch() at mi_switch+0x238/frame 0xffffff80002cbb50 ithread_loop() at ithread_loop+0x273/frame 0xffffff80002cbba0 fork_exit() at fork_exit+0x139/frame 0xffffff80002cbbf0 fork_trampoline() at fork_trampoline+0xe/frame 0xffffff80002cbbf0 --- trap 0, rip = 0, rsp = 0xffffff80002cbcb0, rbp = 0 --- Tracing command intr pid 12 tid 100026 td 0xfffffe0002ae1900 fork_trampoline() at fork_trampoline Tracing command intr pid 12 tid 100023 td 0xfffffe0002ae2900 fork_trampoline() at fork_trampoline Tracing command intr pid 12 tid 100022 td 0xfffffe0002948000 sched_switch() at sched_switch+0x1b4/frame 0xffffff80002b2b00 mi_switch() at mi_switch+0x238/frame 0xffffff80002b2b50 ithread_loop() at ithread_loop+0x273/frame 0xffffff80002b2ba0 fork_exit() at fork_exit+0x139/frame 0xffffff80002b2bf0 fork_trampoline() at fork_trampoline+0xe/frame 0xffffff80002b2bf0 --- trap 0, rip = 0, rsp = 0xffffff80002b2cb0, rbp = 0 --- Tracing command intr pid 12 tid 100012 td 0xfffffe0002937000 fork_trampoline() at fork_trampoline Tracing command intr pid 12 tid 100011 td 0xfffffe0002937480 sched_switch() at sched_switch+0x1b4/frame 0xffffff800027ab00 mi_switch() at mi_switch+0x238/frame 0xffffff800027ab50 ithread_loop() at ithread_loop+0x273/frame 0xffffff800027aba0 fork_exit() at fork_exit+0x139/frame 0xffffff800027abf0 fork_trampoline() at fork_trampoline+0xe/frame 0xffffff800027abf0 --- trap 0, rip = 0, rsp = 0xffffff800027acb0, rbp = 0 --- Tracing command intr pid 12 tid 100010 td 0xfffffe0002937900 sched_switch() at sched_switch+0x1b4/frame 0xffffff8000275b00 mi_switch() at mi_switch+0x238/frame 0xffffff8000275b50 ithread_loop() at ithread_loop+0x273/frame 0xffffff8000275ba0 fork_exit() at fork_exit+0x139/frame 0xffffff8000275bf0 fork_trampoline() at fork_trampoline+0xe/frame 0xffffff8000275bf0 --- trap 0, rip = 0, rsp = 0xffffff8000275cb0, rbp = 0 --- Tracing command intr pid 12 tid 100009 td 0xfffffe000291e480 sched_switch() at sched_switch+0x1b4/frame 0xffffff8000270b00 mi_switch() at mi_switch+0x238/frame 0xffffff8000270b50 ithread_loop() at ithread_loop+0x273/frame 0xffffff8000270ba0 fork_exit() at fork_exit+0x139/frame 0xffffff8000270bf0 fork_trampoline() at fork_trampoline+0xe/frame 0xffffff8000270bf0 --- trap 0, rip = 0, rsp = 0xffffff8000270cb0, rbp = 0 --- Tracing command intr pid 12 tid 100008 td 0xfffffe000291e900 sched_switch() at sched_switch+0x1b4/frame 0xffffff800026bb00 mi_switch() at mi_switch+0x238/frame 0xffffff800026bb50 ithread_loop() at ithread_loop+0x273/frame 0xffffff800026bba0 fork_exit() at fork_exit+0x139/frame 0xffffff800026bbf0 fork_trampoline() at fork_trampoline+0xe/frame 0xffffff800026bbf0 --- trap 0, rip = 0, rsp = 0xffffff800026bcb0, rbp = 0 --- Tracing command intr pid 12 tid 100007 td 0xfffffe0002928000 sched_switch() at sched_switch+0x1b4/frame 0xffffff8000266b00 mi_switch() at mi_switch+0x238/frame 0xffffff8000266b50 ithread_loop() at ithread_loop+0x273/frame 0xffffff8000266ba0 fork_exit() at fork_exit+0x139/frame 0xffffff8000266bf0 fork_trampoline() at fork_trampoline+0xe/frame 0xffffff8000266bf0 --- trap 0, rip = 0, rsp = 0xffffff8000266cb0, rbp = 0 --- Tracing command idle pid 11 tid 100006 td 0xfffffe0002928480 sched_switch() at sched_switch+0x1b4/frame 0xffffff8000261ac0 mi_switch() at mi_switch+0x238/frame 0xffffff8000261b10 sched_idletd() at sched_idletd+0x345/frame 0xffffff8000261ba0 fork_exit() at fork_exit+0x139/frame 0xffffff8000261bf0 fork_trampoline() at fork_trampoline+0xe/frame 0xffffff8000261bf0 --- trap 0, rip = 0, rsp = 0xffffff8000261cb0, rbp = 0 --- Tracing command idle pid 11 tid 100005 td 0xfffffe0002928900 sched_switch() at sched_switch+0x1b4/frame 0xffffff800025cac0 mi_switch() at mi_switch+0x238/frame 0xffffff800025cb10 sched_idletd() at sched_idletd+0x345/frame 0xffffff800025cba0 fork_exit() at fork_exit+0x139/frame 0xffffff800025cbf0 fork_trampoline() at fork_trampoline+0xe/frame 0xffffff800025cbf0 --- trap 0, rip = 0, rsp = 0xffffff800025ccb0, rbp = 0 --- Tracing command idle pid 11 tid 100004 td 0xfffffe000291d000 sched_switch() at sched_switch+0x1b4/frame 0xffffff8000257aa0 mi_switch() at mi_switch+0x238/frame 0xffffff8000257af0 critical_exit() at critical_exit+0xb0/frame 0xffffff8000257b10 sched_idletd() at sched_idletd+0x186/frame 0xffffff8000257ba0 fork_exit() at fork_exit+0x139/frame 0xffffff8000257bf0 fork_trampoline() at fork_trampoline+0xe/frame 0xffffff8000257bf0 --- trap 0, rip = 0, rsp = 0xffffff8000257cb0, rbp = 0 --- Tracing command idle pid 11 tid 100003 td 0xfffffe000291d480 sched_switch() at sched_switch+0x1b4/frame 0xffffff8000252ac0 mi_switch() at mi_switch+0x238/frame 0xffffff8000252b10 sched_idletd() at sched_idletd+0x345/frame 0xffffff8000252ba0 fork_exit() at fork_exit+0x139/frame 0xffffff8000252bf0 fork_trampoline() at fork_trampoline+0xe/frame 0xffffff8000252bf0 --- trap 0, rip = 0, rsp = 0xffffff8000252cb0, rbp = 0 --- Tracing command init pid 1 tid 100002 td 0xfffffe000291d900 sched_switch() at sched_switch+0x1b4/frame 0xffffff800024d650 mi_switch() at mi_switch+0x238/frame 0xffffff800024d6a0 sleepq_switch() at sleepq_switch+0xfe/frame 0xffffff800024d6e0 sleepq_catch_signals() at sleepq_catch_signals+0x2c6/frame 0xffffff800024d740 sleepq_wait_sig() at sleepq_wait_sig+0x16/frame 0xffffff800024d760 _sleep() at _sleep+0x37d/frame 0xffffff800024d7f0 kern_wait6() at kern_wait6+0x5b3/frame 0xffffff800024d890 kern_wait() at kern_wait+0x12d/frame 0xffffff800024da10 sys_wait4() at sys_wait4+0x35/frame 0xffffff800024dad0 amd64_syscall() at amd64_syscall+0x2d3/frame 0xffffff800024dbf0 Xfast_syscall() at Xfast_syscall+0xf7/frame 0xffffff800024dbf0 --- syscall (7, FreeBSD ELF64, sys_wait4), rip = 0x41241a, rsp = 0x7fffffffd798, rbp = 0x91 --- Tracing command audit pid 10 tid 100001 td 0xfffffe000291e000 sched_switch() at sched_switch+0x1b4/frame 0xffffff8000248a00 mi_switch() at mi_switch+0x238/frame 0xffffff8000248a50 sleepq_switch() at sleepq_switch+0xfe/frame 0xffffff8000248a90 sleepq_wait() at sleepq_wait+0x4d/frame 0xffffff8000248ac0 _cv_wait() at _cv_wait+0x17d/frame 0xffffff8000248b20 audit_worker() at audit_worker+0x77/frame 0xffffff8000248ba0 fork_exit() at fork_exit+0x139/frame 0xffffff8000248bf0 fork_trampoline() at fork_trampoline+0xe/frame 0xffffff8000248bf0 --- trap 0, rip = 0, rsp = 0xffffff8000248cb0, rbp = 0 --- Tracing command kernel pid 0 tid 100069 td 0xfffffe0002f6d000 sched_switch() at sched_switch+0x1b4/frame 0xffffff8115150a10 mi_switch() at mi_switch+0x238/frame 0xffffff8115150a60 sleepq_switch() at sleepq_switch+0xfe/frame 0xffffff8115150aa0 sleepq_timedwait() at sleepq_timedwait+0x4d/frame 0xffffff8115150ad0 _sleep() at _sleep+0x29a/frame 0xffffff8115150b60 deadlkres() at deadlkres+0x2b7/frame 0xffffff8115150ba0 fork_exit() at fork_exit+0x139/frame 0xffffff8115150bf0 fork_trampoline() at fork_trampoline+0xe/frame 0xffffff8115150bf0 --- trap 0, rip = 0, rsp = 0xffffff8115150cb0, rbp = 0 --- Tracing command kernel pid 0 tid 100068 td 0xfffffe0002f6d480 sched_switch() at sched_switch+0x1b4/frame 0xffffff811514ba40 mi_switch() at mi_switch+0x238/frame 0xffffff811514ba90 sleepq_switch() at sleepq_switch+0xfe/frame 0xffffff811514bad0 sleepq_wait() at sleepq_wait+0x4d/frame 0xffffff811514bb00 msleep_spin() at msleep_spin+0x22d/frame 0xffffff811514bb70 taskqueue_thread_loop() at taskqueue_thread_loop+0x6f/frame 0xffffff811514bba0 fork_exit() at fork_exit+0x139/frame 0xffffff811514bbf0 fork_trampoline() at fork_trampoline+0xe/frame 0xffffff811514bbf0 --- trap 0, rip = 0, rsp = 0xffffff811514bcb0, rbp = 0 --- Tracing command kernel pid 0 tid 100062 td 0xfffffe0002f70480 sched_switch() at sched_switch+0x1b4/frame 0xffffff811505ba40 mi_switch() at mi_switch+0x238/frame 0xffffff811505ba90 sleepq_switch() at sleepq_switch+0xfe/frame 0xffffff811505bad0 sleepq_wait() at sleepq_wait+0x4d/frame 0xffffff811505bb00 msleep_spin() at msleep_spin+0x22d/frame 0xffffff811505bb70 taskqueue_thread_loop() at taskqueue_thread_loop+0x6f/frame 0xffffff811505bba0 fork_exit() at fork_exit+0x139/frame 0xffffff811505bbf0 fork_trampoline() at fork_trampoline+0xe/frame 0xffffff811505bbf0 --- trap 0, rip = 0, rsp = 0xffffff811505bcb0, rbp = 0 --- Tracing command kernel pid 0 tid 100025 td 0xfffffe0002ae2000 sched_switch() at sched_switch+0x1b4/frame 0xffffff80002c1a20 mi_switch() at mi_switch+0x238/frame 0xffffff80002c1a70 sleepq_switch() at sleepq_switch+0xfe/frame 0xffffff80002c1ab0 sleepq_wait() at sleepq_wait+0x4d/frame 0xffffff80002c1ae0 _sleep() at _sleep+0x3e9/frame 0xffffff80002c1b70 taskqueue_thread_loop() at taskqueue_thread_loop+0xc7/frame 0xffffff80002c1ba0 fork_exit() at fork_exit+0x139/frame 0xffffff80002c1bf0 fork_trampoline() at fork_trampoline+0xe/frame 0xffffff80002c1bf0 --- trap 0, rip = 0, rsp = 0xffffff80002c1cb0, rbp = 0 --- Tracing command kernel pid 0 tid 100024 td 0xfffffe0002ae2480 sched_switch() at sched_switch+0x1b4/frame 0xffffff80002bca20 mi_switch() at mi_switch+0x238/frame 0xffffff80002bca70 sleepq_switch() at sleepq_switch+0xfe/frame 0xffffff80002bcab0 sleepq_wait() at sleepq_wait+0x4d/frame 0xffffff80002bcae0 _sleep() at _sleep+0x3e9/frame 0xffffff80002bcb70 taskqueue_thread_loop() at taskqueue_thread_loop+0xc7/frame 0xffffff80002bcba0 fork_exit() at fork_exit+0x139/frame 0xffffff80002bcbf0 fork_trampoline() at fork_trampoline+0xe/frame 0xffffff80002bcbf0 --- trap 0, rip = 0, rsp = 0xffffff80002bccb0, rbp = 0 --- Tracing command kernel pid 0 tid 100021 td 0xfffffe0002948480 sched_switch() at sched_switch+0x1b4/frame 0xffffff80002ada40 mi_switch() at mi_switch+0x238/frame 0xffffff80002ada90 sleepq_switch() at sleepq_switch+0xfe/frame 0xffffff80002adad0 sleepq_wait() at sleepq_wait+0x4d/frame 0xffffff80002adb00 msleep_spin() at msleep_spin+0x22d/frame 0xffffff80002adb70 taskqueue_thread_loop() at taskqueue_thread_loop+0x6f/frame 0xffffff80002adba0 fork_exit() at fork_exit+0x139/frame 0xffffff80002adbf0 fork_trampoline() at fork_trampoline+0xe/frame 0xffffff80002adbf0 --- trap 0, rip = 0, rsp = 0xffffff80002adcb0, rbp = 0 --- Tracing command kernel pid 0 tid 100020 td 0xfffffe0002948900 sched_switch() at sched_switch+0x1b4/frame 0xffffff80002a8a40 mi_switch() at mi_switch+0x238/frame 0xffffff80002a8a90 sleepq_switch() at sleepq_switch+0xfe/frame 0xffffff80002a8ad0 sleepq_wait() at sleepq_wait+0x4d/frame 0xffffff80002a8b00 msleep_spin() at msleep_spin+0x22d/frame 0xffffff80002a8b70 taskqueue_thread_loop() at taskqueue_thread_loop+0x6f/frame 0xffffff80002a8ba0 fork_exit() at fork_exit+0x139/frame 0xffffff80002a8bf0 fork_trampoline() at fork_trampoline+0xe/frame 0xffffff80002a8bf0 --- trap 0, rip = 0, rsp = 0xffffff80002a8cb0, rbp = 0 --- Tracing command kernel pid 0 tid 100019 td 0xfffffe0002949000 sched_switch() at sched_switch+0x1b4/frame 0xffffff80002a3a40 mi_switch() at mi_switch+0x238/frame 0xffffff80002a3a90 sleepq_switch() at sleepq_switch+0xfe/frame 0xffffff80002a3ad0 sleepq_wait() at sleepq_wait+0x4d/frame 0xffffff80002a3b00 msleep_spin() at msleep_spin+0x22d/frame 0xffffff80002a3b70 taskqueue_thread_loop() at taskqueue_thread_loop+0x6f/frame 0xffffff80002a3ba0 fork_exit() at fork_exit+0x139/frame 0xffffff80002a3bf0 fork_trampoline() at fork_trampoline+0xe/frame 0xffffff80002a3bf0 --- trap 0, rip = 0, rsp = 0xffffff80002a3cb0, rbp = 0 --- Tracing command kernel pid 0 tid 100018 td 0xfffffe0002949480 sched_switch() at sched_switch+0x1b4/frame 0xffffff800029ea20 mi_switch() at mi_switch+0x238/frame 0xffffff800029ea70 sleepq_switch() at sleepq_switch+0xfe/frame 0xffffff800029eab0 sleepq_wait() at sleepq_wait+0x4d/frame 0xffffff800029eae0 _sleep() at _sleep+0x3e9/frame 0xffffff800029eb70 taskqueue_thread_loop() at taskqueue_thread_loop+0xc7/frame 0xffffff800029eba0 fork_exit() at fork_exit+0x139/frame 0xffffff800029ebf0 fork_trampoline() at fork_trampoline+0xe/frame 0xffffff800029ebf0 --- trap 0, rip = 0, rsp = 0xffffff800029ecb0, rbp = 0 --- Tracing command kernel pid 0 tid 100016 td 0xfffffe000294b000 sched_switch() at sched_switch+0x1b4/frame 0xffffff8000293a20 mi_switch() at mi_switch+0x238/frame 0xffffff8000293a70 sleepq_switch() at sleepq_switch+0xfe/frame 0xffffff8000293ab0 sleepq_wait() at sleepq_wait+0x4d/frame 0xffffff8000293ae0 _sleep() at _sleep+0x3e9/frame 0xffffff8000293b70 taskqueue_thread_loop() at taskqueue_thread_loop+0xc7/frame 0xffffff8000293ba0 fork_exit() at fork_exit+0x139/frame 0xffffff8000293bf0 fork_trampoline() at fork_trampoline+0xe/frame 0xffffff8000293bf0 --- trap 0, rip = 0, rsp = 0xffffff8000293cb0, rbp = 0 --- Tracing command kernel pid 0 tid 100000 td 0xffffffff813615d0 sched_switch() at sched_switch+0x1b4/frame 0xffffffff818fbb00 mi_switch() at mi_switch+0x238/frame 0xffffffff818fbb50 sleepq_switch() at sleepq_switch+0xfe/frame 0xffffffff818fbb90 sleepq_timedwait() at sleepq_timedwait+0x4d/frame 0xffffffff818fbbc0 _sleep() at _sleep+0x29a/frame 0xffffffff818fbc50 scheduler() at scheduler+0x2b0/frame 0xffffffff818fbc90 mi_startup() at mi_startup+0x77/frame 0xffffffff818fbcb0 btext() at btext+0x2c db:0:allt> call doadump Dumping 370 out of 3944 MB:..5%..13%..22%..31%..44%..52%..61%..74%..83%..91% Dump complete = 0 db:0:doadump> reset cpu_reset: Restarting BSP cpu_reset_proxy: Stopped CPU 1 (kgdb) bt #0 doadump (textdump=0x291c000) at ../../../kern/kern_shutdown.c:263 #1 0xffffffff8034254c in db_fncall (dummy1=, dummy2=, dummy3=, dummy4=) at ../../../ddb/db_command.c:578 #2 0xffffffff803427fd in db_command (last_cmdp=0xffffffff813248e0, cmd_table=, dopager=0x0) at ../../../ddb/db_command.c:449 #3 0xffffffff80347393 in db_script_exec (scriptname=0xffffffff81325180 "doadump", warnifnotfound=0x1) at ../../../ddb/db_script.c:302 #4 0xffffffff80342881 in db_command (last_cmdp=0xffffffff813248e0, cmd_table=, dopager=0x1) at ../../../ddb/db_command.c:449 #5 0xffffffff80342ad0 in db_command_loop () at ../../../ddb/db_command.c:502 #6 0xffffffff80344c49 in db_trap (type=, code=) at ../../../ddb/db_main.c:231 #7 0xffffffff80928b38 in kdb_trap (type=0x3, code=0x0, tf=0xffffff8000289830) at ../../../kern/subr_kdb.c:654 #8 0xffffffff80c913fd in trap (frame=0xffffff8000289830) at ../../../amd64/amd64/trap.c:579 #9 0xffffffff80c7a173 in calltrap () at ../../../amd64/amd64/exception.S:228 #10 0xffffffff809285bb in kdb_enter (why=0xffffffff80ef9a1e "panic", msg=0x80
) at cpufunc.h:63 #11 0xffffffff808eed51 in vpanic (fmt=, ap=) at ../../../kern/kern_shutdown.c:746 #12 0xffffffff808eee57 in panic (fmt=) at ../../../kern/kern_shutdown.c:682 #13 0xffffffff80b2f482 in softdep_deallocate_dependencies (bp=) at ../../../ufs/ffs/ffs_softdep.c:13533 #14 0xffffffff80978ebd in brelse (bp=0xffffff80efae0468) at buf.h:430 #15 0xffffffff8097b9c8 in bufdone (bp=0xffffff80efae0468) at ../../../kern/vfs_bio.c:3497 #16 0xffffffff8098003d in cluster_callback (bp=0xffffff80eeff1468) at ../../../kern/vfs_cluster.c:549 #17 0xffffffff8097b994 in bufdone (bp=0xffffff80eeff1468) at ../../../kern/vfs_bio.c:3491 #18 0xffffffff8097668c in biodone (bp=0xfffffe005bde9318) at ../../../kern/vfs_bio.c:3326 #19 0xffffffff8085166d in g_io_schedule_up (tp=) at ../../../geom/geom_io.c:771 #20 0xffffffff80851fdc in g_up_procbody (arg=) at ../../../geom/geom_kern.c:97 #21 0xffffffff808bdc99 in fork_exit (callout=0xffffffff80851f60 , arg=0x0, frame=0xffffff8000289c00) at ../../../kern/kern_fork.c:991 #22 0xffffffff80c7a69e in fork_trampoline () at ../../../amd64/amd64/exception.S:602 #23 0x0000000000000000 in ?? () (kgdb) f 13 #13 0xffffffff80b2f482 in softdep_deallocate_dependencies (bp=) at ../../../ufs/ffs/ffs_softdep.c:13533 13533 panic("softdep_deallocate_dependencies: unrecovered I/O error"); (kgdb) l 13528 softdep_error(bp->b_vp->v_mount->mnt_stat.f_mntonname, bp->b_error); 13529 else 13530 printf("softdep_deallocate_dependencies: " 13531 "got error %d while accessing filesystem\n", bp->b_error); 13532 if (bp->b_error != ENXIO) 13533 panic("softdep_deallocate_dependencies: unrecovered I/O error"); 13534 } 13535 13536 /* 13537 * Function to handle asynchronous write errors in the filesystem. (kgdb) f 14 #14 0xffffffff80978ebd in brelse (bp=0xffffff80efae0468) at buf.h:430 430 (*bioops.io_deallocate)(bp); (kgdb) p *bp $1 = {b_bufobj = 0xfffffe005b3176c0, b_bcount = 0x4000, b_caller1 = 0x0, b_data = 0xffffff800020e000
, b_error = 0xb, b_iocmd = 0x2, b_ioflags = 0x1, b_iooffset = 0x4369c000, b_resid = 0x0, b_iodone = 0, b_blkno = 0x106100, b_offset = 0x524000, b_bobufs = {tqe_next = 0xffffff80ef693768, tqe_prev = 0xffffff80ef5fc8b8}, b_left = 0x0, b_right = 0x0, b_vflags = 0x0, b_freelist = {tqe_next = 0xffffff80ef693768, tqe_prev = 0xffffff80ef5fc8e0}, b_qindex = 0x2, b_flags = 0xa0022824, b_xflags = 0x2, b_lock = {lock_object = {lo_name = 0xffffffff80f0838d "bufwait", lo_flags = 0x5730000, lo_data = 0x0, lo_witness = 0xffffff80006cd380}, lk_lock = 0xfffffffffffffff0, lk_exslpfail = 0x0, lk_timo = 0x0, lk_pri = 0x60, lk_stack = {depth = 0x11, pcs = {0xffffffff808d1e00, 0xffffffff8097fc84, 0xffffffff80980bd7, 0xffffffff80b4542e, 0xffffffff80d23544, 0xffffffff80b80c69, 0xffffffff80d1ed06, 0xffffffff80b802cb, 0xffffffff80b79113, 0xffffffff80b71724, 0xffffffff80b718d3, 0xffffffff80997ca1, 0xffffffff80997e46, 0xffffffff80d20856, 0xffffffff809988a2, 0xffffffff808bdc99, 0xffffffff80c7a69e, 0x0}}}, b_bufsize = 0x4000, b_runningbufspace = 0x0, b_kvabase = 0xffffff800020e000
, b_kvaalloc = 0x0, b_kvasize = 0x4000, b_lblkno = 0x149, b_vp = 0xfffffe005b317510, b_dirtyoff = 0x0, b_dirtyend = 0x4000, b_rcred = 0x0, b_wcred = 0x0, b_saveaddr = 0x0, b_pager = {pg_reqpage = 0x0}, b_cluster = {cluster_head = {tqh_first = 0xffffff80ef693768, tqh_last = 0xffffff80eeff1628}, cluster_entry = {tqe_next = 0xffffff80ef693768, tqe_prev = 0xffffff80eeff1628}}, b_pages = {0xfffffe00d4bb9c90, 0xfffffe00d4bb9d08, 0xfffffe00d4bb9d80, 0xfffffe00d4bb9df8, 0x0 }, b_npages = 0x4, b_dep = {lh_first = 0xfffffe00210e5c00}, b_fsprivate1 = 0x0, b_fsprivate2 = 0x0, b_fsprivate3 = 0x0, b_pin_count = 0x0} (kgdb) git diff master diff --git a/sys/amd64/amd64/pmap.c b/sys/amd64/amd64/pmap.c index 8e06ff9..e432d84 100644 --- a/sys/amd64/amd64/pmap.c +++ b/sys/amd64/amd64/pmap.c @@ -4216,6 +4216,30 @@ pmap_copy_page(vm_page_t msrc, vm_page_t mdst) pagecopy((void *)src, (void *)dst); } +void +pmap_copy_pages(vm_page_t ma[], vm_offset_t a_offset, vm_page_t mb[], + vm_offset_t b_offset, int xfersize) +{ + void *a_cp, *b_cp; + vm_offset_t a_pg_offset, b_pg_offset; + int cnt; + + while (xfersize > 0) { + a_pg_offset = a_offset & PAGE_MASK; + cnt = min(xfersize, PAGE_SIZE - a_pg_offset); + a_cp = (char *)PHYS_TO_DMAP(ma[a_offset >> PAGE_SHIFT]-> + phys_addr) + a_pg_offset; + b_pg_offset = b_offset & PAGE_MASK; + cnt = min(cnt, PAGE_SIZE - b_pg_offset); + b_cp = (char *)PHYS_TO_DMAP(mb[b_offset >> PAGE_SHIFT]-> + phys_addr) + b_pg_offset; + bcopy(a_cp, b_cp, cnt); + a_offset += cnt; + b_offset += cnt; + xfersize -= cnt; + } +} + /* * Returns true if the pmap's pv is one of the first * 16 pvs linked to from this page. This count may diff --git a/sys/cam/ata/ata_da.c b/sys/cam/ata/ata_da.c index 4252197..eef0a43 100644 --- a/sys/cam/ata/ata_da.c +++ b/sys/cam/ata/ata_da.c @@ -1167,6 +1167,7 @@ adaregister(struct cam_periph *periph, void *arg) ((softc->flags & ADA_FLAG_CAN_CFA) && !(softc->flags & ADA_FLAG_CAN_48BIT))) softc->disk->d_flags |= DISKFLAG_CANDELETE; + softc->disk->d_flags |= DISKFLAG_NOTMAPPED_BIO; strlcpy(softc->disk->d_descr, cgd->ident_data.model, MIN(sizeof(softc->disk->d_descr), sizeof(cgd->ident_data.model))); strlcpy(softc->disk->d_ident, cgd->ident_data.serial, @@ -1431,14 +1432,16 @@ adastart(struct cam_periph *periph, union ccb *start_ccb) return; } #endif - cam_fill_ataio(ataio, + cam_fill_ataio_U(ataio, ada_retry_count, adadone, bp->bio_cmd == BIO_READ ? CAM_DIR_IN : CAM_DIR_OUT, tag_code, bp->bio_data, + (bp->bio_flags & BIO_NOTMAPPED) ? bp->bio_ma : NULL, bp->bio_bcount, + bp->bio_ma_offset, ada_default_timeout*1000); if ((softc->flags & ADA_FLAG_CAN_NCQ) && tag_code) { diff --git a/sys/cam/cam_ccb.h b/sys/cam/cam_ccb.h index 1f12d91..6b9ca9f 100644 --- a/sys/cam/cam_ccb.h +++ b/sys/cam/cam_ccb.h @@ -42,6 +42,7 @@ #include #include +struct vm_page; /* General allocation length definitions for CCB structures */ #define IOCDBLEN CAM_MAX_CDBLEN /* Space for CDB bytes/pointer */ @@ -713,7 +714,9 @@ struct ccb_ataio { struct ata_cmd cmd; /* ATA command register set */ struct ata_res res; /* ATA result register set */ u_int8_t *data_ptr; /* Ptr to the data buf/SG list */ + struct vm_page **ma; u_int32_t dxfer_len; /* Data transfer length */ + int ma_offset; u_int32_t resid; /* Transfer residual length: 2's comp */ u_int8_t tag_action; /* What to do for tag queueing */ /* @@ -1201,6 +1204,13 @@ cam_fill_ataio(struct ccb_ataio *ataio, u_int32_t retries, u_int32_t timeout); static __inline void +cam_fill_ataio_U(struct ccb_ataio *ataio, u_int32_t retries, + void (*cbfcnp)(struct cam_periph *, union ccb *), + u_int32_t flags, u_int tag_action, + u_int8_t *data_ptr, struct vm_page **ma, u_int32_t dxfer_len, + int ma_offset, u_int32_t timeout); + +static __inline void cam_fill_smpio(struct ccb_smpio *smpio, uint32_t retries, void (*cbfcnp)(struct cam_periph *, union ccb *), uint32_t flags, uint8_t *smp_request, int smp_request_len, @@ -1248,6 +1258,25 @@ cam_fill_ctio(struct ccb_scsiio *csio, u_int32_t retries, } static __inline void +cam_fill_ataio_U(struct ccb_ataio *ataio, u_int32_t retries, + void (*cbfcnp)(struct cam_periph *, union ccb *), + u_int32_t flags, u_int tag_action, + u_int8_t *data_ptr, struct vm_page **ma, u_int32_t dxfer_len, + int ma_offset, u_int32_t timeout) +{ + ataio->ccb_h.func_code = XPT_ATA_IO; + ataio->ccb_h.flags = flags; + ataio->ccb_h.retry_count = retries; + ataio->ccb_h.cbfcnp = cbfcnp; + ataio->ccb_h.timeout = timeout; + ataio->data_ptr = data_ptr; + ataio->ma = ma; + ataio->ma_offset = ma_offset; + ataio->dxfer_len = dxfer_len; + ataio->tag_action = tag_action; +} + +static __inline void cam_fill_ataio(struct ccb_ataio *ataio, u_int32_t retries, void (*cbfcnp)(struct cam_periph *, union ccb *), u_int32_t flags, u_int tag_action, @@ -1260,6 +1289,7 @@ cam_fill_ataio(struct ccb_ataio *ataio, u_int32_t retries, ataio->ccb_h.cbfcnp = cbfcnp; ataio->ccb_h.timeout = timeout; ataio->data_ptr = data_ptr; + ataio->ma = NULL; ataio->dxfer_len = dxfer_len; ataio->tag_action = tag_action; } diff --git a/sys/dev/ahci/ahci.c b/sys/dev/ahci/ahci.c index 43ec254..787f0f4 100644 --- a/sys/dev/ahci/ahci.c +++ b/sys/dev/ahci/ahci.c @@ -37,6 +37,7 @@ __FBSDID("$FreeBSD$"); #include #include #include +#include #include #include #include @@ -51,6 +52,14 @@ __FBSDID("$FreeBSD$"); #include #include +#include +#include + +static int ahci_unmapped; +SYSCTL_INT(_debug, OID_AUTO, ahci_unmapped, CTLFLAG_RD, + &ahci_unmapped, 0, + ""); + /* local prototypes */ static int ahci_setup_interrupt(device_t dev); static void ahci_intr(void *data); @@ -95,6 +104,10 @@ static void ahci_process_request_sense(device_t dev, union ccb *ccb); static void ahciaction(struct cam_sim *sim, union ccb *ccb); static void ahcipoll(struct cam_sim *sim); +struct vm_page; +static void ahci_unmappedprd(struct ahci_slot *slot, struct vm_page **ma, + int ma_offset, bus_size_t size); + static MALLOC_DEFINE(M_AHCI, "AHCI driver", "AHCI driver data buffers"); static struct { @@ -1675,12 +1688,19 @@ ahci_begin_transaction(device_t dev, union ccb *ccb) /* If request moves data, setup and load SG list */ if ((ccb->ccb_h.flags & CAM_DIR_MASK) != CAM_DIR_NONE) { void *buf; + struct vm_page **ma; bus_size_t size; slot->state = AHCI_SLOT_LOADING; if (ccb->ccb_h.func_code == XPT_ATA_IO) { - buf = ccb->ataio.data_ptr; + ma = ccb->ataio.ma; size = ccb->ataio.dxfer_len; + if (ma != NULL) { + ahci_unmappedprd(slot, ma, ccb->ataio.ma_offset, + size); + return; + } + buf = ccb->ataio.data_ptr; } else { buf = ccb->csio.data_ptr; size = ccb->csio.dxfer_len; @@ -1691,6 +1711,37 @@ ahci_begin_transaction(device_t dev, union ccb *ccb) ahci_execute_transaction(slot); } +static void +ahci_unmappedprd(struct ahci_slot *slot, struct vm_page **ma, int ma_offset, + bus_size_t size) +{ + struct ahci_channel *ch = device_get_softc(slot->dev); + struct ahci_cmd_tab *ctp; + struct ahci_dma_prd *prd; + bus_size_t left, c; + int i, npages; + + npages = (ma_offset + size + PAGE_SIZE - 1) / PAGE_SIZE; + KASSERT(npages <= AHCI_SG_ENTRIES, ("too many DMA segment entries")); + ctp = (struct ahci_cmd_tab *) + (ch->dma.work + AHCI_CT_OFFSET + (AHCI_CT_SIZE * slot->slot)); + prd = &ctp->prd_tab[0]; + for (i = 0, left = size; i < npages; i++, left -= PAGE_SIZE) { + prd[i].dba = htole64(VM_PAGE_TO_PHYS(ma[i]) + ma_offset); + c = min(PAGE_SIZE - ma_offset, left); + ma_offset = 0; + prd[i].dbc = htole32((c - 1) & AHCI_PRD_MASK); + } + slot->dma.nsegs = npages; +#if 0 + bus_dmamap_sync(ch->dma.data_tag, slot->dma.data_map, + ((slot->ccb->ccb_h.flags & CAM_DIR_IN) ? + BUS_DMASYNC_PREREAD : BUS_DMASYNC_PREWRITE)); +#endif + atomic_add_int(&ahci_unmapped, 1); + ahci_execute_transaction(slot); +} + /* Locked by busdma engine. */ static void ahci_dmasetprd(void *arg, bus_dma_segment_t *segs, int nsegs, int error) diff --git a/sys/dev/md/md.c b/sys/dev/md/md.c index b72f294..9918564 100644 --- a/sys/dev/md/md.c +++ b/sys/dev/md/md.c @@ -110,6 +110,19 @@ static int md_malloc_wait; SYSCTL_INT(_vm, OID_AUTO, md_malloc_wait, CTLFLAG_RW, &md_malloc_wait, 0, "Allow malloc to wait for memory allocations"); +static int md_unmapped_swap; +SYSCTL_INT(_debug, OID_AUTO, md_unmapped_swap, CTLFLAG_RD, + &md_unmapped_swap, 0, + ""); +static int md_unmapped_vnode; +SYSCTL_INT(_debug, OID_AUTO, md_unmapped_vnode, CTLFLAG_RD, + &md_unmapped_vnode, 0, + ""); +static int md_unmapped_malloc; +SYSCTL_INT(_debug, OID_AUTO, md_unmapped_malloc, CTLFLAG_RD, + &md_unmapped_malloc, 0, + ""); + #if defined(MD_ROOT) && !defined(MD_ROOT_FSTYPE) #define MD_ROOT_FSTYPE "ufs" #endif @@ -414,13 +427,103 @@ g_md_start(struct bio *bp) wakeup(sc); } +#define MD_MALLOC_MOVE_ZERO 1 +#define MD_MALLOC_MOVE_FILL 2 +#define MD_MALLOC_MOVE_READ 3 +#define MD_MALLOC_MOVE_WRITE 4 +#define MD_MALLOC_MOVE_CMP 5 + +static int +md_malloc_move(vm_page_t **mp, vm_offset_t *ma_offs, unsigned sectorsize, + void *ptr, u_char fill, int op) +{ + struct sf_buf *sf; + vm_page_t m, *mp1; + char *p, first; + vm_offset_t ma_offs1; + off_t *uc; + unsigned n; + int error, i, sz, first_read; + + m = NULL; + error = 0; + sf = NULL; + /* if (op == MD_MALLOC_MOVE_CMP) { gcc */ + first = 0; + first_read = 0; + uc = ptr; + mp1 = *mp; + ma_offs1 = *ma_offs; + /* } */ + sched_pin(); + for (n = sectorsize; n != 0; n -= sz) { + sz = imin(PAGE_SIZE - *ma_offs, n); + if (m != **mp) { + if (sf != NULL) + sf_buf_free(sf); + m = **mp; + sf = sf_buf_alloc(m, SFB_CPUPRIVATE | + (md_malloc_wait ? 0 : SFB_NOWAIT)); + if (sf == NULL) { + error = ENOMEM; + break; + } + } + p = (char *)sf_buf_kva(sf) + *ma_offs; + switch (op) { + case MD_MALLOC_MOVE_ZERO: + bzero(p, sz); + break; + case MD_MALLOC_MOVE_FILL: + memset(p, fill, sz); + break; + case MD_MALLOC_MOVE_READ: + bcopy(ptr, p, sz); + cpu_flush_dcache(p, sz); + break; + case MD_MALLOC_MOVE_WRITE: + bcopy(p, ptr, sz); + break; + case MD_MALLOC_MOVE_CMP: + for (i = 0; i < sz; i++, p++) { + if (!first_read) { + *uc = *p; + first = *p; + first_read = 1; + } else if (*p != first) { + error = EDOOFUS; + break; + } + } + break; + } + if (error != 0) + break; + *ma_offs += sz; + *ma_offs %= PAGE_SIZE; + if (*ma_offs == 0) + (*mp)++; + } + + if (sf != NULL) + sf_buf_free(sf); + sched_unpin(); + if (op == MD_MALLOC_MOVE_CMP) { + *mp = mp1; + *ma_offs = ma_offs1; + } + return (error); +} + static int mdstart_malloc(struct md_s *sc, struct bio *bp) { - int i, error; u_char *dst; + vm_page_t *m; + int i, error, error1, notmapped; off_t secno, nsec, uc; uintptr_t sp, osp; + vm_offset_t ma_offs; switch (bp->bio_cmd) { case BIO_READ: @@ -431,9 +534,17 @@ mdstart_malloc(struct md_s *sc, struct bio *bp) return (EOPNOTSUPP); } + notmapped = (bp->bio_flags & BIO_NOTMAPPED) != 0; + if (notmapped) { + m = bp->bio_ma; + ma_offs = bp->bio_ma_offset; + dst = NULL; + } else { + dst = bp->bio_data; + } + nsec = bp->bio_length / sc->sectorsize; secno = bp->bio_offset / sc->sectorsize; - dst = bp->bio_data; error = 0; while (nsec--) { osp = s_read(sc->indir, secno); @@ -441,21 +552,45 @@ mdstart_malloc(struct md_s *sc, struct bio *bp) if (osp != 0) error = s_write(sc->indir, secno, 0); } else if (bp->bio_cmd == BIO_READ) { - if (osp == 0) - bzero(dst, sc->sectorsize); - else if (osp <= 255) - memset(dst, osp, sc->sectorsize); - else { - bcopy((void *)osp, dst, sc->sectorsize); - cpu_flush_dcache(dst, sc->sectorsize); + if (osp == 0) { + if (notmapped) { + error = md_malloc_move(&m, &ma_offs, + sc->sectorsize, NULL, 0, + MD_MALLOC_MOVE_ZERO); + } else + bzero(dst, sc->sectorsize); + } else if (osp <= 255) { + if (notmapped) { + error = md_malloc_move(&m, &ma_offs, + sc->sectorsize, NULL, osp, + MD_MALLOC_MOVE_FILL); + } else + memset(dst, osp, sc->sectorsize); + } else { + if (notmapped) { + error = md_malloc_move(&m, &ma_offs, + sc->sectorsize, (void *)osp, 0, + MD_MALLOC_MOVE_READ); + } else { + bcopy((void *)osp, dst, sc->sectorsize); + cpu_flush_dcache(dst, sc->sectorsize); + } } osp = 0; } else if (bp->bio_cmd == BIO_WRITE) { if (sc->flags & MD_COMPRESS) { - uc = dst[0]; - for (i = 1; i < sc->sectorsize; i++) - if (dst[i] != uc) - break; + if (notmapped) { + error1 = md_malloc_move(&m, &ma_offs, + sc->sectorsize, &uc, 0, + MD_MALLOC_MOVE_CMP); + i = error1 == 0 ? sc->sectorsize : 0; + } else { + uc = dst[0]; + for (i = 1; i < sc->sectorsize; i++) { + if (dst[i] != uc) + break; + } + } } else { i = 0; uc = 0; @@ -472,10 +607,26 @@ mdstart_malloc(struct md_s *sc, struct bio *bp) error = ENOSPC; break; } - bcopy(dst, (void *)sp, sc->sectorsize); + if (notmapped) { + error = md_malloc_move(&m, + &ma_offs, sc->sectorsize, + (void *)sp, 0, + MD_MALLOC_MOVE_WRITE); + } else { + bcopy(dst, (void *)sp, + sc->sectorsize); + } error = s_write(sc->indir, secno, sp); } else { - bcopy(dst, (void *)osp, sc->sectorsize); + if (notmapped) { + error = md_malloc_move(&m, + &ma_offs, sc->sectorsize, + (void *)osp, 0, + MD_MALLOC_MOVE_WRITE); + } else { + bcopy(dst, (void *)osp, + sc->sectorsize); + } osp = 0; } } @@ -487,7 +638,8 @@ mdstart_malloc(struct md_s *sc, struct bio *bp) if (error != 0) break; secno++; - dst += sc->sectorsize; + if (!notmapped) + dst += sc->sectorsize; } bp->bio_resid = 0; return (error); @@ -628,11 +780,12 @@ mdstart_vnode(struct md_s *sc, struct bio *bp) static int mdstart_swap(struct md_s *sc, struct bio *bp) { - struct sf_buf *sf; - int rv, offs, len, lastend; - vm_pindex_t i, lastp; vm_page_t m; u_char *p; + struct uio uio; + struct iovec iov[1]; + vm_pindex_t i, lastp; + int rv, ma_offs, offs, len, lastend, j; switch (bp->bio_cmd) { case BIO_READ: @@ -644,6 +797,17 @@ mdstart_swap(struct md_s *sc, struct bio *bp) } p = bp->bio_data; + if ((bp->bio_flags & BIO_NOTMAPPED) == 0) { + uio.uio_segflg = UIO_SYSSPACE; + uio.uio_rw = bp->bio_cmd == BIO_READ ? UIO_READ : UIO_WRITE; + uio.uio_td = curthread; + uio.uio_iov = iov; + uio.uio_iovcnt = 1; + ma_offs = 0; + } else { + atomic_add_int(&md_unmapped_swap, 1); + ma_offs = bp->bio_ma_offset; + } /* * offs is the offset at which to start operating on the @@ -659,21 +823,14 @@ mdstart_swap(struct md_s *sc, struct bio *bp) rv = VM_PAGER_OK; VM_OBJECT_LOCK(sc->object); vm_object_pip_add(sc->object, 1); - for (i = bp->bio_offset / PAGE_SIZE; i <= lastp; i++) { + for (i = bp->bio_offset / PAGE_SIZE, j = 0; i <= lastp; i++, j++) { len = ((i == lastp) ? lastend : PAGE_SIZE) - offs; - - m = vm_page_grab(sc->object, i, - VM_ALLOC_NORMAL|VM_ALLOC_RETRY); - VM_OBJECT_UNLOCK(sc->object); - sched_pin(); - sf = sf_buf_alloc(m, SFB_CPUPRIVATE); - VM_OBJECT_LOCK(sc->object); + m = vm_page_grab(sc->object, i, VM_ALLOC_NORMAL | + VM_ALLOC_RETRY); if (bp->bio_cmd == BIO_READ) { if (m->valid != VM_PAGE_BITS_ALL) rv = vm_pager_get_pages(sc->object, &m, 1, 0); if (rv == VM_PAGER_ERROR) { - sf_buf_free(sf); - sched_unpin(); vm_page_wakeup(m); break; } else if (rv == VM_PAGER_FAIL) { @@ -683,40 +840,52 @@ mdstart_swap(struct md_s *sc, struct bio *bp) * valid. Do not set dirty, the page * can be recreated if thrown out. */ - bzero((void *)sf_buf_kva(sf), PAGE_SIZE); + pmap_zero_page(m); m->valid = VM_PAGE_BITS_ALL; } - bcopy((void *)(sf_buf_kva(sf) + offs), p, len); - cpu_flush_dcache(p, len); + if ((bp->bio_flags & BIO_NOTMAPPED) != 0) { + pmap_copy_pages(&m, offs, &bp->bio_ma[j], + ma_offs, len); + } else { + uio.uio_resid = len; + uio.uio_offset = offs; + iov[0].iov_base = p; + iov[0].iov_len = len; + uiomove_fromphys(&m, offs, len, &uio); + cpu_flush_dcache(p, len); + } } else if (bp->bio_cmd == BIO_WRITE) { if (len != PAGE_SIZE && m->valid != VM_PAGE_BITS_ALL) rv = vm_pager_get_pages(sc->object, &m, 1, 0); if (rv == VM_PAGER_ERROR) { - sf_buf_free(sf); - sched_unpin(); vm_page_wakeup(m); break; } - bcopy(p, (void *)(sf_buf_kva(sf) + offs), len); + if ((bp->bio_flags & BIO_NOTMAPPED) != 0) { + pmap_copy_pages(&bp->bio_ma[j], ma_offs, &m, + offs, len); + } else { + uio.uio_resid = len; + uio.uio_offset = offs; + iov[0].iov_base = p; + iov[0].iov_len = len; + uiomove_fromphys(&m, offs, len, &uio); + } m->valid = VM_PAGE_BITS_ALL; } else if (bp->bio_cmd == BIO_DELETE) { if (len != PAGE_SIZE && m->valid != VM_PAGE_BITS_ALL) rv = vm_pager_get_pages(sc->object, &m, 1, 0); if (rv == VM_PAGER_ERROR) { - sf_buf_free(sf); - sched_unpin(); vm_page_wakeup(m); break; } if (len != PAGE_SIZE) { - bzero((void *)(sf_buf_kva(sf) + offs), len); + pmap_zero_page_area(m, offs, len); vm_page_clear_dirty(m, offs, len); m->valid = VM_PAGE_BITS_ALL; } else vm_pager_page_unswapped(m); } - sf_buf_free(sf); - sched_unpin(); vm_page_wakeup(m); vm_page_lock(m); if (bp->bio_cmd == BIO_DELETE && len == PAGE_SIZE) @@ -730,6 +899,7 @@ mdstart_swap(struct md_s *sc, struct bio *bp) /* Actions on further pages start at offset 0 */ p += PAGE_SIZE - offs; offs = 0; + ma_offs = 0; } vm_object_pip_subtract(sc->object, 1); VM_OBJECT_UNLOCK(sc->object); @@ -845,6 +1015,14 @@ mdinit(struct md_s *sc) pp = g_new_providerf(gp, "md%d", sc->unit); pp->mediasize = sc->mediasize; pp->sectorsize = sc->sectorsize; + switch (sc->type) { + case MD_SWAP: + case MD_MALLOC: + pp->flags |= G_PF_ACCEPT_UNMAPPED; + break; + default: + break; + } sc->gp = gp; sc->pp = pp; g_error_provider(pp, 0); diff --git a/sys/fs/cd9660/cd9660_vnops.c b/sys/fs/cd9660/cd9660_vnops.c index 21ee0fc..47d4f75 100644 --- a/sys/fs/cd9660/cd9660_vnops.c +++ b/sys/fs/cd9660/cd9660_vnops.c @@ -329,7 +329,7 @@ cd9660_read(ap) if (lblktosize(imp, rablock) < ip->i_size) error = cluster_read(vp, (off_t)ip->i_size, lbn, size, NOCRED, uio->uio_resid, - (ap->a_ioflag >> 16), &bp); + (ap->a_ioflag >> 16), 0, &bp); else error = bread(vp, lbn, size, NOCRED, &bp); } else { diff --git a/sys/fs/ext2fs/ext2_balloc.c b/sys/fs/ext2fs/ext2_balloc.c index 6e60c6e..ba91ac5 100644 --- a/sys/fs/ext2fs/ext2_balloc.c +++ b/sys/fs/ext2fs/ext2_balloc.c @@ -281,7 +281,7 @@ ext2_balloc(ip, lbn, size, cred, bpp, flags) if (seqcount && (vp->v_mount->mnt_flag & MNT_NOCLUSTERR) == 0) { error = cluster_read(vp, ip->i_size, lbn, (int)fs->e2fs_bsize, NOCRED, - MAXBSIZE, seqcount, &nbp); + MAXBSIZE, seqcount, 0, &nbp); } else { error = bread(vp, lbn, (int)fs->e2fs_bsize, NOCRED, &nbp); } diff --git a/sys/fs/ext2fs/ext2_vnops.c b/sys/fs/ext2fs/ext2_vnops.c index 4f8f6a9..5d3d279 100644 --- a/sys/fs/ext2fs/ext2_vnops.c +++ b/sys/fs/ext2fs/ext2_vnops.c @@ -1748,10 +1748,11 @@ ext2_read(ap) if (lblktosize(fs, nextlbn) >= ip->i_size) error = bread(vp, lbn, size, NOCRED, &bp); - else if ((vp->v_mount->mnt_flag & MNT_NOCLUSTERR) == 0) + else if ((vp->v_mount->mnt_flag & MNT_NOCLUSTERR) == 0) { error = cluster_read(vp, ip->i_size, lbn, size, - NOCRED, blkoffset + uio->uio_resid, seqcount, &bp); - else if (seqcount > 1) { + NOCRED, blkoffset + uio->uio_resid, seqcount, + 0, &bp); + } else if (seqcount > 1) { int nextsize = blksize(fs, ip, nextlbn); error = breadn(vp, lbn, size, &nextlbn, &nextsize, 1, NOCRED, &bp); @@ -1967,7 +1968,7 @@ ext2_write(ap) } else if (xfersize + blkoffset == fs->e2fs_fsize) { if ((vp->v_mount->mnt_flag & MNT_NOCLUSTERW) == 0) { bp->b_flags |= B_CLUSTEROK; - cluster_write(vp, bp, ip->i_size, seqcount); + cluster_write(vp, bp, ip->i_size, seqcount, 0); } else { bawrite(bp); } diff --git a/sys/fs/msdosfs/msdosfs_vnops.c b/sys/fs/msdosfs/msdosfs_vnops.c index a90ee8d..e18d0b1 100644 --- a/sys/fs/msdosfs/msdosfs_vnops.c +++ b/sys/fs/msdosfs/msdosfs_vnops.c @@ -600,7 +600,7 @@ msdosfs_read(ap) error = bread(vp, lbn, blsize, NOCRED, &bp); } else if ((vp->v_mount->mnt_flag & MNT_NOCLUSTERR) == 0) { error = cluster_read(vp, dep->de_FileSize, lbn, blsize, - NOCRED, on + uio->uio_resid, seqcount, &bp); + NOCRED, on + uio->uio_resid, seqcount, 0, &bp); } else if (seqcount > 1) { rasize = blsize; error = breadn(vp, lbn, @@ -820,7 +820,7 @@ msdosfs_write(ap) else if (n + croffset == pmp->pm_bpcluster) { if ((vp->v_mount->mnt_flag & MNT_NOCLUSTERW) == 0) cluster_write(vp, bp, dep->de_FileSize, - seqcount); + seqcount, 0); else bawrite(bp); } else diff --git a/sys/fs/udf/udf_vnops.c b/sys/fs/udf/udf_vnops.c index b1a3b1d..abe073e 100644 --- a/sys/fs/udf/udf_vnops.c +++ b/sys/fs/udf/udf_vnops.c @@ -478,8 +478,9 @@ udf_read(struct vop_read_args *ap) rablock = lbn + 1; if ((vp->v_mount->mnt_flag & MNT_NOCLUSTERR) == 0) { if (lblktosize(udfmp, rablock) < fsize) { - error = cluster_read(vp, fsize, lbn, size, NOCRED, - uio->uio_resid, (ap->a_ioflag >> 16), &bp); + error = cluster_read(vp, fsize, lbn, size, + NOCRED, uio->uio_resid, + (ap->a_ioflag >> 16), 0, &bp); } else { error = bread(vp, lbn, size, NOCRED, &bp); } diff --git a/sys/geom/geom.h b/sys/geom/geom.h index 351b05d..660bf6e 100644 --- a/sys/geom/geom.h +++ b/sys/geom/geom.h @@ -205,6 +205,7 @@ struct g_provider { u_int flags; #define G_PF_WITHER 0x2 #define G_PF_ORPHAN 0x4 +#define G_PF_ACCEPT_UNMAPPED 0x8 /* Two fields for the implementing class to use */ void *private; diff --git a/sys/geom/geom_disk.c b/sys/geom/geom_disk.c index 72e9162..adf9e5e 100644 --- a/sys/geom/geom_disk.c +++ b/sys/geom/geom_disk.c @@ -488,6 +488,8 @@ g_disk_create(void *arg, int flag) pp->sectorsize = dp->d_sectorsize; pp->stripeoffset = dp->d_stripeoffset; pp->stripesize = dp->d_stripesize; + if ((dp->d_flags & DISKFLAG_NOTMAPPED_BIO) != 0) + pp->flags |= G_PF_ACCEPT_UNMAPPED; if (bootverbose) printf("GEOM: new disk %s\n", gp->name); sysctl_ctx_init(&sc->sysctl_ctx); diff --git a/sys/geom/geom_disk.h b/sys/geom/geom_disk.h index 33d8eb2..cb81883 100644 --- a/sys/geom/geom_disk.h +++ b/sys/geom/geom_disk.h @@ -103,6 +103,7 @@ struct disk { #define DISKFLAG_OPEN 0x2 #define DISKFLAG_CANDELETE 0x4 #define DISKFLAG_CANFLUSHCACHE 0x8 +#define DISKFLAG_NOTMAPPED_BIO 0x10 struct disk *disk_alloc(void); void disk_create(struct disk *disk, int version); diff --git a/sys/geom/geom_io.c b/sys/geom/geom_io.c index 0294887..eed4f9b 100644 --- a/sys/geom/geom_io.c +++ b/sys/geom/geom_io.c @@ -44,6 +44,7 @@ __FBSDID("$FreeBSD$"); #include #include #include +#include #include #include @@ -51,6 +52,13 @@ __FBSDID("$FreeBSD$"); #include #include +#include +#include +#include +#include +#include +#include +#include static struct g_bioq g_bio_run_down; static struct g_bioq g_bio_run_up; @@ -182,10 +190,12 @@ g_clone_bio(struct bio *bp) * ordering restrictions, so this flag needs to be cloned. * Other bio flags are not suitable for cloning. */ - bp2->bio_flags = bp->bio_flags & BIO_ORDERED; + bp2->bio_flags = bp->bio_flags & (BIO_ORDERED | BIO_NOTMAPPED); bp2->bio_length = bp->bio_length; bp2->bio_offset = bp->bio_offset; bp2->bio_data = bp->bio_data; + bp2->bio_ma = bp->bio_ma; + bp2->bio_ma_offset = bp->bio_ma_offset; bp2->bio_attribute = bp->bio_attribute; /* Inherit classification info from the parent */ bp2->bio_classifier1 = bp->bio_classifier1; @@ -210,11 +220,14 @@ g_duplicate_bio(struct bio *bp) struct bio *bp2; bp2 = uma_zalloc(biozone, M_WAITOK | M_ZERO); + bp2->bio_flags = bp->bio_flags & BIO_NOTMAPPED; bp2->bio_parent = bp; bp2->bio_cmd = bp->bio_cmd; bp2->bio_length = bp->bio_length; bp2->bio_offset = bp->bio_offset; bp2->bio_data = bp->bio_data; + bp2->bio_ma = bp->bio_ma; + bp2->bio_ma_offset = bp->bio_ma_offset; bp2->bio_attribute = bp->bio_attribute; bp->bio_children++; #ifdef KTR @@ -572,12 +585,33 @@ g_io_deliver(struct bio *bp, int error) return; } +SYSCTL_DECL(_kern_geom); + +static long transient_maps; +SYSCTL_LONG(_kern_geom, OID_AUTO, transient_maps, CTLFLAG_RD, + &transient_maps, 0, + ""); +int transient_map_retries; +SYSCTL_INT(_kern_geom, OID_AUTO, transient_map_retries, CTLFLAG_RD, + &transient_map_retries, 0, + ""); +int transient_map_failures; +SYSCTL_INT(_kern_geom, OID_AUTO, transient_map_failures, CTLFLAG_RD, + &transient_map_failures, 0, + ""); +int inflight_transient_maps; +SYSCTL_INT(_kern_geom, OID_AUTO, inflight_transient_maps, CTLFLAG_RD, + &inflight_transient_maps, 0, + ""); + void g_io_schedule_down(struct thread *tp __unused) { struct bio *bp; off_t excess; - int error; + vm_offset_t addr; + long size; + int error, retried, rv; for(;;) { g_bioq_lock(&g_bio_run_down); @@ -633,6 +667,56 @@ g_io_schedule_down(struct thread *tp __unused) default: break; } + if ((bp->bio_flags & BIO_NOTMAPPED) != 0 && + (bp->bio_to->flags & G_PF_ACCEPT_UNMAPPED) == 0 && + (bp->bio_cmd == BIO_READ || bp->bio_cmd == BIO_WRITE)) { + size = round_page(bp->bio_ma_offset + bp->bio_length); + addr = 0; + retried = 0; + atomic_add_long(&transient_maps, 1); +retry: + vm_map_lock(bio_transient_map); + if (vm_map_findspace(bio_transient_map, + vm_map_min(bio_transient_map), size, &addr)) { + vm_map_unlock(bio_transient_map); + if (retried >= 3) { + g_io_deliver(bp, EDEADLK/* XXXKIB */); + CTR2(KTR_GEOM, "g_down cannot map " + "bp %p provider %s", bp, + bp->bio_to->name); + atomic_add_int(&transient_map_failures, + 1); + continue; + } else { + /* + * Naive attempt to quisce the + * I/O to get more in-flight + * requests completed and + * defragment the bio_transient_map. + */ + CTR3(KTR_GEOM, "g_down retry map " + "bp %p provider %s r %d", bp, + bp->bio_to->name, retried); + pause("g_d_tra", hz / 10); + retried++; + atomic_add_int(&transient_map_retries, + 1); + goto retry; + } + } + rv = vm_map_insert(bio_transient_map, NULL, 0, addr, + addr + size, VM_PROT_RW, VM_PROT_RW, MAP_NOFAULT); + KASSERT(rv == KERN_SUCCESS, + ("vm_map_insert(bio_transient_map) rv %d %jx %lx", + rv, (uintmax_t)addr, size)); + vm_map_unlock(bio_transient_map); + atomic_add_int(&inflight_transient_maps, 1); + pmap_qenter((vm_offset_t)addr, bp->bio_ma, + OFF_TO_IDX(size)); + bp->bio_data = (caddr_t)addr + bp->bio_ma_offset; + bp->bio_flags |= BIO_TRANSIENT_MAPPING; + bp->bio_flags &= ~BIO_NOTMAPPED; + } THREAD_NO_SLEEPING(); CTR4(KTR_GEOM, "g_down starting bp %p provider %s off %ld " "len %ld", bp, bp->bio_to->name, bp->bio_offset, diff --git a/sys/geom/geom_vfs.c b/sys/geom/geom_vfs.c index afc6549..c8fa189 100644 --- a/sys/geom/geom_vfs.c +++ b/sys/geom/geom_vfs.c @@ -188,7 +188,15 @@ g_vfs_strategy(struct bufobj *bo, struct buf *bp) bip = g_alloc_bio(); bip->bio_cmd = bp->b_iocmd; bip->bio_offset = bp->b_iooffset; - bip->bio_data = bp->b_data; + if ((bp->b_flags & B_NOTMAPPED) != 0) { + bip->bio_ma = bp->b_pages; + bip->bio_data = unmapped_buf; + bip->bio_ma_offset = (vm_offset_t)bp->b_offset & PAGE_MASK; + bip->bio_flags |= BIO_NOTMAPPED; + } else { + bip->bio_data = bp->b_data; + bip->bio_ma = NULL; + } bip->bio_done = g_vfs_done; bip->bio_caller2 = bp; bip->bio_length = bp->b_bcount; diff --git a/sys/geom/part/g_part.c b/sys/geom/part/g_part.c index e2ba79e..7650499 100644 --- a/sys/geom/part/g_part.c +++ b/sys/geom/part/g_part.c @@ -427,6 +427,7 @@ g_part_new_provider(struct g_geom *gp, struct g_part_table *table, entry->gpe_pp->stripeoffset = pp->stripeoffset + entry->gpe_offset; if (pp->stripesize > 0) entry->gpe_pp->stripeoffset %= pp->stripesize; + entry->gpe_pp->flags |= pp->flags & G_PF_ACCEPT_UNMAPPED; g_error_provider(entry->gpe_pp, 0); } diff --git a/sys/i386/i386/pmap.c b/sys/i386/i386/pmap.c index f14f215..a7f6520 100644 --- a/sys/i386/i386/pmap.c +++ b/sys/i386/i386/pmap.c @@ -4224,6 +4224,49 @@ pmap_copy_page(vm_page_t src, vm_page_t dst) mtx_unlock(&sysmaps->lock); } +void +pmap_copy_pages(vm_page_t ma[], vm_offset_t a_offset, vm_page_t mb[], + vm_offset_t b_offset, int xfersize) +{ + struct sysmaps *sysmaps; + vm_page_t a_pg, b_pg; + char *a_cp, *b_cp; + vm_offset_t a_pg_offset, b_pg_offset; + int cnt; + + sysmaps = &sysmaps_pcpu[PCPU_GET(cpuid)]; + mtx_lock(&sysmaps->lock); + if (*sysmaps->CMAP1 != 0) + panic("pmap_copy_pages: CMAP1 busy"); + if (*sysmaps->CMAP2 != 0) + panic("pmap_copy_pages: CMAP2 busy"); + sched_pin(); + while (xfersize > 0) { + invlpg((u_int)sysmaps->CADDR1); + invlpg((u_int)sysmaps->CADDR2); + a_pg = ma[a_offset >> PAGE_SHIFT]; + a_pg_offset = a_offset & PAGE_MASK; + cnt = min(xfersize, PAGE_SIZE - a_pg_offset); + b_pg = mb[b_offset >> PAGE_SHIFT]; + b_pg_offset = b_offset & PAGE_MASK; + cnt = min(cnt, PAGE_SIZE - b_pg_offset); + *sysmaps->CMAP1 = PG_V | VM_PAGE_TO_PHYS(a_pg) | PG_A | + pmap_cache_bits(b_pg->md.pat_mode, 0); + *sysmaps->CMAP2 = PG_V | PG_RW | VM_PAGE_TO_PHYS(b_pg) | PG_A | + PG_M | pmap_cache_bits(b_pg->md.pat_mode, 0); + a_cp = sysmaps->CADDR1 + a_pg_offset; + b_cp = sysmaps->CADDR2 + b_pg_offset; + bcopy(a_cp, b_cp, cnt); + a_offset += cnt; + b_offset += cnt; + xfersize -= cnt; + } + *sysmaps->CMAP1 = 0; + *sysmaps->CMAP2 = 0; + sched_unpin(); + mtx_unlock(&sysmaps->lock); +} + /* * Returns true if the pmap's pv is one of the first * 16 pvs linked to from this page. This count may diff --git a/sys/kern/vfs_bio.c b/sys/kern/vfs_bio.c index 32a1089..929e730 100644 --- a/sys/kern/vfs_bio.c +++ b/sys/kern/vfs_bio.c @@ -91,6 +91,7 @@ struct buf_ops buf_ops_bio = { * carnal knowledge of buffers. This knowledge should be moved to vfs_bio.c. */ struct buf *buf; /* buffer header pool */ +caddr_t unmapped_buf; static struct proc *bufdaemonproc; @@ -131,6 +132,10 @@ SYSCTL_PROC(_vfs, OID_AUTO, bufspace, CTLTYPE_LONG|CTLFLAG_MPSAFE|CTLFLAG_RD, SYSCTL_LONG(_vfs, OID_AUTO, bufspace, CTLFLAG_RD, &bufspace, 0, "Virtual memory used for buffers"); #endif +static long unmapped_bufspace; +SYSCTL_LONG(_vfs, OID_AUTO, unmapped_bufspace, CTLFLAG_RD, + &unmapped_bufspace, 0, + "Amount of unmapped buffers, inclusive in the bufspace"); static long maxbufspace; SYSCTL_LONG(_vfs, OID_AUTO, maxbufspace, CTLFLAG_RD, &maxbufspace, 0, "Maximum allowed value of bufspace (including buf_daemon)"); @@ -200,6 +205,10 @@ SYSCTL_INT(_vfs, OID_AUTO, getnewbufcalls, CTLFLAG_RW, &getnewbufcalls, 0, static int getnewbufrestarts; SYSCTL_INT(_vfs, OID_AUTO, getnewbufrestarts, CTLFLAG_RW, &getnewbufrestarts, 0, "Number of times getnewbuf has had to restart a buffer aquisition"); +static int mappingrestarts; +SYSCTL_INT(_vfs, OID_AUTO, mappingrestarts, CTLFLAG_RW, &mappingrestarts, 0, + "Number of times getblk has had to restart a buffer mapping for " + "unmapped buffer"); static int flushbufqtarget = 100; SYSCTL_INT(_vfs, OID_AUTO, flushbufqtarget, CTLFLAG_RW, &flushbufqtarget, 0, "Amount of work to do in flushbufqueues when helping bufdaemon"); @@ -671,6 +680,55 @@ bufinit(void) bogus_page = vm_page_alloc(NULL, 0, VM_ALLOC_NOOBJ | VM_ALLOC_NORMAL | VM_ALLOC_WIRED); + unmapped_buf = (caddr_t)kmem_alloc_nofault(kernel_map, MAXPHYS); +} + +#ifdef INVARIANTS +static inline void +vfs_buf_check_mapped(struct buf *bp) +{ + + KASSERT((bp->b_flags & B_NOTMAPPED) == 0, + ("mapped buf %p %x", bp, bp->b_flags)); + KASSERT(bp->b_kvabase != unmapped_buf, + ("mapped buf: b_kvabase was not updated %p", bp)); + KASSERT(bp->b_data != unmapped_buf, + ("mapped buf: b_data was not updated %p", bp)); +} + +static inline void +vfs_buf_check_unmapped(struct buf *bp) +{ + + KASSERT((bp->b_flags & B_NOTMAPPED) == B_NOTMAPPED, + ("unmapped buf %p %x", bp, bp->b_flags)); + KASSERT(bp->b_kvabase == unmapped_buf, + ("unmapped buf: corrupted b_kvabase %p", bp)); + KASSERT(bp->b_data == unmapped_buf, + ("unmapped buf: corrupted b_data %p", bp)); +} + +#define BUF_CHECK_MAPPED(bp) vfs_buf_check_mapped(bp) +#define BUF_CHECK_UNMAPPED(bp) vfs_buf_check_unmapped(bp) +#else +#define BUF_CHECK_MAPPED(bp) do {} while (0) +#define BUF_CHECK_UNMAPPED(bp) do {} while (0) +#endif + +static void +bpmap_qenter(struct buf *bp) +{ + + BUF_CHECK_MAPPED(bp); + + /* + * bp->b_data is relative to bp->b_offset, but + * bp->b_offset may be offset into the first page. + */ + bp->b_data = (caddr_t)trunc_page((vm_offset_t)bp->b_data); + pmap_qenter((vm_offset_t)bp->b_data, bp->b_pages, bp->b_npages); + bp->b_data = (caddr_t)((vm_offset_t)bp->b_data | + (vm_offset_t)(bp->b_offset & PAGE_MASK)); } /* @@ -682,14 +740,26 @@ static void bfreekva(struct buf *bp) { - if (bp->b_kvasize) { - atomic_add_int(&buffreekvacnt, 1); - atomic_subtract_long(&bufspace, bp->b_kvasize); - vm_map_remove(buffer_map, (vm_offset_t) bp->b_kvabase, - (vm_offset_t) bp->b_kvabase + bp->b_kvasize); - bp->b_kvasize = 0; - bufspacewakeup(); + if (bp->b_kvasize == 0) + return; + + atomic_add_int(&buffreekvacnt, 1); + atomic_subtract_long(&bufspace, bp->b_kvasize); + if ((bp->b_flags & B_NOTMAPPED) == 0) { + BUF_CHECK_MAPPED(bp); + vm_map_remove(buffer_map, (vm_offset_t)bp->b_kvabase, + (vm_offset_t)bp->b_kvabase + bp->b_kvasize); + } else { + BUF_CHECK_UNMAPPED(bp); + if ((bp->b_flags & B_KVAALLOC) != 0) { + vm_map_remove(buffer_map, (vm_offset_t)bp->b_kvaalloc, + (vm_offset_t)bp->b_kvaalloc + bp->b_kvasize); + } + atomic_subtract_long(&unmapped_bufspace, bp->b_kvasize); + bp->b_flags &= ~(B_NOTMAPPED | B_KVAALLOC); } + bp->b_kvasize = 0; + bufspacewakeup(); } /* @@ -826,9 +896,8 @@ breada(struct vnode * vp, daddr_t * rablkno, int * rabsize, * getblk(). Also starts asynchronous I/O on read-ahead blocks. */ int -breadn_flags(struct vnode * vp, daddr_t blkno, int size, - daddr_t * rablkno, int *rabsize, int cnt, - struct ucred * cred, int flags, struct buf **bpp) +breadn_flags(struct vnode *vp, daddr_t blkno, int size, daddr_t *rablkno, + int *rabsize, int cnt, struct ucred *cred, int flags, struct buf **bpp) { struct buf *bp; int rv = 0, readwait = 0; @@ -1363,7 +1432,8 @@ brelse(struct buf *bp) } } - if ((bp->b_flags & B_INVAL) == 0) { + if ((bp->b_flags & (B_INVAL | B_NOTMAPPED)) == 0) { + BUF_CHECK_MAPPED(bp); pmap_qenter( trunc_page((vm_offset_t)bp->b_data), bp->b_pages, bp->b_npages); @@ -1612,7 +1682,11 @@ vfs_vmio_release(struct buf *bp) int i; vm_page_t m; - pmap_qremove(trunc_page((vm_offset_t)bp->b_data), bp->b_npages); + if ((bp->b_flags & B_NOTMAPPED) == 0) { + BUF_CHECK_MAPPED(bp); + pmap_qremove(trunc_page((vm_offset_t)bp->b_data), bp->b_npages); + } else + BUF_CHECK_UNMAPPED(bp); VM_OBJECT_LOCK(bp->b_bufobj->bo_object); for (i = 0; i < bp->b_npages; i++) { m = bp->b_pages[i]; @@ -1716,8 +1790,10 @@ vfs_bio_awrite(struct buf *bp) int nwritten; int size; int maxcl; + int gbflags; bo = &vp->v_bufobj; + gbflags = (bp->b_flags & B_NOTMAPPED) != 0 ? GB_NOTMAPPED : 0; /* * right now we support clustered writing only to regular files. If * we find a clusterable block we could be in the middle of a cluster @@ -1748,8 +1824,9 @@ vfs_bio_awrite(struct buf *bp) */ if (ncl != 1) { BUF_UNLOCK(bp); - nwritten = cluster_wbuild(vp, size, lblkno - j, ncl); - return nwritten; + nwritten = cluster_wbuild(vp, size, lblkno - j, ncl, + gbflags); + return (nwritten); } } bremfree(bp); @@ -1796,6 +1873,9 @@ getnewbuf(struct vnode *vp, int slpflag, int slptimeo, int size, int maxsize, int nqindex; static int flushingbufs; + KASSERT((gbflags & (GB_NOTMAPPED | GB_KVAALLOC)) != GB_KVAALLOC, + ("GB_KVAALLOC only makes sense with GB_NOTMAPPED")); + td = curthread; /* * We can't afford to block since we might be holding a vnode lock, @@ -1969,7 +2049,7 @@ restart: if (bp->b_bufsize) allocbuf(bp, 0); - bp->b_flags = 0; + bp->b_flags &= B_NOTMAPPED; bp->b_ioflags = 0; bp->b_xflags = 0; KASSERT((bp->b_vflags & BV_INFREECNT) == 0, @@ -2096,6 +2176,14 @@ restart: } } mtx_unlock(&nblock); + } else if ((gbflags & (GB_NOTMAPPED | GB_KVAALLOC)) == GB_NOTMAPPED) { + bfreekva(bp); + bp->b_flags |= B_NOTMAPPED; + bp->b_kvabase = bp->b_data = unmapped_buf; + bp->b_kvasize = maxsize; + atomic_add_long(&bufspace, bp->b_kvasize); + atomic_add_long(&unmapped_bufspace, bp->b_kvasize); + atomic_add_int(&bufreusecnt, 1); } else { /* * We finally have a valid bp. We aren't quite out of the @@ -2105,7 +2193,8 @@ restart: */ maxsize = (maxsize + BKVAMASK) & ~BKVAMASK; - if (maxsize != bp->b_kvasize) { + if (maxsize != bp->b_kvasize || + (bp->b_flags & (B_NOTMAPPED | B_KVAALLOC)) == B_NOTMAPPED) { vm_offset_t addr = 0; int rv; @@ -2126,18 +2215,37 @@ restart: goto restart; } rv = vm_map_insert(buffer_map, NULL, 0, addr, - addr + maxsize, VM_PROT_ALL, VM_PROT_ALL, + addr + maxsize, VM_PROT_RW, VM_PROT_RW, MAP_NOFAULT); KASSERT(rv == KERN_SUCCESS, ("vm_map_insert(buffer_map) rv %d", rv)); vm_map_unlock(buffer_map); - bp->b_kvabase = (caddr_t)addr; + if ((gbflags & GB_NOTMAPPED) == 0) { + bp->b_kvabase = (caddr_t)addr; + } else if ((gbflags & GB_KVAALLOC) != 0) { + KASSERT((gbflags & GB_NOTMAPPED) != 0, + ("GB_KVAALLOC without GB_NOTMAPPED")); + bp->b_kvaalloc = (caddr_t)addr; + bp->b_flags |= B_KVAALLOC; + atomic_add_long(&unmapped_bufspace, + bp->b_kvasize); + } bp->b_kvasize = maxsize; atomic_add_long(&bufspace, bp->b_kvasize); atomic_add_int(&bufreusecnt, 1); + } else if ((bp->b_flags & B_KVAALLOC) != 0 && + (gbflags & (GB_NOTMAPPED | GB_KVAALLOC)) == 0) { + bp->b_kvabase = bp->b_kvaalloc; + bp->b_flags &= ~B_KVAALLOC; + atomic_subtract_long(&unmapped_bufspace, + bp->b_kvasize); + } + if ((gbflags & GB_NOTMAPPED) == 0) { + bp->b_saveaddr = bp->b_kvabase; + bp->b_data = bp->b_saveaddr; + bp->b_flags &= ~B_NOTMAPPED; + BUF_CHECK_MAPPED(bp); } - bp->b_saveaddr = bp->b_kvabase; - bp->b_data = bp->b_saveaddr; } return (bp); } @@ -2584,14 +2692,18 @@ vfs_setdirty_locked_object(struct buf *bp) * prior to issuing the READ. biodone() will *not* clear B_INVAL. */ struct buf * -getblk(struct vnode * vp, daddr_t blkno, int size, int slpflag, int slptimeo, +getblk(struct vnode *vp, daddr_t blkno, int size, int slpflag, int slptimeo, int flags) { - struct buf *bp; + struct buf *bp, *scratch_bp; struct bufobj *bo; - int error; + vm_offset_t addr; + int bsize, error, maxsize, need_mapping, need_kva, vmio; + off_t offset; CTR3(KTR_BUF, "getblk(%p, %ld, %d)", vp, (long)blkno, size); + KASSERT((flags & (GB_NOTMAPPED | GB_KVAALLOC)) != GB_KVAALLOC, + ("GB_KVAALLOC only makes sense with GB_NOTMAPPED")); ASSERT_VOP_LOCKED(vp, "getblk"); if (size > MAXBSIZE) panic("getblk: size(%d) > MAXBSIZE(%d)\n", size, MAXBSIZE); @@ -2659,9 +2771,8 @@ loop: } /* - * check for size inconsistancies for non-VMIO case. + * check for size inconsistencies for non-VMIO case. */ - if (bp->b_bcount != size) { if ((bp->b_flags & B_VMIO) == 0 || (size > bp->b_kvasize)) { @@ -2694,13 +2805,85 @@ loop: } } + need_mapping = (bp->b_flags & B_NOTMAPPED) != 0 && + (flags & GB_NOTMAPPED) == 0; + need_kva = (bp->b_flags & (B_KVAALLOC | B_NOTMAPPED)) == + B_NOTMAPPED && (flags & GB_KVAALLOC) != 0; + if (need_mapping || need_kva) { + BUF_CHECK_UNMAPPED(bp); + + if (need_mapping && (bp->b_flags & B_KVAALLOC) != 0) { + bp->b_flags &= ~B_KVAALLOC; + bp->b_kvabase = bp->b_kvaalloc; + atomic_subtract_long(&unmapped_bufspace, + bp->b_kvasize); + goto has_addr; + } + + bsize = vn_isdisk(vp, NULL) ? DEV_BSIZE : bo->bo_bsize; + offset = blkno * bsize; + maxsize = size + (offset & PAGE_MASK); + maxsize = imax(maxsize, bsize); +mapping_loop: + vm_map_lock(buffer_map); + if (vm_map_findspace(buffer_map, + vm_map_min(buffer_map), maxsize, &addr)) { + vm_map_unlock(buffer_map); + scratch_bp = getnewbuf(vp, 0, 0, size, + maxsize, flags | (GB_NOTMAPPED | + GB_KVAALLOC)); + if (scratch_bp == NULL) { + if ((flags & GB_NOWAIT_BD) != 0) { + /* + * XXXKIB: not sure + * what else to do. + */ + panic("GB_NOWAIT_BD and " + "B_NOTMAPPED %p", bp); + } + atomic_add_int(&mappingrestarts, 1); + goto mapping_loop; + } + atomic_subtract_long(&bufspace, bp->b_kvasize); + bufspacewakeup(); + addr = (vm_offset_t)scratch_bp->b_kvaalloc; + maxsize = scratch_bp->b_kvasize; + scratch_bp->b_kvasize = 0; + scratch_bp->b_flags |= B_INVAL | B_NOTMAPPED; + brelse(scratch_bp); + } else { + KASSERT(addr != 0, ("addr == 0")); + vm_map_insert(buffer_map, NULL, 0, addr, + addr + maxsize, VM_PROT_ALL, VM_PROT_ALL, + MAP_NOFAULT); + vm_map_unlock(buffer_map); + } + if (need_mapping) { + bp->b_kvabase = (caddr_t)addr; + bp->b_flags &= ~B_KVAALLOC; + atomic_subtract_long(&unmapped_bufspace, + bp->b_kvasize); + } else /* if (need_kva) */ { + bp->b_kvaalloc = (caddr_t)addr; + bp->b_flags |= B_KVAALLOC; + } + bp->b_kvasize = maxsize; + if (need_mapping) { +has_addr: + bp->b_saveaddr = bp->b_kvabase; + bp->b_data = bp->b_saveaddr; + bp->b_flags &= ~B_NOTMAPPED; + BUF_CHECK_MAPPED(bp); + bpmap_qenter(bp); + } + } + /* * If the size is inconsistant in the VMIO case, we can resize * the buffer. This might lead to B_CACHE getting set or * cleared. If the size has not changed, B_CACHE remains * unchanged from its previous state. */ - if (bp->b_bcount != size) allocbuf(bp, size); @@ -2741,9 +2924,6 @@ loop: } bp->b_flags &= ~B_DONE; } else { - int bsize, maxsize, vmio; - off_t offset; - /* * Buffer is not in-core, create new buffer. The buffer * returned by getnewbuf() is locked. Note that the returned @@ -2989,10 +3169,14 @@ allocbuf(struct buf *bp, int size) if (desiredpages < bp->b_npages) { vm_page_t m; - pmap_qremove((vm_offset_t)trunc_page( - (vm_offset_t)bp->b_data) + - (desiredpages << PAGE_SHIFT), - (bp->b_npages - desiredpages)); + if ((bp->b_flags & B_NOTMAPPED) == 0) { + BUF_CHECK_MAPPED(bp); + pmap_qremove((vm_offset_t)trunc_page( + (vm_offset_t)bp->b_data) + + (desiredpages << PAGE_SHIFT), + (bp->b_npages - desiredpages)); + } else + BUF_CHECK_UNMAPPED(bp); VM_OBJECT_LOCK(bp->b_bufobj->bo_object); for (i = desiredpages; i < bp->b_npages; i++) { /* @@ -3098,21 +3282,12 @@ allocbuf(struct buf *bp, int size) VM_OBJECT_UNLOCK(obj); /* - * Step 3, fixup the KVM pmap. Remember that - * bp->b_data is relative to bp->b_offset, but - * bp->b_offset may be offset into the first page. + * Step 3, fixup the KVM pmap. */ - - bp->b_data = (caddr_t) - trunc_page((vm_offset_t)bp->b_data); - pmap_qenter( - (vm_offset_t)bp->b_data, - bp->b_pages, - bp->b_npages - ); - - bp->b_data = (caddr_t)((vm_offset_t)bp->b_data | - (vm_offset_t)(bp->b_offset & PAGE_MASK)); + if ((bp->b_flags & B_NOTMAPPED) == 0) + bpmap_qenter(bp); + else + BUF_CHECK_UNMAPPED(bp); } } if (newbsize < bp->b_bufsize) @@ -3122,21 +3297,38 @@ allocbuf(struct buf *bp, int size) return 1; } +extern int inflight_transient_maps; + void biodone(struct bio *bp) { struct mtx *mtxp; void (*done)(struct bio *); + vm_offset_t start, end; + int transient; mtxp = mtx_pool_find(mtxpool_sleep, bp); mtx_lock(mtxp); bp->bio_flags |= BIO_DONE; + if ((bp->bio_flags & BIO_TRANSIENT_MAPPING) != 0) { + start = trunc_page((vm_offset_t)bp->bio_data); + end = round_page((vm_offset_t)bp->bio_data + bp->bio_length); + transient = 1; + } else { + transient = 0; + start = end = 0; + } done = bp->bio_done; if (done == NULL) wakeup(bp); mtx_unlock(mtxp); if (done != NULL) done(bp); + if (transient) { + pmap_qremove(start, OFF_TO_IDX(end - start)); + vm_map_remove(bio_transient_map, start, end); + atomic_add_int(&inflight_transient_maps, -1); + } } /* @@ -3393,9 +3585,11 @@ bufdone_finish(struct buf *bp) } vm_object_pip_wakeupn(obj, 0); VM_OBJECT_UNLOCK(obj); - if (bogus) + if (bogus && (bp->b_flags & B_NOTMAPPED) == 0) { + BUF_CHECK_MAPPED(bp); pmap_qenter(trunc_page((vm_offset_t)bp->b_data), bp->b_pages, bp->b_npages); + } } /* @@ -3438,8 +3632,12 @@ vfs_unbusy_pages(struct buf *bp) if (!m) panic("vfs_unbusy_pages: page missing\n"); bp->b_pages[i] = m; - pmap_qenter(trunc_page((vm_offset_t)bp->b_data), - bp->b_pages, bp->b_npages); + if ((bp->b_flags & B_NOTMAPPED) == 0) { + BUF_CHECK_MAPPED(bp); + pmap_qenter(trunc_page((vm_offset_t)bp->b_data), + bp->b_pages, bp->b_npages); + } else + BUF_CHECK_UNMAPPED(bp); } vm_object_pip_subtract(obj, 1); vm_page_io_finish(m); @@ -3604,9 +3802,11 @@ vfs_busy_pages(struct buf *bp, int clear_modify) foff = (foff + PAGE_SIZE) & ~(off_t)PAGE_MASK; } VM_OBJECT_UNLOCK(obj); - if (bogus) + if (bogus && (bp->b_flags & B_NOTMAPPED) == 0) { + BUF_CHECK_MAPPED(bp); pmap_qenter(trunc_page((vm_offset_t)bp->b_data), bp->b_pages, bp->b_npages); + } } /* @@ -3662,8 +3862,7 @@ vfs_bio_set_valid(struct buf *bp, int base, int size) void vfs_bio_clrbuf(struct buf *bp) { - int i, j, mask; - caddr_t sa, ea; + int i, j, mask, sa, ea, slide; if ((bp->b_flags & (B_VMIO | B_MALLOC)) != B_VMIO) { clrbuf(bp); @@ -3681,39 +3880,69 @@ vfs_bio_clrbuf(struct buf *bp) if ((bp->b_pages[0]->valid & mask) == mask) goto unlock; if ((bp->b_pages[0]->valid & mask) == 0) { - bzero(bp->b_data, bp->b_bufsize); + pmap_zero_page_area(bp->b_pages[0], 0, bp->b_bufsize); bp->b_pages[0]->valid |= mask; goto unlock; } } - ea = sa = bp->b_data; - for(i = 0; i < bp->b_npages; i++, sa = ea) { - ea = (caddr_t)trunc_page((vm_offset_t)sa + PAGE_SIZE); - ea = (caddr_t)(vm_offset_t)ulmin( - (u_long)(vm_offset_t)ea, - (u_long)(vm_offset_t)bp->b_data + bp->b_bufsize); + sa = bp->b_offset & PAGE_MASK; + slide = 0; + for (i = 0; i < bp->b_npages; i++) { + slide = imin(slide + PAGE_SIZE, bp->b_bufsize + sa); + ea = slide & PAGE_MASK; + if (ea == 0) + ea = PAGE_SIZE; if (bp->b_pages[i] == bogus_page) continue; - j = ((vm_offset_t)sa & PAGE_MASK) / DEV_BSIZE; + j = sa / DEV_BSIZE; mask = ((1 << ((ea - sa) / DEV_BSIZE)) - 1) << j; VM_OBJECT_LOCK_ASSERT(bp->b_pages[i]->object, MA_OWNED); if ((bp->b_pages[i]->valid & mask) == mask) continue; if ((bp->b_pages[i]->valid & mask) == 0) - bzero(sa, ea - sa); + pmap_zero_page_area(bp->b_pages[i], sa, ea - sa); else { for (; sa < ea; sa += DEV_BSIZE, j++) { - if ((bp->b_pages[i]->valid & (1 << j)) == 0) - bzero(sa, DEV_BSIZE); + if ((bp->b_pages[i]->valid & (1 << j)) == 0) { + pmap_zero_page_area(bp->b_pages[i], + sa, DEV_BSIZE); + } } } bp->b_pages[i]->valid |= mask; + sa = 0; } unlock: VM_OBJECT_UNLOCK(bp->b_bufobj->bo_object); bp->b_resid = 0; } +void +vfs_bio_bzero_buf(struct buf *bp, int base, int size) +{ + vm_page_t m; + int i, n; + + if ((bp->b_flags & B_NOTMAPPED) == 0) { + BUF_CHECK_MAPPED(bp); + bzero(bp->b_data + base, size); + } else { + BUF_CHECK_UNMAPPED(bp); + n = PAGE_SIZE - (base & PAGE_MASK); + VM_OBJECT_LOCK(bp->b_bufobj->bo_object); + for (i = base / PAGE_SIZE; size > 0 && i < bp->b_npages; ++i) { + m = bp->b_pages[i]; + if (n > size) + n = size; + pmap_zero_page_area(m, base & PAGE_MASK, n); + base += n; + size -= n; + n = PAGE_SIZE; + } + VM_OBJECT_UNLOCK(bp->b_bufobj->bo_object); + } +} + /* * vm_hold_load_pages and vm_hold_free_pages get pages into * a buffers address space. The pages are anonymous and are @@ -3726,6 +3955,8 @@ vm_hold_load_pages(struct buf *bp, vm_offset_t from, vm_offset_t to) vm_page_t p; int index; + BUF_CHECK_MAPPED(bp); + to = round_page(to); from = round_page(from); index = (from - trunc_page((vm_offset_t)bp->b_data)) >> PAGE_SHIFT; @@ -3757,6 +3988,8 @@ vm_hold_free_pages(struct buf *bp, int newbsize) vm_page_t p; int index, newnpages; + BUF_CHECK_MAPPED(bp); + from = round_page((vm_offset_t)bp->b_data + newbsize); newnpages = (from - trunc_page((vm_offset_t)bp->b_data)) >> PAGE_SHIFT; if (bp->b_npages > newnpages) diff --git a/sys/kern/vfs_cluster.c b/sys/kern/vfs_cluster.c index 19ee05f..9aa5ba0 100644 --- a/sys/kern/vfs_cluster.c +++ b/sys/kern/vfs_cluster.c @@ -60,11 +60,11 @@ SYSCTL_INT(_debug, OID_AUTO, rcluster, CTLFLAG_RW, &rcluster, 0, static MALLOC_DEFINE(M_SEGMENT, "cl_savebuf", "cluster_save buffer"); -static struct cluster_save * - cluster_collectbufs(struct vnode *vp, struct buf *last_bp); -static struct buf * - cluster_rbuild(struct vnode *vp, u_quad_t filesize, daddr_t lbn, - daddr_t blkno, long size, int run, struct buf *fbp); +static struct cluster_save *cluster_collectbufs(struct vnode *vp, + struct buf *last_bp, int gbflags); +static struct buf *cluster_rbuild(struct vnode *vp, u_quad_t filesize, + daddr_t lbn, daddr_t blkno, long size, int run, int gbflags, + struct buf *fbp); static void cluster_callback(struct buf *); static int write_behind = 1; @@ -83,15 +83,9 @@ extern vm_page_t bogus_page; * cluster_read replaces bread. */ int -cluster_read(vp, filesize, lblkno, size, cred, totread, seqcount, bpp) - struct vnode *vp; - u_quad_t filesize; - daddr_t lblkno; - long size; - struct ucred *cred; - long totread; - int seqcount; - struct buf **bpp; +cluster_read(struct vnode *vp, u_quad_t filesize, daddr_t lblkno, long size, + struct ucred *cred, long totread, int seqcount, int gbflags, + struct buf **bpp) { struct buf *bp, *rbp, *reqbp; struct bufobj *bo; @@ -117,7 +111,7 @@ cluster_read(vp, filesize, lblkno, size, cred, totread, seqcount, bpp) /* * get the requested block */ - *bpp = reqbp = bp = getblk(vp, lblkno, size, 0, 0, 0); + *bpp = reqbp = bp = getblk(vp, lblkno, size, 0, 0, gbflags); origblkno = lblkno; /* @@ -208,7 +202,7 @@ cluster_read(vp, filesize, lblkno, size, cred, totread, seqcount, bpp) if (ncontig < nblks) nblks = ncontig; bp = cluster_rbuild(vp, filesize, lblkno, - blkno, size, nblks, bp); + blkno, size, nblks, gbflags, bp); lblkno += (bp->b_bufsize / size); } else { bp->b_flags |= B_RAM; @@ -252,14 +246,14 @@ cluster_read(vp, filesize, lblkno, size, cred, totread, seqcount, bpp) if (ncontig) { ncontig = min(ncontig + 1, racluster); rbp = cluster_rbuild(vp, filesize, lblkno, blkno, - size, ncontig, NULL); + size, ncontig, gbflags, NULL); lblkno += (rbp->b_bufsize / size); if (rbp->b_flags & B_DELWRI) { bqrelse(rbp); continue; } } else { - rbp = getblk(vp, lblkno, size, 0, 0, 0); + rbp = getblk(vp, lblkno, size, 0, 0, gbflags); lblkno += 1; if (rbp->b_flags & B_DELWRI) { bqrelse(rbp); @@ -298,14 +292,8 @@ cluster_read(vp, filesize, lblkno, size, cred, totread, seqcount, bpp) * and then parcel them up into logical blocks in the buffer hash table. */ static struct buf * -cluster_rbuild(vp, filesize, lbn, blkno, size, run, fbp) - struct vnode *vp; - u_quad_t filesize; - daddr_t lbn; - daddr_t blkno; - long size; - int run; - struct buf *fbp; +cluster_rbuild(struct vnode *vp, u_quad_t filesize, daddr_t lbn, + daddr_t blkno, long size, int run, int gbflags, struct buf *fbp) { struct bufobj *bo; struct buf *bp, *tbp; @@ -329,7 +317,7 @@ cluster_rbuild(vp, filesize, lbn, blkno, size, run, fbp) tbp = fbp; tbp->b_iocmd = BIO_READ; } else { - tbp = getblk(vp, lbn, size, 0, 0, 0); + tbp = getblk(vp, lbn, size, 0, 0, gbflags); if (tbp->b_flags & B_CACHE) return tbp; tbp->b_flags |= B_ASYNC | B_RAM; @@ -350,9 +338,14 @@ cluster_rbuild(vp, filesize, lbn, blkno, size, run, fbp) * address may not be either. Inherit the b_data offset * from the original buffer. */ - bp->b_data = (char *)((vm_offset_t)bp->b_data | - ((vm_offset_t)tbp->b_data & PAGE_MASK)); bp->b_flags = B_ASYNC | B_CLUSTER | B_VMIO; + if ((gbflags & GB_NOTMAPPED) != 0) { + bp->b_flags |= B_NOTMAPPED; + bp->b_data = unmapped_buf; + } else { + bp->b_data = (char *)((vm_offset_t)bp->b_data | + ((vm_offset_t)tbp->b_data & PAGE_MASK)); + } bp->b_iocmd = BIO_READ; bp->b_iodone = cluster_callback; bp->b_blkno = blkno; @@ -499,8 +492,10 @@ cluster_rbuild(vp, filesize, lbn, blkno, size, run, fbp) bp->b_bufsize, bp->b_kvasize); bp->b_kvasize = bp->b_bufsize; - pmap_qenter(trunc_page((vm_offset_t) bp->b_data), - (vm_page_t *)bp->b_pages, bp->b_npages); + if ((bp->b_flags & B_NOTMAPPED) == 0) { + pmap_qenter(trunc_page((vm_offset_t) bp->b_data), + (vm_page_t *)bp->b_pages, bp->b_npages); + } return (bp); } @@ -523,7 +518,10 @@ cluster_callback(bp) if (bp->b_ioflags & BIO_ERROR) error = bp->b_error; - pmap_qremove(trunc_page((vm_offset_t) bp->b_data), bp->b_npages); + if ((bp->b_flags & B_NOTMAPPED) == 0) { + pmap_qremove(trunc_page((vm_offset_t) bp->b_data), + bp->b_npages); + } /* * Move memory from the large cluster buffer into the component * buffers and mark IO as done on these. @@ -565,18 +563,19 @@ cluster_callback(bp) */ static __inline int -cluster_wbuild_wb(struct vnode *vp, long size, daddr_t start_lbn, int len) +cluster_wbuild_wb(struct vnode *vp, long size, daddr_t start_lbn, int len, + int gbflags) { int r = 0; - switch(write_behind) { + switch (write_behind) { case 2: if (start_lbn < len) break; start_lbn -= len; /* FALLTHROUGH */ case 1: - r = cluster_wbuild(vp, size, start_lbn, len); + r = cluster_wbuild(vp, size, start_lbn, len, gbflags); /* FALLTHROUGH */ default: /* FALLTHROUGH */ @@ -596,7 +595,8 @@ cluster_wbuild_wb(struct vnode *vp, long size, daddr_t start_lbn, int len) * 4. end of a cluster - asynchronously write cluster */ void -cluster_write(struct vnode *vp, struct buf *bp, u_quad_t filesize, int seqcount) +cluster_write(struct vnode *vp, struct buf *bp, u_quad_t filesize, int seqcount, + int gbflags) { daddr_t lbn; int maxclen, cursize; @@ -642,13 +642,13 @@ cluster_write(struct vnode *vp, struct buf *bp, u_quad_t filesize, int seqcount) lbn != vp->v_lastw + 1 || vp->v_clen <= cursize) { if (!async && seqcount > 0) { cluster_wbuild_wb(vp, lblocksize, - vp->v_cstart, cursize); + vp->v_cstart, cursize, gbflags); } } else { struct buf **bpp, **endbp; struct cluster_save *buflist; - buflist = cluster_collectbufs(vp, bp); + buflist = cluster_collectbufs(vp, bp, gbflags); endbp = &buflist->bs_children [buflist->bs_nchildren - 1]; if (VOP_REALLOCBLKS(vp, buflist)) { @@ -667,7 +667,7 @@ cluster_write(struct vnode *vp, struct buf *bp, u_quad_t filesize, int seqcount) if (seqcount > 1) { cluster_wbuild_wb(vp, lblocksize, vp->v_cstart, - cursize); + cursize, gbflags); } } else { /* @@ -715,8 +715,10 @@ cluster_write(struct vnode *vp, struct buf *bp, u_quad_t filesize, int seqcount) * update daemon handle it. */ bdwrite(bp); - if (seqcount > 1) - cluster_wbuild_wb(vp, lblocksize, vp->v_cstart, vp->v_clen + 1); + if (seqcount > 1) { + cluster_wbuild_wb(vp, lblocksize, vp->v_cstart, + vp->v_clen + 1, gbflags); + } vp->v_clen = 0; vp->v_cstart = lbn + 1; } else if (vm_page_count_severe()) { @@ -742,11 +744,8 @@ cluster_write(struct vnode *vp, struct buf *bp, u_quad_t filesize, int seqcount) * the current block (if last_bp == NULL). */ int -cluster_wbuild(vp, size, start_lbn, len) - struct vnode *vp; - long size; - daddr_t start_lbn; - int len; +cluster_wbuild(struct vnode *vp, long size, daddr_t start_lbn, int len, + int gbflags) { struct buf *bp, *tbp; struct bufobj *bo; @@ -832,10 +831,16 @@ cluster_wbuild(vp, size, start_lbn, len) * address may not be either. Inherit the b_data offset * from the original buffer. */ - bp->b_data = (char *)((vm_offset_t)bp->b_data | - ((vm_offset_t)tbp->b_data & PAGE_MASK)); - bp->b_flags |= B_CLUSTER | - (tbp->b_flags & (B_VMIO | B_NEEDCOMMIT)); + if ((gbflags & GB_NOTMAPPED) == 0 || + (tbp->b_flags & B_VMIO) == 0) { + bp->b_data = (char *)((vm_offset_t)bp->b_data | + ((vm_offset_t)tbp->b_data & PAGE_MASK)); + } else { + bp->b_flags |= B_NOTMAPPED; + bp->b_data = unmapped_buf; + } + bp->b_flags |= B_CLUSTER | (tbp->b_flags & (B_VMIO | + B_NEEDCOMMIT)); bp->b_iodone = cluster_callback; pbgetvp(vp, bp); /* @@ -956,8 +961,10 @@ cluster_wbuild(vp, size, start_lbn, len) tbp, b_cluster.cluster_entry); } finishcluster: - pmap_qenter(trunc_page((vm_offset_t) bp->b_data), - (vm_page_t *) bp->b_pages, bp->b_npages); + if ((bp->b_flags & B_NOTMAPPED) == 0) { + pmap_qenter(trunc_page((vm_offset_t) bp->b_data), + (vm_page_t *)bp->b_pages, bp->b_npages); + } if (bp->b_bufsize > bp->b_kvasize) panic( "cluster_wbuild: b_bufsize(%ld) > b_kvasize(%d)\n", @@ -978,9 +985,7 @@ cluster_wbuild(vp, size, start_lbn, len) * Plus add one additional buffer. */ static struct cluster_save * -cluster_collectbufs(vp, last_bp) - struct vnode *vp; - struct buf *last_bp; +cluster_collectbufs(struct vnode *vp, struct buf *last_bp, int gbflags) { struct cluster_save *buflist; struct buf *bp; @@ -993,7 +998,8 @@ cluster_collectbufs(vp, last_bp) buflist->bs_nchildren = 0; buflist->bs_children = (struct buf **) (buflist + 1); for (lbn = vp->v_cstart, i = 0; i < len; lbn++, i++) { - (void) bread(vp, lbn, last_bp->b_bcount, NOCRED, &bp); + (void)bread_gb(vp, lbn, last_bp->b_bcount, NOCRED, + gbflags, &bp); buflist->bs_children[i] = bp; if (bp->b_blkno == bp->b_lblkno) VOP_BMAP(vp, bp->b_lblkno, NULL, &bp->b_blkno, diff --git a/sys/kern/vfs_vnops.c b/sys/kern/vfs_vnops.c index 3f65b05..97db8ab 100644 --- a/sys/kern/vfs_vnops.c +++ b/sys/kern/vfs_vnops.c @@ -1121,6 +1121,45 @@ vn_io_fault_uiomove(char *data, int xfersize, struct uio *uio) return (error); } +int +vn_io_fault_pgmove(vm_page_t ma[], vm_offset_t offset, int xfersize, + struct uio *uio) +{ + struct thread *td; + vm_offset_t iov_base; + int cnt, pgadv; + + td = curthread; + if ((td->td_pflags & TDP_UIOHELD) == 0 || + uio->uio_segflg != UIO_USERSPACE) + return (uiomove_fromphys(ma, offset, xfersize, uio)); + + KASSERT(uio->uio_iovcnt == 1, ("uio_iovcnt %d", uio->uio_iovcnt)); + cnt = xfersize > uio->uio_resid ? uio->uio_resid : xfersize; + iov_base = (vm_offset_t)uio->uio_iov->iov_base; + switch (uio->uio_rw) { + case UIO_WRITE: + pmap_copy_pages(td->td_ma, iov_base & PAGE_MASK, ma, + offset, cnt); + break; + case UIO_READ: + pmap_copy_pages(ma, offset, td->td_ma, iov_base & PAGE_MASK, + cnt); + break; + } + pgadv = ((iov_base + cnt) >> PAGE_SHIFT) - (iov_base >> PAGE_SHIFT); + td->td_ma += pgadv; + KASSERT(td->td_ma_cnt >= pgadv, ("consumed pages %d %d", td->td_ma_cnt, + pgadv)); + td->td_ma_cnt -= pgadv; + uio->uio_iov->iov_base = (char *)(iov_base + cnt); + uio->uio_iov->iov_len -= cnt; + uio->uio_resid -= cnt; + uio->uio_offset += cnt; + return (0); +} + + /* * File table truncate routine. */ diff --git a/sys/sys/bio.h b/sys/sys/bio.h index c016ee6..d121e9a 100644 --- a/sys/sys/bio.h +++ b/sys/sys/bio.h @@ -55,10 +55,13 @@ #define BIO_DONE 0x02 #define BIO_ONQUEUE 0x04 #define BIO_ORDERED 0x08 +#define BIO_NOTMAPPED 0x10 +#define BIO_TRANSIENT_MAPPING 0x20 #ifdef _KERNEL struct disk; struct bio; +struct vm_map; /* Empty classifier tag, to prevent further classification. */ #define BIO_NOTCLASSIFIED (void *)(~0UL) @@ -78,6 +81,8 @@ struct bio { off_t bio_offset; /* Offset into file. */ long bio_bcount; /* Valid bytes in buffer. */ caddr_t bio_data; /* Memory, superblocks, indirect etc. */ + struct vm_page **bio_ma; /* Or unmapped. */ + int bio_ma_offset; /* Offset in the first page of bio_ma. */ int bio_error; /* Errno for BIO_ERROR. */ long bio_resid; /* Remaining I/O in bytes. */ void (*bio_done)(struct bio *); @@ -121,6 +126,8 @@ struct bio_queue_head { struct bio *insert_point; }; +extern struct vm_map *bio_transient_map; + void biodone(struct bio *bp); void biofinish(struct bio *bp, struct devstat *stat, int error); int biowait(struct bio *bp, const char *wchan); diff --git a/sys/sys/buf.h b/sys/sys/buf.h index 418d6c5..792f2b5 100644 --- a/sys/sys/buf.h +++ b/sys/sys/buf.h @@ -117,6 +117,7 @@ struct buf { long b_bufsize; /* Allocated buffer size. */ long b_runningbufspace; /* when I/O is running, pipelining */ caddr_t b_kvabase; /* base kva for buffer */ + caddr_t b_kvaalloc; /* allocated kva for B_KVAALLOC */ int b_kvasize; /* size of kva for buffer */ daddr_t b_lblkno; /* Logical block number. */ struct vnode *b_vp; /* Device vnode. */ @@ -202,8 +203,8 @@ struct buf { #define B_PERSISTENT 0x00000100 /* Perm. ref'ed while EXT2FS mounted. */ #define B_DONE 0x00000200 /* I/O completed. */ #define B_EINTR 0x00000400 /* I/O was interrupted */ -#define B_00000800 0x00000800 /* Available flag. */ -#define B_00001000 0x00001000 /* Available flag. */ +#define B_NOTMAPPED 0x00000800 /* KVA is not mapped. */ +#define B_KVAALLOC 0x00001000 /* But allocated. */ #define B_INVAL 0x00002000 /* Does not contain valid info. */ #define B_00004000 0x00004000 /* Available flag. */ #define B_NOCACHE 0x00008000 /* Do not cache block after use. */ @@ -453,7 +454,9 @@ buf_countdeps(struct buf *bp, int i) */ #define GB_LOCK_NOWAIT 0x0001 /* Fail if we block on a buf lock. */ #define GB_NOCREAT 0x0002 /* Don't create a buf if not found. */ -#define GB_NOWAIT_BD 0x0004 /* Do not wait for bufdaemon */ +#define GB_NOWAIT_BD 0x0004 /* Do not wait for bufdaemon. */ +#define GB_NOTMAPPED 0x0008 /* Do not mmap buffer pages. */ +#define GB_KVAALLOC 0x0010 /* But allocate KVA. */ #ifdef _KERNEL extern int nbuf; /* The number of buffer headers */ @@ -470,6 +473,7 @@ extern struct buf *swbuf; /* Swap I/O buffer headers. */ extern int nswbuf; /* Number of swap I/O buffer headers. */ extern int cluster_pbuf_freecnt; /* Number of pbufs for clusters */ extern int vnode_pbuf_freecnt; /* Number of pbufs for vnode pager */ +extern caddr_t unmapped_buf; void runningbufwakeup(struct buf *); void waitrunningbufspace(void); @@ -480,7 +484,10 @@ int buf_dirty_count_severe(void); void bremfree(struct buf *); void bremfreef(struct buf *); /* XXX Force bremfree, only for nfs. */ #define bread(vp, blkno, size, cred, bpp) \ - breadn_flags(vp, blkno, size, 0, 0, 0, cred, 0, bpp) + breadn_flags(vp, blkno, size, NULL, NULL, 0, cred, 0, bpp) +#define bread_gb(vp, blkno, size, cred, gbflags, bpp) \ + breadn_flags(vp, blkno, size, NULL, NULL, 0, cred, \ + gbflags, bpp) #define breadn(vp, blkno, size, rablkno, rabsize, cnt, cred, bpp) \ breadn_flags(vp, blkno, size, rablkno, rabsize, cnt, cred, 0, bpp) int breadn_flags(struct vnode *, daddr_t, int, daddr_t *, int *, int, @@ -506,9 +513,10 @@ void bufdone_finish(struct buf *); void bd_speedup(void); int cluster_read(struct vnode *, u_quad_t, daddr_t, long, - struct ucred *, long, int, struct buf **); -int cluster_wbuild(struct vnode *, long, daddr_t, int); -void cluster_write(struct vnode *, struct buf *, u_quad_t, int); + struct ucred *, long, int, int, struct buf **); +int cluster_wbuild(struct vnode *, long, daddr_t, int, int); +void cluster_write(struct vnode *, struct buf *, u_quad_t, int, int); +void vfs_bio_bzero_buf(struct buf *bp, int base, int size); void vfs_bio_set_valid(struct buf *, int base, int size); void vfs_bio_clrbuf(struct buf *); void vfs_busy_pages(struct buf *, int clear_modify); diff --git a/sys/sys/mount.h b/sys/sys/mount.h index ed2b002..fceaa10 100644 --- a/sys/sys/mount.h +++ b/sys/sys/mount.h @@ -374,6 +374,7 @@ void __mnt_vnode_markerfree(struct vnode **mvp, struct mount *mp); #define MNTK_VGONE_WAITER 0x00000400 #define MNTK_LOOKUP_EXCL_DOTDOT 0x00000800 #define MNTK_MARKER 0x00001000 +#define MNTK_UNMAPPED_BUFS 0x00002000 #define MNTK_NOASYNC 0x00800000 /* disable async */ #define MNTK_UNMOUNT 0x01000000 /* unmount in progress */ #define MNTK_MWAIT 0x02000000 /* waiting for unmount to finish */ diff --git a/sys/sys/vnode.h b/sys/sys/vnode.h index 42f9e5f..032a7fa 100644 --- a/sys/sys/vnode.h +++ b/sys/sys/vnode.h @@ -687,6 +687,8 @@ int vn_vget_ino(struct vnode *vp, ino_t ino, int lkflags, struct vnode **rvp); int vn_io_fault_uiomove(char *data, int xfersize, struct uio *uio); +int vn_io_fault_pgmove(vm_page_t ma[], vm_offset_t offset, int xfersize, + struct uio *uio); #define vn_rangelock_unlock(vp, cookie) \ rangelock_unlock(&(vp)->v_rl, (cookie), VI_MTX(vp)) diff --git a/sys/ufs/ffs/ffs_alloc.c b/sys/ufs/ffs/ffs_alloc.c index 5ad5775..f5a5253 100644 --- a/sys/ufs/ffs/ffs_alloc.c +++ b/sys/ufs/ffs/ffs_alloc.c @@ -254,7 +254,7 @@ ffs_realloccg(ip, lbprev, bprev, bpref, osize, nsize, flags, cred, bpp) struct buf *bp; struct ufsmount *ump; u_int cg, request, reclaimed; - int error; + int error, gbflags; ufs2_daddr_t bno; static struct timeval lastfail; static int curfail; @@ -265,6 +265,8 @@ ffs_realloccg(ip, lbprev, bprev, bpref, osize, nsize, flags, cred, bpp) fs = ip->i_fs; bp = NULL; ump = ip->i_ump; + gbflags = (flags & BA_NOTMAPPED) != 0 ? GB_NOTMAPPED : 0; + mtx_assert(UFS_MTX(ump), MA_OWNED); #ifdef INVARIANTS if (vp->v_mount->mnt_kern_flag & MNTK_SUSPENDED) @@ -296,7 +298,7 @@ retry: /* * Allocate the extra space in the buffer. */ - error = bread(vp, lbprev, osize, NOCRED, &bp); + error = bread_gb(vp, lbprev, osize, NOCRED, gbflags, &bp); if (error) { brelse(bp); return (error); @@ -332,7 +334,7 @@ retry: ip->i_flag |= IN_CHANGE | IN_UPDATE; allocbuf(bp, nsize); bp->b_flags |= B_DONE; - bzero(bp->b_data + osize, nsize - osize); + vfs_bio_bzero_buf(bp, osize, nsize - osize); if ((bp->b_flags & (B_MALLOC | B_VMIO)) == B_VMIO) vfs_bio_set_valid(bp, osize, nsize - osize); *bpp = bp; @@ -400,7 +402,7 @@ retry: ip->i_flag |= IN_CHANGE | IN_UPDATE; allocbuf(bp, nsize); bp->b_flags |= B_DONE; - bzero(bp->b_data + osize, nsize - osize); + vfs_bio_bzero_buf(bp, osize, nsize - osize); if ((bp->b_flags & (B_MALLOC | B_VMIO)) == B_VMIO) vfs_bio_set_valid(bp, osize, nsize - osize); *bpp = bp; diff --git a/sys/ufs/ffs/ffs_balloc.c b/sys/ufs/ffs/ffs_balloc.c index 0e29be87f..667e101 100644 --- a/sys/ufs/ffs/ffs_balloc.c +++ b/sys/ufs/ffs/ffs_balloc.c @@ -107,7 +107,7 @@ ffs_balloc_ufs1(struct vnode *vp, off_t startoffset, int size, int saved_inbdflush; static struct timeval lastfail; static int curfail; - int reclaimed; + int gbflags, reclaimed; ip = VTOI(vp); dp = ip->i_din1; @@ -123,6 +123,7 @@ ffs_balloc_ufs1(struct vnode *vp, off_t startoffset, int size, return (EOPNOTSUPP); if (lbn < 0) return (EFBIG); + gbflags = (flags & BA_NOTMAPPED) != 0 ? GB_NOTMAPPED : 0; if (DOINGSOFTDEP(vp)) softdep_prealloc(vp, MNT_WAIT); @@ -211,7 +212,7 @@ ffs_balloc_ufs1(struct vnode *vp, off_t startoffset, int size, nsize, flags, cred, &newb); if (error) return (error); - bp = getblk(vp, lbn, nsize, 0, 0, 0); + bp = getblk(vp, lbn, nsize, 0, 0, gbflags); bp->b_blkno = fsbtodb(fs, newb); if (flags & BA_CLRBUF) vfs_bio_clrbuf(bp); @@ -255,7 +256,7 @@ ffs_balloc_ufs1(struct vnode *vp, off_t startoffset, int size, nb = newb; *allocblk++ = nb; *lbns_remfree++ = indirs[1].in_lbn; - bp = getblk(vp, indirs[1].in_lbn, fs->fs_bsize, 0, 0, 0); + bp = getblk(vp, indirs[1].in_lbn, fs->fs_bsize, 0, 0, gbflags); bp->b_blkno = fsbtodb(fs, nb); vfs_bio_clrbuf(bp); if (DOINGSOFTDEP(vp)) { @@ -389,7 +390,7 @@ retry: nb = newb; *allocblk++ = nb; *lbns_remfree++ = lbn; - nbp = getblk(vp, lbn, fs->fs_bsize, 0, 0, 0); + nbp = getblk(vp, lbn, fs->fs_bsize, 0, 0, gbflags); nbp->b_blkno = fsbtodb(fs, nb); if (flags & BA_CLRBUF) vfs_bio_clrbuf(nbp); @@ -418,16 +419,17 @@ retry: if (seqcount && (vp->v_mount->mnt_flag & MNT_NOCLUSTERR) == 0) { error = cluster_read(vp, ip->i_size, lbn, (int)fs->fs_bsize, NOCRED, - MAXBSIZE, seqcount, &nbp); + MAXBSIZE, seqcount, gbflags, &nbp); } else { - error = bread(vp, lbn, (int)fs->fs_bsize, NOCRED, &nbp); + error = bread_gb(vp, lbn, (int)fs->fs_bsize, NOCRED, + gbflags, &nbp); } if (error) { brelse(nbp); goto fail; } } else { - nbp = getblk(vp, lbn, fs->fs_bsize, 0, 0, 0); + nbp = getblk(vp, lbn, fs->fs_bsize, 0, 0, gbflags); nbp->b_blkno = fsbtodb(fs, nb); } curthread_pflags_restore(saved_inbdflush); @@ -539,7 +541,7 @@ ffs_balloc_ufs2(struct vnode *vp, off_t startoffset, int size, int saved_inbdflush; static struct timeval lastfail; static int curfail; - int reclaimed; + int gbflags, reclaimed; ip = VTOI(vp); dp = ip->i_din2; @@ -553,6 +555,7 @@ ffs_balloc_ufs2(struct vnode *vp, off_t startoffset, int size, *bpp = NULL; if (lbn < 0) return (EFBIG); + gbflags = (flags & BA_NOTMAPPED) != 0 ? GB_NOTMAPPED : 0; if (DOINGSOFTDEP(vp)) softdep_prealloc(vp, MNT_WAIT); @@ -603,7 +606,8 @@ ffs_balloc_ufs2(struct vnode *vp, off_t startoffset, int size, panic("ffs_balloc_ufs2: BA_METAONLY for ext block"); nb = dp->di_extb[lbn]; if (nb != 0 && dp->di_extsize >= smalllblktosize(fs, lbn + 1)) { - error = bread(vp, -1 - lbn, fs->fs_bsize, NOCRED, &bp); + error = bread_gb(vp, -1 - lbn, fs->fs_bsize, NOCRED, + gbflags, &bp); if (error) { brelse(bp); return (error); @@ -620,7 +624,8 @@ ffs_balloc_ufs2(struct vnode *vp, off_t startoffset, int size, osize = fragroundup(fs, blkoff(fs, dp->di_extsize)); nsize = fragroundup(fs, size); if (nsize <= osize) { - error = bread(vp, -1 - lbn, osize, NOCRED, &bp); + error = bread_gb(vp, -1 - lbn, osize, NOCRED, + gbflags, &bp); if (error) { brelse(bp); return (error); @@ -653,7 +658,7 @@ ffs_balloc_ufs2(struct vnode *vp, off_t startoffset, int size, nsize, flags, cred, &newb); if (error) return (error); - bp = getblk(vp, -1 - lbn, nsize, 0, 0, 0); + bp = getblk(vp, -1 - lbn, nsize, 0, 0, gbflags); bp->b_blkno = fsbtodb(fs, newb); bp->b_xflags |= BX_ALTDATA; if (flags & BA_CLRBUF) @@ -679,9 +684,9 @@ ffs_balloc_ufs2(struct vnode *vp, off_t startoffset, int size, if (osize < fs->fs_bsize && osize > 0) { UFS_LOCK(ump); error = ffs_realloccg(ip, nb, dp->di_db[nb], - ffs_blkpref_ufs2(ip, lastlbn, (int)nb, - &dp->di_db[0]), osize, (int)fs->fs_bsize, - flags, cred, &bp); + ffs_blkpref_ufs2(ip, lastlbn, (int)nb, + &dp->di_db[0]), osize, (int)fs->fs_bsize, + flags, cred, &bp); if (error) return (error); if (DOINGSOFTDEP(vp)) @@ -707,7 +712,8 @@ ffs_balloc_ufs2(struct vnode *vp, off_t startoffset, int size, panic("ffs_balloc_ufs2: BA_METAONLY for direct block"); nb = dp->di_db[lbn]; if (nb != 0 && ip->i_size >= smalllblktosize(fs, lbn + 1)) { - error = bread(vp, lbn, fs->fs_bsize, NOCRED, &bp); + error = bread_gb(vp, lbn, fs->fs_bsize, NOCRED, + gbflags, &bp); if (error) { brelse(bp); return (error); @@ -723,7 +729,8 @@ ffs_balloc_ufs2(struct vnode *vp, off_t startoffset, int size, osize = fragroundup(fs, blkoff(fs, ip->i_size)); nsize = fragroundup(fs, size); if (nsize <= osize) { - error = bread(vp, lbn, osize, NOCRED, &bp); + error = bread_gb(vp, lbn, osize, NOCRED, + gbflags, &bp); if (error) { brelse(bp); return (error); @@ -733,7 +740,7 @@ ffs_balloc_ufs2(struct vnode *vp, off_t startoffset, int size, UFS_LOCK(ump); error = ffs_realloccg(ip, lbn, dp->di_db[lbn], ffs_blkpref_ufs2(ip, lbn, (int)lbn, - &dp->di_db[0]), osize, nsize, flags, + &dp->di_db[0]), osize, nsize, flags, cred, &bp); if (error) return (error); @@ -753,7 +760,7 @@ ffs_balloc_ufs2(struct vnode *vp, off_t startoffset, int size, &dp->di_db[0]), nsize, flags, cred, &newb); if (error) return (error); - bp = getblk(vp, lbn, nsize, 0, 0, 0); + bp = getblk(vp, lbn, nsize, 0, 0, gbflags); bp->b_blkno = fsbtodb(fs, newb); if (flags & BA_CLRBUF) vfs_bio_clrbuf(bp); @@ -797,7 +804,8 @@ ffs_balloc_ufs2(struct vnode *vp, off_t startoffset, int size, nb = newb; *allocblk++ = nb; *lbns_remfree++ = indirs[1].in_lbn; - bp = getblk(vp, indirs[1].in_lbn, fs->fs_bsize, 0, 0, 0); + bp = getblk(vp, indirs[1].in_lbn, fs->fs_bsize, 0, 0, + GB_NOTMAPPED); bp->b_blkno = fsbtodb(fs, nb); vfs_bio_clrbuf(bp); if (DOINGSOFTDEP(vp)) { @@ -862,7 +870,8 @@ retry: nb = newb; *allocblk++ = nb; *lbns_remfree++ = indirs[i].in_lbn; - nbp = getblk(vp, indirs[i].in_lbn, fs->fs_bsize, 0, 0, 0); + nbp = getblk(vp, indirs[i].in_lbn, fs->fs_bsize, 0, 0, + GB_NOTMAPPED); nbp->b_blkno = fsbtodb(fs, nb); vfs_bio_clrbuf(nbp); if (DOINGSOFTDEP(vp)) { @@ -931,7 +940,7 @@ retry: nb = newb; *allocblk++ = nb; *lbns_remfree++ = lbn; - nbp = getblk(vp, lbn, fs->fs_bsize, 0, 0, 0); + nbp = getblk(vp, lbn, fs->fs_bsize, 0, 0, gbflags); nbp->b_blkno = fsbtodb(fs, nb); if (flags & BA_CLRBUF) vfs_bio_clrbuf(nbp); @@ -966,16 +975,17 @@ retry: if (seqcount && (vp->v_mount->mnt_flag & MNT_NOCLUSTERR) == 0) { error = cluster_read(vp, ip->i_size, lbn, (int)fs->fs_bsize, NOCRED, - MAXBSIZE, seqcount, &nbp); + MAXBSIZE, seqcount, gbflags, &nbp); } else { - error = bread(vp, lbn, (int)fs->fs_bsize, NOCRED, &nbp); + error = bread_gb(vp, lbn, (int)fs->fs_bsize, + NOCRED, gbflags, &nbp); } if (error) { brelse(nbp); goto fail; } } else { - nbp = getblk(vp, lbn, fs->fs_bsize, 0, 0, 0); + nbp = getblk(vp, lbn, fs->fs_bsize, 0, 0, gbflags); nbp->b_blkno = fsbtodb(fs, nb); } curthread_pflags_restore(saved_inbdflush); diff --git a/sys/ufs/ffs/ffs_vfsops.c b/sys/ufs/ffs/ffs_vfsops.c index 83ae202..54dd140 100644 --- a/sys/ufs/ffs/ffs_vfsops.c +++ b/sys/ufs/ffs/ffs_vfsops.c @@ -1076,7 +1076,7 @@ ffs_mountfs(devvp, mp, td) */ MNT_ILOCK(mp); mp->mnt_kern_flag |= MNTK_LOOKUP_SHARED | MNTK_EXTENDED_SHARED | - MNTK_NO_IOPF; + MNTK_NO_IOPF | MNTK_UNMAPPED_BUFS; MNT_IUNLOCK(mp); #ifdef UFS_EXTATTR #ifdef UFS_EXTATTR_AUTOSTART @@ -2095,6 +2095,7 @@ ffs_bufwrite(struct buf *bp) * set b_lblkno and BKGRDMARKER before calling bgetvp() * to avoid confusing the splay tree and gbincore(). */ + KASSERT((bp->b_flags & B_NOTMAPPED) == 0, ("Unmapped cg")); memcpy(newbp->b_data, bp->b_data, bp->b_bufsize); newbp->b_lblkno = bp->b_lblkno; newbp->b_xflags |= BX_BKGRDMARKER; diff --git a/sys/ufs/ffs/ffs_vnops.c b/sys/ufs/ffs/ffs_vnops.c index 5c99d5b..42d5263 100644 --- a/sys/ufs/ffs/ffs_vnops.c +++ b/sys/ufs/ffs/ffs_vnops.c @@ -508,7 +508,8 @@ ffs_read(ap) /* * Don't do readahead if this is the end of the file. */ - error = bread(vp, lbn, size, NOCRED, &bp); + error = bread_gb(vp, lbn, size, NOCRED, + GB_NOTMAPPED, &bp); } else if ((vp->v_mount->mnt_flag & MNT_NOCLUSTERR) == 0) { /* * Otherwise if we are allowed to cluster, @@ -518,7 +519,8 @@ ffs_read(ap) * doing sequential access. */ error = cluster_read(vp, ip->i_size, lbn, - size, NOCRED, blkoffset + uio->uio_resid, seqcount, &bp); + size, NOCRED, blkoffset + uio->uio_resid, + seqcount, GB_NOTMAPPED, &bp); } else if (seqcount > 1) { /* * If we are NOT allowed to cluster, then @@ -529,15 +531,16 @@ ffs_read(ap) * the 6th argument. */ int nextsize = blksize(fs, ip, nextlbn); - error = breadn(vp, lbn, - size, &nextlbn, &nextsize, 1, NOCRED, &bp); + error = breadn_flags(vp, lbn, size, &nextlbn, + &nextsize, 1, NOCRED, GB_NOTMAPPED, &bp); } else { /* * Failing all of the above, just read what the * user asked for. Interestingly, the same as * the first option above. */ - error = bread(vp, lbn, size, NOCRED, &bp); + error = bread_gb(vp, lbn, size, NOCRED, + GB_NOTMAPPED, &bp); } if (error) { brelse(bp); @@ -568,8 +571,13 @@ ffs_read(ap) xfersize = size; } - error = vn_io_fault_uiomove((char *)bp->b_data + blkoffset, - (int)xfersize, uio); + if ((bp->b_flags & B_NOTMAPPED) == 0) { + error = vn_io_fault_uiomove((char *)bp->b_data + + blkoffset, (int)xfersize, uio); + } else { + error = vn_io_fault_pgmove(bp->b_pages, blkoffset, + (int)xfersize, uio); + } if (error) break; @@ -700,6 +708,7 @@ ffs_write(ap) flags = seqcount << BA_SEQSHIFT; if ((ioflag & IO_SYNC) && !DOINGASYNC(vp)) flags |= IO_SYNC; + flags |= BA_NOTMAPPED; for (error = 0; uio->uio_resid > 0;) { lbn = lblkno(fs, uio->uio_offset); @@ -739,8 +748,13 @@ ffs_write(ap) if (size < xfersize) xfersize = size; - error = vn_io_fault_uiomove((char *)bp->b_data + blkoffset, - (int)xfersize, uio); + if ((bp->b_flags & B_NOTMAPPED) == 0) { + error = vn_io_fault_uiomove((char *)bp->b_data + + blkoffset, (int)xfersize, uio); + } else { + error = vn_io_fault_pgmove(bp->b_pages, blkoffset, + (int)xfersize, uio); + } /* * If the buffer is not already filled and we encounter an * error while trying to fill it, we have to clear out any @@ -783,7 +797,8 @@ ffs_write(ap) } else if (xfersize + blkoffset == fs->fs_bsize) { if ((vp->v_mount->mnt_flag & MNT_NOCLUSTERW) == 0) { bp->b_flags |= B_CLUSTEROK; - cluster_write(vp, bp, ip->i_size, seqcount); + cluster_write(vp, bp, ip->i_size, seqcount, + GB_NOTMAPPED); } else { bawrite(bp); } diff --git a/sys/ufs/ufs/ufs_extern.h b/sys/ufs/ufs/ufs_extern.h index c590748..82973a2 100644 --- a/sys/ufs/ufs/ufs_extern.h +++ b/sys/ufs/ufs/ufs_extern.h @@ -121,6 +121,7 @@ void softdep_revert_rmdir(struct inode *, struct inode *); */ #define BA_CLRBUF 0x00010000 /* Clear invalid areas of buffer. */ #define BA_METAONLY 0x00020000 /* Return indirect block buffer. */ +#define BA_NOTMAPPED 0x00040000 /* Do not mmap resulted buffer. */ #define BA_SEQMASK 0x7F000000 /* Bits holding seq heuristic. */ #define BA_SEQSHIFT 24 #define BA_SEQMAX 0x7F diff --git a/sys/vm/pmap.h b/sys/vm/pmap.h index d06c22b..c64a549 100644 --- a/sys/vm/pmap.h +++ b/sys/vm/pmap.h @@ -108,6 +108,8 @@ void pmap_clear_modify(vm_page_t m); void pmap_clear_reference(vm_page_t m); void pmap_copy(pmap_t, pmap_t, vm_offset_t, vm_size_t, vm_offset_t); void pmap_copy_page(vm_page_t, vm_page_t); +void pmap_copy_pages(vm_page_t ma[], vm_offset_t a_offset, + vm_page_t mb[], vm_offset_t b_offset, int xfersize); void pmap_enter(pmap_t, vm_offset_t, vm_prot_t, vm_page_t, vm_prot_t, boolean_t); void pmap_enter_object(pmap_t pmap, vm_offset_t start, diff --git a/sys/vm/swap_pager.c b/sys/vm/swap_pager.c index 44bff25..95f4707 100644 --- a/sys/vm/swap_pager.c +++ b/sys/vm/swap_pager.c @@ -758,6 +758,16 @@ swp_pager_strategy(struct buf *bp) TAILQ_FOREACH(sp, &swtailq, sw_list) { if (bp->b_blkno >= sp->sw_first && bp->b_blkno < sp->sw_end) { mtx_unlock(&sw_dev_mtx); + if ((sp->sw_flags & SW_NOTMAPPED) != 0) { + bp->b_kvaalloc = bp->b_data; + bp->b_data = unmapped_buf; + bp->b_kvabase = unmapped_buf; + bp->b_offset = 0; + bp->b_flags |= B_NOTMAPPED; + } else { + pmap_qenter((vm_offset_t)bp->b_data, + &bp->b_pages[0], bp->b_bcount / PAGE_SIZE); + } sp->sw_strategy(bp, sp); return; } @@ -1155,11 +1165,6 @@ swap_pager_getpages(vm_object_t object, vm_page_t *m, int count, int reqpage) bp = getpbuf(&nsw_rcount); bp->b_flags |= B_PAGING; - /* - * map our page(s) into kva for input - */ - pmap_qenter((vm_offset_t)bp->b_data, m + i, j - i); - bp->b_iocmd = BIO_READ; bp->b_iodone = swp_pager_async_iodone; bp->b_rcred = crhold(thread0.td_ucred); @@ -1371,8 +1376,6 @@ swap_pager_putpages(vm_object_t object, vm_page_t *m, int count, bp->b_flags |= B_PAGING; bp->b_iocmd = BIO_WRITE; - pmap_qenter((vm_offset_t)bp->b_data, &m[i], n); - bp->b_rcred = crhold(thread0.td_ucred); bp->b_wcred = crhold(thread0.td_ucred); bp->b_bcount = PAGE_SIZE * n; @@ -1484,7 +1487,12 @@ swp_pager_async_iodone(struct buf *bp) /* * remove the mapping for kernel virtual */ - pmap_qremove((vm_offset_t)bp->b_data, bp->b_npages); + if ((bp->b_flags & B_NOTMAPPED) != 0) { + bp->b_data = bp->b_kvaalloc; + bp->b_kvabase = bp->b_kvaalloc; + bp->b_flags &= ~B_NOTMAPPED; + } else + pmap_qremove((vm_offset_t)bp->b_data, bp->b_npages); if (bp->b_npages) { object = bp->b_pages[0]->object; @@ -2144,7 +2152,8 @@ swapon_check_swzone(unsigned long npages) } static void -swaponsomething(struct vnode *vp, void *id, u_long nblks, sw_strategy_t *strategy, sw_close_t *close, dev_t dev) +swaponsomething(struct vnode *vp, void *id, u_long nblks, + sw_strategy_t *strategy, sw_close_t *close, dev_t dev, int flags) { struct swdevt *sp, *tsp; swblk_t dvbase; @@ -2180,6 +2189,7 @@ swaponsomething(struct vnode *vp, void *id, u_long nblks, sw_strategy_t *strateg sp->sw_used = 0; sp->sw_strategy = strategy; sp->sw_close = close; + sp->sw_flags = flags; sp->sw_blist = blist_create(nblks, M_WAITOK); /* @@ -2537,10 +2547,18 @@ swapgeom_strategy(struct buf *bp, struct swdevt *sp) bio->bio_caller2 = bp; bio->bio_cmd = bp->b_iocmd; - bio->bio_data = bp->b_data; bio->bio_offset = (bp->b_blkno - sp->sw_first) * PAGE_SIZE; bio->bio_length = bp->b_bcount; bio->bio_done = swapgeom_done; + if ((bp->b_flags & B_NOTMAPPED) != 0) { + bio->bio_ma = bp->b_pages; + bio->bio_data = unmapped_buf; + bio->bio_ma_offset = (vm_offset_t)bp->b_offset & PAGE_MASK; + bio->bio_flags |= BIO_NOTMAPPED; + } else { + bio->bio_data = bp->b_data; + bio->bio_ma = NULL; + } g_io_request(bio, cp); return; } @@ -2630,9 +2648,9 @@ swapongeom_ev(void *arg, int flags) } nblks = pp->mediasize / DEV_BSIZE; swaponsomething(swh->vp, cp, nblks, swapgeom_strategy, - swapgeom_close, dev2udev(swh->dev)); + swapgeom_close, dev2udev(swh->dev), + (pp->flags & G_PF_ACCEPT_UNMAPPED) != 0 ? SW_NOTMAPPED : 0); swh->error = 0; - return; } static int @@ -2721,6 +2739,6 @@ swaponvp(struct thread *td, struct vnode *vp, u_long nblks) return (error); swaponsomething(vp, vp, nblks, swapdev_strategy, swapdev_close, - NODEV); + NODEV, 0); return (0); } diff --git a/sys/vm/swap_pager.h b/sys/vm/swap_pager.h index 5c716d9..bd6d8e3 100644 --- a/sys/vm/swap_pager.h +++ b/sys/vm/swap_pager.h @@ -68,6 +68,7 @@ struct swdevt { sw_close_t *sw_close; }; +#define SW_NOTMAPPED 0x01 #define SW_CLOSING 0x04 #ifdef _KERNEL diff --git a/sys/vm/vm.h b/sys/vm/vm.h index 132c10e..106c510 100644 --- a/sys/vm/vm.h +++ b/sys/vm/vm.h @@ -136,6 +136,8 @@ struct kva_md_info { vm_offset_t clean_eva; vm_offset_t pager_sva; vm_offset_t pager_eva; + vm_offset_t bio_transient_sva; + vm_offset_t bio_transient_eva; }; extern struct kva_md_info kmi; diff --git a/sys/vm/vm_init.c b/sys/vm/vm_init.c index c507691..089c827 100644 --- a/sys/vm/vm_init.c +++ b/sys/vm/vm_init.c @@ -186,10 +186,14 @@ again: panic("startup: table size inconsistency"); clean_map = kmem_suballoc(kernel_map, &kmi->clean_sva, &kmi->clean_eva, - (long)nbuf * BKVASIZE + (long)nswbuf * MAXPHYS, TRUE); + (long)nbuf * BKVASIZE + (long)nswbuf * MAXPHYS + + (long)/*XXXKIB*/1024 * BKVASIZE, TRUE); buffer_map = kmem_suballoc(clean_map, &kmi->buffer_sva, &kmi->buffer_eva, (long)nbuf * BKVASIZE, FALSE); buffer_map->system_map = 1; + bio_transient_map = kmem_suballoc(clean_map, &kmi->bio_transient_sva, + &kmi->bio_transient_eva, /*XXXKIB*/1024 * BKVASIZE, FALSE); + bio_transient_map->system_map = 1; pager_map = kmem_suballoc(clean_map, &kmi->pager_sva, &kmi->pager_eva, (long)nswbuf * MAXPHYS, FALSE); pager_map->system_map = 1; diff --git a/sys/vm/vm_kern.c b/sys/vm/vm_kern.c index f731895..1d78a7d 100644 --- a/sys/vm/vm_kern.c +++ b/sys/vm/vm_kern.c @@ -85,11 +85,12 @@ __FBSDID("$FreeBSD$"); #include #include -vm_map_t kernel_map=0; -vm_map_t kmem_map=0; -vm_map_t exec_map=0; +vm_map_t kernel_map; +vm_map_t kmem_map; +vm_map_t exec_map; vm_map_t pipe_map; -vm_map_t buffer_map=0; +vm_map_t buffer_map; +vm_map_t bio_transient_map; const void *zero_region; CTASSERT((ZERO_REGION_SIZE & PAGE_MASK) == 0); diff --git a/sys/vm/vnode_pager.c b/sys/vm/vnode_pager.c index a6d78f4..0031b9f 100644 --- a/sys/vm/vnode_pager.c +++ b/sys/vm/vnode_pager.c @@ -697,6 +697,7 @@ vnode_pager_generic_getpages(vp, m, bytecount, reqpage) int runpg; int runend; struct buf *bp; + struct mount *mp; int count; int error; @@ -899,12 +900,22 @@ vnode_pager_generic_getpages(vp, m, bytecount, reqpage) } bp = getpbuf(&vnode_pbuf_freecnt); - kva = (vm_offset_t) bp->b_data; + kva = (vm_offset_t)bp->b_data; /* - * and map the pages to be read into the kva + * and map the pages to be read into the kva, if the filesystem + * requires mapped buffers. */ - pmap_qenter(kva, m, count); + mp = vp->v_mount; + if (mp != NULL && (mp->mnt_kern_flag & MNTK_UNMAPPED_BUFS) != 0) { + bp->b_data = unmapped_buf; + bp->b_kvabase = unmapped_buf; + bp->b_offset = 0; + bp->b_flags |= B_NOTMAPPED; + for (i = 0; i < count; i++) + bp->b_pages[i] = m[i]; + } else + pmap_qenter(kva, m, count); /* build a minimal buffer header */ bp->b_iocmd = BIO_READ; @@ -933,11 +944,17 @@ vnode_pager_generic_getpages(vp, m, bytecount, reqpage) if ((bp->b_ioflags & BIO_ERROR) != 0) error = EIO; - if (!error) { - if (size != count * PAGE_SIZE) - bzero((caddr_t) kva + size, PAGE_SIZE * count - size); + if (mp != NULL && (mp->mnt_kern_flag & MNTK_UNMAPPED_BUFS) != 0) { + bp->b_data = (caddr_t)kva; + bp->b_kvabase = (caddr_t)kva; + bp->b_flags &= ~B_NOTMAPPED; + for (i = 0; i < count; i++) + bp->b_pages[i] = NULL; + } else { + if (error != 0 && size != count * PAGE_SIZE) + bzero((caddr_t)kva + size, PAGE_SIZE * count - size); + pmap_qremove(kva, count); } - pmap_qremove(kva, count); /* * free the buffer header back to the swap buffer pool -- Test scenario: rot2.c