[OpenAFS-devel] AFS/DFS Mount points

Tom Keiser Tom Keiser <tkeiser@gmail.com>
Mon, 11 Apr 2005 12:30:47 -0400


------=_Part_4361_31592977.1113237047200
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 7bit
Content-Disposition: inline

On Apr 11, 2005 11:34 AM, Jeffrey Hutzelman <jhutz@cmu.edu> wrote:
> 
> Both operations are used for creating symbolic links, and also for creating
> mount points.  This is because as far as the fileserver is concerned, there
> is no difference between a mount point and a symbolic link(*) -- a mount
> point is just a symlink with a special mode, and only the client cares
> about that.  Of course, this detail is hidden from user-mode applications;
> such a program cannot distinguish between mount points and ordinary
> directories except by using special pioctl() operations for manipulating
> mount points.
> 
> Now, the thing to bear in mind is that one of the IN arguments to
> RXAFS_Symlink is an AFSStoreStatus, containing various attributes of the
> link to be created, including its mode.  So to create a mount point, the
> client simply passes in the correct mode.  The symlink() syscall, however,
> does not take such an argument.  So the OpenAFS cache manager's
> implementation of symlink() guesses what the application means, based on
> the first character of the provided link target.  If the first character is
> '#' or '%', then it uses mode 0644, indicating a mount point; otherwise it
> uses mode 0755, indicating a symbolic link.
> 

I suppose this behavior is convenient for shell scripts so you don't
go fork-happy calling fs.  However, I think it would be preferable to
have afs_symlink() do the right thing (TM) from any arbitrary unix
application's perspective, which means create a symlink no matter what
the heck is the contents of the link target, that's how DCE/DFS
handles it going back at least as far as 1.2.2.

I've attached a small (preliminary) patch that makes things behave
more like DFS.  It adds a new pioctl (VIOC_CREATE_MT_PT), and updates
fs.  There are probably other places that need updating (libadmin?,
src/JAVA?).  It works in my environment, but the pioctl number isn't
registered yet (I temporarily assigned it one from the legacy
range...), and I was too lazy to write the autoconf glue for those of
you who want to keep the old semantics ;-)
If there's some consensus, I'll finish it up and submit.

-- 
Tom Keiser
tkeiser@gmail.com

------=_Part_4361_31592977.1113237047200
Content-Type: application/octet-stream; name="mkmount-pioctl.patch"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="mkmount-pioctl.patch"

ZGlmZiAtdU5yIG9wZW5hZnMtMS4zLjgxLWRpc3Qvc3JjL2Fmcy9WTk9QUy9hZnNfdm5vcF9zeW1s
aW5rLmMgb3BlbmFmcy0xLjMuODEtbWttb3VudC1waW9jdGwvc3JjL2Fmcy9WTk9QUy9hZnNfdm5v
cF9zeW1saW5rLmMKLS0tIG9wZW5hZnMtMS4zLjgxLWRpc3Qvc3JjL2Fmcy9WTk9QUy9hZnNfdm5v
cF9zeW1saW5rLmMJMjAwNS0wMS0zMCAyMjo0OToxNS4wMDAwMDAwMDAgLTA1MDAKKysrIG9wZW5h
ZnMtMS4zLjgxLW1rbW91bnQtcGlvY3RsL3NyYy9hZnMvVk5PUFMvYWZzX3Zub3Bfc3ltbGluay5j
CTIwMDUtMDQtMTEgMTA6Mzg6NDcuNzkyODQ0MjIzIC0wNDAwCkBAIC00OSw2ICs0OSwyNCBAQAog
ICAgICBzdHJ1Y3QgdmF0dHIgKmF0dHJzOwogICAgICBzdHJ1Y3QgQUZTX1VDUkVEICphY3JlZDsK
IHsKKyAgICBBRlNfU1RBVENOVChhZnNfc3ltbGluayk7CisgICAgYWZzX1RyYWNlMihhZnNfaWNs
U2V0cCwgQ01fVFJBQ0VfU1lNTElOSywgSUNMX1RZUEVfUE9JTlRFUiwgYWRwLAorCSAgICAgICBJ
Q0xfVFlQRV9TVFJJTkcsIGFuYW1lKTsKKworICAgIHJldHVybiBhZnNfc3ltbGlua09yTW91bnQo
YWRwLCBhbmFtZSwgYXR0cnMsIGF0YXJnZXROYW1lLCBhY3JlZCwgMCk7Cit9CisKKworLyogZG9u
J3Qgc2V0IENEaXJ0eSBpbiBoZXJlIGJlY2F1c2UgUlBDIGlzIGNhbGxlZCBzeW5jaHJvbm91c2x5
ICovCitpbnQgYWZzX3N5bWxpbmtPck1vdW50CisgIChPU0lfVkNfQVJHKGFkcCksIGFuYW1lLCBh
dHRycywgYXRhcmdldE5hbWUsIGFjcmVkLCBpc01vdW50KQorICAgICBPU0lfVkNfREVDTChhZHAp
OworICAgICBjaGFyICphdGFyZ2V0TmFtZTsKKyAgICAgY2hhciAqYW5hbWU7CisgICAgIHN0cnVj
dCB2YXR0ciAqYXR0cnM7CisgICAgIHN0cnVjdCBBRlNfVUNSRUQgKmFjcmVkOworICAgICBpbnQg
aXNNb3VudDsKK3sKICAgICBhZnNfdWludDMyIG5vdyA9IDA7CiAgICAgc3RydWN0IHZyZXF1ZXN0
IHRyZXE7CiAgICAgYWZzX2ludDMyIGNvZGU7CkBAIC02OCw5ICs4NiwxMSBAQAogICAgIFhTVEFU
U19ERUNMUzsKICAgICBPU0lfVkNfQ09OVkVSVChhZHApOwogCi0gICAgQUZTX1NUQVRDTlQoYWZz
X3N5bWxpbmspOwotICAgIGFmc19UcmFjZTIoYWZzX2ljbFNldHAsIENNX1RSQUNFX1NZTUxJTkss
IElDTF9UWVBFX1BPSU5URVIsIGFkcCwKLQkgICAgICAgSUNMX1RZUEVfU1RSSU5HLCBhbmFtZSk7
CisgICAgYWZzX1RyYWNlNChhZnNfaWNsU2V0cCwgQ01fVFJBQ0VfU1lNTElOS09STU9VTlQsIAor
CSAgICAgICBJQ0xfVFlQRV9QT0lOVEVSLCBhZHAsCisJICAgICAgIElDTF9UWVBFX1NUUklORywg
YW5hbWUsCisJICAgICAgIElDTF9UWVBFX1NUUklORywgYXRhcmdldE5hbWUsCisJICAgICAgIElD
TF9UWVBFX0lOVDMyLCBpc01vdW50KTsKIAogICAgIGlmICgoY29kZSA9IGFmc19Jbml0UmVxKCZ0
cmVxLCBhY3JlZCkpKQogCWdvdG8gZG9uZTI7CkBAIC0xMDcsNyArMTI3LDcgQEAKICAgICBJblN0
YXR1cy5NYXNrID0gQUZTX1NFVE1PRFRJTUUgfCBBRlNfU0VUTU9ERTsKICAgICBJblN0YXR1cy5D
bGllbnRNb2RUaW1lID0gb3NpX1RpbWUoKTsKICAgICBhbGVuID0gc3RybGVuKGF0YXJnZXROYW1l
KTsJLyogd2Ugd2FudCBpdCB0byBpbmNsdWRlIHRoZSBudWxsICovCi0gICAgaWYgKCphdGFyZ2V0
TmFtZSA9PSAnIycgfHwgKmF0YXJnZXROYW1lID09ICclJykgeworICAgIGlmIChpc01vdW50KSB7
CiAJSW5TdGF0dXMuVW5peE1vZGVCaXRzID0gMDY0NDsJLyogbXQgcHQ6IG51bGwgZnJvbSAiLiIg
YXQgZW5kICovCiAJaWYgKGFsZW4gPT0gMSkKIAkgICAgYWxlbisrOwkJLyogRW1wdHkgc3RyaW5n
ICovCmRpZmYgLXVOciBvcGVuYWZzLTEuMy44MS1kaXN0L3NyYy9hZnMvYWZzLmggb3BlbmFmcy0x
LjMuODEtbWttb3VudC1waW9jdGwvc3JjL2Fmcy9hZnMuaAotLS0gb3BlbmFmcy0xLjMuODEtZGlz
dC9zcmMvYWZzL2Fmcy5oCTIwMDUtMDQtMDQgMDM6NDM6MjAuMDAwMDAwMDAwIC0wNDAwCisrKyBv
cGVuYWZzLTEuMy44MS1ta21vdW50LXBpb2N0bC9zcmMvYWZzL2Fmcy5oCTIwMDUtMDQtMTEgMDU6
MDg6NDEuNzE1MTgyODQ4IC0wNDAwCkBAIC0xMjEyLDYgKzEyMTIsMTQgQEAKIAogZXh0ZXJuIGlu
dCBhZnNfZmFrZXN0YXRfZW5hYmxlOwogCit0eXBlZGVmIHN0cnVjdCBhZnNfQ3JlYXRlTW91bnRQ
b2ludElvY3RsIHsKKyAgYWZzX3VpbnQzMiBuYW1lX29mZnNldDsKKyAgYWZzX3VpbnQzMiBuYW1l
X2xlbjsKKyAgYWZzX3VpbnQzMiB0YXJnZXRfb2Zmc2V0OworICBhZnNfdWludDMyIHRhcmdldF9s
ZW47CisgIC8qIHZhcmlhYmxlIGxlbmd0aCBzdHJpbmdzIGZvbGxvdyAqLworfSBhZnNfQ3JlYXRl
TW91bnRQb2ludElvY3RsX3Q7CisKIC8qIEZpcnN0IDMyIGJpdHMgb2YgY2FwYWJpbGl0aWVzICov
CiAjZGVmaW5lIENBUEFCSUxJVFlfRVJST1JUUkFOUyAoMTw8MCkKIApkaWZmIC11TnIgb3BlbmFm
cy0xLjMuODEtZGlzdC9zcmMvYWZzL2Fmc19waW9jdGwuYyBvcGVuYWZzLTEuMy44MS1ta21vdW50
LXBpb2N0bC9zcmMvYWZzL2Fmc19waW9jdGwuYwotLS0gb3BlbmFmcy0xLjMuODEtZGlzdC9zcmMv
YWZzL2Fmc19waW9jdGwuYwkyMDA1LTA0LTA0IDAwOjAxOjE0LjAwMDAwMDAwMCAtMDQwMAorKysg
b3BlbmFmcy0xLjMuODEtbWttb3VudC1waW9jdGwvc3JjL2Fmcy9hZnNfcGlvY3RsLmMJMjAwNS0w
NC0xMSAxMTowNzo0NS4xNzQ1NDQ1NDcgLTA0MDAKQEAgLTg5LDYgKzg5LDcgQEAKIERFQ0xfUElP
Q1RMKFBQcmVmZXRjaEZyb21UYXBlKTsKIERFQ0xfUElPQ1RMKFBSZXNpZGVuY3lDbWQpOwogREVD
TF9QSU9DVEwoUENhbGxCYWNrQWRkcik7CitERUNMX1BJT0NUTChQQ3JlYXRlTW91bnQpOwogCiAv
KgogICogQSBtYWNybyB0aGF0IHNheXMgd2hldGhlciB3ZSdyZSBnb2luZyB0byBuZWVkIEhhbmRs
ZUNsaWVudENvbnRleHQoKS4KQEAgLTE4Myw2ICsxODQsNyBAQAogCVBQcmVmZXRjaEZyb21UYXBl
LAkvKiA2NiAtLSBNUi1BRlM6IHByZWZldGNoIGZpbGUgZnJvbSB0YXBlICovCiAJUFJlc2lkZW5j
eUNtZCwJCS8qIDY3IC0tIE1SLUFGUzogZ2VuZXJpYyBjb21tbmQgaW50ZXJmYWNlICovCiAJUEJv
Z3VzLAkJCS8qIDY4IC0tIGFybGE6IGZldGNoIHN0YXRzICovCisJUENyZWF0ZU1vdW50LAkJLyog
NjkgLS0gY3JlYXRlIG1vdW50IHBvaW50ICovCiB9OwogCiBzdGF0aWMgaW50ICgqKENwaW9jdGxT
d1tdKSkgKCkgPSB7CkBAIC0yNDcyLDYgKzI0NzQsNDYgQEAKICAgICByZXR1cm4gY29kZTsKIH0K
IAorREVDTF9QSU9DVEwoUENyZWF0ZU1vdW50KQoreworICAgIHN0cnVjdCBhZnNfQ3JlYXRlTW91
bnRQb2ludElvY3RsICogbW91bnRfaW9jdGw7CisgICAgc3RydWN0IHZhdHRyIGF0dHJzOworICAg
IGNoYXIgKiBhbmFtZSwgKiBhdGFyZ2V0OworCisgICAgYWZzX1RyYWNlMyhhZnNfaWNsU2V0cCwg
Q01fVFJBQ0VfUENSRUFURU1PVU5ULCBJQ0xfVFlQRV9QT0lOVEVSLCBhdmMsCisJICAgICAgIElD
TF9UWVBFX1BPSU5URVIsIGFpbiwgSUNMX1RZUEVfSU5UMzIsIGFpblNpemUpOworCisgICAgQUZT
X1NUQVRDTlQoUENyZWF0ZU1vdW50KTsKKyAgICBpZiAoIWF2YyB8fCAhYWluKQorICAgICAgICBy
ZXR1cm4gRUlOVkFMOworCisgICAgbW91bnRfaW9jdGwgPSAoYWZzX0NyZWF0ZU1vdW50UG9pbnRJ
b2N0bF90ICopIGFpbjsKKworICAgIC8qIHNhbml0eSBjaGVja3MgLS0gbWFkZSBoYXJkZXIgYnkg
dGhlIGZhY3QgdGhhdCBhaW5TaXplIGlzIHNpZ25lZCAqLworICAgIGlmICgoYWluU2l6ZSA8PSBz
aXplb2YoYWZzX0NyZWF0ZU1vdW50UG9pbnRJb2N0bF90KSkgfHwKKwkoKG1vdW50X2lvY3RsLT5u
YW1lX29mZnNldCArIG1vdW50X2lvY3RsLT5uYW1lX2xlbikgPCAobW91bnRfaW9jdGwtPm5hbWVf
b2Zmc2V0KSkgfHwKKwkoKG1vdW50X2lvY3RsLT50YXJnZXRfb2Zmc2V0ICsgbW91bnRfaW9jdGwt
PnRhcmdldF9sZW4pIDwgKG1vdW50X2lvY3RsLT50YXJnZXRfb2Zmc2V0KSkgfHwKKwkoKG1vdW50
X2lvY3RsLT5uYW1lX29mZnNldCArIG1vdW50X2lvY3RsLT5uYW1lX2xlbikgJiAoMVUgPDwgMzEp
KSB8fAorCSgobW91bnRfaW9jdGwtPnRhcmdldF9vZmZzZXQgKyBtb3VudF9pb2N0bC0+dGFyZ2V0
X2xlbikgJiAoMVUgPDwgMzEpKSB8fAorCSgobW91bnRfaW9jdGwtPm5hbWVfb2Zmc2V0ICsgbW91
bnRfaW9jdGwtPm5hbWVfbGVuKSA+PSBhaW5TaXplKSB8fAorCSgobW91bnRfaW9jdGwtPnRhcmdl
dF9vZmZzZXQgKyBtb3VudF9pb2N0bC0+dGFyZ2V0X2xlbikgPj0gYWluU2l6ZSkgfHwKKwkoKG1v
dW50X2lvY3RsLT5uYW1lX29mZnNldCA+PSBtb3VudF9pb2N0bC0+dGFyZ2V0X29mZnNldCkgJiYK
KwkgKG1vdW50X2lvY3RsLT5uYW1lX29mZnNldCA8PSAobW91bnRfaW9jdGwtPnRhcmdldF9vZmZz
ZXQgKyBtb3VudF9pb2N0bC0+dGFyZ2V0X2xlbikpKSB8fAorCSgobW91bnRfaW9jdGwtPnRhcmdl
dF9vZmZzZXQgPj0gbW91bnRfaW9jdGwtPm5hbWVfb2Zmc2V0KSAmJgorCSAobW91bnRfaW9jdGwt
PnRhcmdldF9vZmZzZXQgPD0gKG1vdW50X2lvY3RsLT5uYW1lX29mZnNldCArIG1vdW50X2lvY3Rs
LT5uYW1lX2xlbikpKSB8fAorCShhaW5bbW91bnRfaW9jdGwtPm5hbWVfb2Zmc2V0ICsgbW91bnRf
aW9jdGwtPm5hbWVfbGVuXSAhPSAnXDAnKSB8fAorCShhaW5bbW91bnRfaW9jdGwtPnRhcmdldF9v
ZmZzZXQgKyBtb3VudF9pb2N0bC0+dGFyZ2V0X2xlbl0gIT0gJ1wwJykpCisgICAgICAgIHJldHVy
biBFMkJJRzsKKworICAgIGFuYW1lID0gJmFpblttb3VudF9pb2N0bC0+bmFtZV9vZmZzZXRdOwor
ICAgIGF0YXJnZXQgPSAmYWluW21vdW50X2lvY3RsLT50YXJnZXRfb2Zmc2V0XTsKKworICAgIGlm
ICgoKmF0YXJnZXQgIT0gJyMnKSAmJiAoKmF0YXJnZXQgIT0gJyUnKSkKKyAgICAgICAgcmV0dXJu
IEVJTlZBTDsKKworICAgIHJldHVybiBhZnNfc3ltbGlua09yTW91bnQoYXZjLCBhbmFtZSwgYXR0
cnMsIGF0YXJnZXQsICphY3JlZCwgMSk7Cit9CisKIERFQ0xfUElPQ1RMKFBWZW51c0xvZ2dpbmcp
CiB7CiAgICAgcmV0dXJuIEVJTlZBTDsJCS8qIE9CU09MRVRFICovCmRpZmYgLXVOciBvcGVuYWZz
LTEuMy44MS1kaXN0L3NyYy9hZnMvYWZzX3Byb3RvdHlwZXMuaCBvcGVuYWZzLTEuMy44MS1ta21v
dW50LXBpb2N0bC9zcmMvYWZzL2Fmc19wcm90b3R5cGVzLmgKLS0tIG9wZW5hZnMtMS4zLjgxLWRp
c3Qvc3JjL2Fmcy9hZnNfcHJvdG90eXBlcy5oCTIwMDUtMDQtMDMgMTQ6MTg6NTQuMDAwMDAwMDAw
IC0wNDAwCisrKyBvcGVuYWZzLTEuMy44MS1ta21vdW50LXBpb2N0bC9zcmMvYWZzL2Fmc19wcm90
b3R5cGVzLmgJMjAwNS0wNC0xMSAwMjo0OTo0NS43MDk5MDYyMzYgLTA0MDAKQEAgLTEwMzcsNiAr
MTAzNyw3IEBACiBleHRlcm4gaW50IGFmc191c3RyYXRlZ3koKTsKIGV4dGVybiBpbnQgYWZzX2xv
Y2tjdGwoKTsKIAorZXh0ZXJuIGludCBhZnNfc3ltbGlua09yTW91bnQoKTsKIAogLyogYWZzX3Zv
bHVtZS5jICovCiBleHRlcm4gYWZzX2ludDMyIGFmc19GVkluZGV4OwpkaWZmIC11TnIgb3BlbmFm
cy0xLjMuODEtZGlzdC9zcmMvYWZzL2Fmc19zdGF0cy5oIG9wZW5hZnMtMS4zLjgxLW1rbW91bnQt
cGlvY3RsL3NyYy9hZnMvYWZzX3N0YXRzLmgKLS0tIG9wZW5hZnMtMS4zLjgxLWRpc3Qvc3JjL2Fm
cy9hZnNfc3RhdHMuaAkyMDA0LTEyLTA3IDAxOjEyOjEyLjAwMDAwMDAwMCAtMDUwMAorKysgb3Bl
bmFmcy0xLjMuODEtbWttb3VudC1waW9jdGwvc3JjL2Fmcy9hZnNfc3RhdHMuaAkyMDA1LTA0LTEx
IDA1OjMzOjA5Ljg0MDMxNjQwMiAtMDQwMApAQCAtNjM5LDYgKzYzOSw3IEBACiAgICAgYWZzX2lu
dDMyIENfU1JYQUZTQ0JfR2V0Q2FjaGVDb25maWc7CS8qIGFmc19jYWxsYmFjay5jICovCiAgICAg
YWZzX2ludDMyIENfU1JYQUZTQ0JfR2V0Q0U2NDsJLyogYWZzX2NhbGxiYWNrLmMgKi8KICAgICBh
ZnNfaW50MzIgQ19TUlhBRlNDQl9HZXRDZWxsQnlOdW07CS8qIGFmc19jYWxsYmFjay5jICovCisg
ICAgYWZzX2ludDMyIENfUENyZWF0ZU1vdW50OwkvKiBhZnNfcGlvY3RsLmMgKi8KIH07CiAKIHN0
cnVjdCBhZnNfQ01NZWFuU3RhdHMgewpkaWZmIC11TnIgb3BlbmFmcy0xLjMuODEtZGlzdC9zcmMv
YWZzL2Fmc190cmFjZS5ldCBvcGVuYWZzLTEuMy44MS1ta21vdW50LXBpb2N0bC9zcmMvYWZzL2Fm
c190cmFjZS5ldAotLS0gb3BlbmFmcy0xLjMuODEtZGlzdC9zcmMvYWZzL2Fmc190cmFjZS5ldAky
MDAzLTA3LTE2IDE4OjIyOjU0LjAwMDAwMDAwMCAtMDQwMAorKysgb3BlbmFmcy0xLjMuODEtbWtt
b3VudC1waW9jdGwvc3JjL2Fmcy9hZnNfdHJhY2UuZXQJMjAwNS0wNC0xMSAxMTowNjozOS43MDI5
NTY0MDQgLTA0MDAKQEAgLTE3Miw1ICsxNzIsNyBAQAogCWVjCUNNX1RSQUNFX0xPQ0tXQUlULCIl
cyBsaW5lICVkOiBXYWl0aW5nIGZvciBsb2NrIDB4JWx4IGxldmVsICVkIgogCWVjCUNNX1RSQUNF
X1dSSVRFRkFJTEVELCAib3NpX1dyaXRlIGZhaWxlZCBsZW4gJWxkIHJlc2lkICVsZCBlcnIgJWxk
IgogCWVjCUNNX1RSQUNFX0FESlVTVFNJWkUyLCAiQWRqdXN0U2l6ZSBkYyA9IDB4JWx4LCBjaHVu
a0J5dGVzID0gMHgleCB1c2VkID0gJWxkLCBkaWZmID0gJWxkIgorCWVjCUNNX1RSQUNFX1BDUkVB
VEVNT1VOVCwgIlBDcmVhdGVNb3VudCBzdGFydCBhdmMgPSAweCVseCwgYWluID0gMHglbHgsIGFp
blNpemUgPSAlZCIKKwllYwlDTV9UUkFDRV9TWU1MSU5LT1JNT1VOVCwgImFmc19zeW1saW5rT3JN
b3VudDogZGlyID0gMHglbHgsIG5hbWUgPSAlcywgdGFyZ2V0ID0gJXMsIGlzTW91bnQgPSAlZCIK
IGVuZAogCmRpZmYgLXVOciBvcGVuYWZzLTEuMy44MS1kaXN0L3NyYy9jb25maWcvdmVudXMuaCBv
cGVuYWZzLTEuMy44MS1ta21vdW50LXBpb2N0bC9zcmMvY29uZmlnL3ZlbnVzLmgKLS0tIG9wZW5h
ZnMtMS4zLjgxLWRpc3Qvc3JjL2NvbmZpZy92ZW51cy5oCTIwMDQtMDYtMDIgMDQ6NDM6MDIuMDAw
MDAwMDAwIC0wNDAwCisrKyBvcGVuYWZzLTEuMy44MS1ta21vdW50LXBpb2N0bC9zcmMvY29uZmln
L3ZlbnVzLmgJMjAwNS0wNC0xMSAwNDowNDoyNC44MjE1NDI0NzAgLTA0MDAKQEAgLTE3NSw2ICsx
NzUsNyBAQAogI2RlZmluZSBWSU9DX1BSRUZFVENIVEFQRSAgICAgICBfVklDRUlPQ1RMKDY2KQkv
KiBNUi1BRlMgcHJlZmV0Y2ggZnJvbSB0YXBlICovCiAjZGVmaW5lIFZJT0NfUkVTSURFTkNZX0NN
RCAgICAgIF9WSUNFSU9DVEwoNjcpCS8qIGdlbmVyaWMgTVItQUZTIGNtZHMgKi8KICNkZWZpbmUg
VklPQ19TVEFUSVNUSUNTICAgICAgICAgX1ZJQ0VJT0NUTCg2OCkJLyogYXJsYTogZmV0Y2ggc3Rh
dGlzdGljcyAqLworI2RlZmluZSBWSU9DX0FGU19DUkVBVEVfTVRfUFQgICBfVklDRUlPQ1RMKDY5
KQkvKiBbQUZTXSBDcmVhdGUgbW91bnQgcG9pbnQgKi8KIAogLyogQ29vcmRpbmF0ZWQgJ0MnIHBp
b2N0bCdzICovCiAjZGVmaW5lIFZJT0NfTkVXQUxJQVMJCV9DVklDRUlPQ1RMKDEpCS8qIGNyZWF0
ZSBuZXcgY2VsbCBhbGlhcyAqLwpkaWZmIC11TnIgb3BlbmFmcy0xLjMuODEtZGlzdC9zcmMvdmVu
dXMvZnMuYyBvcGVuYWZzLTEuMy44MS1ta21vdW50LXBpb2N0bC9zcmMvdmVudXMvZnMuYwotLS0g
b3BlbmFmcy0xLjMuODEtZGlzdC9zcmMvdmVudXMvZnMuYwkyMDA0LTEwLTE4IDAzOjEyOjIwLjAw
MDAwMDAwMCAtMDQwMAorKysgb3BlbmFmcy0xLjMuODEtbWttb3VudC1waW9jdGwvc3JjL3ZlbnVz
L2ZzLmMJMjAwNS0wNC0xMSAwOToyNToyMS40NjI4MDY1ODYgLTA0MDAKQEAgLTU0LDcgKzU0LDcg
QEAKICNpbmNsdWRlIDxzdGRsaWIuaD4KICNpbmNsdWRlIDxhc3NlcnQuaD4KICNpbmNsdWRlIDxh
ZnMvcHRjbGllbnQuaD4KLQorI2luY2x1ZGUgPGFmcy9hZnMuaD4KIAogI2RlZmluZQlNQVhIT1NU
UyAxMwogI2RlZmluZQlPTUFYSE9TVFMgOApAQCAtMTYxNSw2ICsxNjE1LDggQEAKICAgICBzdHJ1
Y3QgYWZzY29uZl9jZWxsIGluZm87CiAgICAgc3RydWN0IHZsZGJlbnRyeSB2bGRiRW50cnk7CiAg
ICAgc3RydWN0IFZpY2VJb2N0bCBibG9iOworICAgIGNoYXIgYmxvYl9idWZmZXJbNDA5Nl07Cisg
ICAgc3RydWN0IGFmc19DcmVhdGVNb3VudFBvaW50SW9jdGwgKiBtb3VudF9pb2N0bDsKIAogLyoK
IApAQCAtMTcwMSw3ICsxNzAzLDI0IEBACiAgICAgfQogICAgIHN0cmNhdChzcGFjZSwgdm9sTmFt
ZSk7CS8qIGFwcGVuZCB2b2x1bWUgbmFtZSAqLwogICAgIHN0cmNhdChzcGFjZSwgIi4iKTsJCS8q
IHN0dXBpZCBjb252ZW50aW9uOyB0aGVzZSBlbmQgd2l0aCBhIHBlcmlvZCAqLwotICAgIGNvZGUg
PSBzeW1saW5rKHNwYWNlLCBhcy0+cGFybXNbMF0uaXRlbXMtPmRhdGEpOworCisgICAgLyogc3R1
ZmYgdGhlIG1vdW50cG9pbnQgbmFtZSBhbmQgdGFyZ2V0IGludG8gYSBzdHJ1Y3QgKi8KKyAgICBt
ZW1zZXQoYmxvYl9idWZmZXIsIDAsIHNpemVvZihibG9iX2J1ZmZlcikpOworICAgIG1vdW50X2lv
Y3RsID0gKHN0cnVjdCBhZnNfQ3JlYXRlTW91bnRQb2ludElvY3RsICopIGJsb2JfYnVmZmVyOwor
ICAgIG1vdW50X2lvY3RsLT5uYW1lX29mZnNldCA9IHNpemVvZihhZnNfQ3JlYXRlTW91bnRQb2lu
dElvY3RsX3QpOworICAgIG1vdW50X2lvY3RsLT5uYW1lX2xlbiA9IHN0cmxlbihhcy0+cGFybXNb
MF0uaXRlbXMtPmRhdGEpOworICAgIG1vdW50X2lvY3RsLT50YXJnZXRfb2Zmc2V0ID0gbW91bnRf
aW9jdGwtPm5hbWVfb2Zmc2V0ICsgbW91bnRfaW9jdGwtPm5hbWVfbGVuICsgMTsKKyAgICBtb3Vu
dF9pb2N0bC0+dGFyZ2V0X2xlbiA9IHN0cmxlbihzcGFjZSk7CisgICAgc3RybmNweSgmYmxvYl9i
dWZmZXJbbW91bnRfaW9jdGwtPm5hbWVfb2Zmc2V0XSwgCisJICAgIGFzLT5wYXJtc1swXS5pdGVt
cy0+ZGF0YSwgbW91bnRfaW9jdGwtPm5hbWVfbGVuKTsKKyAgICBzdHJuY3B5KCZibG9iX2J1ZmZl
clttb3VudF9pb2N0bC0+dGFyZ2V0X29mZnNldF0sCisJICAgIHNwYWNlLCBtb3VudF9pb2N0bC0+
dGFyZ2V0X2xlbik7CisKKyAgICAvKiBzdHVmZiBvdXIgc3RydWN0IGludG8gdGhlIHZpY2Vpb2N0
bCBpbnB1dCBmaWVsZCAqLworICAgIGJsb2Iub3V0X3NpemUgPSAwOworICAgIGJsb2IuaW4gPSBi
bG9iX2J1ZmZlcjsKKyAgICBibG9iLmluX3NpemUgPSBtb3VudF9pb2N0bC0+dGFyZ2V0X29mZnNl
dCArIG1vdW50X2lvY3RsLT50YXJnZXRfbGVuICsgMTsKKyAgICBjb2RlID0gcGlvY3RsKFBhcmVu
dChhcy0+cGFybXNbMF0uaXRlbXMtPmRhdGEpLCBWSU9DX0FGU19DUkVBVEVfTVRfUFQsICZibG9i
LCAwKTsKICAgICBpZiAoY29kZSkgewogCURpZShlcnJubywgYXMtPnBhcm1zWzBdLml0ZW1zLT5k
YXRhKTsKIAlyZXR1cm4gMTsK
------=_Part_4361_31592977.1113237047200--