NetBSD Problem Report #45829
From t.hash000@gmail.com Fri Jan 13 04:40:05 2012
Return-Path: <t.hash000@gmail.com>
Received: from mail.netbsd.org (mail.netbsd.org [204.152.190.11])
by www.NetBSD.org (Postfix) with ESMTP id 9A7EE63B84C
for <gnats-bugs@gnats.NetBSD.org>; Fri, 13 Jan 2012 04:40:05 +0000 (UTC)
Message-Id: <CAGk0BNM=WXn7FJeWi-9qVfCDS1QO6Bf8fYRVV1U0rpZpbGFvFg@mail.gmail.com>
Date: Fri, 13 Jan 2012 13:40:02 +0900
From: Takahiro Hayashi <t.hash000@gmail.com>
To: gnats-bugs@gnats.NetBSD.org
Cc: t.hash000@gmail.com
Subject: writing to vnd on sparse file blocks on pager_map
>Number: 45829
>Category: kern
>Synopsis: writing to vnd on sparse file blocks on pager_map
>Confidential: no
>Severity: serious
>Priority: medium
>Responsible: hannken
>State: closed
>Class: sw-bug
>Submitter-Id: net
>Arrival-Date: Fri Jan 13 04:45:00 +0000 2012
>Closed-Date: Mon Apr 09 11:19:23 +0000 2012
>Last-Modified: Mon Apr 09 11:19:23 +0000 2012
>Originator: Takahiro Hayashi
>Release: NetBSD 5.99.59 201201110930Z
>Organization:
>Environment:
System: NetBSD ruin 5.99.59 NetBSD 5.99.59 (MONOLITHIC) #0: Wed Jan 11
16:24:49 UTC 2012
builds@b8.netbsd.org:/home/builds/ab/HEAD/i386/201201110930Z-obj/home/builds/ab/HEAD/src/sys/arch/i386/compile/MONOLITHIC
i386
Architecture: i386
Machine: i386
>Description:
Writing to vnd created on sparse file may block on wait channel
pager_map.
I created 1 giga byte sparse file, configured vnd on it,
newfs, mount, and did "dd if=/dev/zero bs=32k of=/mnt/foo".
(see How-To-Repeat)
The dd command does not return and ps (on other tty) shows
that dd is blocked in wait channel pager_map. sync, df and
ls /mnt/ freeze on wchan tstile.
The problem happens even if bs=4k but it takes several seconds.
However, does not happen if bs=512.
Originally found on Xen amd64 when installing i386 tree into
domU image.
Here is the output from crash:
# ps l
UID PID PPID CPU PRI NI VSZ RSS WCHAN STAT TTY TIME COMMAND
0 316 365 0 85 0 2544 2240 pause S tty00 0:00.06 -tcsh
0 365 1 0 85 0 6336 2672 wait Is tty00 0:00.07 login
0 379 316 2048 85 0 3188 992 pager_ma D tty00 0:00.27 dd if=/dev/zero
0 401 316 1024 43 0 3196 1104 - O+ tty00 0:00.00 ps -l
# crash
Crash version 5.99.59, image version 5.99.59.
Output from a running system is unreliable.
crash> ps/l
PID LID S CPU FLAGS STRUCT LWP * NAME WAIT
402 > 1 7 1 0 cbcc62c0 crash
379 1 3 0 0 cbcc6d40 dd pager_map
316 1 3 0 80 cbcc6aa0 tcsh pause
365 1 3 1 80 cbbcc000 login wait
335 1 3 0 80 cbd322a0 sshd select
295 1 3 1 80 cbd32000 powerd kqueue
287 1 3 0 80 cbd32540 ntpd pause
153 1 3 1 80 cbd32d20 syslogd kqueue
1 1 3 1 80 cbbccd20 init wait
0 54 3 1 200 cbcc6800 vnd0 pager_map
0 53 3 1 200 cbd32a80 physiod physiod
0 52 3 0 200 cbbcc2a0 aiodoned aiodoned
0 51 3 1 200 cbbcc7e0 ioflush tstile
0 50 3 1 200 cbbcc540 pgdaemon pgdaemon
0 47 3 1 200 cbbc0d40 cryptoret crypto_w
0 45 3 1 200 caafe000 usb4 usbevt
0 44 3 1 200 caafe2a0 usb3 usbevt
0 43 3 1 200 caafe540 usb2 usbevt
0 42 3 1 200 caafe7e0 usb1 usbevt
0 41 3 1 200 cbbcca80 usbtask-dr usbtsk
0 40 3 1 200 cbbc0aa0 usbtask-hc usbtsk
0 39 3 1 200 cbbc0800 usb0 usbevt
0 38 3 1 200 cbbc0020 unpgc unpgc
0 37 3 1 200 cbbc0560 vmem_rehash vmem_rehash
0 36 3 1 200 cbbc02c0 coretemp0 coretemp0
0 27 3 1 200 caafea80 iic0 iicintr
0 26 3 1 200 caafed20 atabus2 atath
0 25 3 0 200 caafa020 atabus1 atath
0 24 3 0 200 caafa2c0 atabus0 atath
0 23 3 0 200 caafa560 apm0 apmev
0 22 3 1 200 caafa800 xcall/1 xcall
0 21 1 1 200 caafaaa0 softser/1
0 20 1 1 200 caafad40 softclk/1
0 19 1 1 200 caaf6000 softbio/1
0 18 1 1 200 caaf62a0 softnet/1
0 17 1 1 201 caaf6540 idle/1
0 16 3 0 200 caaf67e0 sysmon smtaskq
0 15 3 0 200 caaf6a80 pmfsuspend pmfsuspend
0 14 3 0 200 caaf6d20 pmfevent pmfevent
0 13 3 0 200 caaf2020 sopendfree sopendfr
0 12 3 0 200 caaf22c0 nfssilly nfssilly
0 11 3 1 200 caaf2560 cachegc cachegc
0 10 3 0 200 caaf2800 vrele vrele
0 9 3 0 200 caaf2aa0 vdrain vdrain
0 8 3 0 200 caaf2d40 modunload mod_unld
0 7 3 0 200 caaf0000 xcall/0 xcall
0 6 1 0 200 caaf02a0 softser/0
0 5 1 0 200 caaf0540 softclk/0
0 4 1 0 200 caaf07e0 softbio/0
0 3 1 0 200 caaf0a80 softnet/0
0 > 2 7 0 201 caaf0d20 idle/0
0 1 3 1 200 c0c86140 swapper uvm
crash> bt/al cbcc6d40 <-- lwp of dd
trace: pid 379 lid 1 at 0xcbcb771c
sleepq_block(0,0,c0c029dd,c0c86e48,cc1cda70,4,c111ad84,64f1001,18650,caaefd40)
at c054f8cf
mtsleep(c17ebe00,204,c0c029dd,0,c0d09804,ffffffff,0,4040000,cc1c73c0,1)
at c0552713
uvm_pagermapin(cbcb795c,10,1,6776001,10,f,f,cbcb799c,c193f630,0) at c08a6449
genfs_gop_write(cc1cda58,cbcb795c,10,21,cbcb7960,13,18650,cc1cda58,cc1cda58,3)
at c0337a5b
genfs_do_putpages(cc1cda58,3360000,0,3370000,0,21,0,c08ac465,cc1c73c0,6)
at c03375de
genfs_putpages(cbcb7a18,6,4000,0,cb424000,0,4,3370000,336c000,c0b4a2fc)
at c0337a29
VOP_PUTPAGES(cc1cda58,3360000,0,3370000,0,21,caaec000,1,cbba8000,cbfd90b4)
at c08e5015
ffs_write(cbcb7b80,cc1cda58,cbcb7b9c,c08c5be7,cc1cda58,cbcb0030,cbcb7b8c,c05372ba,caaefd00,2a)
at c030eda9
VOP_WRITE(cc1cda58,cbcb7c20,10,caaec000,0,0,0,8000,caaefd00,0) at c08e419e
vn_write(cbbd8600,cbbd8600,cbcb7c20,caaec000,1,cbbcc2a0,0,cbcc6d40,cbcb7c2c,cbcb7cf4)
at c08c6818
dofilewrite(4,cbbd8600,bb903000,8000,cbbd8600,1,cbcb7d1c,cbcc6d40,cbcc6d40,cbcb7d48)
at c07bce8b
sys_write(cbcc6d40,cbcb7cf4,cbcb7d1c,0,c0680a31,cbbcae94,cbcc6d40,cbbcae0c,c0680a31,cbbca83c)
at c07bcfb7
syscall(cbcb7d48,bbbb00b3,ab,bfbf001f,bbbb001f,bb903000,804d400,bfbfec98,bfbfec70,4)
at c07c941d
crash> bt/al cbcc6800 <- lwp of vnd0 thread
trace: pid 0 lid 54 at 0xcbce592c
sleepq_block(0,0,c0c029dd,c0c86e48,cc1cdf40,cbce596c,cbce59ac,c068331e,c111b18c,caaefc00)
at c054f8cf
mtsleep(c17ebe00,204,c0c029dd,0,c0d09804,ffffffff,0,4040000,cc1cdf28,1)
at c0552713
uvm_pagermapin(cbce5b6c,c,1,6778001,10,b,f,cbce5b9c,c18dad48,0) at c08a6449
genfs_gop_write(cc1cdf28,cbce5b6c,c,1b,cbce5b70,13,cbce5a7c,c08c2b5d,0,cc1c991c)
at c0337a5b
genfs_do_putpages(cc1cdf28,0,0,0,0,1b,0,cc1c4f00,1,0) at c0337295
genfs_putpages(cbce5c28,ffffffff,cbce5c1c,cbce5c2c,1,b33c000,0,0,1,c0b4a2fc)
at c0337a29
VOP_PUTPAGES(cc1cdf28,0,0,0,0,1b,1,1,cc1c4f00,cbce5d0c) at c08e5015
vndthread(cbce1300,e63000,e6c000,0,c0100307,0,0,0,0,0) at c08e347b
crash>
>How-To-Repeat:
1. make a sparse 1 giga byte file
(using tar, rsync -S, truncate(1) (from FreeBSD), i used truncate
e.g. truncate -s1g imgfile)
2. vnconfig -cv vnd0 sparse-file
3. newfs -O2 /dev/rvnd0a
4. mount /dev/vnd0a /mnt
5. dd if=/dev/zero bs=32k of=/mnt/foo &
6. ps l
>Fix:
Not known.
To avoid this problem please vnconfig non-sparse file.
>Release-Note:
>Audit-Trail:
From: "J. Hannken-Illjes" <hannken@eis.cs.tu-bs.de>
To: gnats-bugs@NetBSD.org
Cc:
Subject: Re: kern/45829: writing to vnd on sparse file blocks on pager_map
Date: Fri, 13 Jan 2012 13:06:13 +0100
On Jan 13, 2012, at 5:45 AM, Takahiro Hayashi wrote:
>> Number: 45829
>> Category: kern
>> Synopsis: writing to vnd on sparse file blocks on pager_map
As I'm not able to reproduce it here, please add more info:
- dmesg
- mount -v
- which of your file systems holds the sparse image
--
Juergen Hannken-Illjes - hannken@eis.cs.tu-bs.de - TU Braunschweig (Germany)
From: Takahiro Hayashi <t.hash000@gmail.com>
To: gnats-bugs@netbsd.org
Cc: kern-bug-people@netbsd.org, gnats-admin@netbsd.org, netbsd-bugs@netbsd.org
Subject: Re: kern/45829: writing to vnd on sparse file blocks on pager_map
Date: Fri, 13 Jan 2012 22:08:53 +0900
> =A0As I'm not able to reproduce it here, please add more info:
>
> =A0- dmesg
> =A0- mount -v
> =A0- which of your file systems holds the sparse image
Thank you for your response.
I mount / with -o log,noatime,nodevmtime and the sparse image
is on it.
Note: I overwrite ethernet address of re0 in /etc/rc.conf.
Some boards remember the overwritten address, that's why
enaddr of re0 in dmesg is xen's one.
# dmesg
Copyright (c) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
2006, 2007, 2008, 2009, 2010, 2011, 2012
The NetBSD Foundation, Inc. All rights reserved.
Copyright (c) 1982, 1986, 1989, 1991, 1993
The Regents of the University of California. All rights reserved.
NetBSD 5.99.59 (MONOLITHIC) #0: Wed Jan 11 16:24:49 UTC 2012
builds@b8.netbsd.org:/home/builds/ab/HEAD/i386/201201110930Z-obj/ho=
me/builds/ab/HEAD/src/sys/arch/i386/compile/MONOLITHIC
total memory =3D 501 MB
avail memory =3D 480 MB
timecounter: Timecounters tick every 10.000 msec
RTC BIOS diagnostic error 0x80<clock_battery>
timecounter: Timecounter "i8254" frequency 1193182 Hz quality 100
(
)
mainbus0 (root)
cpu0 at mainbus0 apid 0: Intel(R) Atom(TM) CPU 230 @ 1.60GHz, id 0x106c2
cpu1 at mainbus0 apid 1: Intel(R) Atom(TM) CPU 230 @ 1.60GHz, id 0x106c2
ioapic0 at mainbus0 apid 2: pa 0xfec00000, version 20, 24 pins
acpi0 at mainbus0: Intel ACPICA 20110623
acpi0: X/RSDT: OemId <INTEL ,D945GLF ,00000026>, AslId < ,01000013>
acpi0: SCI interrupting at int 9
timecounter: Timecounter "ACPI-Fast" frequency 3579545 Hz quality 1000
hpet0 at acpi0: high precision event timer (mem 0xfed00000-0xfed00400)
timecounter: Timecounter "hpet0" frequency 14318180 Hz quality 2000
acpibut0 at acpi0 (SLPB, PNP0C0E): ACPI Sleep Button
IOCM (PNP0C02) at acpi0 not configured
npx1 at acpi0 (FPU, PNP0C04): io 0xf0 irq 13
npx1: reported by CPUID; using exception 16
attimer1 at acpi0 (TMR, PNP0100): io 0x40-0x43,0x50-0x53 irq 0
pcppi1 at acpi0 (SPKR, PNP0800): io 0x61
midi0 at pcppi1: PC speaker
sysbeep0 at pcppi1
XTRA (PNP0C02) at acpi0 not configured
XTR2 (PNP0C02) at acpi0 not configured
FDC0 (PNP0700) at acpi0 not configured
UAR1 (PNP0501) at acpi0 not configured
APIC (PNP0003) at acpi0 not configured
apm0 at acpi0: Power Management spec V1.2
attimer1: attached to pcppi1
pci0 at mainbus0 bus 0: configuration mode 1
pci0: i/o space, memory space enabled, rd/line, rd/mult, wr/inv ok
pchb0 at pci0 dev 0 function 0: vendor 0x8086 product 0x2770 (rev. 0x02)
agp0 at pchb0: detected 7932k stolen memory
agp0: aperture at 0x20000000, size 0x10000000
vga1 at pci0 dev 2 function 0: vendor 0x8086 product 0x2772 (rev. 0x02)
wsdisplay0 at vga1 kbdmux 1
wsmux1: connecting to wsdisplay0
i915drm0 at vga1: Intel i945G
i915drm0: AGP at 0x20000000 256MB
i915drm0: Initialized i915 1.6.0 20080730
hdaudio0 at pci0 dev 27 function 0: HD Audio Controller
hdaudio0: interrupting at ioapic0 pin 22
hdafg0 at hdaudio0: Realtek ALC662
hdafg0: DAC00 2ch: Speaker [Jack]
hdafg0: DAC01 2ch: HP Out [Jack]
hdafg0: ADC02 2ch: Line In [Jack], Mic In [Jack]
hdafg0: ADC03 2ch: Mic In [Jack]
hdafg0: 2ch/2ch 44100Hz 48000Hz 96000Hz PCM16 PCM20 PCM24 AC3
audio0 at hdafg0: full duplex, playback, capture, independent
ppb0 at pci0 dev 28 function 0: vendor 0x8086 product 0x27d0 (rev. 0x01)
ppb0: PCI Express 1.0 <Root Port of PCI-E Root Complex>
pci1 at ppb0 bus 1
pci1: i/o space, memory space enabled, rd/line, wr/inv ok
re0 at pci1 dev 0 function 0: RealTek 8100E/8101E/8102E/8102EL PCIe
10/100BaseTX (rev. 0x02)
re0: interrupting at ioapic0 pin 16
re0: Ethernet address 00:16:3e:00:00:f2
re0: using 256 tx descriptors
rlphy0 at re0 phy 7: RTL8201L 10/100 media interface, rev. 1
rlphy0: 10baseT, 10baseT-FDX, 100baseTX, 100baseTX-FDX, auto
ppb1 at pci0 dev 28 function 2: vendor 0x8086 product 0x27d4 (rev. 0x01)
ppb1: PCI Express 1.0 <Root Port of PCI-E Root Complex>
pci2 at ppb1 bus 2
pci2: i/o space, memory space enabled, rd/line, wr/inv ok
ppb2 at pci0 dev 28 function 3: vendor 0x8086 product 0x27d6 (rev. 0x01)
ppb2: PCI Express 1.0 <Root Port of PCI-E Root Complex>
pci3 at ppb2 bus 3
pci3: i/o space, memory space enabled, rd/line, wr/inv ok
uhci0 at pci0 dev 29 function 0: vendor 0x8086 product 0x27c8 (rev. 0x01)
uhci0: interrupting at ioapic0 pin 23
usb0 at uhci0: USB revision 1.0
uhci1 at pci0 dev 29 function 1: vendor 0x8086 product 0x27c9 (rev. 0x01)
uhci1: interrupting at ioapic0 pin 19
usb1 at uhci1: USB revision 1.0
uhci2 at pci0 dev 29 function 2: vendor 0x8086 product 0x27ca (rev. 0x01)
uhci2: interrupting at ioapic0 pin 18
usb2 at uhci2: USB revision 1.0
uhci3 at pci0 dev 29 function 3: vendor 0x8086 product 0x27cb (rev. 0x01)
uhci3: interrupting at ioapic0 pin 16
usb3 at uhci3: USB revision 1.0
ehci0 at pci0 dev 29 function 7: vendor 0x8086 product 0x27cc (rev. 0x01)
ehci0: interrupting at ioapic0 pin 23
ehci0: EHCI version 1.0
ehci0: companion controllers, 2 ports each: uhci0 uhci1 uhci2 uhci3
usb4 at ehci0: USB revision 2.0
ppb3 at pci0 dev 30 function 0: vendor 0x8086 product 0x244e (rev. 0xe1)
pci4 at ppb3 bus 4
pci4: i/o space, memory space enabled
ichlpcib0 at pci0 dev 31 function 0: vendor 0x8086 product 0x27b8 (rev. 0x0=
1)
timecounter: Timecounter "ichlpcib0" frequency 3579545 Hz quality 1000
ichlpcib0: 24-bit timer
ichlpcib0: TCO (watchdog) timer configured.
gpio0 at ichlpcib0: 64 pins
piixide0 at pci0 dev 31 function 1: Intel 82801GB/GR IDE Controller
(ICH7) (rev. 0x01)
piixide0: bus-master DMA support present
piixide0: primary channel configured to compatibility mode
piixide0: primary channel interrupting at ioapic0 pin 14
atabus0 at piixide0 channel 0
piixide0: secondary channel configured to compatibility mode
piixide0: secondary channel ignored (disabled)
piixide1 at pci0 dev 31 function 2: Intel 82801GB/GR Serial ATA/Raid
Controller (ICH7) (rev. 0x01)
piixide1: bus-master DMA support present
piixide1: primary channel configured to native-PCI mode
piixide1: using ioapic0 pin 19 for native-PCI interrupt
atabus1 at piixide1 channel 0
piixide1: secondary channel configured to native-PCI mode
atabus2 at piixide1 channel 1
ichsmb0 at pci0 dev 31 function 3: vendor 0x8086 product 0x27da (rev. 0x01)
ichsmb0: interrupting at ioapic0 pin 19
iic0 at ichsmb0: I2C bus
isa0 at ichlpcib0
com0 at isa0 port 0x3f8-0x3ff irq 4: ns16550a, working fifo
com0: console
pckbc0 at isa0 port 0x60-0x64
fdc0 at isa0 port 0x3f0-0x3f7 irq 6 drq 2
acpicpu0 at cpu0: ACPI CPU
acpicpu0: C1: HLT, lat 0 us, pow 0 mW
acpicpu1 at cpu1: ACPI CPU
timecounter: Timecounter "clockinterrupt" frequency 100 Hz quality 0
uhub0 at usb0: vendor 0x8086 UHCI root hub, class 9/0, rev 1.00/1.00, addr =
1
uhub0: 2 ports with 2 removable, self powered
uhub1 at usb1: vendor 0x8086 UHCI root hub, class 9/0, rev 1.00/1.00, addr =
1
uhub1: 2 ports with 2 removable, self powered
uhub2 at usb2: vendor 0x8086 UHCI root hub, class 9/0, rev 1.00/1.00, addr =
1
uhub2: 2 ports with 2 removable, self powered
uhub3 at usb3: vendor 0x8086 UHCI root hub, class 9/0, rev 1.00/1.00, addr =
1
uhub3: 2 ports with 2 removable, self powered
uhub4 at usb4: vendor 0x8086 EHCI root hub, class 9/0, rev 2.00/1.00, addr =
1
uhub4: 8 ports with 8 removable, self powered
wd0 at atabus0 drive 0
wd0: <Maxtor 6Y120L0>
wd0: drive supports 16-sector PIO transfers, LBA addressing
wd0: 114 GB, 238213 cyl, 16 head, 63 sec, 512 bytes/sect x 240119615 sector=
s
wd0: 32-bit data port
wd0: drive supports PIO mode 4, DMA mode 2, Ultra-DMA mode 6 (Ultra/133)
wd0(piixide0:0:0): using PIO mode 4, Ultra-DMA mode 5 (Ultra/100) (using DM=
A)
Kernelized RAIDframe activated
boot device: wd0
root on wd0a dumps on wd0b
root file system type: ffs
# mount -vv
/dev/wd0a on / type ffs (log, noatime, nodevmtime, local, root file
system, fsid: 0x0/0x78b, reads: sync 8779 async 0, writes: sync 0
async 53)
tmpfs on /tmp type tmpfs (local, fsid: 0xab01/0x69ab, reads: sync 0
async 0, writes: sync 0 async 0, [tmpfs: version=3D1, size_max=3D52428800,
nodes_max=3D51203, root_uid=3Droot, root_gid=3Dwheel, root_mode=3D1777])
-- hash
From: "Juergen Hannken-Illjes" <hannken@netbsd.org>
To: gnats-bugs@gnats.NetBSD.org
Cc:
Subject: PR/45829 CVS commit: src/sys/dev
Date: Mon, 26 Mar 2012 16:28:09 +0000
Module Name: src
Committed By: hannken
Date: Mon Mar 26 16:28:08 UTC 2012
Modified Files:
src/sys/dev: vnd.c vndvar.h
Log Message:
When backed by a sparse file limit the number of pending requests.
Should fix PR #45829: "writing to vnd on sparse file blocks on pager_map"
where the pager_map gets exhausted by requests enqueued on a vnd
device and the device worker thread blocks on putpages() needing the map.
While here always sync the underlying vnode before calling biodone().
XXX: vnd should be converted to mutex/condvar.
To generate a diff of this commit:
cvs rdiff -u -r1.219 -r1.220 src/sys/dev/vnd.c
cvs rdiff -u -r1.31 -r1.32 src/sys/dev/vndvar.h
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Responsible-Changed-From-To: kern-bug-people->hannken
Responsible-Changed-By: hannken@NetBSD.org
Responsible-Changed-When: Thu, 05 Apr 2012 12:50:54 +0000
Responsible-Changed-Why:
Take.
State-Changed-From-To: open->pending-pullups
State-Changed-By: hannken@NetBSD.org
State-Changed-When: Thu, 05 Apr 2012 12:50:54 +0000
State-Changed-Why:
Fixed in -current -- Pullup pending.
From: "Jeff Rizzo" <riz@netbsd.org>
To: gnats-bugs@gnats.NetBSD.org
Cc:
Subject: PR/45829 CVS commit: [netbsd-6] src/sys/dev
Date: Fri, 6 Apr 2012 17:44:21 +0000
Module Name: src
Committed By: riz
Date: Fri Apr 6 17:44:21 UTC 2012
Modified Files:
src/sys/dev [netbsd-6]: vnd.c vndvar.h
Log Message:
Pull up following revision(s) (requested by hannken in ticket #162):
sys/dev/vnd.c: revision 1.220
sys/dev/vndvar.h: revision 1.32
When backed by a sparse file limit the number of pending requests.
Should fix PR #45829: "writing to vnd on sparse file blocks on pager_map"
where the pager_map gets exhausted by requests enqueued on a vnd
device and the device worker thread blocks on putpages() needing the map.
While here always sync the underlying vnode before calling biodone().
XXX: vnd should be converted to mutex/condvar.
To generate a diff of this commit:
cvs rdiff -u -r1.219 -r1.219.8.1 src/sys/dev/vnd.c
cvs rdiff -u -r1.31 -r1.31.8.1 src/sys/dev/vndvar.h
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
State-Changed-From-To: pending-pullups->closed
State-Changed-By: hannken@NetBSD.org
State-Changed-When: Mon, 09 Apr 2012 11:19:23 +0000
State-Changed-Why:
Pulled up.
>Unformatted:
(Contact us)
$NetBSD: query-full-pr,v 1.39 2013/11/01 18:47:49 spz Exp $
$NetBSD: gnats_config.sh,v 1.8 2006/05/07 09:23:38 tsutsui Exp $
Copyright © 1994-2007
The NetBSD Foundation, Inc. ALL RIGHTS RESERVED.