Date: Thu, 19 Dec 2013 16:46:11 +0100 (CET) From: krichy@tvnetwork.hu To: freebsd-fs@freebsd.org Cc: pawel@dawidek.net Subject: Re: kern/184677 / ZFS snapshot handling deadlocks Message-ID: <alpine.DEB.2.10.1312191629370.4344@krichy.tvnetwork.hu> In-Reply-To: <alpine.DEB.2.10.1312171326520.7714@krichy.tvnetwork.hu> References: <alpine.DEB.2.10.1312161647410.11599@krichy.tvnetwork.hu> <alpine.DEB.2.10.1312171326520.7714@krichy.tvnetwork.hu>
next in thread | previous in thread | raw e-mail | index | archive | help
This message is in MIME format. The first part should be readable text, while the remaining parts are likely unreadable without MIME-aware tools. --1030603365-686922855-1387467971=:4344 Content-Type: TEXT/PLAIN; charset=US-ASCII; format=flowed Dear devs, I am attaching a more clear patch/fix for my snapshot handling issues (0002), but I would be happy if some ZFS expert would comment it. I am trying to solve it at least for two weeks now, and an ACK or a NACK would be nice from someone. Also a commit is reverted since it also caused deadlocks. I've read its comments, which also eliminates deadlocks, but I did not find any reference how to produce that deadlock. In my view reverting that makes my issues disappear, but I dont know what new cases will it rise. I've rewritten traverse() to make more like upstream, added two extra VN_HOLD()s to snapdir_lookup() when traverse returned the same vnode what was passed to it (I dont know even that upon creating a snapshot vnode why is that extra two holds needed for the vnode.) And unfortunately, due to FreeBSD calls vop_inactive callbacks with vnodes locked, that could also cause deadlocks, so zfsctl_snapshot_inactive() and zfsctl_snapshot_vptocnp() has been rewritten to work that around. After this, one may also get a deadlock, when a simple access would call into zfsctl_snapshot_lookup(). The documentation says, that those vnodes should always be covered, but after some stress test, sometimes we hit that call, and that can cause again deadlocks. In our environment I've just uncommented that callback, which returns ENODIR on some calls, but at least not a deadlock. The attached script can be used to reproduce my cases (would one confirm that?), and after the patches applied, they disappear (confirm?). Thanks, Kojedzinszky Richard Euronet Magyarorszag Informatikai Zrt. On Tue, 17 Dec 2013, krichy@tvnetwork.hu wrote: > Date: Tue, 17 Dec 2013 14:50:16 +0100 (CET) > From: krichy@tvnetwork.hu > To: pjd@freebsd.org > Cc: freebsd-fs@freebsd.org > Subject: Re: kern/184677 (fwd) > > Dear devs, > > I will sum up my experience regarding the issue: > > The sympton is that a concurrent 'zfs send -R' and some activity on the > snapshot dir (or in the snapshot) may cause a deadlock. > > After investigating the problem, I found that zfs send umounts the snapshots, > and that causes the deadlock, so later I tested only with concurrent umount > and the "activity". More later I found that listing the snapshots in > .zfs/snapshot/ and unounting them can cause the found deadlock, so I used > them for the tests. But for my surprise, instead of a deadlock, a recursive > lock panic has arised. > > The vnode for the ".zfs/snapshot/" directory contains zfs's zfsctl_snapdir_t > structure (sdp). This contains a tree of mounted snapshots, and each entry > (sep) contains the vnode of entry on which the snapshot is mounted on top > (se_root). The strange is that the se_root member does not hold a reference > for the vnode, just a simple pointer to it. > > Upon entry lookup (zfsctl_snapdir_lookup()) the "snapshot" vnode is locked, > the zfsctl_snapdir_t's tree is locked, and searched for the mount if it > exists already. If it founds no entry, does the mount. In the case of an > entry was found, the se_root member contains the vnode which the snapshot is > mounted on. Thus, a reference is taken for it, and the traverse() call will > resolve to the real root vnode of the mounted snapshot, returning it as > locked. (Examining the traverse() code I've found that it did not follow > FreeBSD's lock order recommendation described in sys/kern/vfs_subr.c.) > > On the other way, when an umount is issued, the se_root vnode looses its last > reference (as only the mountpoint holds one for it), it goes through the > vinactive() path, to zfsctl_snapshot_inactive(). In FreeBSD this is called > with a locked vnode, so this is a deadlock race condition. While > zfsctl_snapdir_lookup() holds the mutex for the sdp tree, and traverse() > tries to acquire the se_root, zfsctl_snapshot_inactive() holds the lock on > se_root while tries to access the sdp lock. > > The zfsctl_snapshot_inactive() has an if statement checking the v_usecount, > which is incremented in zfsctl_snapdir_lookup(), but in that context it is > not covered by VI_LOCK. And it seems to me that FreeBSD's vinactive() path > assumes that the vnode remains inactive (as opposed to illumos, at least how > i read the code). So zfsctl_snapshot_inactive() must free resources while in > a locked state. I was a bit confused, and probably that is why the previously > posted patch is as is. > > Maybe if I had some clues on the directions of this problem, I could have > worked more for a nicer, shorter solution. > > Please someone comment on my post. > > Regards, > > > > Kojedzinszky Richard > Euronet Magyarorszag Informatikai Zrt. > > On Mon, 16 Dec 2013, krichy@tvnetwork.hu wrote: > >> Date: Mon, 16 Dec 2013 16:52:16 +0100 (CET) >> From: krichy@tvnetwork.hu >> To: pjd@freebsd.org >> Cc: freebsd-fs@freebsd.org >> Subject: Re: kern/184677 (fwd) >> >> Dear PJD, >> >> I am a happy FreeBSD user, I am sure you've read my previous posts >> regarding some issues in ZFS. Please give some advice for me, where to look >> for solutions, or how could I help to resolve those issues. >> >> Regards, >> Kojedzinszky Richard >> Euronet Magyarorszag Informatikai Zrt. >> >> ---------- Forwarded message ---------- >> Date: Mon, 16 Dec 2013 15:23:06 +0100 (CET) >> From: krichy@tvnetwork.hu >> To: freebsd-fs@freebsd.org >> Subject: Re: kern/184677 >> >> >> Seems that pjd did a change which eliminated the zfsdev_state_lock on Fri >> Aug 12 07:04:16 2011 +0000, which might introduced a new deadlock >> situation. Any comments on this? >> >> >> Kojedzinszky Richard >> Euronet Magyarorszag Informatikai Zrt. >> >> On Mon, 16 Dec 2013, krichy@tvnetwork.hu wrote: >> >>> Date: Mon, 16 Dec 2013 11:08:11 +0100 (CET) >>> From: krichy@tvnetwork.hu >>> To: freebsd-fs@freebsd.org >>> Subject: kern/184677 >>> >>> Dear devs, >>> >>> I've attached a patch, which makes the recursive lockmgr disappear, and >>> makes the reported bug to disappear. I dont know if I followed any >>> guidelines well, or not, but at least it works for me. Please some >>> ZFS/FreeBSD fs expert review it, and fix it where it needed. >>> >>> But unfortunately, my original problem is still not solved, maybe the same >>> as Ryan's: >>> http://lists.freebsd.org/pipermail/freebsd-fs/2013-December/018707.html >>> >>> Tracing the problem down is that zfsctl_snapdir_lookup() tries to acquire >>> spa_namespace_lock while when finishing a zfs send -R does a >>> zfsdev_close(), and that also holds the same mutex. And this causes a >>> deadlock scenario. I looked at illumos's code, and for some reason they >>> use another mutex on zfsdev_close(), which therefore may not deadlock with >>> zfsctl_snapdir_lookup(). But I am still investigating the problem. >>> >>> I would like to help making ZFS more stable on freebsd also with its whole >>> functionality. I would be very thankful if some expert would give some >>> advice, how to solve these bugs. PJD, Steven, Xin? >>> >>> Thanks in advance, >>> >>> >>> Kojedzinszky Richard >>> Euronet Magyarorszag Informatikai Zrt. >> _______________________________________________ >> freebsd-fs@freebsd.org mailing list >> http://lists.freebsd.org/mailman/listinfo/freebsd-fs >> To unsubscribe, send any mail to "freebsd-fs-unsubscribe@freebsd.org" >> > --1030603365-686922855-1387467971=:4344 Content-Type: TEXT/x-diff; name=0001-Revert-Eliminate-the-zfsdev_state_lock-entirely-and-.patch Content-Transfer-Encoding: BASE64 Content-ID: <alpine.DEB.2.10.1312191646111.4344@krichy.tvnetwork.hu> Content-Description: Content-Disposition: attachment; filename=0001-Revert-Eliminate-the-zfsdev_state_lock-entirely-and-.patch RnJvbSAzOTI5OGRhODM4ZDAwNmFkMjI1ZTQxNTI5ZDdiN2YyNDBmY2NmZTcz IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQ0KRnJvbTogUmljaGFyZCBLb2pl ZHppbnN6a3kgPGtyaWNoeUBjZmxpbnV4Lmh1Pg0KRGF0ZTogTW9uLCAxNiBE ZWMgMjAxMyAxNTozOToxMSArMDEwMA0KU3ViamVjdDogW1BBVENIIDEvMl0g UmV2ZXJ0ICJFbGltaW5hdGUgdGhlIHpmc2Rldl9zdGF0ZV9sb2NrIGVudGly ZWx5IGFuZA0KIHJlcGxhY2UgaXQgd2l0aCB0aGUiDQoNClRoaXMgcmV2ZXJ0 cyBjb21taXQgMWQ4OTcyYjNmMzUzZjk4NmViNWI4NWJjMTA4YjFjMGQ5NDZk MzIxOC4NCg0KQ29uZmxpY3RzOg0KCXN5cy9jZGRsL2NvbnRyaWIvb3BlbnNv bGFyaXMvdXRzL2NvbW1vbi9mcy96ZnMvenZvbC5jDQotLS0NCiAuLi4vb3Bl bnNvbGFyaXMvdXRzL2NvbW1vbi9mcy96ZnMvc3lzL3pmc19pb2N0bC5oICB8 ICAgMSArDQogLi4uL29wZW5zb2xhcmlzL3V0cy9jb21tb24vZnMvemZzL3Zk ZXZfZ2VvbS5jICAgICAgfCAgMTQgKystDQogLi4uL29wZW5zb2xhcmlzL3V0 cy9jb21tb24vZnMvemZzL3pmc19pb2N0bC5jICAgICAgfCAgMTYgKy0tDQog Li4uL2NvbnRyaWIvb3BlbnNvbGFyaXMvdXRzL2NvbW1vbi9mcy96ZnMvenZv bC5jICAgfCAxMTkgKysrKysrKysrLS0tLS0tLS0tLS0tDQogNCBmaWxlcyBj aGFuZ2VkLCA3MCBpbnNlcnRpb25zKCspLCA4MCBkZWxldGlvbnMoLSkNCg0K ZGlmZiAtLWdpdCBhL3N5cy9jZGRsL2NvbnRyaWIvb3BlbnNvbGFyaXMvdXRz L2NvbW1vbi9mcy96ZnMvc3lzL3pmc19pb2N0bC5oIGIvc3lzL2NkZGwvY29u dHJpYi9vcGVuc29sYXJpcy91dHMvY29tbW9uL2ZzL3pmcy9zeXMvemZzX2lv Y3RsLmgNCmluZGV4IGFmMmRlZjIuLjgyNzJjNGQgMTAwNjQ0DQotLS0gYS9z eXMvY2RkbC9jb250cmliL29wZW5zb2xhcmlzL3V0cy9jb21tb24vZnMvemZz L3N5cy96ZnNfaW9jdGwuaA0KKysrIGIvc3lzL2NkZGwvY29udHJpYi9vcGVu c29sYXJpcy91dHMvY29tbW9uL2ZzL3pmcy9zeXMvemZzX2lvY3RsLmgNCkBA IC0zODMsNiArMzgzLDcgQEAgZXh0ZXJuIHZvaWQgKnpmc2Rldl9nZXRfc29m dF9zdGF0ZShtaW5vcl90IG1pbm9yLA0KIGV4dGVybiBtaW5vcl90IHpmc2Rl dl9taW5vcl9hbGxvYyh2b2lkKTsNCiANCiBleHRlcm4gdm9pZCAqemZzZGV2 X3N0YXRlOw0KK2V4dGVybiBrbXV0ZXhfdCB6ZnNkZXZfc3RhdGVfbG9jazsN CiANCiAjZW5kaWYJLyogX0tFUk5FTCAqLw0KIA0KZGlmZiAtLWdpdCBhL3N5 cy9jZGRsL2NvbnRyaWIvb3BlbnNvbGFyaXMvdXRzL2NvbW1vbi9mcy96ZnMv dmRldl9nZW9tLmMgYi9zeXMvY2RkbC9jb250cmliL29wZW5zb2xhcmlzL3V0 cy9jb21tb24vZnMvemZzL3ZkZXZfZ2VvbS5jDQppbmRleCAxNTY4NWE1Li41 YzNlOWYzIDEwMDY0NA0KLS0tIGEvc3lzL2NkZGwvY29udHJpYi9vcGVuc29s YXJpcy91dHMvY29tbW9uL2ZzL3pmcy92ZGV2X2dlb20uYw0KKysrIGIvc3lz L2NkZGwvY29udHJpYi9vcGVuc29sYXJpcy91dHMvY29tbW9uL2ZzL3pmcy92 ZGV2X2dlb20uYw0KQEAgLTU4MSw3ICs1ODEsNyBAQCB2ZGV2X2dlb21fb3Bl bih2ZGV2X3QgKnZkLCB1aW50NjRfdCAqcHNpemUsIHVpbnQ2NF90ICptYXhf cHNpemUsDQogCXN0cnVjdCBnX3Byb3ZpZGVyICpwcDsNCiAJc3RydWN0IGdf Y29uc3VtZXIgKmNwOw0KIAlzaXplX3QgYnVmc2l6ZTsNCi0JaW50IGVycm9y Ow0KKwlpbnQgZXJyb3IsIGxvY2s7DQogDQogCS8qDQogCSAqIFdlIG11c3Qg aGF2ZSBhIHBhdGhuYW1lLCBhbmQgaXQgbXVzdCBiZSBhYnNvbHV0ZS4NCkBA IC01OTMsNiArNTkzLDEyIEBAIHZkZXZfZ2VvbV9vcGVuKHZkZXZfdCAqdmQs IHVpbnQ2NF90ICpwc2l6ZSwgdWludDY0X3QgKm1heF9wc2l6ZSwNCiANCiAJ dmQtPnZkZXZfdHNkID0gTlVMTDsNCiANCisJaWYgKG11dGV4X293bmVkKCZz cGFfbmFtZXNwYWNlX2xvY2spKSB7DQorCQltdXRleF9leGl0KCZzcGFfbmFt ZXNwYWNlX2xvY2spOw0KKwkJbG9jayA9IDE7DQorCX0gZWxzZSB7DQorCQls b2NrID0gMDsNCisJfQ0KIAlEUk9QX0dJQU5UKCk7DQogCWdfdG9wb2xvZ3lf bG9jaygpOw0KIAllcnJvciA9IDA7DQpAQCAtNjI0LDcgKzYzMCwxMSBAQCB2 ZGV2X2dlb21fb3Blbih2ZGV2X3QgKnZkLCB1aW50NjRfdCAqcHNpemUsIHVp bnQ2NF90ICptYXhfcHNpemUsDQogCSAgICAhSVNQMihjcC0+cHJvdmlkZXIt PnNlY3RvcnNpemUpKSB7DQogCQlaRlNfTE9HKDEsICJQcm92aWRlciAlcyBo YXMgdW5zdXBwb3J0ZWQgc2VjdG9yc2l6ZS4iLA0KIAkJICAgIHZkLT52ZGV2 X3BhdGgpOw0KKw0KKwkJZ190b3BvbG9neV9sb2NrKCk7DQogCQl2ZGV2X2dl b21fZGV0YWNoKGNwLCAwKTsNCisJCWdfdG9wb2xvZ3lfdW5sb2NrKCk7DQor DQogCQllcnJvciA9IEVJTlZBTDsNCiAJCWNwID0gTlVMTDsNCiAJfSBlbHNl IGlmIChjcC0+YWN3ID09IDAgJiYgKHNwYV9tb2RlKHZkLT52ZGV2X3NwYSkg JiBGV1JJVEUpICE9IDApIHsNCkBAIC02NDcsNiArNjU3LDggQEAgdmRldl9n ZW9tX29wZW4odmRldl90ICp2ZCwgdWludDY0X3QgKnBzaXplLCB1aW50NjRf dCAqbWF4X3BzaXplLA0KIAl9DQogCWdfdG9wb2xvZ3lfdW5sb2NrKCk7DQog CVBJQ0tVUF9HSUFOVCgpOw0KKwlpZiAobG9jaykNCisJCW11dGV4X2VudGVy KCZzcGFfbmFtZXNwYWNlX2xvY2spOw0KIAlpZiAoY3AgPT0gTlVMTCkgew0K IAkJdmQtPnZkZXZfc3RhdC52c19hdXggPSBWREVWX0FVWF9PUEVOX0ZBSUxF RDsNCiAJCXJldHVybiAoZXJyb3IpOw0KZGlmZiAtLWdpdCBhL3N5cy9jZGRs L2NvbnRyaWIvb3BlbnNvbGFyaXMvdXRzL2NvbW1vbi9mcy96ZnMvemZzX2lv Y3RsLmMgYi9zeXMvY2RkbC9jb250cmliL29wZW5zb2xhcmlzL3V0cy9jb21t b24vZnMvemZzL3pmc19pb2N0bC5jDQppbmRleCBlOWZiYTI2Li45MWJlY2Rl IDEwMDY0NA0KLS0tIGEvc3lzL2NkZGwvY29udHJpYi9vcGVuc29sYXJpcy91 dHMvY29tbW9uL2ZzL3pmcy96ZnNfaW9jdGwuYw0KKysrIGIvc3lzL2NkZGwv Y29udHJpYi9vcGVuc29sYXJpcy91dHMvY29tbW9uL2ZzL3pmcy96ZnNfaW9j dGwuYw0KQEAgLTU2MzUsNyArNTYzNSw3IEBAIHpmc2Rldl9taW5vcl9hbGxv Yyh2b2lkKQ0KIAlzdGF0aWMgbWlub3JfdCBsYXN0X21pbm9yOw0KIAltaW5v cl90IG07DQogDQotCUFTU0VSVChNVVRFWF9IRUxEKCZzcGFfbmFtZXNwYWNl X2xvY2spKTsNCisJQVNTRVJUKE1VVEVYX0hFTEQoJnpmc2Rldl9zdGF0ZV9s b2NrKSk7DQogDQogCWZvciAobSA9IGxhc3RfbWlub3IgKyAxOyBtICE9IGxh c3RfbWlub3I7IG0rKykgew0KIAkJaWYgKG0gPiBaRlNERVZfTUFYX01JTk9S KQ0KQEAgLTU2NTUsNyArNTY1NSw3IEBAIHpmc19jdGxkZXZfaW5pdChzdHJ1 Y3QgY2RldiAqZGV2cCkNCiAJbWlub3JfdCBtaW5vcjsNCiAJemZzX3NvZnRf c3RhdGVfdCAqenM7DQogDQotCUFTU0VSVChNVVRFWF9IRUxEKCZzcGFfbmFt ZXNwYWNlX2xvY2spKTsNCisJQVNTRVJUKE1VVEVYX0hFTEQoJnpmc2Rldl9z dGF0ZV9sb2NrKSk7DQogDQogCW1pbm9yID0gemZzZGV2X21pbm9yX2FsbG9j KCk7DQogCWlmIChtaW5vciA9PSAwKQ0KQEAgLTU2NzYsNyArNTY3Niw3IEBA IHpmc19jdGxkZXZfaW5pdChzdHJ1Y3QgY2RldiAqZGV2cCkNCiBzdGF0aWMg dm9pZA0KIHpmc19jdGxkZXZfZGVzdHJveSh6ZnNfb25leGl0X3QgKnpvLCBt aW5vcl90IG1pbm9yKQ0KIHsNCi0JQVNTRVJUKE1VVEVYX0hFTEQoJnNwYV9u YW1lc3BhY2VfbG9jaykpOw0KKwlBU1NFUlQoTVVURVhfSEVMRCgmemZzZGV2 X3N0YXRlX2xvY2spKTsNCiANCiAJemZzX29uZXhpdF9kZXN0cm95KHpvKTsN CiAJZGRpX3NvZnRfc3RhdGVfZnJlZSh6ZnNkZXZfc3RhdGUsIG1pbm9yKTsN CkBAIC01NzA2LDkgKzU3MDYsOSBAQCB6ZnNkZXZfb3BlbihzdHJ1Y3QgY2Rl diAqZGV2cCwgaW50IGZsYWcsIGludCBtb2RlLCBzdHJ1Y3QgdGhyZWFkICp0 ZCkNCiANCiAJLyogVGhpcyBpcyB0aGUgY29udHJvbCBkZXZpY2UuIEFsbG9j YXRlIGEgbmV3IG1pbm9yIGlmIHJlcXVlc3RlZC4gKi8NCiAJaWYgKGZsYWcg JiBGRVhDTCkgew0KLQkJbXV0ZXhfZW50ZXIoJnNwYV9uYW1lc3BhY2VfbG9j ayk7DQorCQltdXRleF9lbnRlcigmemZzZGV2X3N0YXRlX2xvY2spOw0KIAkJ ZXJyb3IgPSB6ZnNfY3RsZGV2X2luaXQoZGV2cCk7DQotCQltdXRleF9leGl0 KCZzcGFfbmFtZXNwYWNlX2xvY2spOw0KKwkJbXV0ZXhfZXhpdCgmemZzZGV2 X3N0YXRlX2xvY2spOw0KIAl9DQogDQogCXJldHVybiAoZXJyb3IpOw0KQEAg LTU3MjMsMTQgKzU3MjMsMTQgQEAgemZzZGV2X2Nsb3NlKHZvaWQgKmRhdGEp DQogCWlmIChtaW5vciA9PSAwKQ0KIAkJcmV0dXJuOw0KIA0KLQltdXRleF9l bnRlcigmc3BhX25hbWVzcGFjZV9sb2NrKTsNCisJbXV0ZXhfZW50ZXIoJnpm c2Rldl9zdGF0ZV9sb2NrKTsNCiAJem8gPSB6ZnNkZXZfZ2V0X3NvZnRfc3Rh dGUobWlub3IsIFpTU1RfQ1RMREVWKTsNCiAJaWYgKHpvID09IE5VTEwpIHsN Ci0JCW11dGV4X2V4aXQoJnNwYV9uYW1lc3BhY2VfbG9jayk7DQorCQltdXRl eF9leGl0KCZ6ZnNkZXZfc3RhdGVfbG9jayk7DQogCQlyZXR1cm47DQogCX0N CiAJemZzX2N0bGRldl9kZXN0cm95KHpvLCBtaW5vcik7DQotCW11dGV4X2V4 aXQoJnNwYV9uYW1lc3BhY2VfbG9jayk7DQorCW11dGV4X2V4aXQoJnpmc2Rl dl9zdGF0ZV9sb2NrKTsNCiB9DQogDQogc3RhdGljIGludA0KZGlmZiAtLWdp dCBhL3N5cy9jZGRsL2NvbnRyaWIvb3BlbnNvbGFyaXMvdXRzL2NvbW1vbi9m cy96ZnMvenZvbC5jIGIvc3lzL2NkZGwvY29udHJpYi9vcGVuc29sYXJpcy91 dHMvY29tbW9uL2ZzL3pmcy96dm9sLmMNCmluZGV4IDcyZDQ1MDIuLmFlYzUy MTkgMTAwNjQ0DQotLS0gYS9zeXMvY2RkbC9jb250cmliL29wZW5zb2xhcmlz L3V0cy9jb21tb24vZnMvemZzL3p2b2wuYw0KKysrIGIvc3lzL2NkZGwvY29u dHJpYi9vcGVuc29sYXJpcy91dHMvY29tbW9uL2ZzL3pmcy96dm9sLmMNCkBA IC0xMDQsMTEgKzEwNCwxMiBAQCBzdGF0aWMgY2hhciAqenZvbF90YWcgPSAi enZvbF90YWciOw0KICNkZWZpbmUJWlZPTF9EVU1QU0laRQkJImR1bXBzaXpl Ig0KIA0KIC8qDQotICogVGhlIHNwYV9uYW1lc3BhY2VfbG9jayBwcm90ZWN0 cyB0aGUgemZzZGV2X3N0YXRlIHN0cnVjdHVyZSBmcm9tIGJlaW5nDQotICog bW9kaWZpZWQgd2hpbGUgaXQncyBiZWluZyB1c2VkLCBlLmcuIGFuIG9wZW4g dGhhdCBjb21lcyBpbiBiZWZvcmUgYQ0KLSAqIGNyZWF0ZSBmaW5pc2hlcy4g IEl0IGFsc28gcHJvdGVjdHMgdGVtcG9yYXJ5IG9wZW5zIG9mIHRoZSBkYXRh c2V0IHNvIHRoYXQsDQorICogVGhpcyBsb2NrIHByb3RlY3RzIHRoZSB6ZnNk ZXZfc3RhdGUgc3RydWN0dXJlIGZyb20gYmVpbmcgbW9kaWZpZWQNCisgKiB3 aGlsZSBpdCdzIGJlaW5nIHVzZWQsIGUuZy4gYW4gb3BlbiB0aGF0IGNvbWVz IGluIGJlZm9yZSBhIGNyZWF0ZQ0KKyAqIGZpbmlzaGVzLiAgSXQgYWxzbyBw cm90ZWN0cyB0ZW1wb3Jhcnkgb3BlbnMgb2YgdGhlIGRhdGFzZXQgc28gdGhh dCwNCiAgKiBlLmcuLCBhbiBvcGVuIGRvZXNuJ3QgZ2V0IGEgc3B1cmlvdXMg RUJVU1kuDQogICovDQora211dGV4X3QgemZzZGV2X3N0YXRlX2xvY2s7DQog c3RhdGljIHVpbnQzMl90IHp2b2xfbWlub3JzOw0KIA0KIHR5cGVkZWYgc3Ry dWN0IHp2b2xfZXh0ZW50IHsNCkBAIC0yNDksNyArMjUwLDcgQEAgenZvbF9t aW5vcl9sb29rdXAoY29uc3QgY2hhciAqbmFtZSkNCiAJc3RydWN0IGdfZ2Vv bSAqZ3A7DQogCXp2b2xfc3RhdGVfdCAqenYgPSBOVUxMOw0KIA0KLQlBU1NF UlQoTVVURVhfSEVMRCgmc3BhX25hbWVzcGFjZV9sb2NrKSk7DQorCUFTU0VS VChNVVRFWF9IRUxEKCZ6ZnNkZXZfc3RhdGVfbG9jaykpOw0KIA0KIAlnX3Rv cG9sb2d5X2xvY2soKTsNCiAJTElTVF9GT1JFQUNIKGdwLCAmemZzX3p2b2xf Y2xhc3MuZ2VvbSwgZ2VvbSkgew0KQEAgLTQ2NSwxMSArNDY2LDExIEBAIHp2 b2xfbmFtZTJtaW5vcihjb25zdCBjaGFyICpuYW1lLCBtaW5vcl90ICptaW5v cikNCiB7DQogCXp2b2xfc3RhdGVfdCAqenY7DQogDQotCW11dGV4X2VudGVy KCZzcGFfbmFtZXNwYWNlX2xvY2spOw0KKwltdXRleF9lbnRlcigmemZzZGV2 X3N0YXRlX2xvY2spOw0KIAl6diA9IHp2b2xfbWlub3JfbG9va3VwKG5hbWUp Ow0KIAlpZiAobWlub3IgJiYgenYpDQogCQkqbWlub3IgPSB6di0+enZfbWlu b3I7DQotCW11dGV4X2V4aXQoJnNwYV9uYW1lc3BhY2VfbG9jayk7DQorCW11 dGV4X2V4aXQoJnpmc2Rldl9zdGF0ZV9sb2NrKTsNCiAJcmV0dXJuICh6diA/ IDAgOiAtMSk7DQogfQ0KICNlbmRpZgkvKiBzdW4gKi8NCkBAIC00ODksMTAg KzQ5MCwxMCBAQCB6dm9sX2NyZWF0ZV9taW5vcihjb25zdCBjaGFyICpuYW1l KQ0KIA0KIAlaRlNfTE9HKDEsICJDcmVhdGluZyBaVk9MICVzLi4uIiwgbmFt ZSk7DQogDQotCW11dGV4X2VudGVyKCZzcGFfbmFtZXNwYWNlX2xvY2spOw0K KwltdXRleF9lbnRlcigmemZzZGV2X3N0YXRlX2xvY2spOw0KIA0KIAlpZiAo enZvbF9taW5vcl9sb29rdXAobmFtZSkgIT0gTlVMTCkgew0KLQkJbXV0ZXhf ZXhpdCgmc3BhX25hbWVzcGFjZV9sb2NrKTsNCisJCW11dGV4X2V4aXQoJnpm c2Rldl9zdGF0ZV9sb2NrKTsNCiAJCXJldHVybiAoU0VUX0VSUk9SKEVFWElT VCkpOw0KIAl9DQogDQpAQCAtNTAwLDIwICs1MDEsMjAgQEAgenZvbF9jcmVh dGVfbWlub3IoY29uc3QgY2hhciAqbmFtZSkNCiAJZXJyb3IgPSBkbXVfb2Jq c2V0X293bihuYW1lLCBETVVfT1NUX1pWT0wsIEJfVFJVRSwgRlRBRywgJm9z KTsNCiANCiAJaWYgKGVycm9yKSB7DQotCQltdXRleF9leGl0KCZzcGFfbmFt ZXNwYWNlX2xvY2spOw0KKwkJbXV0ZXhfZXhpdCgmemZzZGV2X3N0YXRlX2xv Y2spOw0KIAkJcmV0dXJuIChlcnJvcik7DQogCX0NCiANCiAjaWZkZWYgc3Vu DQogCWlmICgobWlub3IgPSB6ZnNkZXZfbWlub3JfYWxsb2MoKSkgPT0gMCkg ew0KIAkJZG11X29ianNldF9kaXNvd24ob3MsIEZUQUcpOw0KLQkJbXV0ZXhf ZXhpdCgmc3BhX25hbWVzcGFjZV9sb2NrKTsNCisJCW11dGV4X2V4aXQoJnpm c2Rldl9zdGF0ZV9sb2NrKTsNCiAJCXJldHVybiAoU0VUX0VSUk9SKEVOWElP KSk7DQogCX0NCiANCiAJaWYgKGRkaV9zb2Z0X3N0YXRlX3phbGxvYyh6ZnNk ZXZfc3RhdGUsIG1pbm9yKSAhPSBERElfU1VDQ0VTUykgew0KIAkJZG11X29i anNldF9kaXNvd24ob3MsIEZUQUcpOw0KLQkJbXV0ZXhfZXhpdCgmc3BhX25h bWVzcGFjZV9sb2NrKTsNCisJCW11dGV4X2V4aXQoJnpmc2Rldl9zdGF0ZV9s b2NrKTsNCiAJCXJldHVybiAoU0VUX0VSUk9SKEVBR0FJTikpOw0KIAl9DQog CSh2b2lkKSBkZGlfcHJvcF91cGRhdGVfc3RyaW5nKG1pbm9yLCB6ZnNfZGlw LCBaVk9MX1BST1BfTkFNRSwNCkBAIC01MjUsNyArNTI2LDcgQEAgenZvbF9j cmVhdGVfbWlub3IoY29uc3QgY2hhciAqbmFtZSkNCiAJICAgIG1pbm9yLCBE RElfUFNFVURPLCAwKSA9PSBERElfRkFJTFVSRSkgew0KIAkJZGRpX3NvZnRf c3RhdGVfZnJlZSh6ZnNkZXZfc3RhdGUsIG1pbm9yKTsNCiAJCWRtdV9vYmpz ZXRfZGlzb3duKG9zLCBGVEFHKTsNCi0JCW11dGV4X2V4aXQoJnNwYV9uYW1l c3BhY2VfbG9jayk7DQorCQltdXRleF9leGl0KCZ6ZnNkZXZfc3RhdGVfbG9j ayk7DQogCQlyZXR1cm4gKFNFVF9FUlJPUihFQUdBSU4pKTsNCiAJfQ0KIA0K QEAgLTUzNiw3ICs1MzcsNyBAQCB6dm9sX2NyZWF0ZV9taW5vcihjb25zdCBj aGFyICpuYW1lKQ0KIAkJZGRpX3JlbW92ZV9taW5vcl9ub2RlKHpmc19kaXAs IGNocmJ1Zik7DQogCQlkZGlfc29mdF9zdGF0ZV9mcmVlKHpmc2Rldl9zdGF0 ZSwgbWlub3IpOw0KIAkJZG11X29ianNldF9kaXNvd24ob3MsIEZUQUcpOw0K LQkJbXV0ZXhfZXhpdCgmc3BhX25hbWVzcGFjZV9sb2NrKTsNCisJCW11dGV4 X2V4aXQoJnpmc2Rldl9zdGF0ZV9sb2NrKTsNCiAJCXJldHVybiAoU0VUX0VS Uk9SKEVBR0FJTikpOw0KIAl9DQogDQpAQCAtNTg3LDcgKzU4OCw3IEBAIHp2 b2xfY3JlYXRlX21pbm9yKGNvbnN0IGNoYXIgKm5hbWUpDQogDQogCXp2b2xf bWlub3JzKys7DQogDQotCW11dGV4X2V4aXQoJnNwYV9uYW1lc3BhY2VfbG9j ayk7DQorCW11dGV4X2V4aXQoJnpmc2Rldl9zdGF0ZV9sb2NrKTsNCiANCiAJ enZvbF9nZW9tX3J1bih6dik7DQogDQpAQCAtNjA5LDcgKzYxMCw3IEBAIHp2 b2xfcmVtb3ZlX3p2KHp2b2xfc3RhdGVfdCAqenYpDQogCW1pbm9yX3QgbWlu b3IgPSB6di0+enZfbWlub3I7DQogI2VuZGlmDQogDQotCUFTU0VSVChNVVRF WF9IRUxEKCZzcGFfbmFtZXNwYWNlX2xvY2spKTsNCisJQVNTRVJUKE1VVEVY X0hFTEQoJnpmc2Rldl9zdGF0ZV9sb2NrKSk7DQogCWlmICh6di0+enZfdG90 YWxfb3BlbnMgIT0gMCkNCiAJCXJldHVybiAoU0VUX0VSUk9SKEVCVVNZKSk7 DQogDQpAQCAtNjM1LDE1ICs2MzYsMTUgQEAgenZvbF9yZW1vdmVfbWlub3Io Y29uc3QgY2hhciAqbmFtZSkNCiAJenZvbF9zdGF0ZV90ICp6djsNCiAJaW50 IHJjOw0KIA0KLQltdXRleF9lbnRlcigmc3BhX25hbWVzcGFjZV9sb2NrKTsN CisJbXV0ZXhfZW50ZXIoJnpmc2Rldl9zdGF0ZV9sb2NrKTsNCiAJaWYgKCh6 diA9IHp2b2xfbWlub3JfbG9va3VwKG5hbWUpKSA9PSBOVUxMKSB7DQotCQlt dXRleF9leGl0KCZzcGFfbmFtZXNwYWNlX2xvY2spOw0KKwkJbXV0ZXhfZXhp dCgmemZzZGV2X3N0YXRlX2xvY2spOw0KIAkJcmV0dXJuIChTRVRfRVJST1Io RU5YSU8pKTsNCiAJfQ0KIAlnX3RvcG9sb2d5X2xvY2soKTsNCiAJcmMgPSB6 dm9sX3JlbW92ZV96dih6dik7DQogCWdfdG9wb2xvZ3lfdW5sb2NrKCk7DQot CW11dGV4X2V4aXQoJnNwYV9uYW1lc3BhY2VfbG9jayk7DQorCW11dGV4X2V4 aXQoJnpmc2Rldl9zdGF0ZV9sb2NrKTsNCiAJcmV0dXJuIChyYyk7DQogfQ0K IA0KQEAgLTc1NSw3ICs3NTYsNyBAQCB6dm9sX3VwZGF0ZV92b2xzaXplKG9i anNldF90ICpvcywgdWludDY0X3Qgdm9sc2l6ZSkNCiAJZG11X3R4X3QgKnR4 Ow0KIAlpbnQgZXJyb3I7DQogDQotCUFTU0VSVChNVVRFWF9IRUxEKCZzcGFf bmFtZXNwYWNlX2xvY2spKTsNCisJQVNTRVJUKE1VVEVYX0hFTEQoJnpmc2Rl dl9zdGF0ZV9sb2NrKSk7DQogDQogCXR4ID0gZG11X3R4X2NyZWF0ZShvcyk7 DQogCWRtdV90eF9ob2xkX3phcCh0eCwgWlZPTF9aQVBfT0JKLCBUUlVFLCBO VUxMKTsNCkBAIC03ODYsNyArNzg3LDcgQEAgenZvbF9yZW1vdmVfbWlub3Jz KGNvbnN0IGNoYXIgKm5hbWUpDQogCW5hbWVsZW4gPSBzdHJsZW4obmFtZSk7 DQogDQogCURST1BfR0lBTlQoKTsNCi0JbXV0ZXhfZW50ZXIoJnNwYV9uYW1l c3BhY2VfbG9jayk7DQorCW11dGV4X2VudGVyKCZ6ZnNkZXZfc3RhdGVfbG9j ayk7DQogCWdfdG9wb2xvZ3lfbG9jaygpOw0KIA0KIAlMSVNUX0ZPUkVBQ0hf U0FGRShncCwgJnpmc196dm9sX2NsYXNzLmdlb20sIGdlb20sIGdwdG1wKSB7 DQpAQCAtODA0LDcgKzgwNSw3IEBAIHp2b2xfcmVtb3ZlX21pbm9ycyhjb25z dCBjaGFyICpuYW1lKQ0KIAl9DQogDQogCWdfdG9wb2xvZ3lfdW5sb2NrKCk7 DQotCW11dGV4X2V4aXQoJnNwYV9uYW1lc3BhY2VfbG9jayk7DQorCW11dGV4 X2V4aXQoJnpmc2Rldl9zdGF0ZV9sb2NrKTsNCiAJUElDS1VQX0dJQU5UKCk7 DQogfQ0KIA0KQEAgLTgxOCwxMCArODE5LDEwIEBAIHp2b2xfc2V0X3ZvbHNp emUoY29uc3QgY2hhciAqbmFtZSwgbWFqb3JfdCBtYWosIHVpbnQ2NF90IHZv bHNpemUpDQogCXVpbnQ2NF90IG9sZF92b2xzaXplID0gMFVMTDsNCiAJdWlu dDY0X3QgcmVhZG9ubHk7DQogDQotCW11dGV4X2VudGVyKCZzcGFfbmFtZXNw YWNlX2xvY2spOw0KKwltdXRleF9lbnRlcigmemZzZGV2X3N0YXRlX2xvY2sp Ow0KIAl6diA9IHp2b2xfbWlub3JfbG9va3VwKG5hbWUpOw0KIAlpZiAoKGVy cm9yID0gZG11X29ianNldF9ob2xkKG5hbWUsIEZUQUcsICZvcykpICE9IDAp IHsNCi0JCW11dGV4X2V4aXQoJnNwYV9uYW1lc3BhY2VfbG9jayk7DQorCQlt dXRleF9leGl0KCZ6ZnNkZXZfc3RhdGVfbG9jayk7DQogCQlyZXR1cm4gKGVy cm9yKTsNCiAJfQ0KIA0KQEAgLTg4OCw3ICs4ODksNyBAQCB6dm9sX3NldF92 b2xzaXplKGNvbnN0IGNoYXIgKm5hbWUsIG1ham9yX3QgbWFqLCB1aW50NjRf dCB2b2xzaXplKQ0KIG91dDoNCiAJZG11X29ianNldF9yZWxlKG9zLCBGVEFH KTsNCiANCi0JbXV0ZXhfZXhpdCgmc3BhX25hbWVzcGFjZV9sb2NrKTsNCisJ bXV0ZXhfZXhpdCgmemZzZGV2X3N0YXRlX2xvY2spOw0KIA0KIAlyZXR1cm4g KGVycm9yKTsNCiB9DQpAQCAtODk5LDM2ICs5MDAsMTkgQEAgenZvbF9vcGVu KHN0cnVjdCBnX3Byb3ZpZGVyICpwcCwgaW50IGZsYWcsIGludCBjb3VudCkN CiB7DQogCXp2b2xfc3RhdGVfdCAqenY7DQogCWludCBlcnIgPSAwOw0KLQli b29sZWFuX3QgbG9ja2VkID0gQl9GQUxTRTsNCiANCi0JLyoNCi0JICogUHJv dGVjdCBhZ2FpbnN0IHJlY3Vyc2l2ZWx5IGVudGVyaW5nIHNwYV9uYW1lc3Bh Y2VfbG9jaw0KLQkgKiB3aGVuIHNwYV9vcGVuKCkgaXMgdXNlZCBmb3IgYSBw b29sIG9uIGEgKGxvY2FsKSBaVk9MKHMpLg0KLQkgKiBUaGlzIGlzIG5lZWRl ZCBzaW5jZSB3ZSByZXBsYWNlZCB1cHN0cmVhbSB6ZnNkZXZfc3RhdGVfbG9j aw0KLQkgKiB3aXRoIHNwYV9uYW1lc3BhY2VfbG9jayBpbiB0aGUgWlZPTCBj b2RlLg0KLQkgKiBXZSBhcmUgdXNpbmcgdGhlIHNhbWUgdHJpY2sgYXMgc3Bh X29wZW4oKS4NCi0JICogTm90ZSB0aGF0IGNhbGxzIGluIHp2b2xfZmlyc3Rf b3BlbiB3aGljaCBuZWVkIHRvIHJlc29sdmUNCi0JICogcG9vbCBuYW1lIHRv IGEgc3BhIG9iamVjdCB3aWxsIGVudGVyIHNwYV9vcGVuKCkNCi0JICogcmVj dXJzaXZlbHksIGJ1dCB0aGF0IGZ1bmN0aW9uIGFscmVhZHkgaGFzIGFsbCB0 aGUNCi0JICogbmVjZXNzYXJ5IHByb3RlY3Rpb24uDQotCSAqLw0KLQlpZiAo IU1VVEVYX0hFTEQoJnNwYV9uYW1lc3BhY2VfbG9jaykpIHsNCi0JCW11dGV4 X2VudGVyKCZzcGFfbmFtZXNwYWNlX2xvY2spOw0KLQkJbG9ja2VkID0gQl9U UlVFOw0KLQl9DQorCW11dGV4X2VudGVyKCZ6ZnNkZXZfc3RhdGVfbG9jayk7 DQogDQogCXp2ID0gcHAtPnByaXZhdGU7DQogCWlmICh6diA9PSBOVUxMKSB7 DQotCQlpZiAobG9ja2VkKQ0KLQkJCW11dGV4X2V4aXQoJnNwYV9uYW1lc3Bh Y2VfbG9jayk7DQorCQltdXRleF9leGl0KCZ6ZnNkZXZfc3RhdGVfbG9jayk7 DQogCQlyZXR1cm4gKFNFVF9FUlJPUihFTlhJTykpOw0KIAl9DQogDQogCWlm ICh6di0+enZfdG90YWxfb3BlbnMgPT0gMCkNCiAJCWVyciA9IHp2b2xfZmly c3Rfb3Blbih6dik7DQogCWlmIChlcnIpIHsNCi0JCWlmIChsb2NrZWQpDQot CQkJbXV0ZXhfZXhpdCgmc3BhX25hbWVzcGFjZV9sb2NrKTsNCisJCW11dGV4 X2V4aXQoJnpmc2Rldl9zdGF0ZV9sb2NrKTsNCiAJCXJldHVybiAoZXJyKTsN CiAJfQ0KIAlpZiAoKGZsYWcgJiBGV1JJVEUpICYmICh6di0+enZfZmxhZ3Mg JiBaVk9MX1JET05MWSkpIHsNCkBAIC05NTAsMTUgKzkzNCwxMyBAQCB6dm9s X29wZW4oc3RydWN0IGdfcHJvdmlkZXIgKnBwLCBpbnQgZmxhZywgaW50IGNv dW50KQ0KICNlbmRpZg0KIA0KIAl6di0+enZfdG90YWxfb3BlbnMgKz0gY291 bnQ7DQotCWlmIChsb2NrZWQpDQotCQltdXRleF9leGl0KCZzcGFfbmFtZXNw YWNlX2xvY2spOw0KKwltdXRleF9leGl0KCZ6ZnNkZXZfc3RhdGVfbG9jayk7 DQogDQogCXJldHVybiAoZXJyKTsNCiBvdXQ6DQogCWlmICh6di0+enZfdG90 YWxfb3BlbnMgPT0gMCkNCiAJCXp2b2xfbGFzdF9jbG9zZSh6dik7DQotCWlm IChsb2NrZWQpDQotCQltdXRleF9leGl0KCZzcGFfbmFtZXNwYWNlX2xvY2sp Ow0KKwltdXRleF9leGl0KCZ6ZnNkZXZfc3RhdGVfbG9jayk7DQogCXJldHVy biAoZXJyKTsNCiB9DQogDQpAQCAtOTY4LDE4ICs5NTAsMTIgQEAgenZvbF9j bG9zZShzdHJ1Y3QgZ19wcm92aWRlciAqcHAsIGludCBmbGFnLCBpbnQgY291 bnQpDQogew0KIAl6dm9sX3N0YXRlX3QgKnp2Ow0KIAlpbnQgZXJyb3IgPSAw Ow0KLQlib29sZWFuX3QgbG9ja2VkID0gQl9GQUxTRTsNCiANCi0JLyogU2Vl IGNvbW1lbnQgaW4genZvbF9vcGVuKCkuICovDQotCWlmICghTVVURVhfSEVM RCgmc3BhX25hbWVzcGFjZV9sb2NrKSkgew0KLQkJbXV0ZXhfZW50ZXIoJnNw YV9uYW1lc3BhY2VfbG9jayk7DQotCQlsb2NrZWQgPSBCX1RSVUU7DQotCX0N CisJbXV0ZXhfZW50ZXIoJnpmc2Rldl9zdGF0ZV9sb2NrKTsNCiANCiAJenYg PSBwcC0+cHJpdmF0ZTsNCiAJaWYgKHp2ID09IE5VTEwpIHsNCi0JCWlmIChs b2NrZWQpDQotCQkJbXV0ZXhfZXhpdCgmc3BhX25hbWVzcGFjZV9sb2NrKTsN CisJCW11dGV4X2V4aXQoJnpmc2Rldl9zdGF0ZV9sb2NrKTsNCiAJCXJldHVy biAoU0VUX0VSUk9SKEVOWElPKSk7DQogCX0NCiANCkBAIC0xMDAyLDggKzk3 OCw3IEBAIHp2b2xfY2xvc2Uoc3RydWN0IGdfcHJvdmlkZXIgKnBwLCBpbnQg ZmxhZywgaW50IGNvdW50KQ0KIAlpZiAoenYtPnp2X3RvdGFsX29wZW5zID09 IDApDQogCQl6dm9sX2xhc3RfY2xvc2UoenYpOw0KIA0KLQlpZiAobG9ja2Vk KQ0KLQkJbXV0ZXhfZXhpdCgmc3BhX25hbWVzcGFjZV9sb2NrKTsNCisJbXV0 ZXhfZXhpdCgmemZzZGV2X3N0YXRlX2xvY2spOw0KIAlyZXR1cm4gKGVycm9y KTsNCiB9DQogDQpAQCAtMTY1OCwxMiArMTYzMywxMiBAQCB6dm9sX2lvY3Rs KGRldl90IGRldiwgaW50IGNtZCwgaW50cHRyX3QgYXJnLCBpbnQgZmxhZywg Y3JlZF90ICpjciwgaW50ICpydmFscCkNCiAJaW50IGVycm9yID0gMDsNCiAJ cmxfdCAqcmw7DQogDQotCW11dGV4X2VudGVyKCZzcGFfbmFtZXNwYWNlX2xv Y2spOw0KKwltdXRleF9lbnRlcigmemZzZGV2X3N0YXRlX2xvY2spOw0KIA0K IAl6diA9IHpmc2Rldl9nZXRfc29mdF9zdGF0ZShnZXRtaW5vcihkZXYpLCBa U1NUX1pWT0wpOw0KIA0KIAlpZiAoenYgPT0gTlVMTCkgew0KLQkJbXV0ZXhf ZXhpdCgmc3BhX25hbWVzcGFjZV9sb2NrKTsNCisJCW11dGV4X2V4aXQoJnpm c2Rldl9zdGF0ZV9sb2NrKTsNCiAJCXJldHVybiAoU0VUX0VSUk9SKEVOWElP KSk7DQogCX0NCiAJQVNTRVJUKHp2LT56dl90b3RhbF9vcGVucyA+IDApOw0K QEAgLTE2NzcsNyArMTY1Miw3IEBAIHp2b2xfaW9jdGwoZGV2X3QgZGV2LCBp bnQgY21kLCBpbnRwdHJfdCBhcmcsIGludCBmbGFnLCBjcmVkX3QgKmNyLCBp bnQgKnJ2YWxwKQ0KIAkJZGtpLmRraV9jdHlwZSA9IERLQ19VTktOT1dOOw0K IAkJZGtpLmRraV91bml0ID0gZ2V0bWlub3IoZGV2KTsNCiAJCWRraS5ka2lf bWF4dHJhbnNmZXIgPSAxIDw8IChTUEFfTUFYQkxPQ0tTSElGVCAtIHp2LT56 dl9taW5fYnMpOw0KLQkJbXV0ZXhfZXhpdCgmc3BhX25hbWVzcGFjZV9sb2Nr KTsNCisJCW11dGV4X2V4aXQoJnpmc2Rldl9zdGF0ZV9sb2NrKTsNCiAJCWlm IChkZGlfY29weW91dCgmZGtpLCAodm9pZCAqKWFyZywgc2l6ZW9mIChka2kp LCBmbGFnKSkNCiAJCQllcnJvciA9IFNFVF9FUlJPUihFRkFVTFQpOw0KIAkJ cmV0dXJuIChlcnJvcik7DQpAQCAtMTY4Nyw3ICsxNjYyLDcgQEAgenZvbF9p b2N0bChkZXZfdCBkZXYsIGludCBjbWQsIGludHB0cl90IGFyZywgaW50IGZs YWcsIGNyZWRfdCAqY3IsIGludCAqcnZhbHApDQogCQlka20uZGtpX2xic2l6 ZSA9IDFVIDw8IHp2LT56dl9taW5fYnM7DQogCQlka20uZGtpX2NhcGFjaXR5 ID0genYtPnp2X3ZvbHNpemUgPj4genYtPnp2X21pbl9iczsNCiAJCWRrbS5k a2lfbWVkaWFfdHlwZSA9IERLX1VOS05PV047DQotCQltdXRleF9leGl0KCZz cGFfbmFtZXNwYWNlX2xvY2spOw0KKwkJbXV0ZXhfZXhpdCgmemZzZGV2X3N0 YXRlX2xvY2spOw0KIAkJaWYgKGRkaV9jb3B5b3V0KCZka20sICh2b2lkICop YXJnLCBzaXplb2YgKGRrbSksIGZsYWcpKQ0KIAkJCWVycm9yID0gU0VUX0VS Uk9SKEVGQVVMVCk7DQogCQlyZXR1cm4gKGVycm9yKTsNCkBAIC0xNjk3LDE0 ICsxNjcyLDE0IEBAIHp2b2xfaW9jdGwoZGV2X3QgZGV2LCBpbnQgY21kLCBp bnRwdHJfdCBhcmcsIGludCBmbGFnLCBjcmVkX3QgKmNyLCBpbnQgKnJ2YWxw KQ0KIAkJCXVpbnQ2NF90IHZzID0genYtPnp2X3ZvbHNpemU7DQogCQkJdWlu dDhfdCBicyA9IHp2LT56dl9taW5fYnM7DQogDQotCQkJbXV0ZXhfZXhpdCgm c3BhX25hbWVzcGFjZV9sb2NrKTsNCisJCQltdXRleF9leGl0KCZ6ZnNkZXZf c3RhdGVfbG9jayk7DQogCQkJZXJyb3IgPSB6dm9sX2dldGVmaSgodm9pZCAq KWFyZywgZmxhZywgdnMsIGJzKTsNCiAJCQlyZXR1cm4gKGVycm9yKTsNCiAJ CX0NCiANCiAJY2FzZSBES0lPQ0ZMVVNIV1JJVEVDQUNIRToNCiAJCWRrYyA9 IChzdHJ1Y3QgZGtfY2FsbGJhY2sgKilhcmc7DQotCQltdXRleF9leGl0KCZz cGFfbmFtZXNwYWNlX2xvY2spOw0KKwkJbXV0ZXhfZXhpdCgmemZzZGV2X3N0 YXRlX2xvY2spOw0KIAkJemlsX2NvbW1pdCh6di0+enZfemlsb2csIFpWT0xf T0JKKTsNCiAJCWlmICgoZmxhZyAmIEZLSU9DVEwpICYmIGRrYyAhPSBOVUxM ICYmIGRrYy0+ZGtjX2NhbGxiYWNrKSB7DQogCQkJKCpka2MtPmRrY19jYWxs YmFjaykoZGtjLT5ka2NfY29va2llLCBlcnJvcik7DQpAQCAtMTczMCwxMCAr MTcwNSwxMCBAQCB6dm9sX2lvY3RsKGRldl90IGRldiwgaW50IGNtZCwgaW50 cHRyX3QgYXJnLCBpbnQgZmxhZywgY3JlZF90ICpjciwgaW50ICpydmFscCkN CiAJCQl9DQogCQkJaWYgKHdjZSkgew0KIAkJCQl6di0+enZfZmxhZ3MgfD0g WlZPTF9XQ0U7DQotCQkJCW11dGV4X2V4aXQoJnNwYV9uYW1lc3BhY2VfbG9j ayk7DQorCQkJCW11dGV4X2V4aXQoJnpmc2Rldl9zdGF0ZV9sb2NrKTsNCiAJ CQl9IGVsc2Ugew0KIAkJCQl6di0+enZfZmxhZ3MgJj0gflpWT0xfV0NFOw0K LQkJCQltdXRleF9leGl0KCZzcGFfbmFtZXNwYWNlX2xvY2spOw0KKwkJCQlt dXRleF9leGl0KCZ6ZnNkZXZfc3RhdGVfbG9jayk7DQogCQkJCXppbF9jb21t aXQoenYtPnp2X3ppbG9nLCBaVk9MX09CSik7DQogCQkJfQ0KIAkJCXJldHVy biAoMCk7DQpAQCAtMTgyOCw3ICsxODAzLDcgQEAgenZvbF9pb2N0bChkZXZf dCBkZXYsIGludCBjbWQsIGludHB0cl90IGFyZywgaW50IGZsYWcsIGNyZWRf dCAqY3IsIGludCAqcnZhbHApDQogCQlicmVhazsNCiANCiAJfQ0KLQltdXRl eF9leGl0KCZzcGFfbmFtZXNwYWNlX2xvY2spOw0KKwltdXRleF9leGl0KCZ6 ZnNkZXZfc3RhdGVfbG9jayk7DQogCXJldHVybiAoZXJyb3IpOw0KIH0NCiAj ZW5kaWYJLyogc3VuICovDQpAQCAtMTg0NCwxMiArMTgxOSwxNCBAQCB6dm9s X2luaXQodm9pZCkNCiB7DQogCVZFUklGWShkZGlfc29mdF9zdGF0ZV9pbml0 KCZ6ZnNkZXZfc3RhdGUsIHNpemVvZiAoemZzX3NvZnRfc3RhdGVfdCksDQog CSAgICAxKSA9PSAwKTsNCisJbXV0ZXhfaW5pdCgmemZzZGV2X3N0YXRlX2xv Y2ssIE5VTEwsIE1VVEVYX0RFRkFVTFQsIE5VTEwpOw0KIAlaRlNfTE9HKDEs ICJaVk9MIEluaXRpYWxpemVkLiIpOw0KIH0NCiANCiB2b2lkDQogenZvbF9m aW5pKHZvaWQpDQogew0KKwltdXRleF9kZXN0cm95KCZ6ZnNkZXZfc3RhdGVf bG9jayk7DQogCWRkaV9zb2Z0X3N0YXRlX2ZpbmkoJnpmc2Rldl9zdGF0ZSk7 DQogCVpGU19MT0coMSwgIlpWT0wgRGVpbml0aWFsaXplZC4iKTsNCiB9DQpA QCAtMTg4OSw3ICsxODY2LDcgQEAgenZvbF9kdW1wX2luaXQoenZvbF9zdGF0 ZV90ICp6diwgYm9vbGVhbl90IHJlc2l6ZSkNCiAJdWludDY0X3QgdmVyc2lv biA9IHNwYV92ZXJzaW9uKHNwYSk7DQogCWVudW0gemlvX2NoZWNrc3VtIGNo ZWNrc3VtOw0KIA0KLQlBU1NFUlQoTVVURVhfSEVMRCgmc3BhX25hbWVzcGFj ZV9sb2NrKSk7DQorCUFTU0VSVChNVVRFWF9IRUxEKCZ6ZnNkZXZfc3RhdGVf bG9jaykpOw0KIAlBU1NFUlQodmQtPnZkZXZfb3BzID09ICZ2ZGV2X3Jvb3Rf b3BzKTsNCiANCiAJZXJyb3IgPSBkbXVfZnJlZV9sb25nX3JhbmdlKHp2LT56 dl9vYmpzZXQsIFpWT0xfT0JKLCAwLA0KQEAgLTI0MzcsNyArMjQxNCw3IEBA IHp2b2xfcmVuYW1lX21pbm9yKHN0cnVjdCBnX2dlb20gKmdwLCBjb25zdCBj aGFyICpuZXduYW1lKQ0KIAlzdHJ1Y3QgZ19wcm92aWRlciAqcHA7DQogCXp2 b2xfc3RhdGVfdCAqenY7DQogDQotCUFTU0VSVChNVVRFWF9IRUxEKCZzcGFf bmFtZXNwYWNlX2xvY2spKTsNCisJQVNTRVJUKE1VVEVYX0hFTEQoJnpmc2Rl dl9zdGF0ZV9sb2NrKSk7DQogCWdfdG9wb2xvZ3lfYXNzZXJ0KCk7DQogDQog CXBwID0gTElTVF9GSVJTVCgmZ3AtPnByb3ZpZGVyKTsNCkBAIC0yNDcxLDcg KzI0NDgsNyBAQCB6dm9sX3JlbmFtZV9taW5vcnMoY29uc3QgY2hhciAqb2xk bmFtZSwgY29uc3QgY2hhciAqbmV3bmFtZSkNCiAJbmV3bmFtZWxlbiA9IHN0 cmxlbihuZXduYW1lKTsNCiANCiAJRFJPUF9HSUFOVCgpOw0KLQltdXRleF9l bnRlcigmc3BhX25hbWVzcGFjZV9sb2NrKTsNCisJbXV0ZXhfZW50ZXIoJnpm c2Rldl9zdGF0ZV9sb2NrKTsNCiAJZ190b3BvbG9neV9sb2NrKCk7DQogDQog CUxJU1RfRk9SRUFDSChncCwgJnpmc196dm9sX2NsYXNzLmdlb20sIGdlb20p IHsNCkBAIC0yNDk0LDYgKzI0NzEsNiBAQCB6dm9sX3JlbmFtZV9taW5vcnMo Y29uc3QgY2hhciAqb2xkbmFtZSwgY29uc3QgY2hhciAqbmV3bmFtZSkNCiAJ fQ0KIA0KIAlnX3RvcG9sb2d5X3VubG9jaygpOw0KLQltdXRleF9leGl0KCZz cGFfbmFtZXNwYWNlX2xvY2spOw0KKwltdXRleF9leGl0KCZ6ZnNkZXZfc3Rh dGVfbG9jayk7DQogCVBJQ0tVUF9HSUFOVCgpOw0KIH0NCi0tIA0KMS44LjQu Mg0KDQo= --1030603365-686922855-1387467971=:4344 Content-Type: TEXT/x-diff; name=0002-ZFS-snapshot-handling-fix.patch Content-Transfer-Encoding: BASE64 Content-ID: <alpine.DEB.2.10.1312191646112.4344@krichy.tvnetwork.hu> Content-Description: Content-Disposition: attachment; filename=0002-ZFS-snapshot-handling-fix.patch RnJvbSA1N2Q1YTM4M2I1ODVjMzJjNzdhZjU0ZThjZGFjYWRkZjhjZTc1ODRm IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQ0KRnJvbTogUmljaGFyZCBLb2pl ZHppbnN6a3kgPGtyaWNoeUBjZmxpbnV4Lmh1Pg0KRGF0ZTogV2VkLCAxOCBE ZWMgMjAxMyAyMjoxMToyMSArMDEwMA0KU3ViamVjdDogW1BBVENIIDIvMl0g WkZTIHNuYXBzaG90IGhhbmRsaW5nIGZpeA0KDQotLS0NCiAuLi4vY29tcGF0 L29wZW5zb2xhcmlzL2tlcm4vb3BlbnNvbGFyaXNfbG9va3VwLmMgICB8IDEz ICsrKy0tLQ0KIC4uLi9vcGVuc29sYXJpcy91dHMvY29tbW9uL2ZzL3pmcy96 ZnNfY3RsZGlyLmMgICAgIHwgNTMgKysrKysrKysrKysrKysrLS0tLS0tLQ0K IDIgZmlsZXMgY2hhbmdlZCwgNDIgaW5zZXJ0aW9ucygrKSwgMjQgZGVsZXRp b25zKC0pDQoNCmRpZmYgLS1naXQgYS9zeXMvY2RkbC9jb21wYXQvb3BlbnNv bGFyaXMva2Vybi9vcGVuc29sYXJpc19sb29rdXAuYyBiL3N5cy9jZGRsL2Nv bXBhdC9vcGVuc29sYXJpcy9rZXJuL29wZW5zb2xhcmlzX2xvb2t1cC5jDQpp bmRleCA5NDM4M2Q2Li40Y2FjMDUzIDEwMDY0NA0KLS0tIGEvc3lzL2NkZGwv Y29tcGF0L29wZW5zb2xhcmlzL2tlcm4vb3BlbnNvbGFyaXNfbG9va3VwLmMN CisrKyBiL3N5cy9jZGRsL2NvbXBhdC9vcGVuc29sYXJpcy9rZXJuL29wZW5z b2xhcmlzX2xvb2t1cC5jDQpAQCAtODEsNiArODEsOCBAQCB0cmF2ZXJzZSh2 bm9kZV90ICoqY3ZwcCwgaW50IGxrdHlwZSkNCiAJICogcHJvZ3Jlc3Mgb24g dGhpcyB2bm9kZS4NCiAJICovDQogDQorCXZuX2xvY2soY3ZwLCBsa3R5cGUp Ow0KKw0KIAlmb3IgKDs7KSB7DQogCQkvKg0KIAkJICogUmVhY2hlZCB0aGUg ZW5kIG9mIHRoZSBtb3VudCBjaGFpbj8NCkBAIC04OSwxMyArOTEsNyBAQCB0 cmF2ZXJzZSh2bm9kZV90ICoqY3ZwcCwgaW50IGxrdHlwZSkNCiAJCWlmICh2 ZnNwID09IE5VTEwpDQogCQkJYnJlYWs7DQogCQllcnJvciA9IHZmc19idXN5 KHZmc3AsIDApOw0KLQkJLyoNCi0JCSAqIHR2cCBpcyBOVUxMIGZvciAqY3Zw cCB2bm9kZSwgd2hpY2ggd2UgY2FuJ3QgdW5sb2NrLg0KLQkJICovDQotCQlp ZiAodHZwICE9IE5VTEwpDQotCQkJdnB1dChjdnApOw0KLQkJZWxzZQ0KLQkJ CXZyZWxlKGN2cCk7DQorCQlWT1BfVU5MT0NLKGN2cCwgMCk7DQogCQlpZiAo ZXJyb3IpDQogCQkJcmV0dXJuIChlcnJvcik7DQogDQpAQCAtMTA3LDYgKzEw Myw5IEBAIHRyYXZlcnNlKHZub2RlX3QgKipjdnBwLCBpbnQgbGt0eXBlKQ0K IAkJdmZzX3VuYnVzeSh2ZnNwKTsNCiAJCWlmIChlcnJvciAhPSAwKQ0KIAkJ CXJldHVybiAoZXJyb3IpOw0KKw0KKwkJVk5fUkVMRShjdnApOw0KKw0KIAkJ Y3ZwID0gdHZwOw0KIAl9DQogDQpkaWZmIC0tZ2l0IGEvc3lzL2NkZGwvY29u dHJpYi9vcGVuc29sYXJpcy91dHMvY29tbW9uL2ZzL3pmcy96ZnNfY3RsZGly LmMgYi9zeXMvY2RkbC9jb250cmliL29wZW5zb2xhcmlzL3V0cy9jb21tb24v ZnMvemZzL3pmc19jdGxkaXIuYw0KaW5kZXggMjhhYjFmYS4uZDM0NjRiNCAx MDA2NDQNCi0tLSBhL3N5cy9jZGRsL2NvbnRyaWIvb3BlbnNvbGFyaXMvdXRz L2NvbW1vbi9mcy96ZnMvemZzX2N0bGRpci5jDQorKysgYi9zeXMvY2RkbC9j b250cmliL29wZW5zb2xhcmlzL3V0cy9jb21tb24vZnMvemZzL3pmc19jdGxk aXIuYw0KQEAgLTExMiw2ICsxMTIsMjUgQEAgc25hcGVudHJ5X2NvbXBhcmUo Y29uc3Qgdm9pZCAqYSwgY29uc3Qgdm9pZCAqYikNCiAJCXJldHVybiAoMCk7 DQogfQ0KIA0KKy8qIFJldHVybiB0aGUgemZzY3RsX3NuYXBkaXJfdCBvYmpl Y3QgZnJvbSBjdXJyZW50IHZub2RlLCBmb2xsb3dpbmcNCisgKiB0aGUgbG9j ayBvcmRlcnMgaW4gemZzY3RsX3NuYXBkaXJfbG9va3VwKCkgdG8gYXZvaWQg ZGVhZGxvY2tzLg0KKyAqIE9uIHJldHVybiB0aGUgcGFzc2VkIGluIHZwIGlz IHVubG9ja2VkICovDQorc3RhdGljIHpmc2N0bF9zbmFwZGlyX3QgKg0KK3pm c2N0bF9zbmFwc2hvdF9nZXRfc25hcGRpcih2bm9kZV90ICp2cCwgdm5vZGVf dCAqKmR2cHApDQorew0KKwlnZnNfZGlyX3QgKmRwID0gdnAtPnZfZGF0YTsN CisJKmR2cHAgPSBkcC0+Z2ZzZF9maWxlLmdmc19wYXJlbnQ7DQorCXpmc2N0 bF9zbmFwZGlyX3QgKnNkcDsNCisNCisJVk5fSE9MRCgqZHZwcCk7DQorCVZP UF9VTkxPQ0sodnAsIDApOw0KKwl2bl9sb2NrKCpkdnBwLCBMS19TSEFSRUQg fCBMS19SRVRSWSB8IExLX0NBTlJFQ1VSU0UpOw0KKwlzZHAgPSAoKmR2cHAp LT52X2RhdGE7DQorCVZPUF9VTkxPQ0soKmR2cHAsIDApOw0KKw0KKwlyZXR1 cm4gKHNkcCk7DQorfQ0KKw0KICNpZmRlZiBzdW4NCiB2bm9kZW9wc190ICp6 ZnNjdGxfb3BzX3Jvb3Q7DQogdm5vZGVvcHNfdCAqemZzY3RsX29wc19zbmFw ZGlyOw0KQEAgLTEwMTMsNiArMTAzMiw4IEBAIHpmc2N0bF9zbmFwZGlyX2xv b2t1cChhcCkNCiAJCQkgKiBUaGUgc25hcHNob3Qgd2FzIHVubW91bnRlZCBi ZWhpbmQgb3VyIGJhY2tzLA0KIAkJCSAqIHRyeSB0byByZW1vdW50IGl0Lg0K IAkJCSAqLw0KKwkJCVZPUF9VTkxPQ0soKnZwcCwgMCk7DQorCQkJVk5fSE9M RCgqdnBwKTsNCiAJCQlWRVJJRlkoemZzY3RsX3NuYXBzaG90X3puYW1lKGR2 cCwgbm0sIE1BWE5BTUVMRU4sIHNuYXBuYW1lKSA9PSAwKTsNCiAJCQlnb3Rv IGRvbW91bnQ7DQogCQl9IGVsc2Ugew0KQEAgLTEwNjQsNyArMTA4NSw2IEBA IHpmc2N0bF9zbmFwZGlyX2xvb2t1cChhcCkNCiAJc2VwLT5zZV9uYW1lID0g a21lbV9hbGxvYyhzdHJsZW4obm0pICsgMSwgS01fU0xFRVApOw0KIAkodm9p ZCkgc3RyY3B5KHNlcC0+c2VfbmFtZSwgbm0pOw0KIAkqdnBwID0gc2VwLT5z ZV9yb290ID0gemZzY3RsX3NuYXBzaG90X21rbm9kZShkdnAsIGRtdV9vYmpz ZXRfaWQoc25hcCkpOw0KLQlWTl9IT0xEKCp2cHApOw0KIAlhdmxfaW5zZXJ0 KCZzZHAtPnNkX3NuYXBzLCBzZXAsIHdoZXJlKTsNCiANCiAJZG11X29ianNl dF9yZWxlKHNuYXAsIEZUQUcpOw0KQEAgLTEwNzUsNiArMTA5NSw3IEBAIGRv bW91bnQ6DQogCSh2b2lkKSBzbnByaW50Zihtb3VudHBvaW50LCBtb3VudHBv aW50X2xlbiwNCiAJICAgICIlcy8iIFpGU19DVExESVJfTkFNRSAiL3NuYXBz aG90LyVzIiwNCiAJICAgIGR2cC0+dl92ZnNwLT5tbnRfc3RhdC5mX21udG9u bmFtZSwgbm0pOw0KKwlWTl9IT0xEKCp2cHApOw0KIAllcnIgPSBtb3VudF9z bmFwc2hvdChjdXJ0aHJlYWQsIHZwcCwgInpmcyIsIG1vdW50cG9pbnQsIHNu YXBuYW1lLCAwKTsNCiAJa21lbV9mcmVlKG1vdW50cG9pbnQsIG1vdW50cG9p bnRfbGVuKTsNCiAJaWYgKGVyciA9PSAwKSB7DQpAQCAtMTQ2NCwxNiArMTQ4 NSwxOCBAQCB6ZnNjdGxfc25hcHNob3RfaW5hY3RpdmUoYXApDQogCWludCBs b2NrZWQ7DQogCXZub2RlX3QgKmR2cDsNCiANCi0JaWYgKHZwLT52X2NvdW50 ID4gMCkNCi0JCWdvdG8gZW5kOw0KLQ0KLQlWRVJJRlkoZ2ZzX2Rpcl9sb29r dXAodnAsICIuLiIsICZkdnAsIGNyLCAwLCBOVUxMLCBOVUxMKSA9PSAwKTsN Ci0Jc2RwID0gZHZwLT52X2RhdGE7DQotCVZPUF9VTkxPQ0soZHZwLCAwKTsN CisJc2RwID0gemZzY3RsX3NuYXBzaG90X2dldF9zbmFwZGlyKHZwLCAmZHZw KTsNCiANCiAJaWYgKCEobG9ja2VkID0gTVVURVhfSEVMRCgmc2RwLT5zZF9s b2NrKSkpDQogCQltdXRleF9lbnRlcigmc2RwLT5zZF9sb2NrKTsNCiANCisJ dm5fbG9jayh2cCwgTEtfRVhDTFVTSVZFIHwgTEtfUkVUUlkpOw0KKw0KKwlp ZiAodnAtPnZfY291bnQgPiAwKSB7DQorCQltdXRleF9leGl0KCZzZHAtPnNk X2xvY2spOw0KKwkJcmV0dXJuICgwKTsNCisJfQ0KKw0KIAlBU1NFUlQoIXZu X2lzbW50cHQodnApKTsNCiANCiAJc2VwID0gYXZsX2ZpcnN0KCZzZHAtPnNk X3NuYXBzKTsNCkBAIC0xNDk0LDcgKzE1MTcsNiBAQCB6ZnNjdGxfc25hcHNo b3RfaW5hY3RpdmUoYXApDQogCQltdXRleF9leGl0KCZzZHAtPnNkX2xvY2sp Ow0KIAlWTl9SRUxFKGR2cCk7DQogDQotZW5kOg0KIAkvKg0KIAkgKiBEaXNw b3NlIG9mIHRoZSB2bm9kZSBmb3IgdGhlIHNuYXBzaG90IG1vdW50IHBvaW50 Lg0KIAkgKiBUaGlzIGlzIHNhZmUgdG8gZG8gYmVjYXVzZSBvbmNlIHRoaXMg ZW50cnkgaGFzIGJlZW4gcmVtb3ZlZA0KQEAgLTE1OTUsMjAgKzE2MTcsMTcg QEAgemZzY3RsX3NuYXBzaG90X2xvb2t1cChhcCkNCiBzdGF0aWMgaW50DQog emZzY3RsX3NuYXBzaG90X3ZwdG9jbnAoc3RydWN0IHZvcF92cHRvY25wX2Fy Z3MgKmFwKQ0KIHsNCi0JemZzdmZzX3QgKnpmc3ZmcyA9IGFwLT5hX3ZwLT52 X3Zmc3AtPnZmc19kYXRhOw0KLQl2bm9kZV90ICpkdnAsICp2cDsNCisJdm5v ZGVfdCAqZHZwLCAqdnAgPSBhcC0+YV92cDsNCiAJemZzY3RsX3NuYXBkaXJf dCAqc2RwOw0KIAl6ZnNfc25hcGVudHJ5X3QgKnNlcDsNCi0JaW50IGVycm9y Ow0KKwlpbnQgZXJyb3IgPSAwOw0KIA0KLQlBU1NFUlQoemZzdmZzLT56X2N0 bGRpciAhPSBOVUxMKTsNCi0JZXJyb3IgPSB6ZnNjdGxfcm9vdF9sb29rdXAo emZzdmZzLT56X2N0bGRpciwgInNuYXBzaG90IiwgJmR2cCwNCi0JICAgIE5V TEwsIDAsIE5VTEwsIGtjcmVkLCBOVUxMLCBOVUxMLCBOVUxMKTsNCi0JaWYg KGVycm9yICE9IDApDQotCQlyZXR1cm4gKGVycm9yKTsNCi0Jc2RwID0gZHZw LT52X2RhdGE7DQorCXNkcCA9IHpmc2N0bF9zbmFwc2hvdF9nZXRfc25hcGRp cih2cCwgJmR2cCk7DQogDQogCW11dGV4X2VudGVyKCZzZHAtPnNkX2xvY2sp Ow0KKw0KKwl2bl9sb2NrKHZwLCBMS19TSEFSRUQgfCBMS19SRVRSWSk7DQor DQogCXNlcCA9IGF2bF9maXJzdCgmc2RwLT5zZF9zbmFwcyk7DQogCXdoaWxl IChzZXAgIT0gTlVMTCkgew0KIAkJdnAgPSBzZXAtPnNlX3Jvb3Q7DQotLSAN CjEuOC40LjINCg0K --1030603365-686922855-1387467971=:4344--
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?alpine.DEB.2.10.1312191629370.4344>