From owner-freebsd-fs@FreeBSD.ORG Tue Dec 8 00:08:57 2009 Return-Path: Delivered-To: freebsd-fs@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id EF1DD1065672 for ; Tue, 8 Dec 2009 00:08:57 +0000 (UTC) (envelope-from mattjreimer@gmail.com) Received: from mail-pz0-f185.google.com (mail-pz0-f185.google.com [209.85.222.185]) by mx1.freebsd.org (Postfix) with ESMTP id C662D8FC14 for ; Tue, 8 Dec 2009 00:08:57 +0000 (UTC) Received: by pzk15 with SMTP id 15so1958954pzk.3 for ; Mon, 07 Dec 2009 16:08:57 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:mime-version:received:date:message-id:subject :from:to:content-type; bh=1DHUhE6ezhw8Wblc2dGYYJcSkpDk52E1cZkSknm8MF8=; b=FCGJ4Mz1KDD06wX+FQB9IFBr5WD9it8grVYaS+xQ2efPgWTDV6GzH1+C+nzvbC3u0z rMXEvOajEzx3MpIDG67+eHzOhyKly2PfporkYlS40D5lMyZkhT1l1OdXURZTztIgRs4j krAEIVAR38+HGGCf5JTCv/Ng1sPazEW9XZIWI= DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=mime-version:date:message-id:subject:from:to:content-type; b=Ky7BBCW0lF89E0jh+ur2CKX33rMnKM8EixljLQUkEZwVydS6xAszeZQ96m16uEyJ7h 391fCZ9FZkkHX422tzH/vqHgFsG3eCOOZM25pC1RM9hLIWnMHXKtALmV1JkB9swwVXuC q2eShc/iEu3qcowJqiDB77y9SNNVBGgfG4Eak= MIME-Version: 1.0 Received: by 10.143.26.32 with SMTP id d32mr805988wfj.297.1260230937355; Mon, 07 Dec 2009 16:08:57 -0800 (PST) Date: Mon, 7 Dec 2009 16:08:57 -0800 Message-ID: From: Matt Reimer To: freebsd-fs Content-Type: multipart/mixed; boundary=001636e0ac8f5b2579047a2c611f Subject: PATCH: teach (gpt)zfsboot to discern vdev status correctly X-BeenThere: freebsd-fs@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Filesystems List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 08 Dec 2009 00:08:58 -0000 --001636e0ac8f5b2579047a2c611f Content-Type: text/plain; charset=ISO-8859-1 Instead of assuming all vdevs are healthy, check the newest vdev label for each vdev's status. Booting from a degraded vdev should now be more robust. Sponsored by: VPOP Technologies, Inc. Matt Reimer (Note that much of this patch is merely whitespace change due to a block needing to be reindented.) --001636e0ac8f5b2579047a2c611f Content-Type: application/octet-stream; name="correct-status.patch" Content-Disposition: attachment; filename="correct-status.patch" Content-Transfer-Encoding: base64 X-Attachment-Id: f_g2xwxjhw0 LS0tIC9zeXMvY2RkbC9ib290L3pmcy96ZnNpbXBsLmguT1JJRwkyMDA5LTExLTIxIDA3OjAyOjM1 LjAwMDAwMDAwMCAtMDgwMAorKysgL3N5cy9jZGRsL2Jvb3QvemZzL3pmc2ltcGwuaAkyMDA5LTEy LTA3IDEzOjUwOjI2LjAwMDAwMDAwMCAtMDgwMApAQCAtNTQ2LDcgKzU0Niw2IEBACiAjZGVmaW5l CVpQT09MX0NPTkZJR19EVEwJCSJEVEwiCiAjZGVmaW5lCVpQT09MX0NPTkZJR19TVEFUUwkJInN0 YXRzIgogI2RlZmluZQlaUE9PTF9DT05GSUdfV0hPTEVfRElTSwkJIndob2xlX2Rpc2siCi0jZGVm aW5lCVpQT09MX0NPTkZJR19PRkZMSU5FCQkib2ZmbGluZSIKICNkZWZpbmUJWlBPT0xfQ09ORklH X0VSUkNPVU5UCQkiZXJyb3JfY291bnQiCiAjZGVmaW5lCVpQT09MX0NPTkZJR19OT1RfUFJFU0VO VAkibm90X3ByZXNlbnQiCiAjZGVmaW5lCVpQT09MX0NPTkZJR19TUEFSRVMJCSJzcGFyZXMiCkBA IC01NTYsNiArNTU1LDE2IEBACiAjZGVmaW5lCVpQT09MX0NPTkZJR19IT1NUTkFNRQkJImhvc3Ru YW1lIgogI2RlZmluZQlaUE9PTF9DT05GSUdfVElNRVNUQU1QCQkidGltZXN0YW1wIiAvKiBub3Qg c3RvcmVkIG9uIGRpc2sgKi8KIAorLyoKKyAqIFRoZSBwZXJzaXN0ZW50IHZkZXYgc3RhdGUgaXMg c3RvcmVkIGFzIHNlcGFyYXRlIHZhbHVlcyByYXRoZXIgdGhhbiBhIHNpbmdsZQorICogJ3ZkZXZf c3RhdGUnIGVudHJ5LiAgVGhpcyBpcyBiZWNhdXNlIGEgZGV2aWNlIGNhbiBiZSBpbiBtdWx0aXBs ZSBzdGF0ZXMsIHN1Y2gKKyAqIGFzIG9mZmxpbmUgYW5kIGRlZ3JhZGVkLgorICovCisjZGVmaW5l IFpQT09MX0NPTkZJR19PRkZMSU5FICAgICAgICAgICAgIm9mZmxpbmUiCisjZGVmaW5lIFpQT09M X0NPTkZJR19GQVVMVEVEICAgICAgICAgICAgImZhdWx0ZWQiCisjZGVmaW5lIFpQT09MX0NPTkZJ R19ERUdSQURFRCAgICAgICAgICAgImRlZ3JhZGVkIgorI2RlZmluZSBaUE9PTF9DT05GSUdfUkVN T1ZFRCAgICAgICAgICAgICJyZW1vdmVkIgorCiAjZGVmaW5lCVZERVZfVFlQRV9ST09UCQkJInJv b3QiCiAjZGVmaW5lCVZERVZfVFlQRV9NSVJST1IJCSJtaXJyb3IiCiAjZGVmaW5lCVZERVZfVFlQ RV9SRVBMQUNJTkcJCSJyZXBsYWNpbmciCkBAIC01ODgsNyArNTk3LDkgQEAKIAlWREVWX1NUQVRF X1VOS05PV04gPSAwLAkvKiBVbmluaXRpYWxpemVkIHZkZXYJCQkqLwogCVZERVZfU1RBVEVfQ0xP U0VELAkvKiBOb3QgY3VycmVudGx5IG9wZW4JCQkqLwogCVZERVZfU1RBVEVfT0ZGTElORSwJLyog Tm90IGFsbG93ZWQgdG8gb3BlbgkJCSovCisgICAgICAgIFZERVZfU1RBVEVfUkVNT1ZFRCwJLyog RXhwbGljaXRseSByZW1vdmVkIGZyb20gc3lzdGVtCSovCiAJVkRFVl9TVEFURV9DQU5UX09QRU4s CS8qIFRyaWVkIHRvIG9wZW4sIGJ1dCBmYWlsZWQJCSovCisgICAgICAgIFZERVZfU1RBVEVfRkFV TFRFRCwJLyogRXh0ZXJuYWwgcmVxdWVzdCB0byBmYXVsdCBkZXZpY2UJKi8KIAlWREVWX1NUQVRF X0RFR1JBREVELAkvKiBSZXBsaWNhdGVkIHZkZXYgd2l0aCB1bmhlYWx0aHkga2lkcwkqLwogCVZE RVZfU1RBVEVfSEVBTFRIWQkvKiBQcmVzdW1lZCBnb29kCQkJKi8KIH0gdmRldl9zdGF0ZV90Owot LS0gL3N5cy9ib290L3pmcy96ZnNpbXBsLmMuT1JJRwkyMDA5LTExLTIxIDA3OjAyOjM1LjAwMDAw MDAwMCAtMDgwMAorKysgL3N5cy9ib290L3pmcy96ZnNpbXBsLmMJMjAwOS0xMi0wNyAxNDozNjoy MC4wMDAwMDAwMDAgLTA4MDAKQEAgLTQwNCw3ICs0MDQsNyBAQAogfQogCiBzdGF0aWMgaW50Ci12 ZGV2X2luaXRfZnJvbV9udmxpc3QoY29uc3QgdW5zaWduZWQgY2hhciAqbnZsaXN0LCB2ZGV2X3Qg Kip2ZGV2cCkKK3ZkZXZfaW5pdF9mcm9tX252bGlzdChjb25zdCB1bnNpZ25lZCBjaGFyICpudmxp c3QsIHZkZXZfdCAqKnZkZXZwLCBpbnQgaXNfbmV3ZXIpCiB7CiAJaW50IHJjOwogCXVpbnQ2NF90 IGd1aWQsIGlkLCBhc2hpZnQsIG5wYXJpdHk7CkBAIC00MTIsNyArNDEyLDggQEAKIAljb25zdCBj aGFyICpwYXRoOwogCXZkZXZfdCAqdmRldiwgKmtpZDsKIAljb25zdCB1bnNpZ25lZCBjaGFyICpr aWRzOwotCWludCBua2lkcywgaTsKKwlpbnQgbmtpZHMsIGksIGlzX25ldzsKKwl1aW50NjRfdCBp c19vZmZsaW5lLCBpc19mYXVsdGVkLCBpc19kZWdyYWRlZCwgaXNfcmVtb3ZlZDsKIAogCWlmIChu dmxpc3RfZmluZChudmxpc3QsIFpQT09MX0NPTkZJR19HVUlELAogCQkJREFUQV9UWVBFX1VJTlQ2 NCwgMCwgJmd1aWQpCkBAIC00MjQsMTcgKzQyNSw2IEBACiAJCXJldHVybiAoRU5PRU5UKTsKIAl9 CiAKLQkvKgotCSAqIEFzc3VtZSB0aGF0IGlmIHdlJ3ZlIHNlZW4gdGhpcyB2ZGV2IHRyZWUgYmVm b3JlLCB0aGlzIG9uZQotCSAqIHdpbGwgYmUgaWRlbnRpY2FsLgotCSAqLwotCXZkZXYgPSB2ZGV2 X2ZpbmQoZ3VpZCk7Ci0JaWYgKHZkZXYpIHsKLQkJaWYgKHZkZXZwKQotCQkJKnZkZXZwID0gdmRl djsKLQkJcmV0dXJuICgwKTsKLQl9Ci0KIAlpZiAoc3RyY21wKHR5cGUsIFZERVZfVFlQRV9NSVJS T1IpCiAJICAgICYmIHN0cmNtcCh0eXBlLCBWREVWX1RZUEVfRElTSykKIAkgICAgJiYgc3RyY21w KHR5cGUsIFZERVZfVFlQRV9SQUlEWikpIHsKQEAgLTQ0Miw0NCArNDMyLDk1IEBACiAJCXJldHVy biAoRUlPKTsKIAl9CiAKLQlpZiAoIXN0cmNtcCh0eXBlLCBWREVWX1RZUEVfTUlSUk9SKSkKLQkJ dmRldiA9IHZkZXZfY3JlYXRlKGd1aWQsIHZkZXZfbWlycm9yX3JlYWQpOwotCWVsc2UgaWYgKCFz dHJjbXAodHlwZSwgVkRFVl9UWVBFX1JBSURaKSkKLQkJdmRldiA9IHZkZXZfY3JlYXRlKGd1aWQs IHZkZXZfcmFpZHpfcmVhZCk7Ci0JZWxzZQotCQl2ZGV2ID0gdmRldl9jcmVhdGUoZ3VpZCwgdmRl dl9kaXNrX3JlYWQpOworCWlzX29mZmxpbmUgPSBpc19yZW1vdmVkID0gaXNfZmF1bHRlZCA9IGlz X2RlZ3JhZGVkID0gMDsKKworCW52bGlzdF9maW5kKG52bGlzdCwgWlBPT0xfQ09ORklHX09GRkxJ TkUsIERBVEFfVFlQRV9VSU5UNjQsIDAsCisJCQkmaXNfb2ZmbGluZSk7CisJbnZsaXN0X2ZpbmQo bnZsaXN0LCBaUE9PTF9DT05GSUdfUkVNT1ZFRCwgREFUQV9UWVBFX1VJTlQ2NCwgMCwKKwkJCSZp c19yZW1vdmVkKTsKKwludmxpc3RfZmluZChudmxpc3QsIFpQT09MX0NPTkZJR19GQVVMVEVELCBE QVRBX1RZUEVfVUlOVDY0LCAwLAorCQkJJmlzX2ZhdWx0ZWQpOworCW52bGlzdF9maW5kKG52bGlz dCwgWlBPT0xfQ09ORklHX0RFR1JBREVELCBEQVRBX1RZUEVfVUlOVDY0LCAwLAorCQkJJmlzX2Rl Z3JhZGVkKTsKKworCXZkZXYgPSB2ZGV2X2ZpbmQoZ3VpZCk7CisJaWYgKCF2ZGV2KSB7CisKKwkJ aXNfbmV3ID0gMTsKKworCQlpZiAoIXN0cmNtcCh0eXBlLCBWREVWX1RZUEVfTUlSUk9SKSkKKwkJ CXZkZXYgPSB2ZGV2X2NyZWF0ZShndWlkLCB2ZGV2X21pcnJvcl9yZWFkKTsKKwkJZWxzZSBpZiAo IXN0cmNtcCh0eXBlLCBWREVWX1RZUEVfUkFJRFopKQorCQkJdmRldiA9IHZkZXZfY3JlYXRlKGd1 aWQsIHZkZXZfcmFpZHpfcmVhZCk7CisJCWVsc2UKKwkJCXZkZXYgPSB2ZGV2X2NyZWF0ZShndWlk LCB2ZGV2X2Rpc2tfcmVhZCk7CisKKwkJdmRldi0+dl9pZCA9IGlkOworCQlpZiAobnZsaXN0X2Zp bmQobnZsaXN0LCBaUE9PTF9DT05GSUdfQVNISUZULAorCQkJREFUQV9UWVBFX1VJTlQ2NCwgMCwg JmFzaGlmdCkgPT0gMCkKKwkJCXZkZXYtPnZfYXNoaWZ0ID0gYXNoaWZ0OworCQllbHNlCisJCQl2 ZGV2LT52X2FzaGlmdCA9IDA7CisJCWlmIChudmxpc3RfZmluZChudmxpc3QsIFpQT09MX0NPTkZJ R19OUEFSSVRZLAorCQkJREFUQV9UWVBFX1VJTlQ2NCwgMCwgJm5wYXJpdHkpID09IDApCisJCQl2 ZGV2LT52X25wYXJpdHkgPSBucGFyaXR5OworCQllbHNlCisJCQl2ZGV2LT52X25wYXJpdHkgPSAw OworCQlpZiAobnZsaXN0X2ZpbmQobnZsaXN0LCBaUE9PTF9DT05GSUdfUEFUSCwKKwkJCQlEQVRB X1RZUEVfU1RSSU5HLCAwLCAmcGF0aCkgPT0gMCkgeworCQkJaWYgKHN0cmxlbihwYXRoKSA+IDUK KwkJCSAgICAmJiBwYXRoWzBdID09ICcvJworCQkJICAgICYmIHBhdGhbMV0gPT0gJ2QnCisJCQkg ICAgJiYgcGF0aFsyXSA9PSAnZScKKwkJCSAgICAmJiBwYXRoWzNdID09ICd2JworCQkJICAgICYm IHBhdGhbNF0gPT0gJy8nKQorCQkJCXBhdGggKz0gNTsKKwkJCXZkZXYtPnZfbmFtZSA9IHN0cmR1 cChwYXRoKTsKKwkJfSBlbHNlIHsKKwkJCWlmICghc3RyY21wKHR5cGUsICJyYWlkeiIpKSB7CisJ CQkJaWYgKHZkZXYtPnZfbnBhcml0eSA9PSAxKQorCQkJCQl2ZGV2LT52X25hbWUgPSAicmFpZHox IjsKKwkJCQllbHNlCisJCQkJCXZkZXYtPnZfbmFtZSA9ICJyYWlkejIiOworCQkJfSBlbHNlIHsK KwkJCQl2ZGV2LT52X25hbWUgPSBzdHJkdXAodHlwZSk7CisJCQl9CisJCX0KKworCQlpZiAoaXNf b2ZmbGluZSkKKwkJCXZkZXYtPnZfc3RhdGUgPSBWREVWX1NUQVRFX09GRkxJTkU7CisJCWVsc2Ug aWYgKGlzX3JlbW92ZWQpCisJCQl2ZGV2LT52X3N0YXRlID0gVkRFVl9TVEFURV9SRU1PVkVEOwor CQllbHNlIGlmIChpc19mYXVsdGVkKQorCQkJdmRldi0+dl9zdGF0ZSA9IFZERVZfU1RBVEVfRkFV TFRFRDsKKwkJZWxzZSBpZiAoaXNfZGVncmFkZWQpCisJCQl2ZGV2LT52X3N0YXRlID0gVkRFVl9T VEFURV9ERUdSQURFRDsKKwkJZWxzZQorCQkJdmRldi0+dl9zdGF0ZSA9IFZERVZfU1RBVEVfSEVB TFRIWTsKIAotCXZkZXYtPnZfaWQgPSBpZDsKLQlpZiAobnZsaXN0X2ZpbmQobnZsaXN0LCBaUE9P TF9DT05GSUdfQVNISUZULAotCQlEQVRBX1RZUEVfVUlOVDY0LCAwLCAmYXNoaWZ0KSA9PSAwKQot CQl2ZGV2LT52X2FzaGlmdCA9IGFzaGlmdDsKLQllbHNlCi0JCXZkZXYtPnZfYXNoaWZ0ID0gMDsK LQlpZiAobnZsaXN0X2ZpbmQobnZsaXN0LCBaUE9PTF9DT05GSUdfTlBBUklUWSwKLQkJREFUQV9U WVBFX1VJTlQ2NCwgMCwgJm5wYXJpdHkpID09IDApCi0JCXZkZXYtPnZfbnBhcml0eSA9IG5wYXJp dHk7Ci0JZWxzZQotCQl2ZGV2LT52X25wYXJpdHkgPSAwOwotCWlmIChudmxpc3RfZmluZChudmxp c3QsIFpQT09MX0NPTkZJR19QQVRILAotCQkJREFUQV9UWVBFX1NUUklORywgMCwgJnBhdGgpID09 IDApIHsKLQkJaWYgKHN0cmxlbihwYXRoKSA+IDUKLQkJICAgICYmIHBhdGhbMF0gPT0gJy8nCi0J CSAgICAmJiBwYXRoWzFdID09ICdkJwotCQkgICAgJiYgcGF0aFsyXSA9PSAnZScKLQkJICAgICYm IHBhdGhbM10gPT0gJ3YnCi0JCSAgICAmJiBwYXRoWzRdID09ICcvJykKLQkJCXBhdGggKz0gNTsK LQkJdmRldi0+dl9uYW1lID0gc3RyZHVwKHBhdGgpOwogCX0gZWxzZSB7Ci0JCWlmICghc3RyY21w KHR5cGUsICJyYWlkeiIpKSB7Ci0JCQlpZiAodmRldi0+dl9ucGFyaXR5ID09IDEpCi0JCQkJdmRl di0+dl9uYW1lID0gInJhaWR6MSI7CisKKwkJaXNfbmV3ID0gMDsKKworCQlpZiAoaXNfbmV3ZXIp IHsKKworCQkJLyogV2UndmUgYWxyZWFkeSBzZWVuIHRoaXMgdmRldiwgYnV0IGZyb20gYW4gb2xk ZXIKKwkJCSAqIHZkZXYgbGFiZWwsIHNvIGxldCdzIHJlZnJlc2ggaXRzIHN0YXRlIGZyb20gdGhl CisJCQkgKiBuZXdlciBsYWJlbC4gKi8KKworCQkJaWYgKGlzX29mZmxpbmUpCisJCQkJdmRldi0+ dl9zdGF0ZSA9IFZERVZfU1RBVEVfT0ZGTElORTsKKwkJCWVsc2UgaWYgKGlzX3JlbW92ZWQpCisJ CQkJdmRldi0+dl9zdGF0ZSA9IFZERVZfU1RBVEVfUkVNT1ZFRDsKKwkJCWVsc2UgaWYgKGlzX2Zh dWx0ZWQpCisJCQkJdmRldi0+dl9zdGF0ZSA9IFZERVZfU1RBVEVfRkFVTFRFRDsKKwkJCWVsc2Ug aWYgKGlzX2RlZ3JhZGVkKQorCQkJCXZkZXYtPnZfc3RhdGUgPSBWREVWX1NUQVRFX0RFR1JBREVE OwogCQkJZWxzZQotCQkJCXZkZXYtPnZfbmFtZSA9ICJyYWlkejIiOwotCQl9IGVsc2UgewotCQkJ dmRldi0+dl9uYW1lID0gc3RyZHVwKHR5cGUpOworCQkJCXZkZXYtPnZfc3RhdGUgPSBWREVWX1NU QVRFX0hFQUxUSFk7CiAJCX0KIAl9CisKIAlyYyA9IG52bGlzdF9maW5kKG52bGlzdCwgWlBPT0xf Q09ORklHX0NISUxEUkVOLAogCQkJIERBVEFfVFlQRV9OVkxJU1RfQVJSQVksICZua2lkcywgJmtp ZHMpOwogCS8qCkBAIC00ODgsMTAgKzUyOSwxMiBAQAogCWlmIChyYyA9PSAwKSB7CiAJCXZkZXYt PnZfbmNoaWxkcmVuID0gbmtpZHM7CiAJCWZvciAoaSA9IDA7IGkgPCBua2lkczsgaSsrKSB7Ci0J CQlyYyA9IHZkZXZfaW5pdF9mcm9tX252bGlzdChraWRzLCAma2lkKTsKKwkJCXJjID0gdmRldl9p bml0X2Zyb21fbnZsaXN0KGtpZHMsICZraWQsIGlzX25ld2VyKTsKIAkJCWlmIChyYykKIAkJCQly ZXR1cm4gKHJjKTsKLQkJCVNUQUlMUV9JTlNFUlRfVEFJTCgmdmRldi0+dl9jaGlsZHJlbiwga2lk LCB2X2NoaWxkbGluayk7CisJCQlpZiAoaXNfbmV3KQorCQkJCVNUQUlMUV9JTlNFUlRfVEFJTCgm dmRldi0+dl9jaGlsZHJlbiwga2lkLAorCQkJCQkJICAgdl9jaGlsZGxpbmspOwogCQkJa2lkcyA9 IG52bGlzdF9uZXh0KGtpZHMpOwogCQl9CiAJfSBlbHNlIHsKQEAgLTU5Myw3ICs2MzYsOSBAQAog CQkiVU5LTk9XTiIsCiAJCSJDTE9TRUQiLAogCQkiT0ZGTElORSIsCisJCSJSRU1PVkVEIiwKIAkJ IkNBTlRfT1BFTiIsCisJCSJGQVVMVEVEIiwKIAkJIkRFR1JBREVEIiwKIAkJIk9OTElORSIKIAl9 OwpAQCAtNzExLDcgKzc1Niw3IEBACiAJdWludDY0X3QgcG9vbF90eGcsIHBvb2xfZ3VpZDsKIAlj b25zdCBjaGFyICpwb29sX25hbWU7CiAJY29uc3QgdW5zaWduZWQgY2hhciAqdmRldnM7Ci0JaW50 IGksIHJjOworCWludCBpLCByYywgaXNfbmV3ZXI7CiAJY2hhciB1cGJ1ZlsxMDI0XTsKIAljb25z dCBzdHJ1Y3QgdWJlcmJsb2NrICp1cDsKIApAQCAtNzkzLDEyICs4MzgsMTUgQEAKIAkJc3BhID0g c3BhX2NyZWF0ZShwb29sX2d1aWQpOwogCQlzcGEtPnNwYV9uYW1lID0gc3RyZHVwKHBvb2xfbmFt ZSk7CiAJfQotCWlmIChwb29sX3R4ZyA+IHNwYS0+c3BhX3R4ZykKKwlpZiAocG9vbF90eGcgPiBz cGEtPnNwYV90eGcpIHsKIAkJc3BhLT5zcGFfdHhnID0gcG9vbF90eGc7CisJCWlzX25ld2VyID0g MTsKKwl9IGVsc2UKKwkJaXNfbmV3ZXIgPSAwOwogCiAJLyoKIAkgKiBHZXQgdGhlIHZkZXYgdHJl ZSBhbmQgY3JlYXRlIG91ciBpbi1jb3JlIGNvcHkgb2YgaXQuCi0JICogSWYgd2UgYWxyZWFkeSBo YXZlIGEgaGVhbHRoeSB2ZGV2IHdpdGggdGhpcyBndWlkLCB0aGlzIG11c3QKKwkgKiBJZiB3ZSBh bHJlYWR5IGhhdmUgYSB2ZGV2IHdpdGggdGhpcyBndWlkLCB0aGlzIG11c3QKIAkgKiBiZSBzb21l IGtpbmQgb2YgYWxpYXMgKG92ZXJsYXBwaW5nIHNsaWNlcywgZGFuZ2Vyb3VzbHkgZGVkaWNhdGVk CiAJICogZGlza3MgZXRjKS4KIAkgKi8KQEAgLTgwOCwxNiArODU2LDE2IEBACiAJCXJldHVybiAo RUlPKTsKIAl9CiAJdmRldiA9IHZkZXZfZmluZChndWlkKTsKLQlpZiAodmRldiAmJiB2ZGV2LT52 X3N0YXRlID09IFZERVZfU1RBVEVfSEVBTFRIWSkgeworCWlmICh2ZGV2ICYmIHZkZXYtPnZfcGh5 c19yZWFkKQkvKiBIYXMgdGhpcyB2ZGV2IGFscmVhZHkgYmVlbiBpbml0ZWQ/ICovCiAJCXJldHVy biAoRUlPKTsKLQl9CiAKIAlpZiAobnZsaXN0X2ZpbmQobnZsaXN0LAogCQkJWlBPT0xfQ09ORklH X1ZERVZfVFJFRSwKIAkJCURBVEFfVFlQRV9OVkxJU1QsIDAsICZ2ZGV2cykpIHsKIAkJcmV0dXJu IChFSU8pOwogCX0KLQlyYyA9IHZkZXZfaW5pdF9mcm9tX252bGlzdCh2ZGV2cywgJnRvcF92ZGV2 KTsKKworCXJjID0gdmRldl9pbml0X2Zyb21fbnZsaXN0KHZkZXZzLCAmdG9wX3ZkZXYsIGlzX25l d2VyKTsKIAlpZiAocmMpCiAJCXJldHVybiAocmMpOwogCkBAIC04MzgsNyArODg2LDYgQEAKIAlp ZiAodmRldikgewogCQl2ZGV2LT52X3BoeXNfcmVhZCA9IHJlYWQ7CiAJCXZkZXYtPnZfcmVhZF9w cml2ID0gcmVhZF9wcml2OwotCQl2ZGV2LT52X3N0YXRlID0gVkRFVl9TVEFURV9IRUFMVEhZOwog CX0gZWxzZSB7CiAJCXByaW50ZigiWkZTOiBpbmNvbnNpc3RlbnQgbnZsaXN0IGNvbnRlbnRzXG4i KTsKIAkJcmV0dXJuIChFSU8pOwo= --001636e0ac8f5b2579047a2c611f--