Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 22 May 2007 18:45:00 +1000
From:      Lawrence Stewart <lstewart@room52.net>
To:        =?UTF-8?B?RGFnLUVybGluZyBTbcO4cmdyYXY=?= <des@des.no>
Cc:        freebsd-hackers@freebsd.org
Subject:   Re: Writing a plain text file to disk from kernel space
Message-ID:  <4652AD8C.7000605@room52.net>
In-Reply-To: <86sl9qtpd1.fsf@dwp.des.no>
References:  <4649349D.4060101@room52.net>	<200705150847.38838.marc.loerner@hob.de> <46499491.2010205@room52.net>	<f2j5hf$hap$2@sea.gmane.org> <46515DE0.20209@room52.net> <86sl9qtpd1.fsf@dwp.des.no>

next in thread | previous in thread | raw e-mail | index | archive | help
This is a multi-part message in MIME format.
--------------050508090406060108000201
Content-Type: text/plain; charset=UTF-8; format=flowed
Content-Transfer-Encoding: 8bit

OK well that's cleared up. Thanks DES.

So I went back to trying the kernio code I found here 
(http://people.freebsd.org/~pjd/misc/kernio/) which does operate 
directly on vnodes (first time I tried it I was getting kernel panics, 
so I assumed the code was a bit dated and carried on down the path of 
trying to get file descriptors working).

Anyways, I modified the filewriter kernel module that I attached to my 
previous post so that it used the kio code, and verified that the code 
does work when called across different threads (in the module's init and 
deinit functions). However, when I ported it into my other module that 
I'm actually working on that uses the pfil hooks, I started getting hard 
resets again.

After further investigation, it turns out that the pfil input hook I'm 
using, which catches packets as they traverse up the network stack, has 
no problems, and will happily write to the file using the kio_write 
function. However, in the pfil output hook, a call to kio_write causes a 
hard reset, with the following text shown on tty0:

Sleeping thread (tid 100069, pid 613) owns a non-sleepable lock
panic: sleeping thread

If I comment out the kio_write code and put a printf instead, there are 
no such problems, so it seems the kio_write function is doing something 
that is upsetting the kernel, but only when called from a function that 
is acting as a pfil output hook? Strikes me as odd behaviour. I don't 
understand which thread the error is in relation to, why that thread is 
sleeping or which lock it is referring to.

I tried wrapping the call to kio_write in a mutex, in case there was a 
race condition caused by multiple threads trying to write to the file at 
the one time, but that hasn't made a difference at all.

I've attached the code that demonstrates the problem, but be warned: 
I've intentionally left it in a state that demonstrates the problem, and 
it will therefore hard reset any machine you run it on.

Any thoughts on what's going on and how I can make the kio code not 
break the kernel when called from within a function that is acting as a 
pfil output hook?

Cheers,
Lawrence


Dag-Erling Smørgrav wrote:
> Lawrence Stewart <lstewart@room52.net> writes:
>   
>> I suspect that you can't use a file descriptor that was opened in one
>> thread in a completely different thread, but I'm not sure if this is
>> true, and if it is true, how to get around it.
>>     
>
> A file descriptor is an index into a file table.  Different threads have
> different file tables.
>
> If you want to read from or write to files within the kernel, you need
> to operate directly on vnodes, not on file descriptors.
>
> DES
>   


--------------050508090406060108000201
Content-Type: application/octet-stream;
 name="filewriter.ko"
Content-Transfer-Encoding: base64
Content-Disposition: attachment;
 filename="filewriter.ko"

f0VMRgEBAQkAAAAAAAAAAAMAAwABAAAAyAgAADQAAADEDgAAAAAAADQAIAADACgAEQAOAAEA
AAAAAAAAAAAAAAAAAAAUDQAAFA0AAAUAAAAAEAAAAQAAABQNAAAUHQAAFB0AALAAAAAQAQAA
BgAAAAAQAAACAAAAQA0AAEAdAABAHQAAeAAAAHgAAAAGAAAABAAAACUAAAAuAAAAAAAAAAAA
AAAcAAAAHgAAAAAAAAAkAAAAGwAAABAAAAAtAAAAAAAAAB8AAAAAAAAAAAAAACkAAAAAAAAA
IgAAABgAAAAAAAAAJgAAAAAAAAAAAAAAAAAAABEAAAAAAAAAAAAAABkAAAAjAAAAAAAAACsA
AAAAAAAAAAAAACwAAAAqAAAAEgAAACEAAAAnAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAFQAAABcAAAAAAAAAFgAAAAAAAAAUAAAAAAAAAB0AAAAAAAAA
AAAAAAAAAAATAAAAAAAAAAAAAAAOAAAAAAAAACAAAAAlAAAADwAAABoAAAAAAAAAKAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAJQAAAAAAAAAAwABAAAAAADoAQAAAAAAAAMAAgAAAAAA
yAQAAAAAAAADAAMAAAAAAJgGAAAAAAAAAwAEAAAAAADICAAAAAAAAAMABQAAAAAAlgwAAAAA
AAADAAYAAAAAAAwNAAAAAAAAAwAHAAAAAAAQDQAAAAAAAAMACAAAAAAAFB0AAAAAAAADAAkA
AAAAAEAdAAAAAAAAAwAKAAAAAAC4HQAAAAAAAAMACwAAAAAA4B0AAAAAAAADAAwAAAAAAAAA
AAAAAAAAAwANACAAAAAAAAAAAAAAABAAAAB/AQAAEA0AAAAAAAAQAPH/AQAAAEAdAAAAAAAA
EQDx/y8AAAAAAAAAAAAAABAAAAA3AAAAAAAAAAAAAAAQAAAAQwAAAAAAAAAAAAAAEAAAAFMA
AAAAAAAAAAAAABAAAABbAAAAAAAAAAAAAAAQAAAAZAAAAAAAAAAAAAAAEAAAAHYAAAAAAAAA
AAAAABAAAACLAAAAAAAAAAAAAAAQAAAAmQAAAAAAAAAAAAAAEAAAAGgBAAAQDQAAAAAAABAA
8f+fAAAAAAAAAAAAAAAQAAAArAAAAAAAAAAAAAAAEAAAAL4AAAAAAAAAAAAAABAAAABQAQAA
DA0AAAAAAAAQAPH/zAAAAAAAAAAAAAAAEAAAAL0BAADEHQAAAAAAABAA8f/bAAAAAAAAAAAA
AAAQAAAA6gAAAAAAAAAAAAAAEAAAAPgAAAAAAAAAAAAAABAAAAAIAQAAAAAAAAAAAAAQAAAA
FwEAAAAAAAAAAAAAEAAAALYBAADEHQAAAAAAABAA8f8KAAAAuB0AAAAAAAARAPH/yQEAACQe
AAAAAAAAEADx/yUBAAAAAAAAAAAAABAAAAAsAQAAAAAAAAAAAAAQAAAANQEAAAAAAAAAAAAA
EAAAAJsBAAAUDQAAAAAAABAA8f8/AQAAAAAAAAAAAAAQAAAAAF9EWU5BTUlDAF9HTE9CQUxf
T0ZGU0VUX1RBQkxFXwB2bl9zdGFydF93cml0ZQB2bl9sb2NrAG10eF9kZXN0cm95AF9tdHhf
bG9ja19mbGFncwB1cHJpbnRmAG10eF9pbml0AHZuX2ZpbmlzaGVkX3dyaXRlAG1vZHVsZV9y
ZWdpc3Rlcl9pbml0AHBmaWxfYWRkX2hvb2sAYnplcm8Adm5fb3Blbl9jcmVkAF9tdHhfdW5s
b2NrX2ZsYWdzAFZPUF9XUklURV9BUFYAdm9wX2xlYXNlX2Rlc2MAdm9wX3dyaXRlX2Rlc2MA
cGZpbF9oZWFkX2dldAB2b3BfdW5sb2NrX2Rlc2MAVk9QX1VOTE9DS19BUFYAVk9QX0xFQVNF
X0FQVgBOREZSRUUAdm5fY2xvc2UAcm9vdHZub2RlAHBmaWxfcmVtb3ZlX2hvb2sAX19zdGFy
dF9zZXRfc3lzaW5pdF9zZXQAX19zdG9wX3NldF9zeXNpbml0X3NldABfX3N0YXJ0X3NldF9t
b2RtZXRhZGF0YV9zZXQAX19zdG9wX3NldF9tb2RtZXRhZGF0YV9zZXQAX2VkYXRhAF9fYnNz
X3N0YXJ0AF9lbmQAAADCCgAACAAAAMkKAAAIAAAA1QoAAAgAAADbCgAACAAAAOcKAAAIAAAA
7goAAAgAAAACCwAACAAAAAkLAAAIAAAAFQsAAAgAAAAbCwAACAAAACcLAAAIAAAALgsAAAgA
AAByCwAACAAAAIELAAAIAAAAlgsAAAgAAAClCwAACAAAAMkLAAAIAAAA6QsAAAgAAAD2CwAA
CAAAAPsLAAAIAAAAEgwAAAgAAAAfDAAACAAAACQMAAAIAAAAKQwAAAgAAAAuDAAACAAAAEEM
AAAIAAAAZQwAAAgAAABuDAAACAAAAHoMAAAIAAAAhgwAAAgAAACLDAAACAAAAJAMAAAIAAAA
DA0AAAgAAAAQDQAACAAAACAdAAAIAAAAJB0AAAgAAAAoHQAACAAAADgdAAAIAAAAPB0AAAgA
AADlCAAAASsAAPkIAAABKwAANQkAAAIbAAA/CQAAAikAAFkJAAABIwAAjwoAAAEjAABrCQAA
AiQAAJ8KAAACJAAAkgkAAAIqAAC1CQAAAhkAAMAJAAACGQAACQoAAAIOAAAXCgAAAhEAADYK
AAABHwAARgoAAAIlAABoCgAAASEAAHoKAAACHQAArAoAAAIWAADOCgAAAhMAAA4LAAACEwAA
8woAAAIcAAAzCwAAAhwAAEgLAAACIgAAdwsAAAIYAACGCwAAAhgAAJsLAAACLQAAqgsAAAIt
AAAADAAAAhUAADMMAAACFAAAcwwAAAISAAAcHQAAARcAAFWJ5VdWU4PsYGSLPQAAAACLB4tQ
JItaDIXbdQqhAAAAAIlCDIsHi1Aki0oIhcl1CKEAAAAAiUIIi0UIav//RQyJRaTHRcwAAAAA
x0XQAAAAAMdFqAEAAACJfdT/t4gAAAD/dRCNRQxQjXWkVuj8////at+Jw1bo/P///4PEHDHA
hdt1KItVuI1FlIlVmFDHRZQAAAAAx0WcAAAAAIl9oP9yCOj8////WFqLRbiNZfRbXl/Jw1WJ
5WShAAAAAFD/sIgAAABqAv91COj8////ycNVieVXVlOD7HyLXRBkiz0AAAAAagiNtXz///9W
6Pz///9qII1F1FDo/P///4tFDGoBiYV8////jYV4////UP91CIldgIl11Ild5Il98MdF3AAA
AADHReAAAAAAx0XoAQAAAMdF7AEAAADHRdgBAAAA6Pz///9XaAIQAAD/dQjo/P///4uHiAAA
AItVCIPEKIlFwI1FtIlVuIl9vMdFtAAAAADHRcQCAAAAUP9yCOj8////i4eIAAAAWYtVCFuJ
VZiJRaSNVdSNRZSJVZxQx0WUAAAAAMdFoIMAAACLRQj/cAjo/P///1hajUWEi1UIiVWIiX2Q
x0WEAAAAAMdFjAAAAABQ/3II6Pz///9eX/+1eP///+j8////jWX0W14xwF/Jw5CQVYnlai5o
oQwAAGoAaAAeAADo/P///2oKaK4MAAD/NeQdAADotP7//2owaKEMAABqAGgAHgAA6Pz///8x
wMnDkFWJ5Wo6aKEMAABqAGgAHgAA6Pz///9qC2i5DAAA/zXkHQAA6HT+//9qPGihDAAAagBo
AB4AAOj8////McDJw5BVieVWU2oCagGJxuj8////icOF21hauAMAAAB0CYX2dA9OdDAxwI1l
+FteycONdgBTagVqAGi8CgAA6Pz///9TagZqAGj8CgAA6Pz///+DxCDr0ZBTagVqAGi8CgAA
6Pz///9TagZqAGj8CgAA6Pz///+DxCDrrZBVieWLRQyFwHQKSHR/uBYAAADJw6HgHQAAMdKF
wHQFidDJw5DoX////4P4A7oDAAAAdOzHBeAdAAABAAAAagBqAGjFDAAAaAAeAADo/P///4PE
EGikAQAAaAkCAABo1gwAAOit/P//g8QMo+QdAABo6gwAAGiWDAAAaO4MAADo/P///zHSg8QM
idDrlaHgHQAAMdKFwHSIuAEAAADo5/7//4P4A7oDAAAAD4Rw////xwXgHQAAAAAAAGgAHgAA
6Pz///9Z/zXkHQAA6Pn8///HBCTqDAAAaJYMAABo/AwAAOucZmlsZXdyaXRlcgBmaWxld3Jp
dGVyLmMAcGFja2V0IGluCgBwYWNrZXQgb3V0CgBmaWxld3JpdGVyX211dGV4AC92YXIvbG9n
L3Rlc3QyMy5sb2cAMS4wAExvYWRlZCAlcyAlcwoAVW5sb2FkZWQgJXMgJXMKABQdAAAwHQAA
AAAAAv///w8AAAAAJB0AAJYMAAC0CwAAAAAAAAEAAAACAAAAJB0AAJYMAAAEAAAAlAAAAAUA
AADIBAAABgAAAOgBAAAKAAAAzgEAAAsAAAAQAAAAEQAAAJgGAAASAAAAMAIAABMAAAAIAAAA
FgAAAAAAAAD6//9vJwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AABAHQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACRGcmVlQlNEJABH
Q0M6IChHTlUpIDMuNC40IFtGcmVlQlNEXSAyMDA1MDUxOAAAR0NDOiAoR05VKSAzLjQuNCBb
RnJlZUJTRF0gMjAwNTA1MTgAAC5zeW10YWIALnN0cnRhYgAuc2hzdHJ0YWIALmhhc2gALmR5
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
aXQAZmlsZXdyaXRlcl9tb2QAbG9hZF9oYW5kbGVyAF9fc2V0X21vZG1ldGFkYXRhX3NldF9z
eW1fX21vZF9tZXRhZGF0YV9tZF9maWxld3JpdGVyAF9tb2RfbWV0YWRhdGFfbWRfZmlsZXdy
aXRlcgBmaWxld3JpdGVyX2hvb2tlZABmaWxld3JpdGVyX2Noa2lucHV0AGZpbGV3cml0ZXJf
bXR4AGZpbGV3cml0ZXJfdm5vZGUAZmlsZXdyaXRlcl9jaGtvdXRwdXQAZmlsZXdyaXRlcl9o
b29rX3BmaWwAa2lvX29wZW4Aa2lvX3dyaXRlAGtpb19jbG9zZQB2bl9zdGFydF93cml0ZQBf
X3N0YXJ0X3NldF9tb2RtZXRhZGF0YV9zZXQAX0RZTkFNSUMAdm5fbG9jawBtdHhfZGVzdHJv
eQBfbXR4X2xvY2tfZmxhZ3MAdXByaW50ZgBtdHhfaW5pdAB2bl9maW5pc2hlZF93cml0ZQBt
b2R1bGVfcmVnaXN0ZXJfaW5pdABwZmlsX2FkZF9ob29rAGJ6ZXJvAF9fc3RvcF9zZXRfc3lz
aW5pdF9zZXQAdm5fb3Blbl9jcmVkAF9tdHhfdW5sb2NrX2ZsYWdzAFZPUF9XUklURV9BUFYA
X19zdGFydF9zZXRfc3lzaW5pdF9zZXQAdm9wX2xlYXNlX2Rlc2MAX19ic3Nfc3RhcnQAdm9w
X3dyaXRlX2Rlc2MAcGZpbF9oZWFkX2dldAB2b3BfdW5sb2NrX2Rlc2MAVk9QX1VOTE9DS19B
UFYAVk9QX0xFQVNFX0FQVgBfZWRhdGEAX0dMT0JBTF9PRkZTRVRfVEFCTEVfAF9lbmQATkRG
UkVFAHZuX2Nsb3NlAHJvb3R2bm9kZQBfX3N0b3Bfc2V0X21vZG1ldGFkYXRhX3NldABwZmls
X3JlbW92ZV9ob29rAA==
--------------050508090406060108000201
Content-Type: text/plain;
 name="kernio.h"
Content-Transfer-Encoding: base64
Content-Disposition: inline;
 filename="kernio.h"

LyotCiAqIENvcHlyaWdodCAoYykgMjAwNiBQYXdlbCBKYWt1YiBEYXdpZGVrIDxwLmRhd2lk
ZWtAd2hlZWwucGw+CiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAqCiAqIERvd25sb2FkZWQg
ZnJvbSBodHRwOi8vcGVvcGxlLmZyZWVic2Qub3JnL35wamQvbWlzYy9rZXJuaW8vCiAqLwoK
I2lmbmRlZiBfU1lTX0tFUk5JT19IXwojZGVmaW5lCV9TWVNfS0VSTklPX0hfCgpzdHJ1Y3Qg
dm5vZGUgKmtpb19vcGVuKGNvbnN0IGNoYXIgKmZpbGUsIGludCBmbGFncywgaW50IGNtb2Rl
KTsKdm9pZCBraW9fY2xvc2Uoc3RydWN0IHZub2RlICp2cCk7CmludCBraW9fd3JpdGUoc3Ry
dWN0IHZub2RlICp2cCwgdm9pZCAqYnVmLCBzaXplX3Qgc2l6ZSk7CgojZW5kaWYJLyogX1NZ
U19LRVJOSU9fSF8gKi8K
--------------050508090406060108000201
Content-Type: text/plain;
 name="Makefile"
Content-Transfer-Encoding: base64
Content-Disposition: inline;
 filename="Makefile"

U1JDUz12bm9kZV9pZi5oIHN1YnJfa2VybmlvLmMgZmlsZXdyaXRlci5jCktNT0Q9ZmlsZXdy
aXRlcgoKLmluY2x1ZGUgPGJzZC5rbW9kLm1rPiAKCgo=
--------------050508090406060108000201
Content-Type: text/plain;
 name="subr_kernio.c"
Content-Transfer-Encoding: base64
Content-Disposition: inline;
 filename="subr_kernio.c"

LyotCiAqIENvcHlyaWdodCAoYykgMjAwNiBQYXdlbCBKYWt1YiBEYXdpZGVrIDxwLmRhd2lk
ZWtAd2hlZWwucGw+CiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAqCiAqIERvd25sb2FkZWQg
ZnJvbSBodHRwOi8vcGVvcGxlLmZyZWVic2Qub3JnL35wamQvbWlzYy9rZXJuaW8vCiAqLwoK
I2luY2x1ZGUgPHN5cy9jZGVmcy5oPgpfX0ZCU0RJRCgiJEZyZWVCU0QkIik7CgojaW5jbHVk
ZSA8c3lzL3BhcmFtLmg+CiNpbmNsdWRlIDxzeXMvc3lzdG0uaD4KI2luY2x1ZGUgPHN5cy9r
ZXJuZWwuaD4KI2luY2x1ZGUgPHN5cy9rdGhyZWFkLmg+CiNpbmNsdWRlIDxzeXMvbmFtZWku
aD4KI2luY2x1ZGUgPHN5cy9wcm9jLmg+CiNpbmNsdWRlIDxzeXMvZmlsZWRlc2MuaD4KI2lu
Y2x1ZGUgPHN5cy92bm9kZS5oPgojaW5jbHVkZSA8c3lzL21hbGxvYy5oPgojaW5jbHVkZSA8
c3lzL3VuaXN0ZC5oPgojaW5jbHVkZSA8c3lzL2ZjbnRsLmg+CgojaW5jbHVkZSAia2Vybmlv
LmgiCgpzdHJ1Y3Qgdm5vZGUgKgpraW9fb3Blbihjb25zdCBjaGFyICpmaWxlLCBpbnQgZmxh
Z3MsIGludCBjbW9kZSkKewoJc3RydWN0IHRocmVhZCAqdGQgPSBjdXJ0aHJlYWQ7CglzdHJ1
Y3QgbmFtZWlkYXRhIG5kOwoJaW50IGVycm9yOwoKCWlmICh0ZC0+dGRfcHJvYy0+cF9mZC0+
ZmRfcmRpciA9PSBOVUxMKQoJCXRkLT50ZF9wcm9jLT5wX2ZkLT5mZF9yZGlyID0gcm9vdHZu
b2RlOwoJaWYgKHRkLT50ZF9wcm9jLT5wX2ZkLT5mZF9jZGlyID09IE5VTEwpCgkJdGQtPnRk
X3Byb2MtPnBfZmQtPmZkX2NkaXIgPSByb290dm5vZGU7CgoJZmxhZ3MgPSBGRkxBR1MoZmxh
Z3MpOwoJTkRJTklUKCZuZCwgTE9PS1VQLCBOT0ZPTExPVywgVUlPX1NZU1NQQUNFLCBmaWxl
LCB0ZCk7CgllcnJvciA9IHZuX29wZW5fY3JlZCgmbmQsICZmbGFncywgY21vZGUsIHRkLT50
ZF91Y3JlZCwgLTEpOwoJTkRGUkVFKCZuZCwgTkRGX09OTFlfUE5CVUYpOwoJaWYgKGVycm9y
ICE9IDApCgkJcmV0dXJuIChOVUxMKTsKCS8qIFdlIGp1c3QgdW5sb2NrIHNvIHdlIGhvbGQg
YSByZWZlcmVuY2UuICovCglWT1BfVU5MT0NLKG5kLm5pX3ZwLCAwLCB0ZCk7CglyZXR1cm4g
KG5kLm5pX3ZwKTsKfQoKdm9pZApraW9fY2xvc2Uoc3RydWN0IHZub2RlICp2cCkKewoJc3Ry
dWN0IHRocmVhZCAqdGQgPSBjdXJ0aHJlYWQ7CgoJdm5fY2xvc2UodnAsIEZXUklURSwgdGQt
PnRkX3VjcmVkLCB0ZCk7Cn0KCmludApraW9fd3JpdGUoc3RydWN0IHZub2RlICp2cCwgdm9p
ZCAqYnVmLCBzaXplX3Qgc2l6ZSkKewoJc3RydWN0IHRocmVhZCAqdGQgPSBjdXJ0aHJlYWQ7
CglzdHJ1Y3QgbW91bnQgKm1wOwoJc3RydWN0IHVpbyBhdWlvOwoJc3RydWN0IGlvdmVjIGFp
b3Y7CgoJYnplcm8oJmFpb3YsIHNpemVvZihhaW92KSk7CgliemVybygmYXVpbywgc2l6ZW9m
KGF1aW8pKTsKCglhaW92Lmlvdl9iYXNlID0gYnVmOwoJYWlvdi5pb3ZfbGVuID0gc2l6ZTsK
CglhdWlvLnVpb19pb3YgPSAmYWlvdjsKCWF1aW8udWlvX29mZnNldCA9IDA7CglhdWlvLnVp
b19zZWdmbGcgPSBVSU9fU1lTU1BBQ0U7CglhdWlvLnVpb19ydyA9IFVJT19XUklURTsKCWF1
aW8udWlvX2lvdmNudCA9IDE7CglhdWlvLnVpb19yZXNpZCA9IHNpemU7CglhdWlvLnVpb190
ZCA9IHRkOwoKCS8qCgkgKiBEbyBhbGwgb2YgdGhlIGp1bmsgcmVxdWlyZWQgdG8gd3JpdGUg
bm93LgoJICovCgl2bl9zdGFydF93cml0ZSh2cCwgJm1wLCBWX1dBSVQpOwoJdm5fbG9jayh2
cCwgTEtfRVhDTFVTSVZFIHwgTEtfUkVUUlksIHRkKTsKCVZPUF9MRUFTRSh2cCwgdGQsIHRk
LT50ZF91Y3JlZCwgTEVBU0VfV1JJVEUpOwogIC8vIFRPRE86IElkZWFsbHksIHRoZSBmbGFn
cyBwYXNzZWQgaW50byBWT1BfV1JJVEUgb24gdGhlIG5leHQgbGluZSBzaG91bGRuJ3QKICAv
LyAgICAgICBiZSBoYXJkY29kZWQuIElzIHRoZXJlIGEgd2F5IHRvIGNhbGN1bGF0ZSB0aGVt
IGJhc2VkIG9uIHRoZSBmbGFncwogIC8vICAgICAgIHBhc3NlZCBpbnRvIGtpb19vcGVuPwoJ
Vk9QX1dSSVRFKHZwLCAmYXVpbywgSU9fVU5JVCB8IElPX1NZTkMgfCBJT19BUFBFTkQsIHRk
LT50ZF91Y3JlZCk7CglWT1BfVU5MT0NLKHZwLCAwLCB0ZCk7Cgl2bl9maW5pc2hlZF93cml0
ZShtcCk7CglyZXR1cm4gKDApOwp9Cg==
--------------050508090406060108000201--



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?4652AD8C.7000605>