FAT speedup patch revisited for 2.2.1

Jukka Tapani Santala (e75644@UWasa.Fi)
Sat, 6 Mar 1999 04:23:31 +0200 (EET)


This message is in MIME format. The first part should be readable text,
while the remaining parts are likely unreadable without MIME-aware tools.
Send mail to mime@docserver.cac.washington.edu for more info.

---559023410-1819198887-920687011=:9542
Content-Type: TEXT/PLAIN; charset=US-ASCII

Sometimes, operations on the old FAT based filesystems (VFAT, MSDOS etc.)
on Linux appear almost draggingly slow. There's no magic bullet to solve
this (Or if there is, let me know;) but after performing extensive
profiling on the 2.1.x series of kernels I pinpointed some places of the
code that are crucial during high filesystem-load times, and embarked on
optimizing them. I have now revisited that patch, making sure it applies
and works for 2.2.x series kernels, fixed things up and performed some
further benchmarking. Now, the catch is that this patch is assuming:

- the cluster_size will always be a full power of two
- filenames and extensions are always padded with spaces

It seems to me these two conditions are true in general; no exceptions
have been brought to my attention since I've started posting these
optimizations. Some parts of the code appear to already be more or less
assuming the above. But be forewarned, if for some reason either one isn't
true, applying and running this patch may lead to filesystem corruption.
I'd like to know of any such instances. Now, with the geral babble out of
the way, few notes on the choices made in this:

The major improvement is replacing cluster-size by "cluster-shift", the
two's power for the effective cluster-size. Most of the time either
multiplying or dividing by the cluster-size is required, and because
cluster-size itself is a variable, the compilers have no way to
automatically optimize these operations to shifts when needed. Division is
so expensive operations the performance-boost from this is noticeable.

Even in the one tricky modulus-operation on the first chunk of the patch,
the bit-operation is much preferable to taking real modulus. Further
improvement might be gained by calculating and keeping around another
bit-mask for the modulus, though, but I have not conssidered that worth
increasing the memory-profile.

The second improvement involves the function used to translate standard
FAT style filenames into *nix filesystem type filenames. In this process
the 8.3 type filename pieces are read from the FAT record, put into lower
case and concatenated into result string for display. Unfortunately, quick
look at the code shows that this bit of code gets so deeply nested it ends
up with pretty poor optimization. I tried several approachs to get all out
from the processor on this code, and finally settled on the attached
approach.

Here, to avoid running out of registers to use, the actual task has been
divided up to a number of very simple, straightforward tasks executed
after each another. Namely, we find the length of the filename portion; we
copy it down. Next we find the length of the extension and copy it after,
and finally we turn the whole result string to lower case. This appears to
work pretty well in practice.

With some experimenting I finally settled on the current approach here,
where the filename-portions are scanned in reverse order to find their
length - this way we won't have to scan the whole string for last
non-whitespace, and also most filenames are close to 8 characters, so
loop-count will stay low.

Finally, in an earlier version of this patch, the case-conversion was done
using a partial case-table. After some dry-profiling, I found out this
approach is <10% faster even when the table can be counted to stay in
cache all the time, so in this version I have reverted back to the
approach using two compares and increment used elsewhere in the code, for
a grand saving of 32 bytes.

So... if you're using FAT based filesystems on your computer, feel free to
give this patch a try. If, for some reason, the message "fat_read_super:
Cluster size was not power of two!" appears during bootup or mounting, do
not use the patch, but let me know of the details instantly. Ofcourse,
this should not happen <g>. Any other problems, let me know as well. I'm
hoping this patch can be included in the next developmental kernel version
(2.3.x?)

-Donwulff

---559023410-1819198887-920687011=:9542
Content-Type: TEXT/PLAIN; charset=US-ASCII; name="fat-2.2.1.patch"
Content-Transfer-Encoding: BASE64
Content-ID: <Pine.GSO.4.05.9903060423310.9542@ankkuri.uwasa.fi>
Content-Description:
Content-Disposition: attachment; filename="fat-2.2.1.patch"

ZGlmZiAtLXVuaWZpZWQgLS1yZWN1cnNpdmUgbGludXguMjIxL2ZzL2ZhdC9j
YWNoZS5jIGxpbnV4L2ZzL2ZhdC9jYWNoZS5jDQotLS0gbGludXguMjIxL2Zz
L2ZhdC9jYWNoZS5jCVNhdCBNYXIgIDYgMDM6MTk6MDQgMTk5OQ0KKysrIGxp
bnV4L2ZzL2ZhdC9jYWNoZS5jCVNhdCBNYXIgIDYgMDM6MjA6MjkgMTk5OQ0K
QEAgLTI3NiwxMCArMjc2LDEwIEBADQogCQkJcmV0dXJuIDA7DQogCQlyZXR1
cm4gc2VjdG9yK3NiLT5kaXJfc3RhcnQ7DQogCX0NCi0JY2x1c3RlciA9IHNl
Y3Rvci9zYi0+Y2x1c3Rlcl9zaXplOw0KLQlvZmZzZXQgPSBzZWN0b3IgJSBz
Yi0+Y2x1c3Rlcl9zaXplOw0KKwljbHVzdGVyID0gc2VjdG9yPj5zYi0+Y2x1
c3Rlcl9zaGlmdDsNCisJb2Zmc2V0ID0gc2VjdG9yICYgfih+MDw8c2ItPmNs
dXN0ZXJfc2hpZnQpOw0KIAlpZiAoIShjbHVzdGVyID0gZmF0X2dldF9jbHVz
dGVyKGlub2RlLGNsdXN0ZXIpKSkgcmV0dXJuIDA7DQotCXJldHVybiAoY2x1
c3Rlci0yKSpzYi0+Y2x1c3Rlcl9zaXplK3NiLT5kYXRhX3N0YXJ0K29mZnNl
dDsNCisJcmV0dXJuICgoY2x1c3Rlci0yKTw8c2ItPmNsdXN0ZXJfc2hpZnQp
K3NiLT5kYXRhX3N0YXJ0K29mZnNldDsNCiB9DQogDQogDQpAQCAtMzE5LDcg
KzMxOSw3IEBADQogCQkJCWZhdF9jbHVzdGVyc19mbHVzaChpbm9kZS0+aV9z
Yik7DQogCQkJfQ0KIAkJfQ0KLQkJaW5vZGUtPmlfYmxvY2tzIC09IE1TRE9T
X1NCKGlub2RlLT5pX3NiKS0+Y2x1c3Rlcl9zaXplOw0KKwkJaW5vZGUtPmlf
YmxvY2tzIC09IDE8PE1TRE9TX1NCKGlub2RlLT5pX3NiKS0+Y2x1c3Rlcl9z
aGlmdDsNCiAJfQ0KIAl1bmxvY2tfZmF0KGlub2RlLT5pX3NiKTsNCiAJZmF0
X2NhY2hlX2ludmFsX2lub2RlKGlub2RlKTsNCmRpZmYgLS11bmlmaWVkIC0t
cmVjdXJzaXZlIGxpbnV4LjIyMS9mcy9mYXQvZGlyLmMgbGludXgvZnMvZmF0
L2Rpci5jDQotLS0gbGludXguMjIxL2ZzL2ZhdC9kaXIuYwlTYXQgTWFyICA2
IDAzOjE5OjA0IDE5OTkNCisrKyBsaW51eC9mcy9mYXQvZGlyLmMJU2F0IE1h
ciAgNiAwNTozNTowNyAxOTk5DQpAQCAtMTIyLDggKzEyMiw3IEBADQogCWlu
dCBib3RoKQ0KIHsNCiAJc3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IGlub2Rl
LT5pX3NiOw0KLQlpbnQgaW5vLGksaTIsbGFzdDsNCi0JY2hhciBjOw0KKwlp
bnQgaW5vLGksaTI7DQogCXN0cnVjdCBidWZmZXJfaGVhZCAqYmg7DQogCXN0
cnVjdCBtc2Rvc19kaXJfZW50cnkgKmRlOw0KIAl1bnNpZ25lZCBsb25nIG9s
ZHBvcyA9IGZpbHAtPmZfcG9zOw0KQEAgLTIzOSw2ICsyMzgsNyBAQA0KIAkJ
CWNoYXIgKnB0bmFtZSA9IGJ1Zm5hbWU7DQogCQkJaW50IGRvdG9mZnNldCA9
IDA7DQogCQkJaW50IHdhc19sb25nID0gaXNfbG9uZzsNCisJCQlpbnQgbGFz
dDsNCiANCiAJCQlpZiAoaXNfbG9uZykgew0KIAkJCQl1bnNpZ25lZCBjaGFy
IHN1bTsNCkBAIC0yNjMsMjcgKzI2MywyNCBAQA0KIAkJCQlkb3RvZmZzZXQg
PSAxOw0KIAkJCQlwdG5hbWUgPSBidWZuYW1lKzE7DQogCQkJfQ0KLQkJCWZv
ciAoaSA9IDAsIGxhc3QgPSAwOyBpIDwgODsgaSsrKSB7DQotCQkJCWlmICgh
KGMgPSBkZS0+bmFtZVtpXSkpIGJyZWFrOw0KLQkJCQlpZiAoYyA+PSAnQScg
JiYgYyA8PSAnWicpIGMgKz0gMzI7DQotCQkJCS8qIHNlZSBuYW1laS5jLCBt
c2Rvc19mb3JtYXRfbmFtZSAqLw0KLQkJCQlpZiAoYyA9PSAweDA1KSBjID0g
MHhFNTsNCi0JCQkJaWYgKGMgIT0gJyAnKQ0KLQkJCQkJbGFzdCA9IGkrMTsN
Ci0JCQkJcHRuYW1lW2ldID0gYzsNCi0JCQl9DQotCQkJaSA9IGxhc3Q7DQot
CQkJcHRuYW1lW2ldID0gJy4nOw0KLQkJCWkrKzsNCi0JCQlmb3IgKGkyID0g
MDsgaTIgPCAzOyBpMisrKSB7DQotCQkJCWlmICghKGMgPSBkZS0+ZXh0W2ky
XSkpIGJyZWFrOw0KLQkJCQlpZiAoYyA+PSAnQScgJiYgYyA8PSAnWicpIGMg
Kz0gMzI7DQotCQkJCWlmIChjICE9ICcgJykNCi0JCQkJCWxhc3QgPSBpKzE7
DQotCQkJCXB0bmFtZVtpXSA9IGM7DQorDQorCQkJLyogc2VlIG5hbWVpLmMs
IG1zZG9zX2Zvcm1hdF9uYW1lICovDQorCQkJaWYgKCpwdG5hbWUgPT0gMHgw
NSkgKnB0bmFtZSA9IDB4RTU7DQorCQkJbGFzdD04OyB3aGlsZShsYXN0LS0m
JihkZS0+bmFtZVtsYXN0XT09JyAnKSk7DQorCQkJZm9yIChpID0gMDsgaSA8
PSBsYXN0OyBpKyspDQorCQkJCXB0bmFtZVtpXSA9IGRlLT5uYW1lW2ldOw0K
KwkJCWxhc3Q9Mzsgd2hpbGUobGFzdC0tJiYoZGUtPmV4dFtsYXN0XT09JyAn
KSk7DQorCQkJaWYobGFzdD49MCkgew0KKwkJCQlwdG5hbWVbaV0gPSAnLic7
DQogCQkJCWkrKzsNCisJCQkJZm9yIChpMiA9IDA7IGkyIDw9IGxhc3Q7IGky
KyspDQorCQkJCQlwdG5hbWVbaSsrXSA9IGRlLT5leHRbaTJdOw0KIAkJCX0N
Ci0JCQlpZiAoKGkgPSBsYXN0KSAhPSAwKSB7DQorCQkJaWYgKGkgIT0gMCkg
ew0KKwkJCQkvKiBDaGFuZ2UgdXBwZXItY2FzZSBsZXR0ZXJzIHRvIGxvd2Vy
IGNhc2UgKi8NCisJCQkJZm9yKGkyPTA7aTI8aTtpMisrKQ0KKwkJCQkJaWYo
cHRuYW1lW2kyXT49J0EnICYmIHB0bmFtZVtpMl08PSdaJykNCisJCQkJCQlw
dG5hbWVbaTJdKz0zMjsNCiAJCQkJaWYgKCFzdHJjbXAoZGUtPm5hbWUsTVNE
T1NfRE9UKSkNCiAJCQkJCWlubyA9IGlub2RlLT5pX2lubzsNCiAJCQkJZWxz
ZSBpZiAoIXN0cmNtcChkZS0+bmFtZSxNU0RPU19ET1RET1QpKQ0KZGlmZiAt
LXVuaWZpZWQgLS1yZWN1cnNpdmUgbGludXguMjIxL2ZzL2ZhdC9maWxlLmMg
bGludXgvZnMvZmF0L2ZpbGUuYw0KLS0tIGxpbnV4LjIyMS9mcy9mYXQvZmls
ZS5jCVNhdCBNYXIgIDYgMDM6MTk6MDQgMTk5OQ0KKysrIGxpbnV4L2ZzL2Zh
dC9maWxlLmMJU2F0IE1hciAgNiAwMzoyMDoyOSAxOTk5DQpAQCAtNDU2LDcg
KzQ1Niw3IEBADQogCS8qIFdoeSBubyByZXR1cm4gdmFsdWU/ICBTdXJlbHkg
dGhlIGRpc2sgY291bGQgZmFpbC4uLiAqLw0KIAlpZiAoSVNfSU1NVVRBQkxF
KGlub2RlKSkNCiAJCXJldHVybiAvKiAtRVBFUk0gKi87DQotCWNsdXN0ZXIg
PSBTRUNUT1JfU0laRSpNU0RPU19TQihpbm9kZS0+aV9zYiktPmNsdXN0ZXJf
c2l6ZTsNCisJY2x1c3RlciA9IFNFQ1RPUl9TSVpFPDxNU0RPU19TQihpbm9k
ZS0+aV9zYiktPmNsdXN0ZXJfc2hpZnQ7DQogCSh2b2lkKSBmYXRfZnJlZShp
bm9kZSwoaW5vZGUtPmlfc2l6ZSsoY2x1c3Rlci0xKSkvY2x1c3Rlcik7DQog
CU1TRE9TX0koaW5vZGUpLT5pX2F0dHJzIHw9IEFUVFJfQVJDSDsNCiAJbWFy
a19pbm9kZV9kaXJ0eShpbm9kZSk7DQpkaWZmIC0tdW5pZmllZCAtLXJlY3Vy
c2l2ZSBsaW51eC4yMjEvZnMvZmF0L2lub2RlLmMgbGludXgvZnMvZmF0L2lu
b2RlLmMNCi0tLSBsaW51eC4yMjEvZnMvZmF0L2lub2RlLmMJU2F0IE1hciAg
NiAwMzoxOTowNCAxOTk5DQorKysgbGludXgvZnMvZmF0L2lub2RlLmMJU2F0
IE1hciAgNiAwMzoyMDoyOSAxOTk5DQpAQCAtMjgyLDcgKzI4Miw3IEBADQog
CWludCBmYXQzMjsNCiAJc3RydWN0IGZhdF9tb3VudF9vcHRpb25zIG9wdHM7
DQogCWNoYXIgYnVmWzUwXTsNCi0JaW50IGk7DQorCWludCBpLGo7DQogCWNo
YXIgY3ZmX2Zvcm1hdFsyMV07DQogCWNoYXIgY3ZmX29wdGlvbnNbMTAxXTsN
CiANCkBAIC0zNTIsNyArMzUyLDExIEBADQogCWxvZ2ljYWxfc2VjdG9yX3Np
emUgPQ0KIAkJQ0ZfTEVfVyhnZXRfdW5hbGlnbmVkKCh1bnNpZ25lZCBzaG9y
dCAqKSAmYi0+c2VjdG9yX3NpemUpKTsNCiAJc2VjdG9yX211bHQgPSBsb2dp
Y2FsX3NlY3Rvcl9zaXplID4+IFNFQ1RPUl9CSVRTOw0KLQlNU0RPU19TQihz
YiktPmNsdXN0ZXJfc2l6ZSA9IGItPmNsdXN0ZXJfc2l6ZSpzZWN0b3JfbXVs
dDsNCisJaSA9IGItPmNsdXN0ZXJfc2l6ZSpzZWN0b3JfbXVsdDsNCisJZm9y
KGo9MDsoaT1pPj4xKSE9MDtqKyspOw0KKwlpZigoMTw8aikhPWItPmNsdXN0
ZXJfc2l6ZSpzZWN0b3JfbXVsdCkNCisJCXByaW50aygiZmF0X3JlYWRfc3Vw
ZXI6IENsdXN0ZXIgc2l6ZSB3YXMgbm90IHBvd2VyIG9mIHR3byFcbiIpOw0K
KwlNU0RPU19TQihzYiktPmNsdXN0ZXJfc2hpZnQgPSBqOw0KIAlNU0RPU19T
QihzYiktPmZhdHMgPSBiLT5mYXRzOw0KIAlNU0RPU19TQihzYiktPmZhdF9z
dGFydCA9IENGX0xFX1coYi0+cmVzZXJ2ZWQpKnNlY3Rvcl9tdWx0Ow0KIAlp
ZiAoIWItPmZhdF9sZW5ndGggJiYgYi0+ZmF0MzJfbGVuZ3RoKSB7DQpAQCAt
NDM1LDcgKzQzOSw3IEBADQogCQkgICAgICAgTVNET1NfQ0FOX0JNQVAoTVNE
T1NfU0Ioc2IpKSA/ICIsYm1hcCIgOiAiIik7DQogCQlwcmludGsoIlttZT0w
eCV4LGNzPSVkLCNmPSVkLGZzPSVkLGZsPSVsZCxkcz0lbGQsZGU9JWQsZGF0
YT0lbGQsIg0KIAkJICAgICAgICJzZT0lZCx0cz0lbGQsbHM9JWQscmM9JWxk
LGZjPSV1XVxuIiwNCi0JCQliLT5tZWRpYSxNU0RPU19TQihzYiktPmNsdXN0
ZXJfc2l6ZSwNCisJCQliLT5tZWRpYSxNU0RPU19TQihzYiktPmNsdXN0ZXJf
c2hpZnQsDQogCQkJTVNET1NfU0Ioc2IpLT5mYXRzLE1TRE9TX1NCKHNiKS0+
ZmF0X3N0YXJ0LA0KIAkJCU1TRE9TX1NCKHNiKS0+ZmF0X2xlbmd0aCwNCiAJ
CSAgICAgICBNU0RPU19TQihzYiktPmRpcl9zdGFydCxNU0RPU19TQihzYikt
PmRpcl9lbnRyaWVzLA0KQEAgLTUzOSw3ICs1NDMsNyBAQA0KIAl9DQogCXVu
bG9ja19mYXQoc2IpOw0KIAl0bXAuZl90eXBlID0gc2ItPnNfbWFnaWM7DQot
CXRtcC5mX2JzaXplID0gTVNET1NfU0Ioc2IpLT5jbHVzdGVyX3NpemUqU0VD
VE9SX1NJWkU7DQorCXRtcC5mX2JzaXplID0gU0VDVE9SX1NJWkU8PE1TRE9T
X1NCKHNiKS0+Y2x1c3Rlcl9zaGlmdDsNCiAJdG1wLmZfYmxvY2tzID0gTVNE
T1NfU0Ioc2IpLT5jbHVzdGVyczsNCiAJdG1wLmZfYmZyZWUgPSBmcmVlOw0K
IAl0bXAuZl9iYXZhaWwgPSBmcmVlOw0KQEAgLTU2MiwxMCArNTY2LDEwIEBA
DQogCWlmICgoaW5vZGUtPmlfaW5vID09IE1TRE9TX1JPT1RfSU5PKSAmJiAo
c2ItPmZhdF9iaXRzICE9IDMyKSkgew0KIAkJcmV0dXJuIHNiLT5kaXJfc3Rh
cnQgKyBibG9jazsNCiAJfQ0KLQljbHVzdGVyID0gYmxvY2svc2ItPmNsdXN0
ZXJfc2l6ZTsNCi0Jb2Zmc2V0ID0gYmxvY2sgJSBzYi0+Y2x1c3Rlcl9zaXpl
Ow0KKwljbHVzdGVyID0gYmxvY2s+PnNiLT5jbHVzdGVyX3NoaWZ0Ow0KKwlv
ZmZzZXQgPSBibG9jayAmIH4ofjA8PHNiLT5jbHVzdGVyX3NoaWZ0KTsNCiAJ
aWYgKCEoY2x1c3RlciA9IGZhdF9nZXRfY2x1c3Rlcihpbm9kZSxjbHVzdGVy
KSkpIHJldHVybiAwOw0KLQlyZXR1cm4gKGNsdXN0ZXItMikqc2ItPmNsdXN0
ZXJfc2l6ZStzYi0+ZGF0YV9zdGFydCtvZmZzZXQ7DQorCXJldHVybiAoKGNs
dXN0ZXItMik8PHNiLT5jbHVzdGVyX3NoaWZ0KStzYi0+ZGF0YV9zdGFydCtv
ZmZzZXQ7DQogfQ0KIA0KIHN0YXRpYyBpbnQgaXNfZXhlYyhjaGFyICpleHRl
bnNpb24pDQpAQCAtNjAwLDcgKzYwNCw3IEBADQogCQkJTVNET1NfSShpbm9k
ZSktPmlfc3RhcnQgPSBNU0RPU19TQihzYiktPnJvb3RfY2x1c3RlcjsNCiAJ
CQlpZiAoKG5yID0gTVNET1NfSShpbm9kZSktPmlfc3RhcnQpICE9IDApIHsN
CiAJCQkJd2hpbGUgKG5yICE9IC0xKSB7DQotCQkJCQlpbm9kZS0+aV9zaXpl
ICs9IFNFQ1RPUl9TSVpFKk1TRE9TX1NCKHNiKS0+Y2x1c3Rlcl9zaXplOw0K
KwkJCQkJaW5vZGUtPmlfc2l6ZSArPSBTRUNUT1JfU0laRTw8TVNET1NfU0Io
c2IpLT5jbHVzdGVyX3NoaWZ0Ow0KIAkJCQkJaWYgKCEobnIgPSBmYXRfYWNj
ZXNzKHNiLG5yLC0xKSkpIHsNCiAJCQkJCQlwcmludGsoIkRpcmVjdG9yeSAl
bGQ6IGJhZCBGQVRcbiIsDQogCQkJCQkJICAgICAgIGlub2RlLT5pX2lubyk7
DQpAQCAtNjEzLDEwICs2MTcsOSBAQA0KIAkJCWlub2RlLT5pX3NpemUgPSBN
U0RPU19TQihzYiktPmRpcl9lbnRyaWVzKg0KIAkJCQlzaXplb2Yoc3RydWN0
IG1zZG9zX2Rpcl9lbnRyeSk7DQogCQl9DQotCQlpbm9kZS0+aV9ibGtzaXpl
ID0gTVNET1NfU0Ioc2IpLT5jbHVzdGVyX3NpemUqDQotCQkgICAgU0VDVE9S
X1NJWkU7DQorCQlpbm9kZS0+aV9ibGtzaXplID0gU0VDVE9SX1NJWkU8PE1T
RE9TX1NCKHNiKS0+Y2x1c3Rlcl9zaGlmdDsNCiAJCWlub2RlLT5pX2Jsb2Nr
cyA9IChpbm9kZS0+aV9zaXplK2lub2RlLT5pX2Jsa3NpemUtMSkvDQotCQkg
ICAgaW5vZGUtPmlfYmxrc2l6ZSpNU0RPU19TQihzYiktPmNsdXN0ZXJfc2l6
ZTsNCisJCSAgICBpbm9kZS0+aV9ibGtzaXplPDxNU0RPU19TQihzYiktPmNs
dXN0ZXJfc2hpZnQ7DQogCQlNU0RPU19JKGlub2RlKS0+aV9sb2dzdGFydCA9
IDA7DQogDQogCQlNU0RPU19JKGlub2RlKS0+aV9hdHRycyA9IDA7DQpAQCAt
NjU2LDggKzY1OSw4IEBADQogCQlpbm9kZS0+aV9zaXplID0gMDsNCiAJCWlm
ICgobnIgPSBNU0RPU19JKGlub2RlKS0+aV9zdGFydCkgIT0gMCkNCiAJCQl3
aGlsZSAobnIgIT0gLTEpIHsNCi0JCQkJaW5vZGUtPmlfc2l6ZSArPSBTRUNU
T1JfU0laRSpNU0RPU19TQihpbm9kZS0+DQotCQkJCSAgICBpX3NiKS0+Y2x1
c3Rlcl9zaXplOw0KKwkJCQlpbm9kZS0+aV9zaXplICs9IFNFQ1RPUl9TSVpF
PDxNU0RPU19TQihpbm9kZS0+DQorCQkJCSAgICBpX3NiKS0+Y2x1c3Rlcl9z
aGlmdDsNCiAJCQkJaWYgKCEobnIgPSBmYXRfYWNjZXNzKHNiLG5yLC0xKSkp
IHsNCiAJCQkJCXByaW50aygiRGlyZWN0b3J5ICVsZDogYmFkIEZBVFxuIiwN
CiAJCQkJCSAgICBpbm9kZS0+aV9pbm8pOw0KQEAgLTY5NSw5ICs2OTgsOSBA
QA0KIAkgICAgcmF3X2VudHJ5LT5leHQpOw0KIAlNU0RPU19JKGlub2RlKS0+
aV9hdHRycyA9IHJhd19lbnRyeS0+YXR0ciAmIEFUVFJfVU5VU0VEOw0KIAkv
KiB0aGlzIGlzIGFzIGNsb3NlIHRvIHRoZSB0cnV0aCBhcyB3ZSBjYW4gZ2V0
IC4uLiAqLw0KLQlpbm9kZS0+aV9ibGtzaXplID0gTVNET1NfU0Ioc2IpLT5j
bHVzdGVyX3NpemUqU0VDVE9SX1NJWkU7DQorCWlub2RlLT5pX2Jsa3NpemUg
PSBTRUNUT1JfU0laRTw8TVNET1NfU0Ioc2IpLT5jbHVzdGVyX3NoaWZ0Ow0K
IAlpbm9kZS0+aV9ibG9ja3MgPSAoaW5vZGUtPmlfc2l6ZStpbm9kZS0+aV9i
bGtzaXplLTEpLw0KLQkgICAgaW5vZGUtPmlfYmxrc2l6ZSpNU0RPU19TQihz
YiktPmNsdXN0ZXJfc2l6ZTsNCisJICAgIGlub2RlLT5pX2Jsa3NpemU8PE1T
RE9TX1NCKHNiKS0+Y2x1c3Rlcl9zaGlmdDsNCiAJaW5vZGUtPmlfbXRpbWUg
PSBpbm9kZS0+aV9hdGltZSA9DQogCSAgICBkYXRlX2RvczJ1bml4KENGX0xF
X1cocmF3X2VudHJ5LT50aW1lKSxDRl9MRV9XKHJhd19lbnRyeS0+ZGF0ZSkp
Ow0KIAlpbm9kZS0+aV9jdGltZSA9DQpkaWZmIC0tdW5pZmllZCAtLXJlY3Vy
c2l2ZSBsaW51eC4yMjEvZnMvZmF0L21pc2MuYyBsaW51eC9mcy9mYXQvbWlz
Yy5jDQotLS0gbGludXguMjIxL2ZzL2ZhdC9taXNjLmMJU2F0IE1hciAgNiAw
MzoxOTowNCAxOTk5DQorKysgbGludXgvZnMvZmF0L21pc2MuYwlTYXQgTWFy
ICA2IDAzOjIwOjI5IDE5OTkNCkBAIC0xNDksNyArMTQ5LDcgQEANCiAJc3Ry
dWN0IHN1cGVyX2Jsb2NrICpzYiA9IGlub2RlLT5pX3NiOw0KIAlpbnQgY291
bnQsbnIsbGltaXQsbGFzdCxjdXJyLHNlY3RvcixsYXN0X3NlY3RvcixmaWxl
X2NsdXN0ZXI7DQogCXN0cnVjdCBidWZmZXJfaGVhZCAqYmg7DQotCWludCBj
bHVzdGVyX3NpemUgPSBNU0RPU19TQihzYiktPmNsdXN0ZXJfc2l6ZTsNCisJ
aW50IGNsdXN0ZXJfc2hpZnQgPSBNU0RPU19TQihzYiktPmNsdXN0ZXJfc2hp
ZnQ7DQogDQogCWlmIChNU0RPU19TQihzYiktPmZhdF9iaXRzICE9IDMyKSB7
DQogCQlpZiAoaW5vZGUtPmlfaW5vID09IE1TRE9TX1JPT1RfSU5PKSByZXR1
cm4gLUVOT1NQQzsNCkBAIC0yMTksOCArMjE5LDggQEANCiAjaWZkZWYgREVC
VUcNCiBpZiAobGFzdCkgcHJpbnRrKCJuZXh0IHNldCB0byAlZFxuIixmYXRf
YWNjZXNzKHNiLGxhc3QsLTEpKTsNCiAjZW5kaWYNCi0Jc2VjdG9yID0gTVNE
T1NfU0Ioc2IpLT5kYXRhX3N0YXJ0Kyhuci0yKSpjbHVzdGVyX3NpemU7DQot
CWxhc3Rfc2VjdG9yID0gc2VjdG9yICsgY2x1c3Rlcl9zaXplOw0KKwlzZWN0
b3IgPSBNU0RPU19TQihzYiktPmRhdGFfc3RhcnQrKChuci0yKTw8Y2x1c3Rl
cl9zaGlmdCk7DQorCWxhc3Rfc2VjdG9yID0gc2VjdG9yICsgKDE8PGNsdXN0
ZXJfc2hpZnQpOw0KIAlpZiAoTVNET1NfU0Ioc2IpLT5jdmZfZm9ybWF0ICYm
DQogCSAgICBNU0RPU19TQihzYiktPmN2Zl9mb3JtYXQtPnplcm9fb3V0X2Ns
dXN0ZXIpDQogCQlNU0RPU19TQihzYiktPmN2Zl9mb3JtYXQtPnplcm9fb3V0
X2NsdXN0ZXIoaW5vZGUsbnIpOw0KQEAgLTIzOCwyMCArMjM4LDIwIEBADQog
CQkJZmF0X2JyZWxzZShzYiwgYmgpOw0KIAkJfQ0KIAl9DQotCWlmIChmaWxl
X2NsdXN0ZXIgIT0gaW5vZGUtPmlfYmxvY2tzL2NsdXN0ZXJfc2l6ZSl7DQor
CWlmIChmaWxlX2NsdXN0ZXIgIT0gaW5vZGUtPmlfYmxvY2tzPj5jbHVzdGVy
X3NoaWZ0KXsNCiAJCXByaW50ayAoImZpbGVfY2x1c3RlciBiYWRseSBjb21w
dXRlZCEhISAlZCA8PiAlbGRcbiINCi0JCQksZmlsZV9jbHVzdGVyLGlub2Rl
LT5pX2Jsb2Nrcy9jbHVzdGVyX3NpemUpOw0KKwkJCSxmaWxlX2NsdXN0ZXIs
aW5vZGUtPmlfYmxvY2tzPj5jbHVzdGVyX3NoaWZ0KTsNCiAJfWVsc2V7DQog
CQlmYXRfY2FjaGVfYWRkKGlub2RlLGZpbGVfY2x1c3Rlcixucik7DQogCX0N
Ci0JaW5vZGUtPmlfYmxvY2tzICs9IGNsdXN0ZXJfc2l6ZTsNCisJaW5vZGUt
PmlfYmxvY2tzICs9IDE8PGNsdXN0ZXJfc2hpZnQ7DQogCWlmIChTX0lTRElS
KGlub2RlLT5pX21vZGUpKSB7DQogCQlpZiAoaW5vZGUtPmlfc2l6ZSAmIChT
RUNUT1JfU0laRS0xKSkgew0KIAkJCWZhdF9mc19wYW5pYyhzYiwiT2RkIGRp
cmVjdG9yeSBzaXplIik7DQogCQkJaW5vZGUtPmlfc2l6ZSA9IChpbm9kZS0+
aV9zaXplK1NFQ1RPUl9TSVpFKSAmDQogCQkJICAgIH4oU0VDVE9SX1NJWkUt
MSk7DQogCQl9DQotCQlpbm9kZS0+aV9zaXplICs9IFNFQ1RPUl9TSVpFKmNs
dXN0ZXJfc2l6ZTsNCisJCWlub2RlLT5pX3NpemUgKz0gU0VDVE9SX1NJWkU8
PGNsdXN0ZXJfc2hpZnQ7DQogI2lmZGVmIERFQlVHDQogcHJpbnRrKCJzaXpl
IGlzICVkIG5vdyAoJXgpXG4iLGlub2RlLT5pX3NpemUsaW5vZGUpOw0KICNl
bmRpZg0KQEAgLTQ5MSw5ICs0OTEsOSBAQA0KIAlwcmludGsoInJhd19zY2Fu
X25vbnJvb3Q6IHN0YXJ0PSVkXG4iLHN0YXJ0KTsNCiAjZW5kaWYNCiAJZG8g
ew0KLQkJZm9yIChjb3VudCA9IDA7IGNvdW50IDwgTVNET1NfU0Ioc2IpLT5j
bHVzdGVyX3NpemU7IGNvdW50KyspIHsNCi0JCQlpZiAoKGNsdXN0ZXIgPSBy
YXdfc2Nhbl9zZWN0b3Ioc2IsKHN0YXJ0LTIpKg0KLQkJCSAgICBNU0RPU19T
QihzYiktPmNsdXN0ZXJfc2l6ZStNU0RPU19TQihzYiktPmRhdGFfc3RhcnQr
DQorCQlmb3IgKGNvdW50ID0gMDsgY291bnQgPCAoMTw8TVNET1NfU0Ioc2Ip
LT5jbHVzdGVyX3NoaWZ0KTsgY291bnQrKykgew0KKwkJCWlmICgoY2x1c3Rl
ciA9IHJhd19zY2FuX3NlY3RvcihzYiwoKHN0YXJ0LTIpPDwNCisJCQkgICAg
TVNET1NfU0Ioc2IpLT5jbHVzdGVyX3NoaWZ0KStNU0RPU19TQihzYiktPmRh
dGFfc3RhcnQrDQogCQkJICAgIGNvdW50LG5hbWUsbnVtYmVyLGlubyxyZXNf
YmgscmVzX2RlLHNjYW50eXBlKSkgPj0gMCkNCiAJCQkJcmV0dXJuIGNsdXN0
ZXI7DQogCQl9DQpkaWZmIC0tdW5pZmllZCAtLXJlY3Vyc2l2ZSBsaW51eC4y
MjEvaW5jbHVkZS9saW51eC9tc2Rvc19mcy5oIGxpbnV4L2luY2x1ZGUvbGlu
dXgvbXNkb3NfZnMuaA0KLS0tIGxpbnV4LjIyMS9pbmNsdWRlL2xpbnV4L21z
ZG9zX2ZzLmgJU2F0IE1hciAgNiAwMzoxOTowNSAxOTk5DQorKysgbGludXgv
aW5jbHVkZS9saW51eC9tc2Rvc19mcy5oCVNhdCBNYXIgIDYgMDM6MzA6MTgg
MTk5OQ0KQEAgLTE3MSw3ICsxNzEsNyBAQA0KIH07DQogDQogLyogRGV0ZXJt
aW5lIHdoZXRoZXIgdGhpcyBGUyBoYXMga0ItYWxpZ25lZCBkYXRhLiAqLw0K
LSNkZWZpbmUgTVNET1NfQ0FOX0JNQVAobWliKSAoISgoKG1pYiktPmNsdXN0
ZXJfc2l6ZSAmIDEpIHx8IFwNCisjZGVmaW5lIE1TRE9TX0NBTl9CTUFQKG1p
YikgKCEoKChtaWIpLT5jbHVzdGVyX3NoaWZ0ID09IDApIHx8IFwNCiAgICAg
KChtaWIpLT5kYXRhX3N0YXJ0ICYgMSkpKQ0KIA0KIC8qIENvbnZlcnQgYXR0
cmlidXRlIGJpdHMgYW5kIGEgbWFzayB0byB0aGUgVU5JWCBtb2RlLiAqLw0K
ZGlmZiAtLXVuaWZpZWQgLS1yZWN1cnNpdmUgbGludXguMjIxL2luY2x1ZGUv
bGludXgvbXNkb3NfZnNfc2IuaCBsaW51eC9pbmNsdWRlL2xpbnV4L21zZG9z
X2ZzX3NiLmgNCi0tLSBsaW51eC4yMjEvaW5jbHVkZS9saW51eC9tc2Rvc19m
c19zYi5oCVNhdCBNYXIgIDYgMDM6MTk6MDUgMTk5OQ0KKysrIGxpbnV4L2lu
Y2x1ZGUvbGludXgvbXNkb3NfZnNfc2IuaAlTYXQgTWFyICA2IDAzOjIwOjI5
IDE5OTkNCkBAIC0zMyw3ICszMyw3IEBADQogfTsNCiANCiBzdHJ1Y3QgbXNk
b3Nfc2JfaW5mbyB7DQotCXVuc2lnbmVkIHNob3J0IGNsdXN0ZXJfc2l6ZTsg
Lyogc2VjdG9ycy9jbHVzdGVyICovDQorCXVuc2lnbmVkIHNob3J0IGNsdXN0
ZXJfc2hpZnQ7IC8qIHBvd2VyIG9mIDIgZm9yIGNsdXN0ZXIgc2l6ZSAqLw0K
IAl1bnNpZ25lZCBjaGFyIGZhdHMsZmF0X2JpdHM7IC8qIG51bWJlciBvZiBG
QVRzLCBGQVQgYml0cyAoMTIgb3IgMTYpICovDQogCXVuc2lnbmVkIHNob3J0
IGZhdF9zdGFydDsNCiAJdW5zaWduZWQgbG9uZyBmYXRfbGVuZ3RoOyAgICAv
KiBGQVQgc3RhcnQgJiBsZW5ndGggKHNlYy4pICovDQo=
---559023410-1819198887-920687011=:9542--

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.rutgers.edu
Please read the FAQ at http://www.tux.org/lkml/