From owner-freebsd-fs@FreeBSD.ORG Fri Nov 21 03:20:24 2014 Return-Path: Delivered-To: freebsd-fs@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTPS id A9478494 for ; Fri, 21 Nov 2014 03:20:24 +0000 (UTC) Received: from esa-jnhn.mail.uoguelph.ca (esa-jnhn.mail.uoguelph.ca [131.104.91.44]) by mx1.freebsd.org (Postfix) with ESMTP id 4BD7AA77 for ; Fri, 21 Nov 2014 03:20:23 +0000 (UTC) X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: ArEEAHmublSDaFve/2dsb2JhbABahECDAs0MgxwCgRwBAQEBAX2ECSMEgRYZAgRVBohUrgWPS5ZiAQEBAQYBAQEBAQEBG5BUGSKCd4FUBYwbiF2LHIcJhFOJbIIAIIF5H4F4gQMBAQE X-IronPort-AV: E=Sophos;i="5.07,428,1413259200"; d="scan'208";a="170011465" Received: from muskoka.cs.uoguelph.ca (HELO zcs3.mail.uoguelph.ca) ([131.104.91.222]) by esa-jnhn.mail.uoguelph.ca with ESMTP; 20 Nov 2014 22:19:14 -0500 Received: from zcs3.mail.uoguelph.ca (localhost.localdomain [127.0.0.1]) by zcs3.mail.uoguelph.ca (Postfix) with ESMTP id C4AA7B409E for ; Thu, 20 Nov 2014 22:19:14 -0500 (EST) Date: Thu, 20 Nov 2014 22:19:14 -0500 (EST) From: Rick Macklem To: FreeBSD Filesystems Message-ID: <539201047.4538834.1416539954794.JavaMail.root@uoguelph.ca> In-Reply-To: <683927697.4538805.1416539949195.JavaMail.root@uoguelph.ca> Subject: RFC: patch to make d_fileno 64bits MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="----=_Part_4538832_801680899.1416539954793" X-Originating-IP: [172.17.91.203] X-Mailer: Zimbra 7.2.6_GA_2926 (ZimbraWebClient - FF3.0 (Win)/7.2.6_GA_2926) X-BeenThere: freebsd-fs@freebsd.org X-Mailman-Version: 2.1.18-1 Precedence: list List-Id: Filesystems List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 21 Nov 2014 03:20:24 -0000 ------=_Part_4538832_801680899.1416539954793 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit The attached patch covers the basics of a way to convert the d_fileno field of "struct dirent" to 64bits. This patch is incomplete and won't even build, but I thought I'd post it in case anyone wanted to take a look and comment on the approach it uses. - renames the old/current one "struct dirent32" - changes d_fileno to 64bits and adds a 64bit d_off field for the offset of the underlying file system - defines a new VOP_READDIR() that will return the new "struct dirent" that is used as the default one for a new getdirentries(2). - the old/current getdirentries(2) uses the old VOP_READDIR32() by default. For the case of a file system that supports both the new and old VOP_READDIR(), they are used by the corresponding new and old getdirentries(2) syscalls. For a file system that only supports one of the VOP_READDIR()s, the "struct dirent32" is copied to "struct dirent" (or vice versa). At this point, all file systems would support the old VOP_READDIR() and I think the new VOP_READDIR() can easily be added for NFS, ZFS. (OpenBSD already has UFS code for essentially a new struct dirent and hopefully that code could be ported easily, too.) Anyhow, any comments on this approach? rick ------=_Part_4538832_801680899.1416539954793 Content-Type: text/x-patch; name=fileno.patch Content-Disposition: attachment; filename=fileno.patch Content-Transfer-Encoding: base64 LS0tIHN5cy9kaXJlbnQuaC5zYXYJMjAxNC0xMC0yMyAxODoxMjo1OS4wMDAwMDAwMDAgLTA0MDAK KysrIHN5cy9kaXJlbnQuaAkyMDE0LTExLTE5IDE5OjEzOjEyLjAwMDAwMDAwMCAtMDUwMApAQCAt MzgsMTYgKzM4LDMxIEBACiAKIC8qCiAgKiBUaGUgZGlyZW50IHN0cnVjdHVyZSBkZWZpbmVzIHRo ZSBmb3JtYXQgb2YgZGlyZWN0b3J5IGVudHJpZXMgcmV0dXJuZWQgYnkKLSAqIHRoZSBnZXRkaXJl bnRyaWVzKDIpIHN5c3RlbSBjYWxsLgorICogdGhlIGdldGRpcmVudHJpZXMoMikgc3lzdGVtIGNh bGwgYW5kIGRpcmVudDMyIGZvciB0aGUgZ2V0ZGlyZW50cmllczMyKDIpCisgKiBzeXN0ZW0gY2Fs bC4KICAqCi0gKiBBIGRpcmVjdG9yeSBlbnRyeSBoYXMgYSBzdHJ1Y3QgZGlyZW50IGF0IHRoZSBm cm9udCBvZiBpdCwgY29udGFpbmluZyBpdHMKKyAqIEEgZGlyZWN0b3J5IGVudHJ5IGhhcyBhIHN0 cnVjdCBkaXJlbnQoMzIpIGF0IHRoZSBmcm9udCBvZiBpdCwgY29udGFpbmluZyBpdHMKICAqIGlu b2RlIG51bWJlciwgdGhlIGxlbmd0aCBvZiB0aGUgZW50cnksIGFuZCB0aGUgbGVuZ3RoIG9mIHRo ZSBuYW1lCi0gKiBjb250YWluZWQgaW4gdGhlIGVudHJ5LiAgVGhlc2UgYXJlIGZvbGxvd2VkIGJ5 IHRoZSBuYW1lIHBhZGRlZCB0byBhIDQKKyAqIGNvbnRhaW5lZCBpbiB0aGUgZW50cnkuICBUaGVz ZSBhcmUgZm9sbG93ZWQgYnkgdGhlIG5hbWUgcGFkZGVkIHRvIGEgOCg0KQogICogYnl0ZSBib3Vu ZGFyeSB3aXRoIG51bGwgYnl0ZXMuICBBbGwgbmFtZXMgYXJlIGd1YXJhbnRlZWQgbnVsbCB0ZXJt aW5hdGVkLgogICogVGhlIG1heGltdW0gbGVuZ3RoIG9mIGEgbmFtZSBpbiBhIGRpcmVjdG9yeSBp cyBNQVhOQU1MRU4uCiAgKi8KIAogc3RydWN0IGRpcmVudCB7CisJX191aW50NjRfdCBkX29mZjsJ CS8qIGRpciBvZmZzZXQgZm9yIG9uLWRpc2sgZGlyZWN0b3J5ICovCisJX191aW50NjRfdCBkX2Zp bGVubzsJCS8qIGZpbGUgbnVtYmVyIG9mIGVudHJ5ICovCisJX191aW50MTZfdCBkX3JlY2xlbjsJ CS8qIGxlbmd0aCBvZiB0aGlzIHJlY29yZCAqLworCV9fdWludDhfdCAgZF90eXBlOyAJCS8qIGZp bGUgdHlwZSwgc2VlIGJlbG93ICovCisJX191aW50OF90ICBkX25hbWxlbjsJCS8qIGxlbmd0aCBv ZiBzdHJpbmcgaW4gZF9uYW1lICovCisjaWYgX19CU0RfVklTSUJMRQorI2RlZmluZQlNQVhOQU1M RU4JMjU1CisJY2hhcglkX25hbWVbTUFYTkFNTEVOICsgMV07CS8qIG5hbWUgbXVzdCBiZSBubyBs b25nZXIgdGhhbiB0aGlzICovCisjZWxzZQorCWNoYXIJZF9uYW1lWzI1NSArIDFdOwkvKiBuYW1l IG11c3QgYmUgbm8gbG9uZ2VyIHRoYW4gdGhpcyAqLworI2VuZGlmCit9OworCitzdHJ1Y3QgZGly ZW50MzIgewogCV9fdWludDMyX3QgZF9maWxlbm87CQkvKiBmaWxlIG51bWJlciBvZiBlbnRyeSAq LwogCV9fdWludDE2X3QgZF9yZWNsZW47CQkvKiBsZW5ndGggb2YgdGhpcyByZWNvcmQgKi8KIAlf X3VpbnQ4X3QgIGRfdHlwZTsgCQkvKiBmaWxlIHR5cGUsIHNlZSBiZWxvdyAqLwpAQCAtODEsMjAg Kzk2LDI2IEBAIHN0cnVjdCBkaXJlbnQgewogI2RlZmluZQlEVFRPSUYoZGlydHlwZSkJKChkaXJ0 eXBlKSA8PCAxMikKIAogLyoKLSAqIFRoZSBfR0VORVJJQ19ESVJTSVogbWFjcm8gZ2l2ZXMgdGhl IG1pbmltdW0gcmVjb3JkIGxlbmd0aCB3aGljaCB3aWxsIGhvbGQKLSAqIHRoZSBkaXJlY3Rvcnkg ZW50cnkuICBUaGlzIHJldHVybnMgdGhlIGFtb3VudCBvZiBzcGFjZSBpbiBzdHJ1Y3QgZGlyZWN0 Ci0gKiB3aXRob3V0IHRoZSBkX25hbWUgZmllbGQsIHBsdXMgZW5vdWdoIHNwYWNlIGZvciB0aGUg bmFtZSB3aXRoIGEgdGVybWluYXRpbmcKLSAqIG51bGwgYnl0ZSAoZHAtPmRfbmFtbGVuKzEpLCBy b3VuZGVkIHVwIHRvIGEgNCBieXRlIGJvdW5kYXJ5LgorICogVGhlIF9HRU5FUklDX3h4eCBtYWNy b3MgZ2l2ZXMgdGhlIG1pbmltdW0gcmVjb3JkIGxlbmd0aCB3aGljaCB3aWxsCisgKiBob2xkIHRo ZSBkaXJlY3RvcnkgZW50cnkuICBUaGV5IHJldHVybiB0aGUgYW1vdW50IG9mIHNwYWNlIGluIHN0 cnVjdAorICogZGlyZW50KDMyKSB3aXRob3V0IHRoZSBkX25hbWUgZmllbGQsIHBsdXMgZW5vdWdo IHNwYWNlIGZvciB0aGUgbmFtZSB3aXRoIGEKKyAqIHRlcm1pbmF0aW5nIG51bGwgYnl0ZSAoZHAt PmRfbmFtbGVuKzEpLCByb3VuZGVkIHVwIHRvIGEgOCg0KSBieXRlIGJvdW5kYXJ5LgorICogVGhl IF9HRU5FUklDX0RJUlZBTCgpIGNhc2UgdGFrZXMgdGhlIG5hbWUgbGVuZ3RoIGluc3RlYWQgb2Yg ZHAgYXMgdGhlCisgKiBhcmd1bWVudC4KICAqCiAgKiBYWFggYWx0aG91Z2ggdGhpcyBtYWNybyBp cyBpbiB0aGUgaW1wbGVtZW50YXRpb24gbmFtZXNwYWNlLCBpdCByZXF1aXJlcwogICogYSBtYW5p ZmVzdCBjb25zdGFudCB0aGF0IGlzIG5vdC4KICAqLwotI2RlZmluZQlfR0VORVJJQ19ESVJTSVoo ZHApIFwKLSAgICAoKHNpemVvZiAoc3RydWN0IGRpcmVudCkgLSAoTUFYTkFNTEVOKzEpKSArICgo KGRwKS0+ZF9uYW1sZW4rMSArIDMpICZ+IDMpKQorI2RlZmluZQlfR0VORVJJQ19ESVJWQUwobmFt bGVuKSBcCisgICAgKChzaXplb2Yoc3RydWN0IGRpcmVudCkgLSAoTUFYTkFNTEVOICsgMSkgKyAo bmFtbGVuKSArIDEgKyA3KSAmIH43KQorI2RlZmluZQlfR0VORVJJQ19ESVJTSVooZHApCV9HRU5F UklDX0RJUlZBTCgoZHApLT5kX25hbWxlbikKKyNkZWZpbmUJX0dFTkVSSUNfRElSU0laMzIoZHAp IFwKKyAgICAoKHNpemVvZiAoc3RydWN0IGRpcmVudDMyKSAtIChNQVhOQU1MRU4rMSkpICsgKCgo ZHApLT5kX25hbWxlbisxICsgMykgJn4gMykpCiAjZW5kaWYgLyogX19CU0RfVklTSUJMRSAqLwog CiAjaWZkZWYgX0tFUk5FTAogI2RlZmluZQlHRU5FUklDX0RJUlNJWihkcCkJX0dFTkVSSUNfRElS U0laKGRwKQorI2RlZmluZQlHRU5FUklDX0RJUlNJWjMyKGRwKQlfR0VORVJJQ19ESVJTSVozMihk cCkKICNlbmRpZgogCiAjZW5kaWYgLyogIV9TWVNfRElSRU5UX0hfICovCi0tLSBrZXJuL3Zmc19z eXNjYWxscy5jLnNhdgkyMDE0LTEwLTI0IDE2OjQ1OjM5LjAwMDAwMDAwMCAtMDQwMAorKysga2Vy bi92ZnNfc3lzY2FsbHMuYwkyMDE0LTExLTIwIDIxOjQ2OjI5LjAwMDAwMDAwMCAtMDUwMApAQCAt NDAwNiwxMCArNDAwNiwxMSBAQCB1bmlvbnJlYWQ6CiAjZW5kaWYgLyogQ09NUEFUXzQzICovCiAK IC8qCi0gKiBSZWFkIGEgYmxvY2sgb2YgZGlyZWN0b3J5IGVudHJpZXMgaW4gYSBmaWxlc3lzdGVt IGluZGVwZW5kZW50IGZvcm1hdC4KKyAqIFJlYWQgdGhlIG9sZCAic3RydWN0IGRpcmVudDMyIiBi bG9jayBvZiBkaXJlY3RvcnkgZW50cmllcyBpbiBhCisgKiBmaWxlc3lzdGVtIGluZGVwZW5kZW50 IGZvcm1hdC4KICAqLwogI2lmbmRlZiBfU1lTX1NZU1BST1RPX0hfCi1zdHJ1Y3QgZ2V0ZGlyZW50 cmllc19hcmdzIHsKK3N0cnVjdCBnZXRkaXJlbnRyaWVzMzJfYXJncyB7CiAJaW50CWZkOwogCWNo YXIJKmJ1ZjsKIAl1X2ludAljb3VudDsKQEAgLTQwMTcsOSArNDAxOCw5IEBAIHN0cnVjdCBnZXRk aXJlbnRyaWVzX2FyZ3MgewogfTsKICNlbmRpZgogaW50Ci1zeXNfZ2V0ZGlyZW50cmllcyh0ZCwg dWFwKQorc3lzX2dldGRpcmVudHJpZXMzMih0ZCwgdWFwKQogCXN0cnVjdCB0aHJlYWQgKnRkOwot CXJlZ2lzdGVyIHN0cnVjdCBnZXRkaXJlbnRyaWVzX2FyZ3MgLyogeworCXJlZ2lzdGVyIHN0cnVj dCBnZXRkaXJlbnRyaWVzMzJfYXJncyAvKiB7CiAJCWludCBmZDsKIAkJY2hhciAqYnVmOwogCQl1 X2ludCBjb3VudDsKQEAgLTQwMjksNyArNDAzMCw3IEBAIHN5c19nZXRkaXJlbnRyaWVzKHRkLCB1 YXApCiAJbG9uZyBiYXNlOwogCWludCBlcnJvcjsKIAotCWVycm9yID0ga2Vybl9nZXRkaXJlbnRy aWVzKHRkLCB1YXAtPmZkLCB1YXAtPmJ1ZiwgdWFwLT5jb3VudCwgJmJhc2UsCisJZXJyb3IgPSBr ZXJuX2dldGRpcmVudHJpZXMzMih0ZCwgdWFwLT5mZCwgdWFwLT5idWYsIHVhcC0+Y291bnQsICZi YXNlLAogCSAgICBOVUxMLCBVSU9fVVNFUlNQQUNFKTsKIAlpZiAoZXJyb3IgIT0gMCkKIAkJcmV0 dXJuIChlcnJvcik7CkBAIC00MDM5LDcgKzQwNDAsNyBAQCBzeXNfZ2V0ZGlyZW50cmllcyh0ZCwg dWFwKQogfQogCiBpbnQKLWtlcm5fZ2V0ZGlyZW50cmllcyhzdHJ1Y3QgdGhyZWFkICp0ZCwgaW50 IGZkLCBjaGFyICpidWYsIHVfaW50IGNvdW50LAora2Vybl9nZXRkaXJlbnRyaWVzMzIoc3RydWN0 IHRocmVhZCAqdGQsIGludCBmZCwgY2hhciAqYnVmLCB1X2ludCBjb3VudCwKICAgICBsb25nICpi YXNlcCwgc3NpemVfdCAqcmVzaWRwLCBlbnVtIHVpb19zZWcgYnVmc2VnKQogewogCXN0cnVjdCB2 bm9kZSAqdnA7CkBAIC00MDQ4LDggKzQwNDksOSBAQCBrZXJuX2dldGRpcmVudHJpZXMoc3RydWN0 IHRocmVhZCAqdGQsIGluCiAJc3RydWN0IGlvdmVjIGFpb3Y7CiAJY2FwX3JpZ2h0c190IHJpZ2h0 czsKIAlsb25nIGxvZmY7Ci0JaW50IGVycm9yLCBlb2ZmbGFnOworCWludCBjb3B5X2RpciA9IDAs IGVycm9yLCBlb2ZmbGFnOwogCW9mZl90IGZvZmZzZXQ7CisJY2hhciAqdGJ1ZiA9IE5VTEw7CiAK IAlBVURJVF9BUkdfRkQoZmQpOwogCWlmIChjb3VudCA+IElPU0laRV9NQVgpCkBAIC00MDcwLDIy ICs0MDcyLDQ2IEBAIHVuaW9ucmVhZDoKIAkJZXJyb3IgPSBFSU5WQUw7CiAJCWdvdG8gZmFpbDsK IAl9Ci0JYWlvdi5pb3ZfYmFzZSA9IGJ1ZjsKKwl2bl9sb2NrKHZwLCBMS19TSEFSRUQgfCBMS19S RVRSWSk7Cit0cnluZXc6CisJLyoKKwkgKiBJZiB0aGlzIGZpbGUgc3lzdGVtIG9ubHkgcmV0dXJu cyB0aGUgbmV3IHN0cnVjdCBkaXJlbnQsIGFsbG9jYXRlCisJICogYSBrZXJuZWwgYnVmZmVyIHRv IGJlIHJlYWQgaW50bywgc28gaXQgY2FuIGJlIGNvcGllZC9jb252ZXJ0ZWQuCisJICovCisJaWYg KGNvcHlfZGlyICE9IDAgJiYgYnVmc2VnID09IFVJT19VU0VSU1BBQ0UpIHsKKwkJaWYgKHRidWYg PT0gTlVMTCkKKwkJCXRidWYgPSBtYWxsb2MoY291bnQsIE1fVEVNUCwgTV9XQUlUT0spOworCQlh aW92Lmlvdl9iYXNlID0gdGJ1ZjsKKwl9IGVsc2UKKwkJYWlvdi5pb3ZfYmFzZSA9IGJ1ZjsKIAlh aW92Lmlvdl9sZW4gPSBjb3VudDsKIAlhdWlvLnVpb19pb3YgPSAmYWlvdjsKIAlhdWlvLnVpb19p b3ZjbnQgPSAxOwogCWF1aW8udWlvX3J3ID0gVUlPX1JFQUQ7Ci0JYXVpby51aW9fc2VnZmxnID0g YnVmc2VnOworCWlmIChjb3B5X2RpciAhPSAwICYmIGJ1ZnNlZyA9PSBVSU9fVVNFUlNQQUNFKQor CQlhdWlvLnVpb19zZWdmbGcgPSBVSU9fU1lTU1BBQ0U7CisJZWxzZQorCQlhdWlvLnVpb19zZWdm bGcgPSBidWZzZWc7CiAJYXVpby51aW9fdGQgPSB0ZDsKLQl2bl9sb2NrKHZwLCBMS19TSEFSRUQg fCBMS19SRVRSWSk7CiAJQVVESVRfQVJHX1ZOT0RFMSh2cCk7CiAJbG9mZiA9IGF1aW8udWlvX29m ZnNldCA9IGZvZmZzZXQ7CiAjaWZkZWYgTUFDCiAJZXJyb3IgPSBtYWNfdm5vZGVfY2hlY2tfcmVh ZGRpcih0ZC0+dGRfdWNyZWQsIHZwKTsKIAlpZiAoZXJyb3IgPT0gMCkKICNlbmRpZgotCQllcnJv ciA9IFZPUF9SRUFERElSKHZwLCAmYXVpbywgZnAtPmZfY3JlZCwgJmVvZmZsYWcsIE5VTEwsCi0J CSAgICBOVUxMKTsKKwl7CisJCWlmIChjb3B5X2RpciA9PSAwKSB7CisJCQllcnJvciA9IFZPUF9S RUFERElSMzIodnAsICZhdWlvLCBmcC0+Zl9jcmVkLCAmZW9mZmxhZywKKwkJCSAgICBOVUxMLCBO VUxMKTsKKwkJCWlmIChlcnJvciA9PSBFT1BOT1RTVVBQKSB7CisJCQkJY29weV9kaXIgPSAxOwor CQkJCWVycm9yID0gMDsKKwkJCQlnb3RvIHRyeW5ldzsKKwkJCX0KKwkJfSBlbHNlCisJCQllcnJv ciA9IFZPUF9SRUFERElSKHZwLCAmYXVpbywgZnAtPmZfY3JlZCwgJmVvZmZsYWcsCisJCQkgICAg TlVMTCwgTlVMTCk7CisJfQogCWZvZmZzZXQgPSBhdWlvLnVpb19vZmZzZXQ7CiAJaWYgKGVycm9y ICE9IDApIHsKIAkJVk9QX1VOTE9DSyh2cCwgMCk7CkBAIC00MTAyLDE0ICs0MTI4LDIwOSBAQCB1 bmlvbnJlYWQ6CiAJCWZwLT5mX2RhdGEgPSB2cDsKIAkJZm9mZnNldCA9IDA7CiAJCXZwdXQodHZw KTsKKwkJY29weV9kaXIgPSAwOwogCQlnb3RvIHVuaW9ucmVhZDsKIAl9CiAJVk9QX1VOTE9DSyh2 cCwgMCk7CisJaWYgKGNvcHlfZGlyICE9IDAgJiYgY291bnQgLSBhdWlvLnVpb19yZXNpZCA+IDAp IHsKKwkJaWYgKGJ1ZnNlZyA9PSBVSU9fVVNFUlNQQUNFKSB7CisJCQljb3B5X2RpcmVudDMyKHRi dWYsIGNvdW50IC0gYXVpby51aW9fcmVzaWQpOworCQkJZXJyb3IgPSBjb3B5b3V0KHRidWYsIGJ1 ZiwgY291bnQgLSBhdWlvLnVpb19yZXNpZCk7CisJCQlpZiAoZXJyb3IgIT0gMCkKKwkJCQlnb3Rv IGZhaWw7CisJCX0gZWxzZQorCQkJY29weV9kaXJlbnQzMihidWYsIGNvdW50IC0gYXVpby51aW9f cmVzaWQpOworCX0KIAkqYmFzZXAgPSBsb2ZmOwogCWlmIChyZXNpZHAgIT0gTlVMTCkKIAkJKnJl c2lkcCA9IGF1aW8udWlvX3Jlc2lkOwogCXRkLT50ZF9yZXR2YWxbMF0gPSBjb3VudCAtIGF1aW8u dWlvX3Jlc2lkOwogZmFpbDoKKwlpZiAodGJ1ZiAhPSBOVUxMKQorCQlmcmVlKHRidWYsIE1fVEVN UCk7CisJZm9mZnNldF91bmxvY2soZnAsIGZvZmZzZXQsIDApOworCWZkcm9wKGZwLCB0ZCk7CisJ cmV0dXJuIChlcnJvcik7Cit9CisKKyNpZm5kZWYgX1NZU19TWVNQUk9UT19IXworc3RydWN0IGdl dGRlbnRzMzJfYXJncyB7CisJaW50IGZkOworCWNoYXIgKmJ1ZjsKKwlzaXplX3QgY291bnQ7Cit9 OworI2VuZGlmCitpbnQKK3N5c19nZXRkZW50czMyKHRkLCB1YXApCisJc3RydWN0IHRocmVhZCAq dGQ7CisJcmVnaXN0ZXIgc3RydWN0IGdldGRlbnRzMzJfYXJncyAvKiB7CisJCWludCBmZDsKKwkJ Y2hhciAqYnVmOworCQl1X2ludCBjb3VudDsKKwl9ICovICp1YXA7Cit7CisJc3RydWN0IGdldGRp cmVudHJpZXMzMl9hcmdzIGFwOworCisJYXAuZmQgPSB1YXAtPmZkOworCWFwLmJ1ZiA9IHVhcC0+ YnVmOworCWFwLmNvdW50ID0gdWFwLT5jb3VudDsKKwlhcC5iYXNlcCA9IE5VTEw7CisJcmV0dXJu IChzeXNfZ2V0ZGlyZW50cmllczMyKHRkLCAmYXApKTsKK30KKworLyoKKyAqIFJlYWQgaW4gdGhl IG5ldyAic3RydWN0IGRpcmVudCIgYmxvY2sgb2YgZGlyZWN0b3J5IGVudHJpZXMgaW4gYQorICog ZmlsZXN5c3RlbSBpbmRlcGVuZGVudCBmb3JtYXQuCisgKi8KKyNpZm5kZWYgX1NZU19TWVNQUk9U T19IXworc3RydWN0IGdldGRpcmVudHJpZXNfYXJncyB7CisJaW50CWZkOworCWNoYXIJKmJ1ZjsK Kwl1X2ludAljb3VudDsKKwl1aW50NjRfdCAqYmFzZXA7Cit9OworI2VuZGlmCitpbnQKK3N5c19n ZXRkaXJlbnRyaWVzKHRkLCB1YXApCisJc3RydWN0IHRocmVhZCAqdGQ7CisJcmVnaXN0ZXIgc3Ry dWN0IGdldGRpcmVudHJpZXNfYXJncyAvKiB7CisJCWludCBmZDsKKwkJY2hhciAqYnVmOworCQl1 X2ludCBjb3VudDsKKwkJdWludDY0X3QgKmJhc2VwOworCX0gKi8gKnVhcDsKK3sKKwl1aW50NjRf dCBiYXNlOworCWludCBlcnJvcjsKKworCWVycm9yID0ga2Vybl9nZXRkaXJlbnRyaWVzKHRkLCB1 YXAtPmZkLCB1YXAtPmJ1ZiwgdWFwLT5jb3VudCwgJmJhc2UsCisJICAgIE5VTEwsIFVJT19VU0VS U1BBQ0UpOworCWlmIChlcnJvciAhPSAwKQorCQlyZXR1cm4gKGVycm9yKTsKKwlpZiAodWFwLT5i YXNlcCAhPSBOVUxMKQorCQllcnJvciA9IGNvcHlvdXQoJmJhc2UsIHVhcC0+YmFzZXAsIHNpemVv Zih1aW50NjRfdCkpOworCXJldHVybiAoZXJyb3IpOworfQorCitpbnQKK2tlcm5fZ2V0ZGlyZW50 cmllcyhzdHJ1Y3QgdGhyZWFkICp0ZCwgaW50IGZkLCBjaGFyICpidWYsIHVfaW50IGNvdW50LAor ICAgIHVpbnQ2NF90ICpiYXNlcCwgc3NpemVfdCAqcmVzaWRwLCBlbnVtIHVpb19zZWcgYnVmc2Vn KQoreworCXN0cnVjdCB2bm9kZSAqdnA7CisJc3RydWN0IGZpbGUgKmZwOworCXN0cnVjdCB1aW8g YXVpbzsKKwlzdHJ1Y3QgaW92ZWMgYWlvdjsKKwljYXBfcmlnaHRzX3QgcmlnaHRzOworCXVpbnQ2 NF90IGxvZmY7CisJaW50IGNvcHlfZGlyID0gMCwgZXJyb3IsIGVvZmZsYWc7CisJb2ZmX3QgZm9m ZnNldDsKKwljaGFyICppYnVmID0gTlVMTCwgKm9idWYgPSBOVUxMOworCXVfaW50IG9idWZsZW47 CisKKwlBVURJVF9BUkdfRkQoZmQpOworCWlmIChjb3VudCA+IElPU0laRV9NQVgpCisJCXJldHVy biAoRUlOVkFMKTsKKwlhdWlvLnVpb19yZXNpZCA9IGNvdW50OworCWVycm9yID0gZ2V0dm5vZGUo dGQtPnRkX3Byb2MtPnBfZmQsIGZkLAorCSAgICBjYXBfcmlnaHRzX2luaXQoJnJpZ2h0cywgQ0FQ X1JFQUQpLCAmZnApOworCWlmIChlcnJvciAhPSAwKQorCQlyZXR1cm4gKGVycm9yKTsKKwlpZiAo KGZwLT5mX2ZsYWcgJiBGUkVBRCkgPT0gMCkgeworCQlmZHJvcChmcCwgdGQpOworCQlyZXR1cm4g KEVCQURGKTsKKwl9CisJdnAgPSBmcC0+Zl92bm9kZTsKKwlmb2Zmc2V0ID0gZm9mZnNldF9sb2Nr KGZwLCAwKTsKK3VuaW9ucmVhZDoKKwlpZiAodnAtPnZfdHlwZSAhPSBWRElSKSB7CisJCWVycm9y ID0gRUlOVkFMOworCQlnb3RvIGZhaWw7CisJfQorCXZuX2xvY2sodnAsIExLX1NIQVJFRCB8IExL X1JFVFJZKTsKK3RyeW9sZDoKKwkvKgorCSAqIElmIHRoaXMgZmlsZSBzeXN0ZW0gb25seSByZXR1 cm5zIHRoZSBvbGQgc3RydWN0IGRpcmVudCwgYWxsb2NhdGUKKwkgKiBrZXJuZWwgYnVmZmVycyB0 byBiZSByZWFkIGFuZCBjb3BpZWQvY29udmVydGVkIGludG8uCisJICovCisJaWYgKGNvcHlfZGly ICE9IDApIHsKKwkJaWYgKGlidWYgPT0gTlVMTCkKKwkJCWlidWYgPSBtYWxsb2MoY291bnQsIE1f VEVNUCwgTV9XQUlUT0spOworCQlpZiAob2J1ZiA9PSBOVUxMKQorCQkJb2J1ZiA9IG1hbGxvYyhj b3VudCwgTV9URU1QLCBNX1dBSVRPSyk7CisJCWFpb3YuaW92X2Jhc2UgPSBpYnVmOworCX0gZWxz ZQorCQlhaW92Lmlvdl9iYXNlID0gYnVmOworCWFpb3YuaW92X2xlbiA9IGNvdW50OworCWF1aW8u dWlvX2lvdiA9ICZhaW92OworCWF1aW8udWlvX2lvdmNudCA9IDE7CisJYXVpby51aW9fcncgPSBV SU9fUkVBRDsKKwlpZiAoY29weV9kaXIgIT0gMCkKKwkJYXVpby51aW9fc2VnZmxnID0gVUlPX1NZ U1NQQUNFOworCWVsc2UKKwkJYXVpby51aW9fc2VnZmxnID0gYnVmc2VnOworCWF1aW8udWlvX3Rk ID0gdGQ7CisJQVVESVRfQVJHX1ZOT0RFMSh2cCk7CisJbG9mZiA9IGF1aW8udWlvX29mZnNldCA9 IGZvZmZzZXQ7CisjaWZkZWYgTUFDCisJZXJyb3IgPSBtYWNfdm5vZGVfY2hlY2tfcmVhZGRpcih0 ZC0+dGRfdWNyZWQsIHZwKTsKKwlpZiAoZXJyb3IgPT0gMCkKKyNlbmRpZgorCXsKKwkJaWYgKGNv cHlfZGlyID09IDApIHsKKwkJCWVycm9yID0gVk9QX1JFQURESVIodnAsICZhdWlvLCBmcC0+Zl9j cmVkLCAmZW9mZmxhZywKKwkJCSAgICBOVUxMLCBOVUxMKTsKKwkJCWlmIChlcnJvciA9PSBFT1BO T1RTVVBQKSB7CisJCQkJY29weV9kaXIgPSAxOworCQkJCWVycm9yID0gMDsKKwkJCQlnb3RvIHRy eW9sZDsKKwkJCX0KKwkJCWZvZmZzZXQgPSBhdWlvLnVpb19vZmZzZXQ7CisJCX0gZWxzZQorCQkJ ZXJyb3IgPSBWT1BfUkVBRERJUjMyKHZwLCAmYXVpbywgZnAtPmZfY3JlZCwgJmVvZmZsYWcsCisJ CQkgICAgTlVMTCwgTlVMTCk7CisJfQorCWlmIChlcnJvciAhPSAwKSB7CisJCVZPUF9VTkxPQ0so dnAsIDApOworCQlnb3RvIGZhaWw7CisJfQorCWlmIChjb3VudCA9PSBhdWlvLnVpb19yZXNpZCAm JgorCSAgICAodnAtPnZfdmZsYWcgJiBWVl9ST09UKSAmJgorCSAgICAodnAtPnZfbW91bnQtPm1u dF9mbGFnICYgTU5UX1VOSU9OKSkgeworCQlzdHJ1Y3Qgdm5vZGUgKnR2cCA9IHZwOworCisJCXZw ID0gdnAtPnZfbW91bnQtPm1udF92bm9kZWNvdmVyZWQ7CisJCVZSRUYodnApOworCQlmcC0+Zl92 bm9kZSA9IHZwOworCQlmcC0+Zl9kYXRhID0gdnA7CisJCWZvZmZzZXQgPSAwOworCQl2cHV0KHR2 cCk7CisJCWNvcHlfZGlyID0gMDsKKwkJZ290byB1bmlvbnJlYWQ7CisJfQorCVZPUF9VTkxPQ0so dnAsIDApOworCWlmIChjb3B5X2RpciAhPSAwICYmIGNvdW50IC0gYXVpby51aW9fcmVzaWQgPiAw KSB7CisJCW9idWZsZW4gPSBjb3B5X2RpcmVudChpYnVmLCBjb3VudCAtIGF1aW8udWlvX3Jlc2lk LCBvYnVmLCBjb3VudCwKKwkJICAgICZmb2Zmc2V0KTsKKwkJaWYgKGJ1ZnNlZyA9PSBVSU9fVVNF UlNQQUNFKQorCQkJZXJyb3IgPSBjb3B5b3V0KG9idWYsIGJ1Ziwgb2J1Zmxlbik7CisJCWVsc2UK KwkJCWJjb3B5KG9idWYsIGJ1Ziwgb2J1Zmxlbik7CisJCWlmIChlcnJvciAhPSAwKQorCQkJZ290 byBmYWlsOworCQlpZiAocmVzaWRwICE9IE5VTEwpCisJCQkqcmVzaWRwID0gY291bnQgLSBvYnVm bGVuOworCQl0ZC0+dGRfcmV0dmFsWzBdID0gb2J1ZmxlbjsKKwl9IGVsc2UgeworCQlpZiAocmVz aWRwICE9IE5VTEwpCisJCQkqcmVzaWRwID0gYXVpby51aW9fcmVzaWQ7CisJCXRkLT50ZF9yZXR2 YWxbMF0gPSBjb3VudCAtIGF1aW8udWlvX3Jlc2lkOworCX0KKwkqYmFzZXAgPSBsb2ZmOworZmFp bDoKKwlpZiAoaWJ1ZiAhPSBOVUxMKQorCQlmcmVlKGlidWYsIE1fVEVNUCk7CisJaWYgKG9idWYg IT0gTlVMTCkKKwkJZnJlZShvYnVmLCBNX1RFTVApOwogCWZvZmZzZXRfdW5sb2NrKGZwLCBmb2Zm c2V0LCAwKTsKIAlmZHJvcChmcCwgdGQpOwogCXJldHVybiAoZXJyb3IpOwpAQCAtNDE0MSw2ICs0 MzYyLDY5IEBAIHN5c19nZXRkZW50cyh0ZCwgdWFwKQogfQogCiAvKgorICogQ29weSB0aGUgbmV3 IHN0cnVjdCBuZGlyZW50IHRvIHRoZSBvbGQgc3RydWN0IGRpcmVudCBmb3JtYXQuCisgKi8KK3N0 YXRpYyB2b2lkCitjb3B5X2RpcmVudDMyKGNoYXIgKmJ1ZiwgdV9pbnQgbGVuKQoreworCXN0cnVj dCBkaXJlbnQgKmRwOworCXN0cnVjdCBkaXJlbnQzMiAqZHAzMjsKKworCXdoaWxlIChsZW4gPiAw KSB7CisJCWRwID0gKHN0cnVjdCBkaXJlbnQgKilidWY7CisJCWRwMzIgPSAoc3RydWN0IGRpcmVu dDMyICopYnVmOworCQlkcDMyLT5kX2ZpbGVubyA9IGRwLT5kX2ZpbGVubzsKKwkJZHAzMi0+ZF9y ZWNsZW4gPSBkcC0+ZF9yZWNsZW47CisJCWRwMzItPmRfdHlwZSA9IGRwLT5kX3R5cGU7CisJCWRw MzItPmRfbmFtbGVuID0gZHAtPmRfbmFtbGVuOworCQliY29weShkcC0+ZF9uYW1lLCBkcDMyLT5k X25hbWUsIGRwMzItPmRfbmFtbGVuICsgMSk7CisJCWJ1ZiArPSBkcDMyLT5kX3JlY2xlbjsKKwkJ bGVuIC09IGRwMzItPmRfcmVjbGVuOworCX0KK30KKworLyoKKyAqIENvcHkgdGhlIG9sZCBzdHJ1 Y3QgZGlyZW50MzIgdG8gbmV3IHN0cnVjdCBkaXJlbnQgZm9ybWF0LgorICovCitzdGF0aWMgdV9p bnQKK2NvcHlfZGlyZW50KGNoYXIgKmlidWYsIHVfaW50IGlsZW4sIGNoYXIgKm9idWYsIHVfaW50 IG9sZW4sIG9mZl90ICpvZmZwKQoreworCXN0cnVjdCBkaXJlbnQgKmRwOworCXN0cnVjdCBkaXJl bnQzMiAqZHAzMjsKKwl1X2ludCBsZWZ0LCBvY250OworCisJZHAzMiA9IChzdHJ1Y3QgZGlyZW50 MzIgKilpYnVmOworCW9jbnQgPSAwOworCXdoaWxlIChpbGVuID4gMCAmJiBvbGVuID49IG9jbnQg KyBfR0VORVJJQ19ESVJWQUwoZHAzMi0+ZF9uYW1sZW4pKSB7CisJCWRwID0gKHN0cnVjdCBkaXJl bnQgKilvYnVmOworCQlkcC0+ZF9vZmYgPSAqb2ZmcDsKKwkJZHAtPmRfZmlsZW5vID0gZHAzMi0+ ZF9maWxlbm87CisJCWRwLT5kX3R5cGUgPSBkcDMyLT5kX3R5cGU7CisJCWRwLT5kX25hbWxlbiA9 IGRwMzItPmRfbmFtbGVuOworCQliY29weShkcDMyLT5kX25hbWUsIGRwLT5kX25hbWUsIGRwMzIt PmRfbmFtbGVuICsgMSk7CisJCWRwLT5kX3JlY2xlbiA9IF9HRU5FUklDX0RJUlNJWihkcCk7CisJ CWlidWYgKz0gZHAzMi0+ZF9yZWNsZW47CisJCWlsZW4gLT0gZHAzMi0+ZF9yZWNsZW47CisJCSpv ZmZwICs9IGRwMzItPmRfcmVjbGVuOworCQlvYnVmICs9IGRwLT5kX3JlY2xlbjsKKwkJb2NudCAr PSBkcC0+ZF9yZWNsZW47CisJCWxlZnQgPSBERVZfQlNJWkUgLSAob2NudCAmIChERVZfQlNJWkUg LSAxKSk7CisJCWRwMzIgPSAoc3RydWN0IGRpcmVudDMyICopaWJ1ZjsKKwkJaWYgKGlsZW4gPiAw ICYmIGxlZnQgPCBfR0VORVJJQ19ESVJWQUwoZHAzMi0+ZF9uYW1sZW4pKSB7CisJCQlkcC0+ZF9y ZWNsZW4gKz0gbGVmdDsKKwkJCW9idWYgKz0gbGVmdDsKKwkJCW9jbnQgKz0gbGVmdDsKKwkJfQor CX0KKwlpZiAob2NudCA8IG9sZW4pIHsKKwkJbGVmdCA9IERFVl9CU0laRSAtIChvY250ICYgKERF Vl9CU0laRSAtIDEpKTsKKwkJZHAtPmRfcmVjbGVuICs9IGxlZnQ7CisJCW9jbnQgKz0gbGVmdDsK Kwl9CisJcmV0dXJuIChvY250KTsKK30KKworLyoKICAqIFNldCB0aGUgbW9kZSBtYXNrIGZvciBj cmVhdGlvbiBvZiBmaWxlc3lzdGVtIG5vZGVzLgogICovCiAjaWZuZGVmIF9TWVNfU1lTUFJPVE9f SF8K ------=_Part_4538832_801680899.1416539954793--