2.0.31-1 patch: possible fix for some inode problems

Benjamin C.R. LaHaise (blah@kvack.org)
Sat, 8 Nov 1997 04:18:58 -0500 =?ISO-8859-1?Q?(U=01?=)


This message is in MIME format. The first part should be readable text,
while the remaining parts are likely unreadable without MIME-aware tools.
Send mail to mime@docserver.cac.washington.edu for more info.

--3922184632-1147692123-878980738=:19224
Content-Type: TEXT/PLAIN; charset=US-ASCII

Hello all!

Well, with all the noise about various inode related problems, here's an
obvious fix that should help some - esp the 'Inode i_mmap ring corrupted'
message. Analysis: 2.0.31 contained a very simple change to iput to
return if the inode came back in use after put_inode and friends were
called. Unfortunately, this triggered an old bug in iget - at the
found_it label, the inode's use count is incremented before the inode is
waited upon. Generally this will overlap with the write_inode() call in
iput - quite a significant chance of happening. Ext2 frequently triggered
this from

The other inode related race lurks in truncate_inode_pages. A call to
put_inode in ext2 and others can result in clear_inode being called, which
will block if pages are busy being written out to disk, or perhaps being
read ahead. Well, if that happens, the inode can be grabbed back into
use.

The attached patch moves the code in iget around, and makes iput lock the
inode until it's done with it. No more need to worry about blocking
operations in put_inode - and it's transparent to the filesystems. Yeah
it's a big lock, but it's one inode... And this way clear_inode doesn't
have a chance of blowing up in people's faces.

-ben

ps There was a */ missing in locks.c - oops!

--3922184632-1147692123-878980738=:19224
Content-Type: TEXT/PLAIN; charset=US-ASCII; name="ben-inode-2.0.32-1.diff"
Content-Transfer-Encoding: BASE64
Content-ID: <Pine.LNX.3.95.971108041858.19224B@as200.spellcast.com>
Content-Description:

ZGlmZiAtdXIgMi4wLjMyLTEvZnMvZXhlYy5jIGxpbi1iZW4vZnMvZXhlYy5j
DQotLS0gMi4wLjMyLTEvZnMvZXhlYy5jCVNhdCBOb3YgIDggMDI6NDg6NTcg
MTk5Nw0KKysrIGxpbi1iZW4vZnMvZXhlYy5jCVNhdCBOb3YgIDggMDE6MzY6
MzIgMTk5Nw0KQEAgLTEzMSwxNiArMTMxLDE3IEBADQogCQlmLT5mX3BvcyA9
IDA7DQogCQlmLT5mX3JlYWRhID0gMDsNCiAJCWYtPmZfb3AgPSBpbm9kZS0+
aV9vcC0+ZGVmYXVsdF9maWxlX29wczsNCisJCWlub2RlLT5pX2NvdW50Kys7
DQogCQlpZiAoZi0+Zl9vcC0+b3Blbikgew0KIAkJCWludCBlcnJvciA9IGYt
PmZfb3AtPm9wZW4oaW5vZGUsZik7DQogCQkJaWYgKGVycm9yKSB7DQogCQkJ
CWYtPmZfY291bnQtLTsNCiAJCQkJcHV0X3VudXNlZF9mZChmZCk7DQorCQkJ
CWlwdXQoaW5vZGUpOw0KIAkJCQlyZXR1cm4gZXJyb3I7DQogCQkJfQ0KIAkJ
fQ0KIAkJY3VycmVudC0+ZmlsZXMtPmZkW2ZkXSA9IGY7DQotCQlpbm9kZS0+
aV9jb3VudCsrOw0KIAl9DQogCXJldHVybiBmZDsNCiB9DQpkaWZmIC11ciAy
LjAuMzItMS9mcy9pbm9kZS5jIGxpbi1iZW4vZnMvaW5vZGUuYw0KLS0tIDIu
MC4zMi0xL2ZzL2lub2RlLmMJU2F0IE5vdiAgOCAwMjo0NDozNyAxOTk3DQor
KysgbGluLWJlbi9mcy9pbm9kZS5jCVNhdCBOb3YgIDggMDI6NTk6MzAgMTk5
Nw0KQEAgLTE3MiwxMCArMTcyLDE1IEBADQogdm9pZCBjbGVhcl9pbm9kZShz
dHJ1Y3QgaW5vZGUgKiBpbm9kZSkNCiB7DQogCXN0cnVjdCB3YWl0X3F1ZXVl
ICogd2FpdDsNCisJaW50IHdhc19sb2NrZWQgPSAxOw0KKw0KKwlpZiAoIWlu
b2RlLT5pX2xvY2spIHsNCisJCXByaW50ayhLRVJOX0RFQlVHICJWRlM6IGNs
ZWFyX2lub2RlIGNhbGxlZCBvbiB1bmxvY2tlZCBpbm9kZS5cbiIpOw0KKwkJ
bG9ja19pbm9kZShpbm9kZSk7DQorCQl3YXNfbG9ja2VkID0gMDsNCisJfQ0K
IA0KLQlpbm9kZS0+aV9jb3VudCsrOw0KIAl0cnVuY2F0ZV9pbm9kZV9wYWdl
cyhpbm9kZSwgMCk7DQotCXdhaXRfb25faW5vZGUoaW5vZGUpOw0KIAlpZiAo
SVNfV1JJVEFCTEUoaW5vZGUpKSB7DQogCQlpZiAoaW5vZGUtPmlfc2IgJiYg
aW5vZGUtPmlfc2ItPmRxX29wKQ0KIAkJCWlub2RlLT5pX3NiLT5kcV9vcC0+
ZHJvcChpbm9kZSk7DQpAQCAtMTgzLDExICsxODgsMTMgQEANCiAJcmVtb3Zl
X2lub2RlX2hhc2goaW5vZGUpOw0KIAlyZW1vdmVfaW5vZGVfZnJlZShpbm9k
ZSk7DQogCXdhaXQgPSAoKHZvbGF0aWxlIHN0cnVjdCBpbm9kZSAqKSBpbm9k
ZSktPmlfd2FpdDsNCi0JaWYgKC0taW5vZGUtPmlfY291bnQpDQotCQlucl9m
cmVlX2lub2RlcysrOw0KKwlucl9mcmVlX2lub2RlcysrOw0KIAltZW1zZXQo
aW5vZGUsMCxzaXplb2YoKmlub2RlKSk7DQogCSgodm9sYXRpbGUgc3RydWN0
IGlub2RlICopIGlub2RlKS0+aV93YWl0ID0gd2FpdDsNCisJaW5vZGUtPmlf
bG9jayA9IDE7DQogCWluc2VydF9pbm9kZV9mcmVlKGlub2RlKTsNCisJaWYg
KCF3YXNfbG9ja2VkKQ0KKwkJdW5sb2NrX2lub2RlKGlub2RlKTsNCiB9DQog
DQogaW50IGZzX21heV9tb3VudChrZGV2X3QgZGV2KQ0KQEAgLTIwMyw3ICsy
MTAsOSBAQA0KIAkJCWNvbnRpbnVlOw0KIAkJaWYgKGlub2RlLT5pX2NvdW50
IHx8IGlub2RlLT5pX2RpcnQgfHwgaW5vZGUtPmlfbG9jaykNCiAJCQlyZXR1
cm4gMDsNCisJCWxvY2tfaW5vZGUoaW5vZGUpOw0KIAkJY2xlYXJfaW5vZGUo
aW5vZGUpOw0KKwkJdW5sb2NrX2lub2RlKGlub2RlKTsNCiAJfQ0KIAlyZXR1
cm4gMTsNCiB9DQpAQCAtMzk2LDcgKzQwNSw5IEBADQogCQkJICAgICAgIGtk
ZXZuYW1lKGRldikpOw0KIAkJCWNvbnRpbnVlOw0KIAkJfQ0KKwkJbG9ja19p
bm9kZShpbm9kZSk7DQogCQljbGVhcl9pbm9kZShpbm9kZSk7DQorCQl1bmxv
Y2tfaW5vZGUoaW5vZGUpOw0KIAl9DQogfQ0KIA0KQEAgLTQxOSwxOSArNDMw
LDI0IEBADQogew0KIAlpZiAoIWlub2RlKQ0KIAkJcmV0dXJuOw0KLQl3YWl0
X29uX2lub2RlKGlub2RlKTsNCisJLyoNCisJICogSG9sZCB0aGUgaW5vZGUg
bG9jayB0aHJvdWdob3V0IHRoZSByZXN0IG9mIHRoZSBpcHV0IHByb2Nlc3Mu
DQorCSAqIFRoZXJlIGhhdmUgYmVlbiBmYXIgdG9vIG1hbnkgcmVwb3J0cyBv
ZiBwcm9ibGVtcyB0aGF0IHNlZW0NCisJICogcmVsYXRlZCB0byB0aGlzLiAt
YmVuIChibGFoQGt2YWNrLm9yZykNCisJICovDQorCWxvY2tfaW5vZGUoaW5v
ZGUpOw0KIAlpZiAoIWlub2RlLT5pX2NvdW50KSB7DQogCQlwcmludGsoIlZG
UzogaXB1dDogdHJ5aW5nIHRvIGZyZWUgZnJlZSBpbm9kZVxuIik7DQogCQlw
cmludGsoIlZGUzogZGV2aWNlICVzLCBpbm9kZSAlbHUsIG1vZGU9MCUwN29c
biIsDQogCQkJa2Rldm5hbWUoaW5vZGUtPmlfcmRldiksIGlub2RlLT5pX2lu
bywgaW5vZGUtPmlfbW9kZSk7DQotCQlyZXR1cm47DQorCQlnb3RvIG91dDsN
CiAJfQ0KIAlpZiAoaW5vZGUtPmlfcGlwZSkNCiAJCXdha2VfdXBfaW50ZXJy
dXB0aWJsZSgmUElQRV9XQUlUKCppbm9kZSkpOw0KLXJlcGVhdDoNCisNCiAJ
aWYgKGlub2RlLT5pX2NvdW50PjEpIHsNCiAJCWlub2RlLT5pX2NvdW50LS07
DQotCQlyZXR1cm47DQorCQlnb3RvIG91dDsNCiAJfQ0KIA0KIAl3YWtlX3Vw
KCZpbm9kZV93YWl0KTsNCkBAIC00NDIsMzggKzQ1OCwzOCBAQA0KIAl9DQog
DQogCWlmIChpbm9kZS0+aV9zYiAmJiBpbm9kZS0+aV9zYi0+c19vcCAmJiBp
bm9kZS0+aV9zYi0+c19vcC0+cHV0X2lub2RlKSB7DQorCQkvKiBjbGVhcl9p
bm9kZSBtaWdodCBzbGVlcCBoZXJlICovDQogCQlpbm9kZS0+aV9zYi0+c19v
cC0+cHV0X2lub2RlKGlub2RlKTsNCiAJCWlmICghaW5vZGUtPmlfbmxpbmsp
DQotCQkJcmV0dXJuOw0KKwkJCWdvdG8gb3V0Ow0KIAl9DQogDQogCWlmIChp
bm9kZS0+aV9kaXJ0KSB7DQotCQl3cml0ZV9pbm9kZShpbm9kZSk7CS8qIHdl
IGNhbiBzbGVlcCAtIHNvIGRvIGFnYWluICovDQotCQl3YWl0X29uX2lub2Rl
KGlub2RlKTsNCi0JCWdvdG8gcmVwZWF0Ow0KKwkJLyogVGhpcyByZWFsbHkg
aXMgb2sgLS0gaWYgZ2NjIHdlcmUgKnJlYWxseSogc21hcnQsDQorCQkgKiBp
dCB3b3VsZCBvcHRpbWl6ZSB0aGUgbWVtb3J5IGFjY2Vzc2VzIGF3YXkuLi4t
YmVuDQorCQkgKi8NCisJCWlub2RlLT5pX2xvY2sgPSAwOw0KKwkJd3JpdGVf
aW5vZGUoaW5vZGUpOwkvKiB3ZSBjYW4gc2xlZXAgLSBidXQgdGhhdCdzIG9r
ICovDQorCQlpbm9kZS0+aV9sb2NrID0gMTsNCiAJfQ0KIA0KLQlpZiAoSVNf
V1JJVEFCTEUoaW5vZGUpKSB7DQotCQlpZiAoaW5vZGUtPmlfc2IgJiYgaW5v
ZGUtPmlfc2ItPmRxX29wKSB7DQotCQkJLyogSGVyZSB3ZSBjYW4gc2xlZXAg
YWxzby4gTGV0J3MgZG8gaXQgYWdhaW4NCi0JCQkgKiBEbWl0cnkgR29yb2Rj
aGFuaW4gMDIvMTEvOTYgDQotCQkJICovDQotCQkJaW5vZGUtPmlfbG9jayA9
IDE7DQotCQkJaW5vZGUtPmlfc2ItPmRxX29wLT5kcm9wKGlub2RlKTsNCi0J
CQl1bmxvY2tfaW5vZGUoaW5vZGUpOw0KLQkJCWdvdG8gcmVwZWF0Ow0KLQkJ
fQ0KLQl9DQorCWlmIChJU19XUklUQUJMRShpbm9kZSkgJiYgaW5vZGUtPmlf
c2IgJiYgaW5vZGUtPmlfc2ItPmRxX29wKQ0KKwkJaW5vZGUtPmlfc2ItPmRx
X29wLT5kcm9wKGlub2RlKTsJLyogbWlnaHQgc2xlZXAgdG9vICovDQogCQ0K
IAlpbm9kZS0+aV9jb3VudC0tOw0KIA0KLQlpZiAoaW5vZGUtPmlfY291bnQp
DQorCWlmIChpbm9kZS0+aV9jb3VudCkgew0KIAkvKg0KIAkgKiBIdW9oLCB3
ZSB3ZXJlIHN1cHBvc2VkIHRvIGJlIHRoZSBsYXN0IHVzZXIsIGJ1dCBzb21l
b25lIGhhcw0KIAkgKiBncmFiYmVkIGl0IHdoaWxlIHdlIHdlcmUgc2xlZXBp
bmcuIERvbnQgZGVzdHJveSBpbm9kZSBWTQ0KIAkgKiBtYXBwaW5ncywgaXQg
bWlnaHQgY2F1c2UgYSBtZW1vcnkgbGVhay4NCisJICoNCisJICogQnV0IHRo
aXMgaXMgYSAiU2hvdWxkIE5ldmVyICNeJCYqISBIYXBwZW4iLCBhbmQgdGVu
ZHMgdG8gcmVzdWx0DQorCSAqIGluIE1BU1NJVkUgREFUQSBDT1JSVVBUSU9O
LCBzbyB5ZWxsIGFuZCBzY3JlYW0uIC1iZW4NCiAJICovDQotCQlyZXR1cm47
DQorCQlwYW5pYygiVkZTOiBJbm9kZSByZXVzZWQgZHVyaW5nIGlwdXQgKGRl
dmljZSAlcywgaW5vZGUgJWx1LCBtb2RlPTAlMDdvKVxuIiwNCisJCQlrZGV2
bmFtZShpbm9kZS0+aV9yZGV2KSwgaW5vZGUtPmlfaW5vLCBpbm9kZS0+aV9t
b2RlKTsNCisJfQ0KIA0KIAlpZiAoaW5vZGUtPmlfbW1hcCkgew0KIAkJcHJp
bnRrKCJpcHV0OiBpbm9kZSAlbHUgb24gZGV2aWNlICVzIHN0aWxsIGhhcyBt
YXBwaW5ncy5cbiIsDQpAQCAtNDgyLDYgKzQ5OCw4IEBADQogCX0NCiANCiAJ
bnJfZnJlZV9pbm9kZXMrKzsNCitvdXQ6DQorCXVubG9ja19pbm9kZShpbm9k
ZSk7DQogCXJldHVybjsNCiB9DQogDQpAQCAtNTMyLDcgKzU1MCw5IEBADQog
CWlmIChiZXN0LT5pX2NvdW50KQ0KIAkJZ290byByZXBlYXQ7DQogZm91bmRf
Z29vZDoNCisJbG9ja19pbm9kZShpbm9kZSk7DQogCWNsZWFyX2lub2RlKGJl
c3QpOw0KKwl1bmxvY2tfaW5vZGUoaW5vZGUpOw0KIAliZXN0LT5pX2NvdW50
ID0gMTsNCiAJYmVzdC0+aV9ubGluayA9IDE7DQogCWJlc3QtPmlfdmVyc2lv
biA9ICsrZXZlbnQ7DQpAQCAtNjE1LDE1ICs2MzUsMTQgQEANCiAJZ290byBy
ZXR1cm5faXQ7DQogDQogZm91bmRfaXQ6DQotCWlmICghaW5vZGUtPmlfY291
bnQpDQotCQlucl9mcmVlX2lub2Rlcy0tOw0KLQlpbm9kZS0+aV9jb3VudCsr
Ow0KIAl3YWl0X29uX2lub2RlKGlub2RlKTsNCiAJaWYgKGlub2RlLT5pX2Rl
diAhPSBzYi0+c19kZXYgfHwgaW5vZGUtPmlfaW5vICE9IG5yKSB7DQogCQlw
cmludGsoIldoZWUuLiBpbm9kZSBjaGFuZ2VkIGZyb20gdW5kZXIgdXMuIFRl
bGwgTGludXNcbiIpOw0KLQkJaXB1dChpbm9kZSk7DQogCQlnb3RvIHJlcGVh
dDsNCiAJfQ0KKwlpZiAoIWlub2RlLT5pX2NvdW50KQ0KKwkJbnJfZnJlZV9p
bm9kZXMtLTsNCisJaW5vZGUtPmlfY291bnQrKzsNCiAJaWYgKGNyb3NzbW50
cCAmJiBpbm9kZS0+aV9tb3VudCkgew0KIAkJc3RydWN0IGlub2RlICogdG1w
ID0gaW5vZGUtPmlfbW91bnQ7DQogCQl0bXAtPmlfY291bnQrKzsNCmRpZmYg
LXVyIDIuMC4zMi0xL2ZzL2xvY2tzLmMgbGluLWJlbi9mcy9sb2Nrcy5jDQot
LS0gMi4wLjMyLTEvZnMvbG9ja3MuYwlTYXQgTm92ICA4IDAyOjQ4OjU3IDE5
OTcNCisrKyBsaW4tYmVuL2ZzL2xvY2tzLmMJRnJpIE5vdiAgNyAyMzowNToz
NSAxOTk3DQpAQCAtOTc3LDYgKzk3Nyw3IEBADQogCQkJLyogVGhlIG5ldyBs
b2NrIGJyZWFrcyB0aGUgb2xkIG9uZSBpbiB0d28gcGllY2VzLA0KIAkJCSAq
IHNvIHdlIGhhdmUgdG8gdXNlIHRoZSBzZWNvbmQgbmV3IGxvY2sgKGluIHRo
aXMNCiAJCQkgKiBjYXNlLCBldmVuIEZfVU5MQ0sgbWF5IGZhaWwhKS4NCisJ
CQkgKi8NCiAJCQlsZWZ0ID0gbG9ja3NfaW5pdF9sb2NrKG5ld19mbDIsIHJp
Z2h0KTsNCiAJCQlsb2Nrc19pbnNlcnRfbG9jayhiZWZvcmUsIGxlZnQpOw0K
IAkJCW5ld19mbDIgPSBOVUxMOw0KZGlmZiAtdXIgMi4wLjMyLTEvZnMvbmNw
ZnMvaW5vZGUuYyBsaW4tYmVuL2ZzL25jcGZzL2lub2RlLmMNCi0tLSAyLjAu
MzItMS9mcy9uY3Bmcy9pbm9kZS5jCVNhdCBOb3YgIDggMDI6NDQ6MzggMTk5
Nw0KKysrIGxpbi1iZW4vZnMvbmNwZnMvaW5vZGUuYwlTYXQgTm92ICA4IDAx
OjQ4OjIzIDE5OTcNCkBAIC0xNjgsOCArMTY4LDkgQEANCiAJICogQWZ0ZXIg
Y2xlYXJpbmcgdGhlIGlub2RlIGlfY291bnQgd2lsbCBiZSAwIGluIDIuMC54
eCBrZXJuZWxzLg0KIAkgKiBUbyBrZWVwIHRoZSBpbm9kZSBmcm9tIGJlaW5n
IHJldXNlZCBhcyBmcmVlIGlmIHdlIGJsb2NrIHdoaWxlDQogCSAqIGNsb3Np
bmcgdGhlIGZpbGUsIGluY3JlbWVudCBpX2NvdW50IHRlbXBvcmFyaWx5Lg0K
KwkgKg0KKwkgKiBObyBsb25nZXIgLSBwdXRfaW5vZGUgaXMgbm93IGNhbGxl
ZCB3aXRoIHRoZSBpbm9kZSBsb2NrZWQuLWJlbg0KIAkgKi8NCi0JaW5vZGUt
PmlfY291bnQrKzsNCiANCiAJaWYgKGZpbmZvLT5vcGVuZWQgIT0gMCkNCiAJ
ew0KQEAgLTE4Miw3ICsxODMsNiBAQA0KIAl9DQogDQogCW5jcF9mcmVlX2lu
b2RlX2luZm8oaWluZm8pOw0KLQlpbm9kZS0+aV9jb3VudC0tOw0KIAkJDQog
dW5sb2NrOg0KIAl1bmxvY2tfc3VwZXIoc2IpOw0KZGlmZiAtdXIgMi4wLjMy
LTEvZnMvb3Blbi5jIGxpbi1iZW4vZnMvb3Blbi5jDQotLS0gMi4wLjMyLTEv
ZnMvb3Blbi5jCVNhdCBOb3YgMzAgMDU6MjE6MTkgMTk5Ng0KKysrIGxpbi1i
ZW4vZnMvb3Blbi5jCVNhdCBOb3YgIDggMDE6Mzc6MzUgMTk5Nw0KQEAgLTMw
MCw5ICszMDAsOSBAQA0KIAkJcmV0dXJuIC1FTk9URElSOw0KIAlpZiAoKGVy
cm9yID0gcGVybWlzc2lvbihpbm9kZSxNQVlfRVhFQykpICE9IDApDQogCQly
ZXR1cm4gZXJyb3I7DQorCWlub2RlLT5pX2NvdW50Kys7DQogCWlwdXQoY3Vy
cmVudC0+ZnMtPnB3ZCk7DQogCWN1cnJlbnQtPmZzLT5wd2QgPSBpbm9kZTsN
Ci0JaW5vZGUtPmlfY291bnQrKzsNCiAJcmV0dXJuICgwKTsNCiB9DQogDQpk
aWZmIC11ciAyLjAuMzItMS9mcy9wcm9jL2xpbmsuYyBsaW4tYmVuL2ZzL3By
b2MvbGluay5jDQotLS0gMi4wLjMyLTEvZnMvcHJvYy9saW5rLmMJU2F0IE5v
diAgOCAwMjo0ODo1NyAxOTk3DQorKysgbGluLWJlbi9mcy9wcm9jL2xpbmsu
YwlTYXQgTm92ICA4IDAyOjIxOjMyIDE5OTcNCkBAIC0xMjcsMTEgKzEyNywx
MiBAQA0KIAkJCQlicmVhazsNCiAJCQl9DQogCX0NCisJaWYgKG5ld19pbm9k
ZSkNCisJCW5ld19pbm9kZS0+aV9jb3VudCsrOw0KIAlpcHV0KGlub2RlKTsN
CiAJaWYgKCFuZXdfaW5vZGUpDQogCQlyZXR1cm4gLUVOT0VOVDsNCiAJKnJl
c19pbm9kZSA9IG5ld19pbm9kZTsNCi0JbmV3X2lub2RlLT5pX2NvdW50Kys7
DQogCXJldHVybiAwOw0KIH0NCiANCmRpZmYgLXVyIDIuMC4zMi0xL2ZzL3Nt
YmZzL2lub2RlLmMgbGluLWJlbi9mcy9zbWJmcy9pbm9kZS5jDQotLS0gMi4w
LjMyLTEvZnMvc21iZnMvaW5vZGUuYwlTYXQgTm92ICA4IDAyOjQ0OjM4IDE5
OTcNCisrKyBsaW4tYmVuL2ZzL3NtYmZzL2lub2RlLmMJU2F0IE5vdiAgOCAw
MTo0NzowNCAxOTk3DQpAQCAtMTEwLDExICsxMTAsNiBAQA0KIAl9DQogCWNs
ZWFyX2lub2RlKGlub2RlKTsNCiANCi0JLyoNCi0JICogV2UgZG9uJ3Qgd2Fu
dCB0aGUgaW5vZGUgdG8gYmUgcmV1c2VkIGFzIGZyZWUgaWYgd2UgYmxvY2sg
aGVyZSwNCi0JICogc28gdGVtcG9yYXJpbHkgaW5jcmVtZW50IGlfY291bnQu
DQotCSAqLw0KLQlpbm9kZS0+aV9jb3VudCsrOw0KIAlpZiAoaW5mbykgew0K
IAkJZmluZm8gPSAmaW5mby0+ZmluZm87DQogCQlpZiAoZmluZm8tPm9wZW5l
ZCAhPSAwKQ0KQEAgLTEyOCw4ICsxMjMsNiBAQA0KIAkJc21iX2ZyZWVfaW5v
ZGVfaW5mbyhpbmZvKTsNCiAJfSBlbHNlDQogCQlwcmludGsoInNtYl9wdXRf
aW5vZGU6IG5vIGlub2RlIGluZm8/P1xuIik7DQotDQotCWlub2RlLT5pX2Nv
dW50LS07DQogfQ0KIA0KIHN0YXRpYyB2b2lkDQpkaWZmIC11ciAyLjAuMzIt
MS9tbS9tbWFwLmMgbGluLWJlbi9tbS9tbWFwLmMNCi0tLSAyLjAuMzItMS9t
bS9tbWFwLmMJU2F0IE5vdiAgOCAwMjo0ODo1OSAxOTk3DQorKysgbGluLWJl
bi9tbS9tbWFwLmMJU2F0IE5vdiAgOCAwMTo0NDoyMCAxOTk3DQpAQCAtMTAz
Niw3ICsxMDM2LDcgQEANCiAJCX0NCiAJCXJlbW92ZV9zaGFyZWRfdm1fc3Ry
dWN0KG1wbnQpOw0KIAkJaWYgKG1wbnQtPnZtX2lub2RlKQ0KLQkJCW1wbnQt
PnZtX2lub2RlLT5pX2NvdW50LS07DQorCQkJaXB1dChtcG50LT52bV9pbm9k
ZSk7DQogCQlrZnJlZV9zKG1wbnQsIHNpemVvZigqbXBudCkpOw0KIAkJbXBu
dCA9IHByZXY7DQogCX0NCg==
--3922184632-1147692123-878980738=:19224--