Subject: Use vn_rdwr in vnd (Re: kern/34882)
To: None <jmmv@NetBSD.org, gnats-admin@netbsd.org, netbsd-bugs@netbsd.org,>
From: Julio M. Merino Vidal <jmmv84@gmail.com>
List: netbsd-bugs
Date: 11/07/2006 14:00:10
The following reply was made to PR kern/34882; it has been noted by GNATS.

From: "Julio M. Merino Vidal" <jmmv84@gmail.com>
To: tech-kern <tech-kern@netbsd.org>, gnats-bugs@NetBSD.org
Cc: 
Subject: Use vn_rdwr in vnd (Re: kern/34882)
Date: Tue, 7 Nov 2006 14:57:06 +0100

 ------=_Part_6119_5034494.1162907826275
 Content-Type: text/plain; charset=ISO-8859-1; format=flowed
 Content-Transfer-Encoding: 7bit
 Content-Disposition: inline
 
 Hello,
 
 vnd currently relies on the VOP_BMAP and VOP_STRATEGY operations to
 access the vnode holding the disk image.  Unfortunately this means
 that one cannot use vnd with files that live in file systems that do
 not support these operations such as, for example, tmpfs or smbfs.
 
 The attached patch makes vnd use the regular VOP_READ and VOP_WRITE
 operations iff bmap/strategy are _not_ available (how this is
 currently determined is quite ugly but keeps the changes
 self-contained for now).  I know (from the comments in vnd) that this
 is not optimal, but IMHO it's better to have vnd working* than to
 worry about some minor issues.  (Implementing bmap/strategy for some
 file systems doesn't seem trivial nor makes much sense I think.)
 
 * Yes, using vnd with files in tmpfs is useful (as well as over
 smbfs).  I can show you some use cases if you want them.
 
 Comments please?
 
 Thanks.
 
 -- 
 Julio M. Merino Vidal <jmmv84@gmail.com>
 The Julipedia - http://julipedia.blogspot.com/
 
 ------=_Part_6119_5034494.1162907826275
 Content-Type: text/plain; name=patch.diff; charset=ANSI_X3.4-1968
 Content-Transfer-Encoding: base64
 X-Attachment-Id: f_eu8d9j82
 Content-Disposition: attachment; filename="patch.diff"
 
 SW5kZXg6IHZuZC5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
 PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnNyb290L3NyYy9zeXMvZGV2L3Zu
 ZC5jLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjE1NgpkaWZmIC11IC1wIC1yMS4xNTYgdm5kLmMK
 LS0tIHZuZC5jCTE3IE9jdCAyMDA2IDE4OjIxOjI5IC0wMDAwCTEuMTU2CisrKyB2bmQuYwk3IE5v
 diAyMDA2IDEzOjU2OjA5IC0wMDAwCkBAIC0xMTksOSArMTE5LDEzIEBACiAgKiBCbG9jay9jaGFy
 YWN0ZXIgaW50ZXJmYWNlIHRvIGEgdm5vZGUuICBBbGxvd3Mgb25lIHRvIHRyZWF0IGEgZmlsZQog
 ICogYXMgYSBkaXNrIChlLmcuIGJ1aWxkIGEgZmlsZXN5c3RlbSBpbiBpdCwgbW91bnQgaXQsIGV0
 Yy4pLgogICoKLSAqIE5PVEUgMTogVGhpcyB1c2VzIHRoZSBWT1BfQk1BUC9WT1BfU1RSQVRFR1kg
 aW50ZXJmYWNlIHRvIHRoZSB2bm9kZQotICogaW5zdGVhZCBvZiBhIHNpbXBsZSBWT1BfUkRXUi4g
 IFdlIGRvIHRoaXMgdG8gYXZvaWQgZGlzdG9ydGluZyB0aGUKLSAqIGxvY2FsIGJ1ZmZlciBjYWNo
 ZS4KKyAqIE5PVEUgMTogSWYgdGhlIHZub2RlIHN1cHBvcnRzIHRoZSBWT1BfQk1BUCBhbmQgVk9Q
 X1NUUkFURUdZIG9wZXJhdGlvbnMsCisgKiB0aGlzIHVzZXMgdGhlbSBpbnN0ZWFkIHRoZSByZWd1
 bGFyIFZPUF9SRUFEIGFuZCBWT1BfV1JJVEUgdG8gYXZvaWQKKyAqIGRpc3RvcnRpbmcgdGhlIGxv
 Y2FsIGJ1ZmZlciBjYWNoZS4gIElmIHRob3NlIGJsb2NrLWxldmVsIG9wZXJhdGlvbnMKKyAqIGFy
 ZSBub3QgYXZhaWxhYmxlLCB0aGlzIGZhbGxzIGJhY2sgdG8gdGhlIHJlZ3VsYXIgcmVhZCBhbmQg
 d3JpdGUgY2FsbHMuCisgKiBCZXR0ZXIgaGF2ZSB0aGUgZHJpdmVyIHdvcmtpbmcgaW4gYWxsIGNh
 c2VzIHRoYW4gcHJldmVudGluZyBpdCB0byB3b3JrCisgKiBvbiBmaWxlIHN5c3RlbXMgd2hlcmUg
 dGhlIGJsb2NrLWxldmVsIG9wZXJhdGlvbnMgbWFrZSBubyBzZW5zZSAoZS5nLgorICogY29uc2lk
 ZXIgdG1wZnMgb3Igc21iZnMpLgogICoKICAqIE5PVEUgMjogVGhlcmUgaXMgYSBzZWN1cml0eSBp
 c3N1ZSBpbnZvbHZlZCB3aXRoIHRoaXMgZHJpdmVyLgogICogT25jZSBtb3VudGVkIGFsbCBhY2Nl
 c3MgdG8gdGhlIGNvbnRlbnRzIG9mIHRoZSAibWFwcGVkIiBmaWxlIHZpYQpAQCAtMTYzLDYgKzE2
 Nyw3IEBAIF9fS0VSTkVMX1JDU0lEKDAsICIkTmV0QlNEOiB2bmQuYyx2IDEuMTUKIAogI2luY2x1
 ZGUgPG5ldC96bGliLmg+CiAKKyNpbmNsdWRlIDxtaXNjZnMvZ2VuZnMvZ2VuZnMuaD4KICNpbmNs
 dWRlIDxtaXNjZnMvc3BlY2ZzL3NwZWNkZXYuaD4KIAogI2luY2x1ZGUgPGRldi92bmR2YXIuaD4K
 QEAgLTIxNiw3ICsyMjEsMTEgQEAgc3RhdGljIHZvaWQJKnZuZF9hbGxvYyh2b2lkICosIHVfaW50
 LCB1Xwogc3RhdGljIHZvaWQJdm5kX2ZyZWUodm9pZCAqLCB2b2lkICopOwogI2VuZGlmIC8qIFZO
 RF9DT01QUkVTU0lPTiAqLwogCi1zdGF0aWMgdm9pZCB2bmR0aHJlYWQodm9pZCAqKTsKK3N0YXRp
 YyB2b2lkCXZuZHRocmVhZCh2b2lkICopOworc3RhdGljIHZvaWQJaGFuZGxlX3dpdGhfcmR3cihz
 dHJ1Y3Qgdm5kX3NvZnRjICosIGNvbnN0IHN0cnVjdCBidWYgKiwKKwkJICAgIHN0cnVjdCBidWYg
 Kik7CitzdGF0aWMgdm9pZAloYW5kbGVfd2l0aF9zdHJhdGVneShzdHJ1Y3Qgdm5kX3NvZnRjICos
 IGNvbnN0IHN0cnVjdCBidWYgKiwKKwkJICAgIHN0cnVjdCBidWYgKik7CiAKIHN0YXRpYyBkZXZf
 dHlwZV9vcGVuKHZuZG9wZW4pOwogc3RhdGljIGRldl90eXBlX2Nsb3NlKHZuZGNsb3NlKTsKQEAg
 LTUyMiwyNSArNTMxLDUwIEBAIHN0YXRpYyB2b2lkCiB2bmR0aHJlYWQodm9pZCAqYXJnKQogewog
 CXN0cnVjdCB2bmRfc29mdGMgKnZuZCA9IGFyZzsKLQlzdHJ1Y3QgbW91bnQgKm1wOwotCWludCBz
 LCBic2l6ZTsKLQlpbnQgc3osIGVycm9yOwotCXN0cnVjdCBkaXNrbGFiZWwgKmxwOworCWJvb2xl
 YW5fdCB1c2VzdHJhdGVneTsKKwlpbnQgczsKKworCS8qIERldGVybWluZSB3aGV0aGVyIHdlIGNh
 biB1c2UgVk9QX0JNQVAgYW5kIFZPUF9TVFJBVEVHWSB0bworCSAqIGRpcmVjdGx5IGFjY2VzcyB0
 aGUgYmFja2luZyB2bm9kZS4gIElmIHdlIGNhbiwgdXNlIHRoZXNlIHR3bworCSAqIG9wZXJhdGlv
 bnMgdG8gYXZvaWQgbWVzc2luZyB3aXRoIHRoZSBsb2NhbCBidWZmZXIgY2FjaGUuCisJICogT3Ro
 ZXJ3aXNlIGZhbGwgYmFjayB0byByZWd1bGFyIFZPUF9SRUFEL1ZPUF9XUklURSBvcGVyYXRpb25z
 CisJICogd2hpY2ggYXJlIGd1YXJhbnRlZWQgdG8gd29yayB3aXRoIGFueSBmaWxlIHN5c3RlbS4K
 KwkgKgorCSAqIFhYWCBUaGUgdGVzdCBiZWxvdyB1c2VkIHRvIGRldGVybWluZSB0aGlzIGlzIHZl
 cnkgZnJhZ2lsZS4KKwkgKiBXZSBuZWVkIGEgd2F5IHRvIGRldGVybWluZSBmb3Igc3VyZSBpZiB0
 aGUgdW5kZXJseWluZyB2bm9kZQorCSAqIGltcGxlbWVudHMgdGhlIHJlcXVpcmVkIG9wZXJhdGlv
 bnMgb3Igbm90LiAqLworCXsKKwkJaW50ICgqYm1hcHApKHZvaWQgKik7CisJCWludCAoKmRlZmF1
 bHRwKSh2b2lkICopOworCQlpbnQgKCpzdHJhdGVneXApKHZvaWQgKik7CisKKwkJYm1hcHAgPSB2
 bmQtPnNjX3ZwLT52X29wW1ZPRkZTRVQodm9wX2JtYXApXTsKKwkJZGVmYXVsdHAgPSB2bmQtPnNj
 X3ZwLT52X29wW1ZPRkZTRVQodm9wX2RlZmF1bHQpXTsKKwkJc3RyYXRlZ3lwID0gdm5kLT5zY192
 cC0+dl9vcFtWT0ZGU0VUKHZvcF9zdHJhdGVneSldOworCisJCXVzZXN0cmF0ZWd5ID0KKwkJICAg
 IChibWFwcCAhPSBkZWZhdWx0cCAmJiBibWFwcCAhPSBnZW5mc19lb3Bub3RzdXBwKSAmJgorCQkg
 ICAgKHN0cmF0ZWd5cCAhPSBkZWZhdWx0cCAmJiBzdHJhdGVneXAgIT0gZ2VuZnNfZW9wbm90c3Vw
 cCk7CisKKyNpZmRlZiBERUJVRworCQlpZiAodm5kZGVidWcgJiBWREJfSU5JVCkKKwkJCXByaW50
 Zigidm5kdGhyZWFkOiB2cCAlcCwgJXNcbiIsIHZuZC0+c2NfdnAsCisJCQkgICAgdXNlc3RyYXRl
 Z3kgPworCQkJICAgICJ1c2luZyBibWFwL3N0cmF0ZWd5IG9wZXJhdGlvbnMiIDoKKwkJCSAgICAi
 dXNpbmcgcmVhZC93cml0ZSBvcGVyYXRpb25zIik7CisjZW5kaWYKKwl9CiAKIAlzID0gc3BsYmlv
 KCk7CiAJdm5kLT5zY19mbGFncyB8PSBWTkZfS1RIUkVBRDsKIAl3YWtldXAoJnZuZC0+c2Nfa3Ro
 cmVhZCk7CiAKIAkvKgotCSAqIERlcXVldWUgcmVxdWVzdHMsIGJyZWFrIHRoZW0gaW50byBic2l6
 ZSBwaWVjZXMgYW5kIHN1Ym1pdCB1c2luZwotCSAqIFZPUF9CTUFQL1ZPUF9TVFJBVEVHWS4KKwkg
 KiBEZXF1ZXVlIHJlcXVlc3RzIGFuZCBzZXJ2ZSB0aGVtIGRlcGVuZGluZyBvbiB0aGUgYXZhaWxh
 YmxlCisJICogdm5vZGUgb3BlcmF0aW9ucy4KIAkgKi8KIAl3aGlsZSAoKHZuZC0+c2NfZmxhZ3Mg
 JiBWTkZfVlVOQ09ORikgPT0gMCkgewogCQlzdHJ1Y3Qgdm5keGZlciAqdm54OwotCQlvZmZfdCBv
 ZmZzZXQ7Ci0JCWludCByZXNpZDsKLQkJaW50IHNraXBwZWQgPSAwOwotCQlvZmZfdCBibjsKIAkJ
 aW50IGZsYWdzOwogCQlzdHJ1Y3QgYnVmICpvYnA7CiAJCXN0cnVjdCBidWYgKmJwOwpAQCAtNTU2
 LDEwICs1OTAsNiBAQCB2bmR0aHJlYWQodm9pZCAqYXJnKQogCQlpZiAodm5kZGVidWcgJiBWREJf
 Rk9MTE9XKQogCQkJcHJpbnRmKCJ2bmR0aHJlYWQoJXBcbiIsIG9icCk7CiAjZW5kaWYKLQkJbHAg
 PSB2bmQtPnNjX2RrZGV2LmRrX2xhYmVsOwotCi0JCS8qIGNvbnZlcnQgdG8gYSBieXRlIG9mZnNl
 dCB3aXRoaW4gdGhlIGZpbGUuICovCi0JCWJuID0gb2JwLT5iX3Jhd2Jsa25vICogbHAtPmRfc2Vj
 c2l6ZTsKIAogCQlpZiAodm5kLT5zY192cC0+dl9tb3VudCA9PSBOVUxMKSB7CiAJCQlvYnAtPmJf
 ZXJyb3IgPSBFTlhJTzsKQEAgLTU2OSwxMyArNTk5LDE3IEBAIHZuZHRocmVhZCh2b2lkICphcmcp
 CiAjaWZkZWYgVk5EX0NPTVBSRVNTSU9OCiAJCS8qIGhhbmRsZSBhIGNvbXByZXNzZWQgcmVhZCAq
 LwogCQlpZiAoKGZsYWdzICYgQl9SRUFEKSAhPSAwICYmICh2bmQtPnNjX2ZsYWdzICYgVk5GX0NP
 TVApKSB7CisJCQlvZmZfdCBibjsKKwkJCQorCQkJLyogQ29udmVydCB0byBhIGJ5dGUgb2Zmc2V0
 IHdpdGhpbiB0aGUgZmlsZS4gKi8KKwkJCWJuID0gb2JwLT5iX3Jhd2Jsa25vICoKKwkJCSAgICB2
 bmQtPnNjX2RrZGV2LmRrX2xhYmVsLT5kX3NlY3NpemU7CisKIAkJCWNvbXBzdHJhdGVneShvYnAs
 IGJuKTsKIAkJCWdvdG8gZG9uZTsKIAkJfQogI2VuZGlmIC8qIFZORF9DT01QUkVTU0lPTiAqLwog
 CQkKLQkJYnNpemUgPSB2bmQtPnNjX3ZwLT52X21vdW50LT5tbnRfc3RhdC5mX2lvc2l6ZTsKLQog
 CQkvKgogCQkgKiBBbGxvY2F0ZSBhIGhlYWRlciBmb3IgdGhpcyB0cmFuc2ZlciBhbmQgbGluayBp
 dCB0byB0aGUKIAkJICogYnVmZmVyCkBAIC01ODUsNiArNjE5LDE2IEBAIHZuZHRocmVhZCh2b2lk
 ICphcmcpCiAJCXNwbHgocyk7CiAJCXZueC0+dnhfdm5kID0gdm5kOwogCisJCXMgPSBzcGxiaW8o
 KTsKKwkJd2hpbGUgKHZuZC0+c2NfYWN0aXZlID49IHZuZC0+c2NfbWF4YWN0aXZlKSB7CisJCQl0
 c2xlZXAoJnZuZC0+c2NfdGFiLCBQUklCSU8sICJ2bmRhYyIsIDApOworCQl9CisJCXZuZC0+c2Nf
 YWN0aXZlKys7CisJCXNwbHgocyk7CisKKwkJLyogSW5zdHJ1bWVudGF0aW9uLiAqLworCQlkaXNr
 X2J1c3koJnZuZC0+c2NfZGtkZXYpOworCiAJCWJwID0gJnZueC0+dnhfYnVmOwogCQlCVUZfSU5J
 VChicCk7CiAJCWJwLT5iX2ZsYWdzID0gKG9icC0+Yl9mbGFncyAmIEJfUkVBRCkgfCBCX0NBTEw7
 CkBAIC01OTUsMTA2ICs2MzksMTg0IEBAIHZuZHRocmVhZCh2b2lkICphcmcpCiAJCWJwLT5iX2Jj
 b3VudCA9IGJwLT5iX3Jlc2lkID0gb2JwLT5iX2Jjb3VudDsKIAkJQklPX0NPUFlQUklPKGJwLCBv
 YnApOwogCisJCS8qIEhhbmRsZSB0aGUgcmVxdWVzdCB1c2luZyB0aGUgYXBwcm9wcmlhdGUgb3Bl
 cmF0aW9ucy4gKi8KKwkJaWYgKHVzZXN0cmF0ZWd5KQorCQkJaGFuZGxlX3dpdGhfc3RyYXRlZ3ko
 dm5kLCBvYnAsIGJwKTsKKwkJZWxzZQorCQkJaGFuZGxlX3dpdGhfcmR3cih2bmQsIG9icCwgYnAp
 OworCiAJCXMgPSBzcGxiaW8oKTsKLQkJd2hpbGUgKHZuZC0+c2NfYWN0aXZlID49IHZuZC0+c2Nf
 bWF4YWN0aXZlKSB7Ci0JCQl0c2xlZXAoJnZuZC0+c2NfdGFiLCBQUklCSU8sICJ2bmRhYyIsIDAp
 OwotCQl9Ci0JCXZuZC0+c2NfYWN0aXZlKys7CisJCWNvbnRpbnVlOworCitkb25lOgorCQliaW9k
 b25lKG9icCk7CisJCXMgPSBzcGxiaW8oKTsKKwl9CisKKwl2bmQtPnNjX2ZsYWdzICY9ICh+Vk5G
 X0tUSFJFQUQgfCBWTkZfVlVOQ09ORik7CisJd2FrZXVwKCZ2bmQtPnNjX2t0aHJlYWQpOworCXNw
 bHgocyk7CisJa3RocmVhZF9leGl0KDApOworfQorCisvKgorICogSGFuZGVzIHRoZSByZWFkL3dy
 aXRlIHJlcXVlc3QgZ2l2ZW4gaW4gJ2JwJyB1c2luZyB0aGUgdm5vZGUncyBWT1BfUkVBRAorICog
 YW5kIFZPUF9XUklURSBvcGVyYXRpb25zLgorICoKKyAqICdvYnAnIGlzIGEgcG9pbnRlciB0byB0
 aGUgb3JpZ2luYWwgcmVxdWVzdCBmZWQgdG8gdGhlIHZuZCBkZXZpY2UuCisgKi8KK3N0YXRpYyB2
 b2lkCitoYW5kbGVfd2l0aF9yZHdyKHN0cnVjdCB2bmRfc29mdGMgKnZuZCwgY29uc3Qgc3RydWN0
 IGJ1ZiAqb2JwLCBzdHJ1Y3QgYnVmICpicCkKK3sKKwlib29sZWFuX3QgZG9yZWFkOworCW9mZl90
 IG9mZnNldDsKKwlzdHJ1Y3Qgdm5vZGUgKnZwOworCisJZG9yZWFkID0gYnAtPmJfZmxhZ3MgJiBC
 X1JFQUQ7CisJb2Zmc2V0ID0gb2JwLT5iX3Jhd2Jsa25vICogdm5kLT5zY19ka2Rldi5ka19sYWJl
 bC0+ZF9zZWNzaXplOworCXZwID0gdm5kLT5zY192cDsKKworI2lmIGRlZmluZWQoREVCVUcpCisJ
 aWYgKHZuZGRlYnVnICYgVkRCX0lPKQorCQlwcmludGYoInZuZCAocmR3cik6IHZwICVwLCAlcywg
 cmF3Ymxrbm8gMHglIiBQUkl4NjQKKwkJICAgICIsIHNlY3NpemUgJWQsIG9mZnNldCAlIiBQUkl1
 NjQKKwkJICAgICIsIGJjb3VudCAlZCwgcmVzaWQgJWRcbiIsCisJCSAgICB2cCwgZG9yZWFkID8g
 InJlYWQiIDogIndyaXRlIiwgb2JwLT5iX3Jhd2Jsa25vLAorCQkgICAgdm5kLT5zY19ka2Rldi5k
 a19sYWJlbC0+ZF9zZWNzaXplLCBvZmZzZXQsCisJCSAgICBicC0+Yl9iY291bnQsIGJwLT5iX3Jl
 c2lkKTsKKyNlbmRpZgorCisJLyogSXNzdWUgdGhlIHJlYWQgb3Igd3JpdGUgb3BlcmF0aW9uLiAq
 LworCWJwLT5iX2Vycm9yID0KKwkgICAgdm5fcmR3cihkb3JlYWQgPyBVSU9fUkVBRCA6IFVJT19X
 UklURSwKKwkgICAgdnAsIGJwLT5iX2RhdGEsIGJwLT5iX2Jjb3VudCwgb2Zmc2V0LAorCSAgICBV
 SU9fU1lTU1BBQ0UsIDAsIHZuZC0+c2NfY3JlZCwgJmJwLT5iX3Jlc2lkLCBOVUxMKTsKKwlpZiAo
 YnAtPmJfZXJyb3IgIT0gMCkKKwkJYnAtPmJfZmxhZ3MgfD0gQl9FUlJPUjsKKwllbHNlCisJCUtB
 U1NFUlQoIShicC0+Yl9mbGFncyAmIEJfRVJST1IpKTsKKworCS8qIEZsdXNoIHRoZSB2bm9kZSBp
 ZiByZXF1ZXN0ZWQuICovCisJaWYgKG9icC0+Yl9mbGFncyAmIEJfVkZMVVNIKQorCQl2Zmx1c2hi
 dWYodnAsIDApOworCisJLyogV2UgbmVlZCB0byBpbmNyZWFzZSB0aGUgbnVtYmVyIG9mIG91dHB1
 dHMgb24gdGhlIHZub2RlIGlmCisJICogdGhlcmUgd2FzIGFueSB3cml0ZSB0byBpdCAoZWl0aGVy
 IGR1ZSB0byBhIHJlYWwgd3JpdGUgb3IgZHVlCisJICogdG8gYSBmbHVzaCkuICovCisJaWYgKCFk
 b3JlYWQgfHwgb2JwLT5iX2ZsYWdzICYgQl9WRkxVU0gpCisJCXZwLT52X251bW91dHB1dCsrOwor
 CisJYmlvZG9uZShicCk7Cit9CisKKy8qCisgKiBIYW5kZXMgdGhlIHJlYWQvd3JpdGUgcmVxdWVz
 dCBnaXZlbiBpbiAnYnAnIHVzaW5nIHRoZSB2bm9kZSdzIFZPUF9CTUFQCisgKiBhbmQgVk9QX1NU
 UkFURUdZIG9wZXJhdGlvbnMuCisgKgorICogJ29icCcgaXMgYSBwb2ludGVyIHRvIHRoZSBvcmln
 aW5hbCByZXF1ZXN0IGZlZCB0byB0aGUgdm5kIGRldmljZS4KKyAqLworc3RhdGljIHZvaWQKK2hh
 bmRsZV93aXRoX3N0cmF0ZWd5KHN0cnVjdCB2bmRfc29mdGMgKnZuZCwgY29uc3Qgc3RydWN0IGJ1
 ZiAqb2JwLAorICAgIHN0cnVjdCBidWYgKmJwKQoreworCWludCBic2l6ZSwgZXJyb3IsIGZsYWdz
 LCBza2lwcGVkOworCXNpemVfdCByZXNpZCwgc3o7CisJb2ZmX3QgYm4sIG9mZnNldDsKKwlzdHJ1
 Y3QgbW91bnQgKm1wOworCisJZmxhZ3MgPSBvYnAtPmJfZmxhZ3M7CisKKwltcCA9IE5VTEw7CisJ
 aWYgKCEoZmxhZ3MgJiBCX1JFQUQpKSB7CisJCWludCBzOworCQkKKwkJcyA9IHNwbGJpbygpOwor
 CQlWX0lOQ1JfTlVNT1VUUFVUKGJwLT5iX3ZwKTsKIAkJc3BseChzKTsKIAotCQlpZiAoKGZsYWdz
 ICYgQl9SRUFEKSA9PSAwKSB7Ci0JCQlzID0gc3BsYmlvKCk7Ci0JCQlWX0lOQ1JfTlVNT1VUUFVU
 KGJwLT5iX3ZwKTsKLQkJCXNwbHgocyk7CisJCXZuX3N0YXJ0X3dyaXRlKHZuZC0+c2NfdnAsICZt
 cCwgVl9XQUlUKTsKKwkJS0FTU0VSVChtcCAhPSBOVUxMKTsKKwl9CiAKLQkJCXZuX3N0YXJ0X3dy
 aXRlKHZuZC0+c2NfdnAsICZtcCwgVl9XQUlUKTsKLQkJfQorCS8qIGNvbnZlcnQgdG8gYSBieXRl
 IG9mZnNldCB3aXRoaW4gdGhlIGZpbGUuICovCisJYm4gPSBvYnAtPmJfcmF3Ymxrbm8gKiB2bmQt
 PnNjX2RrZGV2LmRrX2xhYmVsLT5kX3NlY3NpemU7CiAKLQkJLyogSW5zdHJ1bWVudGF0aW9uLiAq
 LwotCQlkaXNrX2J1c3koJnZuZC0+c2NfZGtkZXYpOworCWJzaXplID0gdm5kLT5zY192cC0+dl9t
 b3VudC0+bW50X3N0YXQuZl9pb3NpemU7CisJc2tpcHBlZCA9IDA7CiAKLQkJLyoKLQkJICogRmVl
 ZCByZXF1ZXN0cyBzZXF1ZW50aWFsbHkuCi0JCSAqIFdlIGRvIGl0IHRoaXMgd2F5IHRvIGtlZXAg
 ZnJvbSBmbG9vZGluZyBORlMgc2VydmVycyBpZiB3ZQotCQkgKiBhcmUgY29ubmVjdGVkIHRvIGFu
 IE5GUyBmaWxlLiAgVGhpcyBwbGFjZXMgdGhlIGJ1cmRlbiBvbgotCQkgKiB0aGUgY2xpZW50IHJh
 dGhlciB0aGFuIHRoZSBzZXJ2ZXIuCi0JCSAqLwotCQllcnJvciA9IDA7Ci0JCWZvciAob2Zmc2V0
 ID0gMCwgcmVzaWQgPSBicC0+Yl9yZXNpZDsgcmVzaWQ7Ci0JCSAgICByZXNpZCAtPSBzeiwgb2Zm
 c2V0ICs9IHN6KSB7Ci0JCQlzdHJ1Y3QgYnVmICpuYnA7Ci0JCQlzdHJ1Y3Qgdm5vZGUgKnZwOwot
 CQkJZGFkZHJfdCBuYm47Ci0JCQlpbnQgb2ZmLCBucmE7CisJLyoKKwkgKiBCcmVhayB0aGUgcmVx
 dWVzdCBpbnRvIGJzaXplIHBpZWNlcyBhbmQgZmVlZCB0aGVtCisJICogc2VxdWVudGlhbGx5IHVz
 aW5nIFZPUF9CTUFQL1ZPUF9TVFJBVEVHWS4KKwkgKiBXZSBkbyBpdCB0aGlzIHdheSB0byBrZWVw
 IGZyb20gZmxvb2RpbmcgTkZTIHNlcnZlcnMgaWYgd2UKKwkgKiBhcmUgY29ubmVjdGVkIHRvIGFu
 IE5GUyBmaWxlLiAgVGhpcyBwbGFjZXMgdGhlIGJ1cmRlbiBvbgorCSAqIHRoZSBjbGllbnQgcmF0
 aGVyIHRoYW4gdGhlIHNlcnZlci4KKwkgKi8KKwllcnJvciA9IDA7CisJZm9yIChvZmZzZXQgPSAw
 LCByZXNpZCA9IGJwLT5iX3Jlc2lkOyByZXNpZDsKKwkgICAgcmVzaWQgLT0gc3osIG9mZnNldCAr
 PSBzeikgeworCQlzdHJ1Y3QgYnVmICpuYnA7CisJCXN0cnVjdCB2bm9kZSAqdnA7CisJCWRhZGRy
 X3QgbmJuOworCQlpbnQgb2ZmLCBucmE7CisKKwkJbnJhID0gMDsKKwkJdm5fbG9jayh2bmQtPnNj
 X3ZwLCBMS19FWENMVVNJVkUgfCBMS19SRVRSWSB8IExLX0NBTlJFQ1VSU0UpOworCQllcnJvciA9
 IFZPUF9CTUFQKHZuZC0+c2NfdnAsIGJuIC8gYnNpemUsICZ2cCwgJm5ibiwgJm5yYSk7CisJCVZP
 UF9VTkxPQ0sodm5kLT5zY192cCwgMCk7CiAKLQkJCW5yYSA9IDA7Ci0JCQl2bl9sb2NrKHZuZC0+
 c2NfdnAsIExLX0VYQ0xVU0lWRSB8IExLX1JFVFJZIHwgTEtfQ0FOUkVDVVJTRSk7Ci0JCQllcnJv
 ciA9IFZPUF9CTUFQKHZuZC0+c2NfdnAsIGJuIC8gYnNpemUsICZ2cCwgJm5ibiwgJm5yYSk7Ci0J
 CQlWT1BfVU5MT0NLKHZuZC0+c2NfdnAsIDApOwotCQotCQkJaWYgKGVycm9yID09IDAgJiYgKGxv
 bmcpbmJuID09IC0xKQotCQkJCWVycm9yID0gRUlPOworCQlpZiAoZXJyb3IgPT0gMCAmJiAobG9u
 ZyluYm4gPT0gLTEpCisJCQllcnJvciA9IEVJTzsKIAotCQkJLyoKLQkJCSAqIElmIHRoZXJlIHdh
 cyBhbiBlcnJvciBvciBhIGhvbGUgaW4gdGhlIGZpbGUuLi5wdW50LgotCQkJICogTm90ZSB0aGF0
 IHdlIG1heSBoYXZlIHRvIHdhaXQgZm9yIGFueSBvcGVyYXRpb25zCi0JCQkgKiB0aGF0IHdlIGhh
 dmUgYWxyZWFkeSBmaXJlZCBvZmYgYmVmb3JlIHJlbGVhc2luZwotCQkJICogdGhlIGJ1ZmZlci4K
 LQkJCSAqCi0JCQkgKiBYWFggd2UgY291bGQgZGVhbCB3aXRoIGhvbGVzIGhlcmUgYnV0IGl0IHdv
 dWxkIGJlCi0JCQkgKiBhIGhhc3NsZSAoaW4gdGhlIHdyaXRlIGNhc2UpLgotCQkJICovCi0JCQlp
 ZiAoZXJyb3IpIHsKLQkJCQlza2lwcGVkICs9IHJlc2lkOwotCQkJCWJyZWFrOwotCQkJfQorCQkv
 KgorCQkgKiBJZiB0aGVyZSB3YXMgYW4gZXJyb3Igb3IgYSBob2xlIGluIHRoZSBmaWxlLi4ucHVu
 dC4KKwkJICogTm90ZSB0aGF0IHdlIG1heSBoYXZlIHRvIHdhaXQgZm9yIGFueSBvcGVyYXRpb25z
 CisJCSAqIHRoYXQgd2UgaGF2ZSBhbHJlYWR5IGZpcmVkIG9mZiBiZWZvcmUgcmVsZWFzaW5nCisJ
 CSAqIHRoZSBidWZmZXIuCisJCSAqCisJCSAqIFhYWCB3ZSBjb3VsZCBkZWFsIHdpdGggaG9sZXMg
 aGVyZSBidXQgaXQgd291bGQgYmUKKwkJICogYSBoYXNzbGUgKGluIHRoZSB3cml0ZSBjYXNlKS4K
 KwkJICovCisJCWlmIChlcnJvcikgeworCQkJc2tpcHBlZCArPSByZXNpZDsKKwkJCWJyZWFrOwor
 CQl9CiAKICNpZmRlZiBERUJVRwotCQkJaWYgKCFkb3ZuZGNsdXN0ZXIpCi0JCQkJbnJhID0gMDsK
 KwkJaWYgKCFkb3ZuZGNsdXN0ZXIpCisJCQlucmEgPSAwOwogI2VuZGlmCiAKLQkJCW9mZiA9IGJu
 ICUgYnNpemU7Ci0JCQlzeiA9IE1JTigoKG9mZl90KTEgKyBucmEpICogYnNpemUgLSBvZmYsIHJl
 c2lkKTsKKwkJb2ZmID0gYm4gJSBic2l6ZTsKKwkJc3ogPSBNSU4oKChvZmZfdCkxICsgbnJhKSAq
 IGJzaXplIC0gb2ZmLCByZXNpZCk7CiAjaWZkZWYJREVCVUcKLQkJCWlmICh2bmRkZWJ1ZyAmIFZE
 Ql9JTykKLQkJCQlwcmludGYoInZuZHN0cmF0ZWd5OiB2cCAlcC8lcCBibiAweCVxeC8weCUiIFBS
 SXg2NAotCQkJCSAgICAgICAiIHN6IDB4JXhcbiIsCi0JCQkJICAgIHZuZC0+c2NfdnAsIHZwLCAo
 bG9uZyBsb25nKWJuLCBuYm4sIHN6KTsKKwkJaWYgKHZuZGRlYnVnICYgVkRCX0lPKQorCQkJcHJp
 bnRmKCJ2bmRzdHJhdGVneTogdnAgJXAvJXAgYm4gMHglcXgvMHglIiBQUkl4NjQKKwkJCSAgICAg
 ICAiIHN6IDB4JXhcbiIsCisJCQkgICAgdm5kLT5zY192cCwgdnAsIChsb25nIGxvbmcpYm4sIG5i
 biwgc3opOwogI2VuZGlmCiAKLQkJCW5icCA9IGdldGlvYnVmKCk7Ci0JCQluZXN0aW9idWZfc2V0
 dXAoYnAsIG5icCwgb2Zmc2V0LCBzeik7Ci0JCQluYnAtPmJfYmxrbm8gPSBuYm4gKyBidG9kYihv
 ZmYpOworCQluYnAgPSBnZXRpb2J1ZigpOworCQluZXN0aW9idWZfc2V0dXAoYnAsIG5icCwgb2Zm
 c2V0LCBzeik7CisJCW5icC0+Yl9ibGtubyA9IG5ibiArIGJ0b2RiKG9mZik7CiAKICNpZiAwIC8q
 IFhYWCAjaWZkZWYgREVCVUcgKi8KLQkJCWlmICh2bmRkZWJ1ZyAmIFZEQl9JTykKLQkJCQlwcmlu
 dGYoInZuZHN0YXJ0KCVsZCk6IGJwICVwIHZwICVwIGJsa25vICIKLQkJCQkgICAgIjB4JSIgUFJJ
 eDY0ICIgZmxhZ3MgJXggYWRkciAlcCBjbnQgMHgleFxuIiwKLQkJCQkgICAgKGxvbmcpICh2bmQt
 dm5kX3NvZnRjKSwgJm5icC0+dmJfYnVmLAotCQkJCSAgICBuYnAtPnZiX2J1Zi5iX3ZwLCBuYnAt
 PnZiX2J1Zi5iX2Jsa25vLAotCQkJCSAgICBuYnAtPnZiX2J1Zi5iX2ZsYWdzLCBuYnAtPnZiX2J1
 Zi5iX2RhdGEsCi0JCQkJICAgIG5icC0+dmJfYnVmLmJfYmNvdW50KTsKLSNlbmRpZgotCQkJVk9Q
 X1NUUkFURUdZKHZwLCBuYnApOwotCQkJYm4gKz0gc3o7Ci0JCX0KLQkJbmVzdGlvYnVmX2RvbmUo
 YnAsIHNraXBwZWQsIGVycm9yKTsKLQotCQlpZiAoKGZsYWdzICYgQl9SRUFEKSA9PSAwKQotCQkJ
 dm5fZmluaXNoZWRfd3JpdGUobXAsIDApOwotCQkKLQkJcyA9IHNwbGJpbygpOwotCQljb250aW51
 ZTsKLWRvbmU6Ci0JCWJpb2RvbmUob2JwKTsKLQkJcyA9IHNwbGJpbygpOworCQlpZiAodm5kZGVi
 dWcgJiBWREJfSU8pCisJCQlwcmludGYoInZuZHN0YXJ0KCVsZCk6IGJwICVwIHZwICVwIGJsa25v
 ICIKKwkJCSAgICAiMHglIiBQUkl4NjQgIiBmbGFncyAleCBhZGRyICVwIGNudCAweCV4XG4iLAor
 CQkJICAgIChsb25nKSAodm5kLXZuZF9zb2Z0YyksICZuYnAtPnZiX2J1ZiwKKwkJCSAgICBuYnAt
 PnZiX2J1Zi5iX3ZwLCBuYnAtPnZiX2J1Zi5iX2Jsa25vLAorCQkJICAgIG5icC0+dmJfYnVmLmJf
 ZmxhZ3MsIG5icC0+dmJfYnVmLmJfZGF0YSwKKwkJCSAgICBuYnAtPnZiX2J1Zi5iX2Jjb3VudCk7
 CisjZW5kaWYKKwkJVk9QX1NUUkFURUdZKHZwLCBuYnApOworCQlibiArPSBzejsKKwl9CisJbmVz
 dGlvYnVmX2RvbmUoYnAsIHNraXBwZWQsIGVycm9yKTsKKworCWlmICghKGZsYWdzICYgQl9SRUFE
 KSkgeworCQlLQVNTRVJUKG1wICE9IE5VTEwpOworCQl2bl9maW5pc2hlZF93cml0ZShtcCwgMCk7
 CiAJfQotCi0Jdm5kLT5zY19mbGFncyAmPSAoflZORl9LVEhSRUFEIHwgVk5GX1ZVTkNPTkYpOwot
 CXdha2V1cCgmdm5kLT5zY19rdGhyZWFkKTsKLQlzcGx4KHMpOwotCWt0aHJlYWRfZXhpdCgwKTsK
 IH0KIAogc3RhdGljIHZvaWQK
 ------=_Part_6119_5034494.1162907826275--