From owner-freebsd-fs@FreeBSD.ORG Mon Dec 14 22:46:57 2009 Return-Path: Delivered-To: fs@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 7EB061065672; Mon, 14 Dec 2009 22:46:57 +0000 (UTC) (envelope-from mattjreimer@gmail.com) Received: from mail-yw0-f172.google.com (mail-yw0-f172.google.com [209.85.211.172]) by mx1.freebsd.org (Postfix) with ESMTP id 1CDCF8FC08; Mon, 14 Dec 2009 22:46:56 +0000 (UTC) Received: by ywh2 with SMTP id 2so3580630ywh.27 for ; Mon, 14 Dec 2009 14:46:56 -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:cc:content-type; bh=wzi18B0FmDr4huMC3VxRporfp1CrVD/VWgUlO5Q/wZk=; b=fP1Xa1hYWzBDeqsXWJ/Q8RlStgGV8jQBGl/cOb3CZ4wz1XqmgikKcn+Vy0nwACeUwq oZwxbZn5FR2Tc80NBqx6MGQsTll4aWK00yKK0NopjUqRjOvdwZqDF+30sZbAETls06Pz iDCJZ5C8DOfjStARjqSKWpewahARgE6302E7g= DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=mime-version:date:message-id:subject:from:to:cc:content-type; b=bMCs8MdtxaocoSFfPJe3WjONaeLX6TjEXUx8o7yyQI102NWOWzHskQUwCixPDAJEO5 nvWwZkhf7xrBA6PxTKaad67Z7em+Vjnp9i7kZkMAjfJU7UmScx9QzHz3WBCkBXa/R/sg dXUAN9EkYIFUpo75mnw+aJhWbxE+lbbFuY7c0= MIME-Version: 1.0 Received: by 10.151.131.2 with SMTP id i2mr8359508ybn.56.1260830816488; Mon, 14 Dec 2009 14:46:56 -0800 (PST) Date: Mon, 14 Dec 2009 14:46:56 -0800 Message-ID: From: Matt Reimer To: fs@freebsd.org Content-Type: multipart/mixed; boundary=00504502ba97f04f22047ab80c11 Cc: Pawel Jakub Dawidek Subject: PATCH: teach (gpt)zfsboot, zfsloader 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: Mon, 14 Dec 2009 22:46:57 -0000 --00504502ba97f04f22047ab80c11 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. I've attached correct-status-nowhitespace.patch to make review easier.) --00504502ba97f04f22047ab80c11 Content-Type: application/octet-stream; name="correct-status.patch" Content-Disposition: attachment; filename="correct-status.patch" Content-Transfer-Encoding: base64 X-Attachment-Id: f_g37u1j5r0 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= --00504502ba97f04f22047ab80c11 Content-Type: application/octet-stream; name="correct-status-nowhitespace.patch" Content-Disposition: attachment; filename="correct-status-nowhitespace.patch" Content-Transfer-Encoding: base64 X-Attachment-Id: f_g37u3wsw1 LS0tIHpmcy96ZnNpbXBsLmMuT1JJRwkyMDA5LTExLTIxIDE1OjAyOjM1LjAwMDAwMDAwMCArMDAw MAorKysgemZzL3pmc2ltcGwuYwkyMDA5LTEyLTExIDEyOjI2OjM4Ljc0NTk1NDI5NyArMDAwMApA QCAtNTEsNyArNTEsNyBAQAogc3RhdGljIGNoYXIgKnphcF9zY3JhdGNoOwogc3RhdGljIGNoYXIg Knpmc190ZW1wX2J1ZiwgKnpmc190ZW1wX2VuZCwgKnpmc190ZW1wX3B0cjsKIAotI2RlZmluZSBU RU1QX1NJWkUJKDEqU1BBX01BWEJMT0NLU0laRSkKKyNkZWZpbmUgVEVNUF9TSVpFCSgxMDI0ICog MTAyNCkKIAogc3RhdGljIGludCB6aW9fcmVhZChzcGFfdCAqc3BhLCBjb25zdCBibGtwdHJfdCAq YnAsIHZvaWQgKmJ1Zik7CiAKQEAgLTQwNCw3ICs0MDQsNyBAQAogfQogCiBzdGF0aWMgaW50Ci12 ZGV2X2luaXRfZnJvbV9udmxpc3QoY29uc3QgdW5zaWduZWQgY2hhciAqbnZsaXN0LCB2ZGV2X3Qg Kip2ZGV2cCkKK3ZkZXZfaW5pdF9mcm9tX252bGlzdChjb25zdCB1bnNpZ25lZCBjaGFyICpudmxp c3QsIHZkZXZfdCAqKnZkZXZwLCBpbnQgaXNfbmV3ZXIpCiB7CiAJaW50IHJjOwogCXVpbnQ2NF90 IGd1aWQsIGlkLCBhc2hpZnQsIG5wYXJpdHk7CkBAIC00MTIsNyArNDEyLDggQEAKIAljb25zdCBj aGFyICpwYXRoOwogCXZkZXZfdCAqdmRldiwgKmtpZDsKIAljb25zdCB1bnNpZ25lZCBjaGFyICpr aWRzOwotCWludCBua2lkcywgaTsKKwlpbnQgbmtpZHMsIGksIGlzX25ldzsKKwl1aW50NjRfdCBp c19vZmZsaW5lLCBpc19mYXVsdGVkLCBpc19kZWdyYWRlZCwgaXNfcmVtb3ZlZDsKIAogCWlmIChu dmxpc3RfZmluZChudmxpc3QsIFpQT09MX0NPTkZJR19HVUlELAogCQkJREFUQV9UWVBFX1VJTlQ2 NCwgMCwgJmd1aWQpCkBAIC00MjQsMTcgKzQyNSw2IEBACiAJCXJldHVybiAoRU5PRU5UKTsKIAl9 CiAKLQkvKgotCSAqIEFzc3VtZSB0aGF0IGlmIHdlJ3ZlIHNlZW4gdGhpcyB2ZGV2IHRyZWUgYmVm b3JlLCB0aGlzIG9uZQotCSAqIHdpbGwgYmUgaWRlbnRpY2FsLgotCSAqLwotCXZkZXYgPSB2ZGV2 X2ZpbmQoZ3VpZCk7Ci0JaWYgKHZkZXYpIHsKLQkJaWYgKHZkZXZwKQotCQkJKnZkZXZwID0gdmRl djsKLQkJcmV0dXJuICgwKTsKLQl9Ci0KIAlpZiAoc3RyY21wKHR5cGUsIFZERVZfVFlQRV9NSVJS T1IpCiAJICAgICYmIHN0cmNtcCh0eXBlLCBWREVWX1RZUEVfRElTSykKIAkgICAgJiYgc3RyY21w KHR5cGUsIFZERVZfVFlQRV9SQUlEWikpIHsKQEAgLTQ0Miw2ICs0MzIsMjIgQEAKIAkJcmV0dXJu IChFSU8pOwogCX0KIAorCWlzX29mZmxpbmUgPSBpc19yZW1vdmVkID0gaXNfZmF1bHRlZCA9IGlz X2RlZ3JhZGVkID0gMDsKKworCW52bGlzdF9maW5kKG52bGlzdCwgWlBPT0xfQ09ORklHX09GRkxJ TkUsIERBVEFfVFlQRV9VSU5UNjQsIDAsCisJCQkmaXNfb2ZmbGluZSk7CisJbnZsaXN0X2ZpbmQo bnZsaXN0LCBaUE9PTF9DT05GSUdfUkVNT1ZFRCwgREFUQV9UWVBFX1VJTlQ2NCwgMCwKKwkJCSZp c19yZW1vdmVkKTsKKwludmxpc3RfZmluZChudmxpc3QsIFpQT09MX0NPTkZJR19GQVVMVEVELCBE QVRBX1RZUEVfVUlOVDY0LCAwLAorCQkJJmlzX2ZhdWx0ZWQpOworCW52bGlzdF9maW5kKG52bGlz dCwgWlBPT0xfQ09ORklHX0RFR1JBREVELCBEQVRBX1RZUEVfVUlOVDY0LCAwLAorCQkJJmlzX2Rl Z3JhZGVkKTsKKworCXZkZXYgPSB2ZGV2X2ZpbmQoZ3VpZCk7CisJaWYgKCF2ZGV2KSB7CisKKwkJ aXNfbmV3ID0gMTsKKwogCWlmICghc3RyY21wKHR5cGUsIFZERVZfVFlQRV9NSVJST1IpKQogCQl2 ZGV2ID0gdmRldl9jcmVhdGUoZ3VpZCwgdmRldl9taXJyb3JfcmVhZCk7CiAJZWxzZSBpZiAoIXN0 cmNtcCh0eXBlLCBWREVWX1RZUEVfUkFJRFopKQpAQCAtNDgwLDYgKzQ4Niw0MSBAQAogCQkJdmRl di0+dl9uYW1lID0gc3RyZHVwKHR5cGUpOwogCQl9CiAJfQorCisJCWlmIChpc19vZmZsaW5lKQor CQkJdmRldi0+dl9zdGF0ZSA9IFZERVZfU1RBVEVfT0ZGTElORTsKKwkJZWxzZSBpZiAoaXNfcmVt b3ZlZCkKKwkJCXZkZXYtPnZfc3RhdGUgPSBWREVWX1NUQVRFX1JFTU9WRUQ7CisJCWVsc2UgaWYg KGlzX2ZhdWx0ZWQpCisJCQl2ZGV2LT52X3N0YXRlID0gVkRFVl9TVEFURV9GQVVMVEVEOworCQll bHNlIGlmIChpc19kZWdyYWRlZCkKKwkJCXZkZXYtPnZfc3RhdGUgPSBWREVWX1NUQVRFX0RFR1JB REVEOworCQllbHNlCisJCQl2ZGV2LT52X3N0YXRlID0gVkRFVl9TVEFURV9IRUFMVEhZOworCisJ fSBlbHNlIHsKKworCQlpc19uZXcgPSAwOworCisJCWlmIChpc19uZXdlcikgeworCisJCQkvKiBX ZSd2ZSBhbHJlYWR5IHNlZW4gdGhpcyB2ZGV2LCBidXQgZnJvbSBhbiBvbGRlcgorCQkJICogdmRl diBsYWJlbCwgc28gbGV0J3MgcmVmcmVzaCBpdHMgc3RhdGUgZnJvbSB0aGUKKwkJCSAqIG5ld2Vy IGxhYmVsLiAqLworCisJCQlpZiAoaXNfb2ZmbGluZSkKKwkJCQl2ZGV2LT52X3N0YXRlID0gVkRF Vl9TVEFURV9PRkZMSU5FOworCQkJZWxzZSBpZiAoaXNfcmVtb3ZlZCkKKwkJCQl2ZGV2LT52X3N0 YXRlID0gVkRFVl9TVEFURV9SRU1PVkVEOworCQkJZWxzZSBpZiAoaXNfZmF1bHRlZCkKKwkJCQl2 ZGV2LT52X3N0YXRlID0gVkRFVl9TVEFURV9GQVVMVEVEOworCQkJZWxzZSBpZiAoaXNfZGVncmFk ZWQpCisJCQkJdmRldi0+dl9zdGF0ZSA9IFZERVZfU1RBVEVfREVHUkFERUQ7CisJCQllbHNlCisJ CQkJdmRldi0+dl9zdGF0ZSA9IFZERVZfU1RBVEVfSEVBTFRIWTsKKwkJfQorCX0KKwogCXJjID0g bnZsaXN0X2ZpbmQobnZsaXN0LCBaUE9PTF9DT05GSUdfQ0hJTERSRU4sCiAJCQkgREFUQV9UWVBF X05WTElTVF9BUlJBWSwgJm5raWRzLCAma2lkcyk7CiAJLyoKQEAgLTQ4OCwxMCArNTI5LDEyIEBA CiAJaWYgKHJjID09IDApIHsKIAkJdmRldi0+dl9uY2hpbGRyZW4gPSBua2lkczsKIAkJZm9yIChp ID0gMDsgaSA8IG5raWRzOyBpKyspIHsKLQkJCXJjID0gdmRldl9pbml0X2Zyb21fbnZsaXN0KGtp ZHMsICZraWQpOworCQkJcmMgPSB2ZGV2X2luaXRfZnJvbV9udmxpc3Qoa2lkcywgJmtpZCwgaXNf bmV3ZXIpOwogCQkJaWYgKHJjKQogCQkJCXJldHVybiAocmMpOwotCQkJU1RBSUxRX0lOU0VSVF9U QUlMKCZ2ZGV2LT52X2NoaWxkcmVuLCBraWQsIHZfY2hpbGRsaW5rKTsKKwkJCWlmIChpc19uZXcp CisJCQkJU1RBSUxRX0lOU0VSVF9UQUlMKCZ2ZGV2LT52X2NoaWxkcmVuLCBraWQsCisJCQkJCQkg ICB2X2NoaWxkbGluayk7CiAJCQlraWRzID0gbnZsaXN0X25leHQoa2lkcyk7CiAJCX0KIAl9IGVs c2UgewpAQCAtNTkzLDcgKzYzNiw5IEBACiAJCSJVTktOT1dOIiwKIAkJIkNMT1NFRCIsCiAJCSJP RkZMSU5FIiwKKwkJIlJFTU9WRUQiLAogCQkiQ0FOVF9PUEVOIiwKKwkJIkZBVUxURUQiLAogCQki REVHUkFERUQiLAogCQkiT05MSU5FIgogCX07CkBAIC03MTEsNyArNzU2LDcgQEAKIAl1aW50NjRf dCBwb29sX3R4ZywgcG9vbF9ndWlkOwogCWNvbnN0IGNoYXIgKnBvb2xfbmFtZTsKIAljb25zdCB1 bnNpZ25lZCBjaGFyICp2ZGV2czsKLQlpbnQgaSwgcmM7CisJaW50IGksIHJjLCBpc19uZXdlcjsK IAljaGFyIHVwYnVmWzEwMjRdOwogCWNvbnN0IHN0cnVjdCB1YmVyYmxvY2sgKnVwOwogCkBAIC03 OTMsMTIgKzgzOCwxNSBAQAogCQlzcGEgPSBzcGFfY3JlYXRlKHBvb2xfZ3VpZCk7CiAJCXNwYS0+ c3BhX25hbWUgPSBzdHJkdXAocG9vbF9uYW1lKTsKIAl9Ci0JaWYgKHBvb2xfdHhnID4gc3BhLT5z cGFfdHhnKQorCWlmIChwb29sX3R4ZyA+IHNwYS0+c3BhX3R4ZykgewogCQlzcGEtPnNwYV90eGcg PSBwb29sX3R4ZzsKKwkJaXNfbmV3ZXIgPSAxOworCX0gZWxzZQorCQlpc19uZXdlciA9IDA7CiAK IAkvKgogCSAqIEdldCB0aGUgdmRldiB0cmVlIGFuZCBjcmVhdGUgb3VyIGluLWNvcmUgY29weSBv ZiBpdC4KLQkgKiBJZiB3ZSBhbHJlYWR5IGhhdmUgYSBoZWFsdGh5IHZkZXYgd2l0aCB0aGlzIGd1 aWQsIHRoaXMgbXVzdAorCSAqIElmIHdlIGFscmVhZHkgaGF2ZSBhIHZkZXYgd2l0aCB0aGlzIGd1 aWQsIHRoaXMgbXVzdAogCSAqIGJlIHNvbWUga2luZCBvZiBhbGlhcyAob3ZlcmxhcHBpbmcgc2xp Y2VzLCBkYW5nZXJvdXNseSBkZWRpY2F0ZWQKIAkgKiBkaXNrcyBldGMpLgogCSAqLwpAQCAtODA4 LDE2ICs4NTYsMTYgQEAKIAkJcmV0dXJuIChFSU8pOwogCX0KIAl2ZGV2ID0gdmRldl9maW5kKGd1 aWQpOwotCWlmICh2ZGV2ICYmIHZkZXYtPnZfc3RhdGUgPT0gVkRFVl9TVEFURV9IRUFMVEhZKSB7 CisJaWYgKHZkZXYgJiYgdmRldi0+dl9waHlzX3JlYWQpCS8qIEhhcyB0aGlzIHZkZXYgYWxyZWFk eSBiZWVuIGluaXRlZD8gKi8KIAkJcmV0dXJuIChFSU8pOwotCX0KIAogCWlmIChudmxpc3RfZmlu ZChudmxpc3QsCiAJCQlaUE9PTF9DT05GSUdfVkRFVl9UUkVFLAogCQkJREFUQV9UWVBFX05WTElT VCwgMCwgJnZkZXZzKSkgewogCQlyZXR1cm4gKEVJTyk7CiAJfQotCXJjID0gdmRldl9pbml0X2Zy b21fbnZsaXN0KHZkZXZzLCAmdG9wX3ZkZXYpOworCisJcmMgPSB2ZGV2X2luaXRfZnJvbV9udmxp c3QodmRldnMsICZ0b3BfdmRldiwgaXNfbmV3ZXIpOwogCWlmIChyYykKIAkJcmV0dXJuIChyYyk7 CiAKQEAgLTgzOCw3ICs4ODYsNiBAQAogCWlmICh2ZGV2KSB7CiAJCXZkZXYtPnZfcGh5c19yZWFk ID0gcmVhZDsKIAkJdmRldi0+dl9yZWFkX3ByaXYgPSByZWFkX3ByaXY7Ci0JCXZkZXYtPnZfc3Rh dGUgPSBWREVWX1NUQVRFX0hFQUxUSFk7CiAJfSBlbHNlIHsKIAkJcHJpbnRmKCJaRlM6IGluY29u c2lzdGVudCBudmxpc3QgY29udGVudHNcbiIpOwogCQlyZXR1cm4gKEVJTyk7Cg== --00504502ba97f04f22047ab80c11--