From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Jianpeng Ma" Subject: [RFC PATCH] raid5: Correct some failed-stripe which because the badsector. Date: Sat, 22 Sep 2012 11:14:47 +0800 Message-ID: <2012092211144517180514@gmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset="gb2312" Content-Transfer-Encoding: base64 Return-path: Sender: linux-raid-owner@vger.kernel.org To: Neil Brown Cc: linux-raid , =?gb2312?B?1twsIPfo?= , =?gb2312?B?sd8sINPq?= List-Id: linux-raid.ids QmVjYXVzZSByYWlkNSBoYWQgaW1wbGVtZW50ZWQgYmFkc2VjdG9yIGZlYXR1cmUsc29tZSBmYWls ZWQtc3RyaXBlIHdoaWNoIGJlY2F1c2UgdGhlDQpiYWRzZWN0b3IgY2FuIHRyeSB0byBjb3JyZWN0 IGluc3RlYWQgb2Ygb25seSBmYWlsaW5nLg0KDQpGb3IgZXhhbXBsZToNCjE6Q3JlYXRlIGEgcmFp ZDUgYnkgZm91ciBkaXNrcyBtaXNzaW5nL3NkYi9zZGMvc2RkLg0KMjpJZiByZWFkZWQgIGRhdGEg ZnJvbSBzZGIgYW5kIG1ldCBlcnJvcixzbyB0aGUgc3RyaXBlIGlzIGZhaWxlZA0KMzpJZiBsYXRl ciB3cml0ZS1zdHJpcGUgY29udGFpbnMgc2RiIHdoaWNoIG92ZXJ3cml0ZS5UaGUgc3RyaXBlIGhh cyBhDQpjaGFuY2UgdG8gY29ycmVjdC4NCjQ6SWYgc3RlcDMgc3VjY2Vzc2VkLCBhZGQgYSBzcGFy ZSBkaXNrIHRvIHJhaWQsdGhlIHJhaWQgY2FuIGJlIGFjdGl2ZQ0KZnJvbSBkZWdyYWRlZC4NCg0K VGhlcmUgYXJlIHR3byBtZXRob2RzIHRvIGNvbXB1dGUgcmFpZDUgcGFyaXR5LHJjdyBhbmQgcm13 Lg0KSW4gdGhpcyBzaXR1YXRpb24saXQgb25seSB1c2VkIHJjdy4NClRoZSBwdXJwb3NlIGlzIG9u bHkgY2hhbmdlIHN0YXRlIG9mIHN0cmlwZSBmcm9tIGZhaWxlZCB0byBkZWdyYWRlZCBvcg0KYWN0 aXZlLg0KDQpOT1RFOg0KVGhlIHBhdGNoIGxvb2tzIHVnbHkuIEl0IGlzIHBvc3Qgb3V0IG1haW5s eSB0byBtYWtlIHN1cmUgaXQgaXMgDQpnb2luZyBpbiB0aGUgY29ycmVjdCBkaXJlY3Rpb24gYW5k IGhvcGUgdG8gZ2V0IHNvbWUgaGVscGZ1bCBjb21tZW50cyBmcm9tIG90aGVyIGd1eXMuDQoNClRl c3RlZC1ieTogUWkgWmhvdSA8cWkuZy56aG91QGdtYWlsLmNvbT4NClNpZ25lZC1vZmYtYnk6IFl1 IEJpYW4gPHljYnp6amxieWJ5QGdtYWlsLmNvbT4NClNpZ25lZC1vZmYtYnk6IEppYW5wZW5nIE1h IDxtYWppYW5wZW5nQGdtYWlsLmNvbT4NCi0tLQ0KIGRyaXZlcnMvbWQvcmFpZDUuYyB8ICAxNTIg KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0tLS0tLS0tLQ0KIGRy aXZlcnMvbWQvcmFpZDUuaCB8ICAgIDggKysrDQogMiBmaWxlcyBjaGFuZ2VkLCAxMzUgaW5zZXJ0 aW9ucygrKSwgMjUgZGVsZXRpb25zKC0pDQoNCmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL3JhaWQ1 LmMgYi9kcml2ZXJzL21kL3JhaWQ1LmMNCmluZGV4IGFkZGE5NGQuLmQwODVmYTQgMTAwNjQ0DQot LS0gYS9kcml2ZXJzL21kL3JhaWQ1LmMNCisrKyBiL2RyaXZlcnMvbWQvcmFpZDUuYw0KQEAgLTIy MCw2ICsyMjAsNyBAQCBzdGF0aWMgdm9pZCBkb19yZWxlYXNlX3N0cmlwZShzdHJ1Y3QgcjVjb25m ICpjb25mLCBzdHJ1Y3Qgc3RyaXBlX2hlYWQgKnNoKQ0KIAkJCSAgICA8IElPX1RIUkVTSE9MRCkN CiAJCQkJbWRfd2FrZXVwX3RocmVhZChjb25mLT5tZGRldi0+dGhyZWFkKTsNCiAJCWF0b21pY19k ZWMoJmNvbmYtPmFjdGl2ZV9zdHJpcGVzKTsNCisJCWNsZWFyX2JpdChTVFJJUEVfRkFJTEVEX1JF UkVBRCwgJnNoLT5zdGF0ZSk7DQogCQlpZiAoIXRlc3RfYml0KFNUUklQRV9FWFBBTkRJTkcsICZz aC0+c3RhdGUpKSB7DQogCQkJbGlzdF9hZGRfdGFpbCgmc2gtPmxydSwgJmNvbmYtPmluYWN0aXZl X2xpc3QpOw0KIAkJCXdha2VfdXAoJmNvbmYtPndhaXRfZm9yX3N0cmlwZSk7DQpAQCAtNTQ4LDkg KzU0OSw5IEBAIHN0YXRpYyB2b2lkIG9wc19ydW5faW8oc3RydWN0IHN0cmlwZV9oZWFkICpzaCwg c3RydWN0IHN0cmlwZV9oZWFkX3N0YXRlICpzKQ0KIAkJCWVsc2UNCiAJCQkJcncgPSBXUklURTsN CiAJCX0gZWxzZSBpZiAodGVzdF9hbmRfY2xlYXJfYml0KFI1X1dhbnRyZWFkLCAmc2gtPmRldltp XS5mbGFncykpDQotCQkJcncgPSBSRUFEOw0KKwkJCQlydyA9IFJFQUQ7DQogCQllbHNlIGlmICh0 ZXN0X2FuZF9jbGVhcl9iaXQoUjVfV2FudFJlcGxhY2UsDQotCQkJCQkgICAgJnNoLT5kZXZbaV0u ZmxhZ3MpKSB7DQorCQkJCSZzaC0+ZGV2W2ldLmZsYWdzKSkgew0KIAkJCXJ3ID0gV1JJVEU7DQog CQkJcmVwbGFjZV9vbmx5ID0gMTsNCiAJCX0gZWxzZQ0KQEAgLTE3MzcsNiArMTczOCw3IEBAIHN0 YXRpYyB2b2lkIHJhaWQ1X2VuZF9yZWFkX3JlcXVlc3Qoc3RydWN0IGJpbyAqIGJpLCBpbnQgZXJy b3IpDQogCQlzID0gc2gtPnNlY3RvciArIHJkZXYtPm5ld19kYXRhX29mZnNldDsNCiAJZWxzZQ0K IAkJcyA9IHNoLT5zZWN0b3IgKyByZGV2LT5kYXRhX29mZnNldDsNCisNCiAJaWYgKHVwdG9kYXRl KSB7DQogCQlzZXRfYml0KFI1X1VQVE9EQVRFLCAmc2gtPmRldltpXS5mbGFncyk7DQogCQlpZiAo dGVzdF9iaXQoUjVfUmVhZEVycm9yLCAmc2gtPmRldltpXS5mbGFncykpIHsNCkBAIC0xNzU0LDYg KzE3NTYsNyBAQCBzdGF0aWMgdm9pZCByYWlkNV9lbmRfcmVhZF9yZXF1ZXN0KHN0cnVjdCBiaW8g KiBiaSwgaW50IGVycm9yKQ0KIAkJCWF0b21pY19hZGQoU1RSSVBFX1NFQ1RPUlMsICZyZGV2LT5j b3JyZWN0ZWRfZXJyb3JzKTsNCiAJCQljbGVhcl9iaXQoUjVfUmVhZEVycm9yLCAmc2gtPmRldltp XS5mbGFncyk7DQogCQkJY2xlYXJfYml0KFI1X1JlV3JpdGUsICZzaC0+ZGV2W2ldLmZsYWdzKTsN CisJCQljbGVhcl9iaXQoUjVfRmFpbGVkUmVyZWFkLCAmc2gtPmRldltpXS5mbGFncyk7DQogCQl9 IGVsc2UgaWYgKHRlc3RfYml0KFI1X1JlYWROb01lcmdlLCAmc2gtPmRldltpXS5mbGFncykpDQog CQkJY2xlYXJfYml0KFI1X1JlYWROb01lcmdlLCAmc2gtPmRldltpXS5mbGFncyk7DQogDQpAQCAt MTgwOSw2ICsxODEyLDcgQEAgc3RhdGljIHZvaWQgcmFpZDVfZW5kX3JlYWRfcmVxdWVzdChzdHJ1 Y3QgYmlvICogYmksIGludCBlcnJvcikNCiAJCWVsc2Ugew0KIAkJCWNsZWFyX2JpdChSNV9SZWFk RXJyb3IsICZzaC0+ZGV2W2ldLmZsYWdzKTsNCiAJCQljbGVhcl9iaXQoUjVfUmVXcml0ZSwgJnNo LT5kZXZbaV0uZmxhZ3MpOw0KKwkJCWNsZWFyX2JpdChSNV9GYWlsZWRSZXJlYWQsICZzaC0+ZGV2 W2ldLmZsYWdzKTsNCiAJCQlpZiAoIShzZXRfYmFkDQogCQkJICAgICAgJiYgdGVzdF9iaXQoSW5f c3luYywgJnJkZXYtPmZsYWdzKQ0KIAkJCSAgICAgICYmIHJkZXZfc2V0X2JhZGJsb2NrcygNCkBA IC0xODUyLDggKzE4NTYsOCBAQCBzdGF0aWMgdm9pZCByYWlkNV9lbmRfd3JpdGVfcmVxdWVzdChz dHJ1Y3QgYmlvICpiaSwgaW50IGVycm9yKQ0KIAkJfQ0KIAl9DQogCXByX2RlYnVnKCJlbmRfd3Jp dGVfcmVxdWVzdCAlbGx1LyVkLCBjb3VudCAlZCwgdXB0b2RhdGU6ICVkLlxuIiwNCi0JCSh1bnNp Z25lZCBsb25nIGxvbmcpc2gtPnNlY3RvciwgaSwgYXRvbWljX3JlYWQoJnNoLT5jb3VudCksDQot CQl1cHRvZGF0ZSk7DQorCQkodW5zaWduZWQgbG9uZyBsb25nKXNoLT5zZWN0b3IsIGksDQorCQlh dG9taWNfcmVhZCgmc2gtPmNvdW50KSwgdXB0b2RhdGUpOw0KIAlpZiAoaSA9PSBkaXNrcykgew0K IAkJQlVHKCk7DQogCQlyZXR1cm47DQpAQCAtMTg3MCw2ICsxODc0LDcgQEAgc3RhdGljIHZvaWQg cmFpZDVfZW5kX3dyaXRlX3JlcXVlc3Qoc3RydWN0IGJpbyAqYmksIGludCBlcnJvcikNCiAJCWlm ICghdXB0b2RhdGUpIHsNCiAJCQlzZXRfYml0KFdyaXRlRXJyb3JTZWVuLCAmcmRldi0+ZmxhZ3Mp Ow0KIAkJCXNldF9iaXQoUjVfV3JpdGVFcnJvciwgJnNoLT5kZXZbaV0uZmxhZ3MpOw0KKwkJCWNs ZWFyX2JpdChSNV9GYWlsZWRPdmVyd3JpdGUsICZzaC0+ZGV2W2ldLmZsYWdzKTsNCiAJCQlpZiAo IXRlc3RfYW5kX3NldF9iaXQoV2FudFJlcGxhY2VtZW50LCAmcmRldi0+ZmxhZ3MpKQ0KIAkJCQlz ZXRfYml0KE1EX1JFQ09WRVJZX05FRURFRCwNCiAJCQkJCSZyZGV2LT5tZGRldi0+cmVjb3Zlcnkp Ow0KQEAgLTI0NzksNiArMjQ4NCw5IEBAIGhhbmRsZV9mYWlsZWRfc3RyaXBlKHN0cnVjdCByNWNv bmYgKmNvbmYsIHN0cnVjdCBzdHJpcGVfaGVhZCAqc2gsDQogCQkJYml0bWFwX2VuZCA9IDE7DQog CQl9DQogDQorCQlpZiAodGVzdF9hbmRfY2xlYXJfYml0KFI1X0ZhaWxlZE92ZXJ3cml0ZSwgJnNo LT5kZXZbaV0uZmxhZ3MpKQ0KKwkJCXMtPmZhaWxlZF9vdmVyd3JpdGUtLTs7DQorCQljbGVhcl9i aXQoUjVfQmFkUGFyaXR5LAkmc2gtPmRldltpXS5mbGFncyk7DQogCQlpZiAodGVzdF9hbmRfY2xl YXJfYml0KFI1X092ZXJsYXAsICZzaC0+ZGV2W2ldLmZsYWdzKSkNCiAJCQl3YWtlX3VwKCZjb25m LT53YWl0X2Zvcl9vdmVybGFwKTsNCiANCkBAIC0yNzc2LDYgKzI3ODQsMTAgQEAgc3RhdGljIHZv aWQgaGFuZGxlX3N0cmlwZV9kaXJ0eWluZyhzdHJ1Y3QgcjVjb25mICpjb25mLA0KIAkJICogbG9v ayBsaWtlIHJjdyBpcyBjaGVhcGVyDQogCQkgKi8NCiAJCXJjdyA9IDE7IHJtdyA9IDI7DQorCX0g ZWxzZSBpZiAocy0+ZmFpbGVkID4gY29uZi0+bWF4X2RlZ3JhZGVkKSB7DQorCQkvKkZvciB3cml0 ZSBmYWlsZWQtc3RyaXBlLCBvbmx5IHVzZSByY3cgKi8NCisJCXJjdyA9IDE7DQorCQlybXcgPSAy Ow0KIAl9IGVsc2UgZm9yIChpID0gZGlza3M7IGktLTsgKSB7DQogCQkvKiB3b3VsZCBJIGhhdmUg dG8gcmVhZCB0aGlzIGJ1ZmZlciBmb3IgcmVhZF9tb2RpZnlfd3JpdGUgKi8NCiAJCXN0cnVjdCBy NWRldiAqZGV2ID0gJnNoLT5kZXZbaV07DQpAQCAtMjgyNiw2ICsyODM4LDcgQEAgc3RhdGljIHZv aWQgaGFuZGxlX3N0cmlwZV9kaXJ0eWluZyhzdHJ1Y3QgcjVjb25mICpjb25mLA0KIAlpZiAocmN3 IDw9IHJtdyAmJiByY3cgPiAwKSB7DQogCQkvKiB3YW50IHJlY29uc3RydWN0IHdyaXRlLCBidXQg bmVlZCB0byBnZXQgc29tZSBkYXRhICovDQogCQlyY3cgPSAwOw0KKw0KIAkJZm9yIChpID0gZGlz a3M7IGktLTsgKSB7DQogCQkJc3RydWN0IHI1ZGV2ICpkZXYgPSAmc2gtPmRldltpXTsNCiAJCQlp ZiAoIXRlc3RfYml0KFI1X09WRVJXUklURSwgJmRldi0+ZmxhZ3MpICYmDQpAQCAtMjgzNCw4ICsy ODQ3LDEzIEBAIHN0YXRpYyB2b2lkIGhhbmRsZV9zdHJpcGVfZGlydHlpbmcoc3RydWN0IHI1Y29u ZiAqY29uZiwNCiAJCQkgICAgISh0ZXN0X2JpdChSNV9VUFRPREFURSwgJmRldi0+ZmxhZ3MpIHx8 DQogCQkJICAgICAgdGVzdF9iaXQoUjVfV2FudGNvbXB1dGUsICZkZXYtPmZsYWdzKSkpIHsNCiAJ CQkJcmN3Kys7DQotCQkJCWlmICghdGVzdF9iaXQoUjVfSW5zeW5jLCAmZGV2LT5mbGFncykpDQor CQkJCWlmICghdGVzdF9iaXQoUjVfSW5zeW5jLCAmZGV2LT5mbGFncykpIHsNCisJCQkJCS8qIE9u bHkgZm9yIGFsbCBkYXRhLWRpc2tzICFSNV9JbnN5bmMgKi8NCisJCQkJCWlmIChzLT5mYWlsZWQg PiBjb25mLT5tYXhfZGVncmFkZWQgJiYNCisJCQkJCQkhdGVzdF9iaXQoU1RSSVBFX0ZBSUxFRF9X UklURSwgJnNoLT5zdGF0ZSkpDQorCQkJCQkJc2V0X2JpdChTVFJJUEVfREVMQVlFRCwgJnNoLT5z dGF0ZSk7DQogCQkJCQljb250aW51ZTsgLyogaXQncyBhIGZhaWxlZCBkcml2ZSAqLw0KKwkJCQl9 DQogCQkJCWlmICgNCiAJCQkJICB0ZXN0X2JpdChTVFJJUEVfUFJFUkVBRF9BQ1RJVkUsICZzaC0+ c3RhdGUpKSB7DQogCQkJCQlwcl9kZWJ1ZygiUmVhZF9vbGQgYmxvY2sgIg0KQEAgLTMyNjgsNiAr MzI4Niw3IEBAIHN0YXRpYyB2b2lkIGFuYWx5c2Vfc3RyaXBlKHN0cnVjdCBzdHJpcGVfaGVhZCAq c2gsIHN0cnVjdCBzdHJpcGVfaGVhZF9zdGF0ZSAqcykNCiAJCWlmIChyZGV2KSB7DQogCQkJaXNf YmFkID0gaXNfYmFkYmxvY2socmRldiwgc2gtPnNlY3RvciwgU1RSSVBFX1NFQ1RPUlMsDQogCQkJ CQkgICAgICZmaXJzdF9iYWQsICZiYWRfc2VjdG9ycyk7DQorDQogCQkJaWYgKHMtPmJsb2NrZWRf cmRldiA9PSBOVUxMDQogCQkJICAgICYmICh0ZXN0X2JpdChCbG9ja2VkLCAmcmRldi0+ZmxhZ3Mp DQogCQkJCXx8IGlzX2JhZCA8IDApKSB7DQpAQCAtMzI3OSw5ICszMjk4LDE0IEBAIHN0YXRpYyB2 b2lkIGFuYWx5c2Vfc3RyaXBlKHN0cnVjdCBzdHJpcGVfaGVhZCAqc2gsIHN0cnVjdCBzdHJpcGVf aGVhZF9zdGF0ZSAqcykNCiAJCQl9DQogCQl9DQogCQljbGVhcl9iaXQoUjVfSW5zeW5jLCAmZGV2 LT5mbGFncyk7DQotCQlpZiAoIXJkZXYpDQotCQkJLyogTm90IGluLXN5bmMgKi87DQotCQllbHNl IGlmIChpc19iYWQpIHsNCisJCWlmICghcmRldikgew0KKwkJCXMtPm5vd29ya2VkKys7DQorCQkJ aWYgKChkZXYtPnRvd3JpdGUgJiYgdGVzdF9iaXQoUjVfT1ZFUldSSVRFLCAmZGV2LT5mbGFncykp IHx8DQorCQkJCXRlc3RfYml0KFI1X0ZhaWxlZE92ZXJ3cml0ZSwgJmRldi0+ZmxhZ3MpKSB7DQor CQkJCXMtPmZhaWxlZF9vdmVyd3JpdGUrKzsNCisJCQkJc2V0X2JpdChSNV9GYWlsZWRPdmVyd3Jp dGUsICZkZXYtPmZsYWdzKTsNCisJCQl9DQorCQl9IGVsc2UgaWYgKGlzX2JhZCkgew0KIAkJCS8q IGFsc28gbm90IGluLXN5bmMgKi8NCiAJCQlpZiAoIXRlc3RfYml0KFdyaXRlRXJyb3JTZWVuLCAm cmRldi0+ZmxhZ3MpICYmDQogCQkJICAgIHRlc3RfYml0KFI1X1VQVE9EQVRFLCAmZGV2LT5mbGFn cykpIHsNCkBAIC0zMjkxLDYgKzMzMTUsMTQgQEAgc3RhdGljIHZvaWQgYW5hbHlzZV9zdHJpcGUo c3RydWN0IHN0cmlwZV9oZWFkICpzaCwgc3RydWN0IHN0cmlwZV9oZWFkX3N0YXRlICpzKQ0KIAkJ CQlzZXRfYml0KFI1X0luc3luYywgJmRldi0+ZmxhZ3MpOw0KIAkJCQlzZXRfYml0KFI1X1JlYWRF cnJvciwgJmRldi0+ZmxhZ3MpOw0KIAkJCX0NCisNCisJCQlpZiAoIXRlc3RfYml0KFdyaXRlRXJy b3JTZWVuLCAmcmRldi0+ZmxhZ3MpICYmDQorCQkJCSgoZGV2LT50b3dyaXRlICYmIHRlc3RfYml0 KFI1X09WRVJXUklURSwgJmRldi0+ZmxhZ3MpKSB8fA0KKwkJCQl0ZXN0X2JpdChSNV9GYWlsZWRP dmVyd3JpdGUsICZkZXYtPmZsYWdzKSkpIHsNCisJCQkJcy0+ZmFpbGVkX292ZXJ3cml0ZSsrOw0K KwkJCQlzZXRfYml0KFI1X0ZhaWxlZE92ZXJ3cml0ZSwgJmRldi0+ZmxhZ3MpOw0KKwkJCX0gZWxz ZSBpZiAoaSA9PSBzaC0+cGRfaWR4IHx8IGkgPT0gc2gtPnFkX2lkeCkNCisJCQkJc2V0X2JpdChS NV9CYWRQYXJpdHksICZkZXYtPmZsYWdzKTsNCiAJCX0gZWxzZSBpZiAodGVzdF9iaXQoSW5fc3lu YywgJnJkZXYtPmZsYWdzKSkNCiAJCQlzZXRfYml0KFI1X0luc3luYywgJmRldi0+ZmxhZ3MpOw0K IAkJZWxzZSBpZiAoc2gtPnNlY3RvciArIFNUUklQRV9TRUNUT1JTIDw9IHJkZXYtPnJlY292ZXJ5 X29mZnNldCkNCkBAIC0zMzQyLDE0ICszMzc0LDM1IEBAIHN0YXRpYyB2b2lkIGFuYWx5c2Vfc3Ry aXBlKHN0cnVjdCBzdHJpcGVfaGVhZCAqc2gsIHN0cnVjdCBzdHJpcGVfaGVhZF9zdGF0ZSAqcykN CiAJCQljbGVhcl9iaXQoUjVfUmVhZEVycm9yLCAmZGV2LT5mbGFncyk7DQogCQkJY2xlYXJfYml0 KFI1X1JlV3JpdGUsICZkZXYtPmZsYWdzKTsNCiAJCX0NCi0JCWlmICh0ZXN0X2JpdChSNV9SZWFk RXJyb3IsICZkZXYtPmZsYWdzKSkNCi0JCQljbGVhcl9iaXQoUjVfSW5zeW5jLCAmZGV2LT5mbGFn cyk7DQorCQlpZiAodGVzdF9iaXQoUjVfUmVhZEVycm9yLCAmZGV2LT5mbGFncykpIHsNCisJCQkv Kg0KKwkJCSAqIEZvciBmYWlsZWQtc3RyaXBlIHdoaWNoIGNvbnRhaW5lZCBiYWRzZWN0b3JzLGFm dGVyIHdyaXRpbmcNCisJCQkgKiBpdCBzaG91bGQgcmVyZWFkIHRvIGNoZWNrLg0KKwkJCSAqLw0K KwkJCXN0cnVjdCBtZF9yZGV2ICpyZGV2MiA9IHJjdV9kZXJlZmVyZW5jZSgNCisJCQkJY29uZi0+ ZGlza3NbaV0ucmRldik7DQorCQkJaWYgKCFpc19iYWQgJiYgcmRldjIgJiYgIXRlc3RfYml0KEZh dWx0eSwgJnJkZXYyLT5mbGFncykgJiYNCisJCQkJdGVzdF9iaXQoUjVfVVBUT0RBVEUsICZkZXYt PmZsYWdzKSAmJg0KKwkJCQkodGVzdF9iaXQoUjVfRmFpbGVkT3ZlcndyaXRlLCAmZGV2LT5mbGFn cykgfHwNCisJCQkJIHRlc3RfYml0KFI1X0JhZFBhcml0eSwgJmRldi0+ZmxhZ3MpIHx8DQorCQkJ CSB0ZXN0X2JpdChSNV9GYWlsZWRSZXJlYWQsICZkZXYtPmZsYWdzKSkpIHsNCisJCQkJc2V0X2Jp dChTVFJJUEVfRkFJTEVEX1JFUkVBRCwgJnNoLT5zdGF0ZSk7DQorCQkJCXNldF9iaXQoUjVfRmFp bGVkUmVyZWFkLCAmZGV2LT5mbGFncyk7DQorCQkJCWNsZWFyX2JpdChSNV9GYWlsZWRPdmVyd3Jp dGUsICZkZXYtPmZsYWdzKTsNCisJCQkJY2xlYXJfYml0KFI1X0JhZFBhcml0eSwgJmRldi0+Zmxh Z3MpOw0KKwkJCX0gZWxzZQ0KKwkJCQljbGVhcl9iaXQoUjVfSW5zeW5jLCAmZGV2LT5mbGFncyk7 DQorCQl9DQogCQlpZiAoIXRlc3RfYml0KFI1X0luc3luYywgJmRldi0+ZmxhZ3MpKSB7DQogCQkJ aWYgKHMtPmZhaWxlZCA8IDIpDQogCQkJCXMtPmZhaWxlZF9udW1bcy0+ZmFpbGVkXSA9IGk7DQog CQkJcy0+ZmFpbGVkKys7DQogCQkJaWYgKHJkZXYgJiYgIXRlc3RfYml0KEZhdWx0eSwgJnJkZXYt PmZsYWdzKSkNCiAJCQkJZG9fcmVjb3ZlcnkgPSAxOw0KKwkJCWlmIChpID09IHNoLT5wZF9pZHgp DQorCQkJCXMtPnBfZmFpbGVkID0gMTsNCisJCQllbHNlIGlmIChpID09IHNoLT5xZF9pZHgpDQor CQkJCXMtPnFfZmFpbGVkID0gMTsNCiAJCX0NCiAJfQ0KIAlpZiAodGVzdF9iaXQoU1RSSVBFX1NZ TkNJTkcsICZzaC0+c3RhdGUpKSB7DQpAQCAtMzQyNCwxOSArMzQ3Nyw0MyBAQCBzdGF0aWMgdm9p ZCBoYW5kbGVfc3RyaXBlKHN0cnVjdCBzdHJpcGVfaGVhZCAqc2gpDQogCX0NCiANCiAJcHJfZGVi dWcoImxvY2tlZD0lZCB1cHRvZGF0ZT0lZCB0b19yZWFkPSVkIg0KLQkgICAgICAgIiB0b193cml0 ZT0lZCBmYWlsZWQ9JWQgZmFpbGVkX251bT0lZCwlZFxuIiwNCisJICAgICAgICIgdG9fd3JpdGU9 JWQgZmFpbGVkPSVkIGZhaWxlZF9udW09JWQsJWQiDQorCSAgICAgICAiIGZhaWxlZF9vdmVyd3Jp dGU9JWQgcF9mYWlsZWQ9JWQgcV9mYWlsZWQ9JWRcbiIsDQogCSAgICAgICBzLmxvY2tlZCwgcy51 cHRvZGF0ZSwgcy50b19yZWFkLCBzLnRvX3dyaXRlLCBzLmZhaWxlZCwNCi0JICAgICAgIHMuZmFp bGVkX251bVswXSwgcy5mYWlsZWRfbnVtWzFdKTsNCisJICAgICAgIHMuZmFpbGVkX251bVswXSwg cy5mYWlsZWRfbnVtWzFdLCBzLmZhaWxlZF9vdmVyd3JpdGUsDQorCSAgICAgICBzLnBfZmFpbGVk LCBzLnFfZmFpbGVkKTsNCiAJLyogY2hlY2sgaWYgdGhlIGFycmF5IGhhcyBsb3N0IG1vcmUgdGhh biBtYXhfZGVncmFkZWQgZGV2aWNlcyBhbmQsDQogCSAqIGlmIHNvLCBzb21lIHJlcXVlc3RzIG1p Z2h0IG5lZWQgdG8gYmUgZmFpbGVkLg0KIAkgKi8NCiAJaWYgKHMuZmFpbGVkID4gY29uZi0+bWF4 X2RlZ3JhZGVkKSB7DQotCQlzaC0+Y2hlY2tfc3RhdGUgPSAwOw0KLQkJc2gtPnJlY29uc3RydWN0 X3N0YXRlID0gMDsNCi0JCWlmIChzLnRvX3JlYWQrcy50b193cml0ZStzLndyaXR0ZW4pDQotCQkJ aGFuZGxlX2ZhaWxlZF9zdHJpcGUoY29uZiwgc2gsICZzLCBkaXNrcywgJnMucmV0dXJuX2JpKTsN Ci0JCWlmIChzLnN5bmNpbmcgKyBzLnJlcGxhY2luZykNCi0JCQloYW5kbGVfZmFpbGVkX3N5bmMo Y29uZiwgc2gsICZzKTsNCisJCS8qDQorCQkgKkRpc2tzIHdoaWNoIHJlbW92ZWQgb3IgZmF1bHR5 IG11c3QgbGVzcyBvciBlcXVhbCBtYXhfZGVncmFkZWQNCisJCSAqLw0KKwkJaWYgKHMubm93b3Jr ZWQgPD0gY29uZi0+bWF4X2RlZ3JhZGVkICYmDQorCQkJKChjb25mLT5sZXZlbCA8IDYgJiYNCisJ CQkocy5mYWlsZWQgLSBzLmZhaWxlZF9vdmVyd3JpdGUgPD0gcy5wX2ZhaWxlZCkpIHx8DQorCQkJ KGNvbmYtPmxldmVsID09IDYgJiYNCisJCQkocy5mYWlsZWQgLSBzLmZhaWxlZF9vdmVyd3JpdGUg PD0gcy5wX2ZhaWxlZCArIHMucV9mYWlsZWQpKSkpIHsNCisJCQlzZXRfYml0KFNUUklQRV9GQUlM RURfV1JJVEUsICZzaC0+c3RhdGUpOw0KKwkJCXByX2RlYnVnKCJzdHJpcGUoJWxsdSkgZmFpbGVk LCB0cnkgdG8gcmVjb3JyZWN0XG4iLA0KKwkJCQkodW5zaWduZWQgbG9uZyBsb25nKXNoLT5zZWN0 b3IpOw0KKwkJfSBlbHNlIGlmICgocy5mYWlsZWRfb3ZlcndyaXRlID4gMCAmJg0KKwkJCSF0ZXN0 X2JpdChTVFJJUEVfUFJFUkVBRF9BQ1RJVkUsICZzaC0+c3RhdGUpKSkNCisJCQlwcl9kZWJ1Zygi c3RyaXBlKCVsbGQpIGRlbGF5IGZvciBmYWlsZWQtd3JpdGVcbiIsDQorCQkJCSh1bnNpZ25lZCBs b25nIGxvbmcpc2gtPnNlY3Rvcik7DQorCQllbHNlIHsNCisJCQlzaC0+Y2hlY2tfc3RhdGUgPSAw Ow0KKwkJCXNoLT5yZWNvbnN0cnVjdF9zdGF0ZSA9IDA7DQorCQkJY2xlYXJfYml0KFNUUklQRV9G QUlMRURfV1JJVEUsICZzaC0+c3RhdGUpOw0KKwkJCWNsZWFyX2JpdChTVFJJUEVfRkFJTEVEX1JF UkVBRCwgJnNoLT5zdGF0ZSk7DQorCQkJaWYgKHMudG9fcmVhZCtzLnRvX3dyaXRlK3Mud3JpdHRl bikgew0KKwkJCQloYW5kbGVfZmFpbGVkX3N0cmlwZShjb25mLCBzaCwgJnMsIGRpc2tzLCAmcy5y ZXR1cm5fYmkpOw0KKwkJCQlwcl9kZWJ1ZygiaGFuZGxlX2ZhaWxlZF9zdHJpcGU6JWxsZFxuIiwN CisJCQkJCSh1bnNpZ25lZCBsb25nIGxvbmcpc2gtPnNlY3Rvcik7DQorCQkJfQ0KKwkJCWlmIChz LnN5bmNpbmcgKyBzLnJlcGxhY2luZykNCisJCQkJaGFuZGxlX2ZhaWxlZF9zeW5jKGNvbmYsIHNo LCAmcyk7DQorCQl9DQogCX0NCiANCiAJLyoNCkBAIC0zNDg3LDYgKzM1NjQsOCBAQCBzdGF0aWMg dm9pZCBoYW5kbGVfc3RyaXBlKHN0cnVjdCBzdHJpcGVfaGVhZCAqc2gpDQogCQlCVUdfT04oIXRl c3RfYml0KFI1X1VQVE9EQVRFLCAmc2gtPmRldltzaC0+cGRfaWR4XS5mbGFncykpOw0KIAkJQlVH X09OKHNoLT5xZF9pZHggPj0gMCAmJg0KIAkJICAgICAgICF0ZXN0X2JpdChSNV9VUFRPREFURSwg JnNoLT5kZXZbc2gtPnFkX2lkeF0uZmxhZ3MpKTsNCisNCisJCWNsZWFyX2JpdChTVFJJUEVfRkFJ TEVEX1dSSVRFLCAmc2gtPnN0YXRlKTsNCiAJCWZvciAoaSA9IGRpc2tzOyBpLS07ICkgew0KIAkJ CXN0cnVjdCByNWRldiAqZGV2ID0gJnNoLT5kZXZbaV07DQogCQkJaWYgKHRlc3RfYml0KFI1X0xP Q0tFRCwgJmRldi0+ZmxhZ3MpICYmDQpAQCAtMzUwNCw2ICszNTgzLDcgQEAgc3RhdGljIHZvaWQg aGFuZGxlX3N0cmlwZShzdHJ1Y3Qgc3RyaXBlX2hlYWQgKnNoKQ0KIAkJfQ0KIAkJaWYgKHRlc3Rf YW5kX2NsZWFyX2JpdChTVFJJUEVfUFJFUkVBRF9BQ1RJVkUsICZzaC0+c3RhdGUpKQ0KIAkJCXMu ZGVjX3ByZXJlYWRfYWN0aXZlID0gMTsNCisNCiAJfQ0KIA0KIAkvKiBOb3cgdG8gY29uc2lkZXIg bmV3IHdyaXRlIHJlcXVlc3RzIGFuZCB3aGF0IGVsc2UsIGlmIGFueXRoaW5nDQpAQCAtMzU0OCwx MCArMzYyOCwzMCBAQCBzdGF0aWMgdm9pZCBoYW5kbGVfc3RyaXBlKHN0cnVjdCBzdHJpcGVfaGVh ZCAqc2gpDQogCQljbGVhcl9iaXQoU1RSSVBFX1NZTkNJTkcsICZzaC0+c3RhdGUpOw0KIAl9DQog DQotCS8qIElmIHRoZSBmYWlsZWQgZHJpdmVzIGFyZSBqdXN0IGEgUmVhZEVycm9yLCB0aGVuIHdl IG1pZ2h0IG5lZWQNCi0JICogdG8gcHJvZ3Jlc3MgdGhlIHJlcGFpci9jaGVjayBwcm9jZXNzDQor CS8qDQorCSAqIElmIHN0cmlwZSBmYWlsZWQgYmVjYXVzZSBiYWRzZWN0b3IgYW5kDQorCSAqIGNh biB3cml0ZSB0byBjb3JyZWN0IHRoZSBiYWRzZWN0b3INCisJICogd2UgdXNlZCByZWFkZXJyIHJv dXRpbmUgd2hpY2ggcmV3cml0ZSBhbmQgcmVyZWFkDQogCSAqLw0KLQlpZiAocy5mYWlsZWQgPD0g Y29uZi0+bWF4X2RlZ3JhZGVkICYmICFjb25mLT5tZGRldi0+cm8pDQorCWlmICh0ZXN0X2JpdChT VFJJUEVfRkFJTEVEX1JFUkVBRCwgJnNoLT5zdGF0ZSkpIHsNCisJCWZvciAoaSA9IGRpc2tzOyBp LS07ICkgew0KKwkJCXN0cnVjdCByNWRldiAqZGV2ID0gJnNoLT5kZXZbaV07DQorCQkJaWYgKHRl c3RfYml0KFI1X0ZhaWxlZFJlcmVhZCwgJmRldi0+ZmxhZ3MpDQorCQkJICAgICYmICF0ZXN0X2Jp dChSNV9MT0NLRUQsICZkZXYtPmZsYWdzKQ0KKwkJCSAgICAmJiB0ZXN0X2JpdChSNV9VUFRPREFU RSwgJmRldi0+ZmxhZ3MpKSB7DQorCQkJCS8qIGl0IGp1c3Qgd3JvdGUgYW5kIHN1Y2Vzc2VkLHNv IG5vdA0KKwkJCQkgKiBuZWNlc3NhcnkgdG8gcmV3cml0ZSxvbmx5IHNldCBmbGFnDQorCQkJCSAq Lw0KKwkJCQlzZXRfYml0KFI1X1JlV3JpdGUsICZkZXYtPmZsYWdzKTsNCisJCQkJc2V0X2JpdChS NV9XYW50cmVhZCwgJmRldi0+ZmxhZ3MpOw0KKwkJCQlzZXRfYml0KFI1X0xPQ0tFRCwgJmRldi0+ ZmxhZ3MpOw0KKwkJCQlzLmxvY2tlZCsrOw0KKwkJCX0NCisJCX0NCisJfSBlbHNlIGlmIChzLmZh aWxlZCA8PSBjb25mLT5tYXhfZGVncmFkZWQgJiYgIWNvbmYtPm1kZGV2LT5ybykNCisJCS8qIElm IHRoZSBmYWlsZWQgZHJpdmVzIGFyZSBqdXN0IGEgUmVhZEVycm9yLCB0aGVuIHdlIG1pZ2h0IG5l ZWQNCisJCSAqIHRvIHByb2dyZXNzIHRoZSByZXBhaXIvY2hlY2sgcHJvY2Vzcw0KKwkJICovDQog CQlmb3IgKGkgPSAwOyBpIDwgcy5mYWlsZWQ7IGkrKykgew0KIAkJCXN0cnVjdCByNWRldiAqZGV2 ID0gJnNoLT5kZXZbcy5mYWlsZWRfbnVtW2ldXTsNCiAJCQlpZiAodGVzdF9iaXQoUjVfUmVhZEVy cm9yLCAmZGV2LT5mbGFncykNCkBAIC0zNTcxLDcgKzM2NzEsMTAgQEAgc3RhdGljIHZvaWQgaGFu ZGxlX3N0cmlwZShzdHJ1Y3Qgc3RyaXBlX2hlYWQgKnNoKQ0KIAkJCQl9DQogCQkJfQ0KIAkJfQ0K Kw0KIA0KKw0KKw0KIA0KIAkvKiBGaW5pc2ggcmVjb25zdHJ1Y3Qgb3BlcmF0aW9ucyBpbml0aWF0 ZWQgYnkgdGhlIGV4cGFuc2lvbiBwcm9jZXNzICovDQogCWlmIChzaC0+cmVjb25zdHJ1Y3Rfc3Rh dGUgPT0gcmVjb25zdHJ1Y3Rfc3RhdGVfcmVzdWx0KSB7DQpAQCAtMzY0OCw3ICszNzUxLDcgQEAg ZmluaXNoOg0KIAkJCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoUjVfTWFkZUdvb2QsICZkZXYtPmZs YWdzKSkgew0KIAkJCQlyZGV2ID0gY29uZi0+ZGlza3NbaV0ucmRldjsNCiAJCQkJcmRldl9jbGVh cl9iYWRibG9ja3MocmRldiwgc2gtPnNlY3RvciwNCi0JCQkJCQkgICAgIFNUUklQRV9TRUNUT1JT LCAwKTsNCisJCQkJICAgICBTVFJJUEVfU0VDVE9SUywgMCk7DQogCQkJCXJkZXZfZGVjX3BlbmRp bmcocmRldiwgY29uZi0+bWRkZXYpOw0KIAkJCX0NCiAJCQlpZiAodGVzdF9hbmRfY2xlYXJfYml0 KFI1X01hZGVHb29kUmVwbCwgJmRldi0+ZmxhZ3MpKSB7DQpAQCAtMzg1Myw3ICszOTU2LDYgQEAg c3RhdGljIHZvaWQgcmFpZDVfYWxpZ25fZW5kaW8oc3RydWN0IGJpbyAqYmksIGludCBlcnJvcikN CiANCiANCiAJcHJfZGVidWcoInJhaWQ1X2FsaWduX2VuZGlvIDogaW8gZXJyb3IuLi5oYW5kaW5n IElPIGZvciBhIHJldHJ5XG4iKTsNCi0NCiAJYWRkX2Jpb190b19yZXRyeShyYWlkX2JpLCBjb25m KTsNCiB9DQogDQpAQCAtNDA4OCw3ICs0MTkwLDYgQEAgc3RhdGljIHZvaWQgbWFrZV9yZXF1ZXN0 KHN0cnVjdCBtZGRldiAqbWRkZXYsIHN0cnVjdCBiaW8gKiBiaSkNCiAJICAgICBtZGRldi0+cmVz aGFwZV9wb3NpdGlvbiA9PSBNYXhTZWN0b3IgJiYNCiAJICAgICBjaHVua19hbGlnbmVkX3JlYWQo bWRkZXYsYmkpKQ0KIAkJcmV0dXJuOw0KLQ0KIAlsb2dpY2FsX3NlY3RvciA9IGJpLT5iaV9zZWN0 b3IgJiB+KChzZWN0b3JfdClTVFJJUEVfU0VDVE9SUy0xKTsNCiAJbGFzdF9zZWN0b3IgPSBiaS0+ Ymlfc2VjdG9yICsgKGJpLT5iaV9zaXplPj45KTsNCiAJYmktPmJpX25leHQgPSBOVUxMOw0KQEAg LTQ1ODYsOCArNDY4Nyw5IEBAIHN0YXRpYyBpbnQgIHJldHJ5X2FsaWduZWRfcmVhZChzdHJ1Y3Qg cjVjb25mICpjb25mLCBzdHJ1Y3QgYmlvICpyYWlkX2JpbykNCiAJCWhhbmRsZWQrKzsNCiAJfQ0K IAlyZW1haW5pbmcgPSByYWlkNV9kZWNfYmlfYWN0aXZlX3N0cmlwZXMocmFpZF9iaW8pOw0KLQlp ZiAocmVtYWluaW5nID09IDApDQorCWlmIChyZW1haW5pbmcgPT0gMCkNCiAJCWJpb19lbmRpbyhy YWlkX2JpbywgMCk7DQorDQogCWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KCZjb25mLT5hY3RpdmVf YWxpZ25lZF9yZWFkcykpDQogCQl3YWtlX3VwKCZjb25mLT53YWl0X2Zvcl9zdHJpcGUpOw0KIAly ZXR1cm4gaGFuZGxlZDsNCmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL3JhaWQ1LmggYi9kcml2ZXJz L21kL3JhaWQ1LmgNCmluZGV4IGE5ZmMyNDkuLjA0NzA5ZDcgMTAwNjQ0DQotLS0gYS9kcml2ZXJz L21kL3JhaWQ1LmgNCisrKyBiL2RyaXZlcnMvbWQvcmFpZDUuaA0KQEAgLTI1MSw2ICsyNTEsOSBA QCBzdHJ1Y3Qgc3RyaXBlX2hlYWRfc3RhdGUgew0KIAkgKi8NCiAJaW50IHN5bmNpbmcsIGV4cGFu ZGluZywgZXhwYW5kZWQsIHJlcGxhY2luZzsNCiAJaW50IGxvY2tlZCwgdXB0b2RhdGUsIHRvX3Jl YWQsIHRvX3dyaXRlLCBmYWlsZWQsIHdyaXR0ZW47DQorCS8qIE92ZXJ3cml0ZSBkaXNrcyB3aGlj aCBmYXVsdHkgb3IgcmVtb3ZlZCBvciBjb250YWluZWQgYmFkc2VjdG9yICovDQorCWludCBmYWls ZWRfb3ZlcndyaXRlOw0KKwlpbnQgbm93b3JrZWQ7CS8qZGlzayBmYXVsdHkgb3IgcmVtb3ZlZCov DQogCWludCB0b19maWxsLCBjb21wdXRlLCByZXFfY29tcHV0ZSwgbm9uX292ZXJ3cml0ZTsNCiAJ aW50IGZhaWxlZF9udW1bMl07DQogCWludCBwX2ZhaWxlZCwgcV9mYWlsZWQ7DQpAQCAtMjk4LDYg KzMwMSw5IEBAIGVudW0gcjVkZXZfZmxhZ3Mgew0KIAlSNV9XYW50UmVwbGFjZSwgLyogV2UgbmVl ZCB0byB1cGRhdGUgdGhlIHJlcGxhY2VtZW50LCB3ZSBoYXZlIHJlYWQNCiAJCQkgKiBkYXRhIGlu LCBhbmQgbm93IGlzIGEgZ29vZCB0aW1lIHRvIHdyaXRlIGl0IG91dC4NCiAJCQkgKi8NCisJUjVf RmFpbGVkT3ZlcndyaXRlLCAvKm92ZXJ3cml0ZSBvbiBkaXNrIHdoaWNoIHJlbW92ZWQgb3IgZmF1 bHR5IG9yIGhhZCBiYWRzZWN0b3JzKi8NCisJUjVfRmFpbGVkUmVyZWFkLA0KKwlSNV9CYWRQYXJp dHksDQogfTsNCiANCiAvKg0KQEAgLTMyMiw2ICszMjgsOCBAQCBlbnVtIHsNCiAJU1RSSVBFX0NP TVBVVEVfUlVOLA0KIAlTVFJJUEVfT1BTX1JFUV9QRU5ESU5HLA0KIAlTVFJJUEVfT05fVU5QTFVH X0xJU1QsDQorCVNUUklQRV9GQUlMRURfV1JJVEUsDQorCVNUUklQRV9GQUlMRURfUkVSRUFELA0K IH07DQogDQogLyoNCi0tIA0KMS43LjkuNQ0K