Use daddr and dport as hash keys for faster masq redirector!

Julian Anastasov (uli@linux.tu-varna.acad.bg)
Sat, 5 Jun 1999 02:39:47 +0300 (EEST)


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.

--214042346-1213392944-928539587=:28904
Content-Type: TEXT/PLAIN; charset=US-ASCII

Anyone with CPU (network) problems when using Linux 2.2
as masq redirector (load balancer / virtual server) when many
incoming connections are created?

Current hashing in ip_masq_m_tab[IP_MASQ_TAB_SIZE] and
ip_masq_s_tab[IP_MASQ_TAB_SIZE] is inadequate for virtual server,
i.e. when many connections are created outside the firewall (if
using MFW or PORTFW module) and linux host is used as redirector
or load balancer. Using only maddr and mport to hash
ip_masq_m_tab and only saddr and sport to hash ip_masq_s_tab
means table with all entries linked with same hash value, i.e.
all remote connections to our virtual or internal server(s) are
linked using same hash value (calculated from addr and port of
virtual or internal server). This can be tested with ipmasqadm:
add some internal hosts (web servers for example) using mfw or
portfw module. cat /proc/net/ip_masquerade displays all entries
with same "Masq" value (port 80) in ip_masq_m_tab, i.e. all
entries linked and with same index in table.

Current hashing works for connections created from
internal hosts when new mport is allocated (in range 61000-65095)
and when connections come from many different ports but not when
all connections are created outside the firewall to specific
ports (virtual servers) and then demasqueraded and redirected to real
servers to specific ports. What this means. IP_MASQ_TAB_SIZE
can be any value if we don't use other keys to hash. Currently
there is no difference between 256 (default), 16384 (recommended
by someone) and 2 for instance if all connections to our server
occupy one row from table. Searching in list with all masq
entries must be (and it is really) very slow when performed for
each incoming packet (ip_masq_m_tab or ip_masq_s_tab table) when
many connections are present, mostly in TIME_WAIT state (99% if
connections are served for 1 second, terminated and time-waited 120
seconds (default period).

I thing it is possible and preferable all masq entries with
IP_MASQ_F_MPORT flag set to be hashed in ip_masq_hash/ip_masq_unhash
using daddr and dport as keys:

ip_masq_hash_key(ms->protocol, ms->maddr^ms->daddr, ms->mport^ms->dport)

instead of old way which still must be used if IP_MASQ_F_MPORT is not
set, i.e. for connections initiated from internal (masqueraded) hosts:

ip_masq_hash_key(ms->protocol, ms->maddr, ms->mport)

Same for ip_masq_s_tab: ms->saddr^ms->daddr and ms->sport^ms->dport

Yes, daddr and dport can be changed after first hashing
for some connections created using masq modules but only once per
each connection, so we can rehash entry when client and server
are connected (not common case for incoming connections).

I think this will improve handling of incoming packets and
with IP_MASQ_TAB_SIZE=131072 (1092*120=131072) we can have 1092
connections per second when TIME_WAIT=120 seconds and we can hit
all entries at first time in ideal case. This is possible because
we don't have any limits (is this bad or good?) for the number of
incoming connections to our virtual server(s). 4096*10 is limit
only for the number of connections created from internal
hosts (with allocated mport in reserved range).

Below is my patch which I tested with 2.2.9 kernel
using mfw module to redirect connections to internal servers.

Some goals and assumptions in this patch:

- Give priority for connections to our servers when searching
in hash tables and then for connections created inside
firewall.

- We use daddr and dport as keys only for server ports, i.e.
when IP_MASQ_F_MPORT is set in ip_masq_new.

- We assume IP_MASQ_F_DLOOSE(UDP) is not set when IP_MASQ_F_MPORT
is set. We can handle TCP and UDP but not ICMP entries, i.e.
we always use old way to hash if not possible to use
daddr and dport as keys. Our goal is to improve access for
incoming connections. There is no need to use daddr and
dport as keys for outgoing connections - they already use
different mports from reserved range and different rows from
masq tables.

- We can handle entries with IP_MASQ_F_NO_DADDR and/or
IP_MASQ_F_NO_DPORT flags set - they are rehashed when
connection is established and each flag is cleared.

- We assume IP_MASQ_F_NO_SPORT is not set when IP_MASQ_F_MPORT
is set (we assume these entries are for outgoing connections).

- Large value for IP_MASQ_TAB_SIZE is still recommended for
this code to work if many connections are expected.

Any ideas or comments? I thing this code can be
integrated in 2.2. May be after some tunning?

--214042346-1213392944-928539587=:28904
Content-Type: TEXT/PLAIN; charset=US-ASCII; name="patch-2.2.9-redirector.diff"
Content-Transfer-Encoding: BASE64
Content-ID: <Pine.LNX.4.10.9906050239470.28904@linux.tu-varna.acad.bg>
Content-Description: Patch for 2.2.9
Content-Disposition: attachment; filename="patch-2.2.9-redirector.diff"

LS0tIHYyLjIuOS9saW51eC9uZXQvaXB2NC9pcF9tYXNxLmMJU3VuIE1heSAx
NiAxMzozNTo1NiAxOTk5DQorKysgbGludXgvbmV0L2lwdjQvaXBfbWFzcS5j
CVNhdCBKdW4gIDUgMDE6MzA6NTkgMTk5OQ0KQEAgLTQ2LDYgKzQ2LDcgQEAN
CiAgKglKdWFuIEpvc2UgQ2lhcmxhbnRlCTogCW1ha2UgbWFzcV9wcm90b19k
b2ZmKCkgcm9idXN0IGFnYWluc3QgZmFrZSBzaXplZC9jb3JydXB0ZWQgcGFj
a2V0cw0KICAqCUthaSBCYW5rZXR0CQk6CWRvIG5vdCB0b3NzIG90aGVyIElQ
IHByb3RvcyBpbiBwcm90b19kb2ZmKCkNCiAgKglEYW4gS2VnZWwJCToJcG9p
bnRlZCBjb3JyZWN0IE5BVCBiZWhhdmlvciBmb3IgVURQIHN0cmVhbXMNCisg
KglKdWxpYW4gQW5hc3Rhc292CToJdXNlIGRhZGRyIGFuZCBkcG9ydCBhcyBo
YXNoIGtleXMNCiAgKgkNCiAgKi8NCiANCkBAIC00MDcsNiArNDA4LDE0IEBA
DQogICovDQogI2RlZmluZSBDT05GSUdfSVBfTUFTUV9MT09TRV9ERUZBVUxU
IDENCiANCisvKg0KKyAqCVVzZSBkYWRkciBhbmQgZHBvcnQgYXMga2V5cyB3
aGVuIElQX01BU1FfRl9NUE9SVCBpcyBzZXQuDQorICoJVGhpcyB3aWxsIHJl
ZHVjZSBDUFUgdXNhZ2Ugd2hlbiByZWRpcmVjdGluZyBtYW55IGNvbm5lY3Rp
b25zIHRvDQorICoJaW50ZXJuYWwgc2VydmVycy4NCisgKg0KKyAqCUJ5IGRl
ZmF1bHQgdXNlIGRhZGRyIGFuZCBkcG9ydCBhcyBrZXlzIHRvIG9wdGltaXpl
IGZvciByZWRpcmVjdG9yDQorICovDQorI2RlZmluZSBDT05GSUdfSVBfTUFT
UV9PUFRfUkVESVJFQ1RPUiAxDQogDQogLyoNCiAgKiAJU2V0IG1hc3EgZXhw
aXJhdGlvbiAoZGVsZXRpb24pIGFuZCBhZGRzIHRpbWVyLA0KQEAgLTQ1MCw2
ICs0NTksMTcgQEANCiAJCQlfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoMCkp
Ow0KICAgICAgICAgICAgICAgICByZXR1cm4gMDsNCiAgICAgICAgIH0NCisj
aWZkZWYJQ09ORklHX0lQX01BU1FfT1BUX1JFRElSRUNUT1INCisJLyoNCisJ
ICoJSGFzaCBieSBwcm90byxte2FkZHIscG9ydH0sZHthZGRyLHBvcnR9DQor
CSAqLw0KKwlpZiAoKG1zLT5mbGFncyAmIChJUF9NQVNRX0ZfTk9fREFERFIg
fCBJUF9NQVNRX0ZfTk9fRFBPUlQgfA0KKwkJSVBfTUFTUV9GX05PX1NBRERS
IHwgSVBfTUFTUV9GX05PX1NQT1JUIHwNCisJCUlQX01BU1FfRl9ETE9PU0Ug
fCBJUF9NQVNRX0ZfTVBPUlQpKSA9PSBJUF9NQVNRX0ZfTVBPUlQpDQorCQlo
YXNoID0gaXBfbWFzcV9oYXNoX2tleShtcy0+cHJvdG9jb2wsDQorCQkJbXMt
Pm1hZGRyXm1zLT5kYWRkciwgbXMtPm1wb3J0Xm1zLT5kcG9ydCk7DQorCWVs
c2UNCisjZW5kaWYNCiAgICAgICAgIC8qDQogICAgICAgICAgKglIYXNoIGJ5
IHByb3RvLG17YWRkcixwb3J0fQ0KICAgICAgICAgICovDQpAQCAtNDU4LDYg
KzQ3OCwxNyBAQA0KIAlhdG9taWNfaW5jKCZtcy0+cmVmY250KTsNCiAgICAg
ICAgIGlwX21hc3FfbV90YWJbaGFzaF0gPSBtczsNCiANCisjaWZkZWYJQ09O
RklHX0lQX01BU1FfT1BUX1JFRElSRUNUT1INCisJLyoNCisJICoJSGFzaCBi
eSBwcm90byxze2FkZHIscG9ydH0sZHthZGRyLHBvcnR9DQorCSAqLw0KKwlp
ZiAoKG1zLT5mbGFncyAmIChJUF9NQVNRX0ZfTk9fREFERFIgfCBJUF9NQVNR
X0ZfTk9fRFBPUlQgfA0KKwkJSVBfTUFTUV9GX05PX1NBRERSIHwgSVBfTUFT
UV9GX05PX1NQT1JUIHwNCisJCUlQX01BU1FfRl9ETE9PU0UgfCBJUF9NQVNR
X0ZfTVBPUlQpKSA9PSBJUF9NQVNRX0ZfTVBPUlQpDQorCQloYXNoID0gaXBf
bWFzcV9oYXNoX2tleShtcy0+cHJvdG9jb2wsDQorCQkJbXMtPnNhZGRyXm1z
LT5kYWRkciwgbXMtPnNwb3J0Xm1zLT5kcG9ydCk7DQorCWVsc2UNCisjZW5k
aWYNCiAgICAgICAgIC8qDQogICAgICAgICAgKglIYXNoIGJ5IHByb3RvLHN7
YWRkcixwb3J0fQ0KICAgICAgICAgICovDQpAQCAtNDg2LDYgKzUxNywxNyBA
QA0KIAkJCV9fYnVpbHRpbl9yZXR1cm5fYWRkcmVzcygwKSk7DQogICAgICAg
ICAgICAgICAgIHJldHVybiAwOw0KICAgICAgICAgfQ0KKyNpZmRlZglDT05G
SUdfSVBfTUFTUV9PUFRfUkVESVJFQ1RPUg0KKwkvKg0KKwkgKglVTmhhc2gg
YnkgbXthZGRyLHBvcnR9LGR7YWRkcixwb3J0fQ0KKwkgKi8NCisJaWYgKCht
cy0+ZmxhZ3MgJiAoSVBfTUFTUV9GX05PX0RBRERSIHwgSVBfTUFTUV9GX05P
X0RQT1JUIHwNCisJCUlQX01BU1FfRl9OT19TQUREUiB8IElQX01BU1FfRl9O
T19TUE9SVCB8DQorCQlJUF9NQVNRX0ZfRExPT1NFIHwgSVBfTUFTUV9GX01Q
T1JUKSkgPT0gSVBfTUFTUV9GX01QT1JUKQ0KKwkJaGFzaCA9IGlwX21hc3Ff
aGFzaF9rZXkobXMtPnByb3RvY29sLA0KKwkJCW1zLT5tYWRkcl5tcy0+ZGFk
ZHIsIG1zLT5tcG9ydF5tcy0+ZHBvcnQpOw0KKwllbHNlDQorI2VuZGlmDQog
ICAgICAgICAvKg0KICAgICAgICAgICoJVU5oYXNoIGJ5IG17YWRkcixwb3J0
fQ0KICAgICAgICAgICovDQpAQCAtNDk3LDYgKzUzOSwxNyBAQA0KICAgICAg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgICAgICB9
DQogDQorI2lmZGVmCUNPTkZJR19JUF9NQVNRX09QVF9SRURJUkVDVE9SDQor
CS8qDQorCSAqCVVOaGFzaCBieSBze2FkZHIscG9ydH0sZHthZGRyLHBvcnR9
DQorCSAqLw0KKwlpZiAoKG1zLT5mbGFncyAmIChJUF9NQVNRX0ZfTk9fREFE
RFIgfCBJUF9NQVNRX0ZfTk9fRFBPUlQgfA0KKwkJSVBfTUFTUV9GX05PX1NB
RERSIHwgSVBfTUFTUV9GX05PX1NQT1JUIHwNCisJCUlQX01BU1FfRl9ETE9P
U0UgfCBJUF9NQVNRX0ZfTVBPUlQpKSA9PSBJUF9NQVNRX0ZfTVBPUlQpDQor
CQloYXNoID0gaXBfbWFzcV9oYXNoX2tleShtcy0+cHJvdG9jb2wsDQorCQkJ
bXMtPnNhZGRyXm1zLT5kYWRkciwgbXMtPnNwb3J0Xm1zLT5kcG9ydCk7DQor
CWVsc2UNCisjZW5kaWYNCiAgICAgICAgIC8qDQogICAgICAgICAgKglVTmhh
c2ggYnkgc3thZGRyLHBvcnR9DQogICAgICAgICAgKi8NCkBAIC01MzYsNiAr
NTg5LDMxIEBADQogICAgICAgICB1bnNpZ25lZCBoYXNoOw0KICAgICAgICAg
c3RydWN0IGlwX21hc3EgKm1zID0gTlVMTDsNCiANCisjaWZkZWYJQ09ORklH
X0lQX01BU1FfT1BUX1JFRElSRUNUT1INCisJLyoNCisJICoJRmlyc3QgcHJp
b3JpdHkgZm9yIGNvbm5lY3Rpb25zIHRvIGludGVybmFsIHNlcnZlcnMNCisJ
ICovDQorCWhhc2ggPSBpcF9tYXNxX2hhc2hfa2V5KHByb3RvY29sLCBkX2Fk
ZHJec19hZGRyLCBkX3BvcnRec19wb3J0KTsNCisNCisgICAgICAgIGZvciht
cyA9IGlwX21hc3FfbV90YWJbaGFzaF07IG1zIDsgbXMgPSBtcy0+bV9saW5r
KSB7DQorCQlpZiAoKChtcy0+ZmxhZ3MgJiAoSVBfTUFTUV9GX05PX0RBRERS
IHwgSVBfTUFTUV9GX05PX0RQT1JUIHwNCisJCSAgICBJUF9NQVNRX0ZfTk9f
U0FERFIgfCBJUF9NQVNRX0ZfTk9fU1BPUlQgfA0KKwkJICAgIElQX01BU1Ff
Rl9ETE9PU0UgfCBJUF9NQVNRX0ZfTVBPUlQpKSA9PSBJUF9NQVNRX0ZfTVBP
UlQpICYmDQorCQkgICAgc19wb3J0PT1tcy0+ZHBvcnQgJiYgc19hZGRyPT1t
cy0+ZGFkZHIgJiYNCisJCSAgICBkX3BvcnQ9PW1zLT5tcG9ydCAmJiBwcm90
b2NvbD09bXMtPnByb3RvY29sICYmDQorCQkgICAgZF9hZGRyPT1tcy0+bWFk
ZHINCisJCSAgICApIHsNCisJCQlJUF9NQVNRX0RFQlVHKDIsICJsb29rL2lu
ICVkICUwOFg6JTA0aFgtPiUwOFg6JTA0aFggT0tcbiIsDQorCQkJICAgICAg
IHByb3RvY29sLA0KKwkJCSAgICAgICBzX2FkZHIsDQorCQkJICAgICAgIHNf
cG9ydCwNCisJCQkgICAgICAgZF9hZGRyLA0KKwkJCSAgICAgICBkX3BvcnQp
Ow0KKwkJCWF0b21pY19pbmMoJm1zLT5yZWZjbnQpOw0KKyAgICAgICAgICAg
ICAgICAgICAgICAgIGdvdG8gb3V0Ow0KKwkJfQ0KKyAgICAgICAgfQ0KKyNl
bmRpZg0KICAgICAgICAgaGFzaCA9IGlwX21hc3FfaGFzaF9rZXkocHJvdG9j
b2wsIGRfYWRkciwgZF9wb3J0KTsNCiANCiAgICAgICAgIGZvcihtcyA9IGlw
X21hc3FfbV90YWJbaGFzaF07IG1zIDsgbXMgPSBtcy0+bV9saW5rKSB7DQpA
QCAtNTg2LDYgKzY2NCwzMyBAQA0KICAgICAgICAgdW5zaWduZWQgaGFzaDsN
CiAgICAgICAgIHN0cnVjdCBpcF9tYXNxICptcyA9IE5VTEw7DQogDQorI2lm
ZGVmCUNPTkZJR19JUF9NQVNRX09QVF9SRURJUkVDVE9SDQorCS8qDQorCSAq
CUZpcnN0IHByaW9yaXR5IGZvciBjb25uZWN0aW9ucyB0byBpbnRlcm5hbCBz
ZXJ2ZXJzDQorCSAqLw0KKwloYXNoID0gaXBfbWFzcV9oYXNoX2tleShwcm90
b2NvbCwgc19hZGRyXmRfYWRkciwgc19wb3J0XmRfcG9ydCk7DQorDQorICAg
ICAgICBmb3IobXMgPSBpcF9tYXNxX3NfdGFiW2hhc2hdOyBtcyA7IG1zID0g
bXMtPnNfbGluaykgew0KKwkJaWYgKCgobXMtPmZsYWdzICYgKElQX01BU1Ff
Rl9OT19EQUREUiB8IElQX01BU1FfRl9OT19EUE9SVCB8DQorCQkgICAgSVBf
TUFTUV9GX05PX1NBRERSIHwgSVBfTUFTUV9GX05PX1NQT1JUIHwNCisJCSAg
ICBJUF9NQVNRX0ZfRExPT1NFIHwgSVBfTUFTUV9GX01QT1JUKSkgPT0gSVBf
TUFTUV9GX01QT1JUKSAmJg0KKwkJICAgIGRfYWRkcj09bXMtPmRhZGRyICYm
IGRfcG9ydD09bXMtPmRwb3J0ICYmDQorCQkgICAgc19hZGRyPT1tcy0+c2Fk
ZHIgJiYgc19wb3J0PT1tcy0+c3BvcnQgJiYNCisJCSAgICBwcm90b2NvbD09
bXMtPnByb3RvY29sDQorICAgICAgICAgICAgICAgICAgICkgew0KKwkJCUlQ
X01BU1FfREVCVUcoMiwgImxrL291dDAgJWQgJTA4WDolMDRoWC0+JTA4WDol
MDRoWCBPS1xuIiwNCisJCQkgICAgICAgcHJvdG9jb2wsDQorCQkJICAgICAg
IHNfYWRkciwNCisJCQkgICAgICAgc19wb3J0LA0KKwkJCSAgICAgICBkX2Fk
ZHIsDQorCQkJICAgICAgIGRfcG9ydCk7DQorDQorCQkJYXRvbWljX2luYygm
bXMtPnJlZmNudCk7DQorCQkJZ290byBvdXQ7DQorCQl9DQorDQorICAgICAg
ICB9DQorI2VuZGlmDQogCS8qCQ0KIAkgKglDaGVjayBmb3IgImZ1bGwiIGFk
ZHJlc3NlZCBlbnRyaWVzDQogCSAqLw0KQEAgLTExNTcsMTEgKzEyNjIsMTYg
QEANCiAJCSAqLw0KIA0KIAkJaWYgKCBtcy0+ZmxhZ3MgJiBJUF9NQVNRX0Zf
Tk9fU1BPUlQgJiYgbXMtPnByb3RvY29sID09IElQUFJPVE9fVENQICkgew0K
KyNpZm5kZWYJQ09ORklHX0lQX01BU1FfT1BUX1JFRElSRUNUT1INCiAJCQlt
cy0+ZmxhZ3MgJj0gfklQX01BU1FfRl9OT19TUE9SVDsNCisjZW5kaWYNCiAN
CiAJCQl3cml0ZV9sb2NrKCZfX2lwX21hc3FfbG9jayk7DQogCQkJDQogCQkJ
aXBfbWFzcV91bmhhc2gobXMpOw0KKyNpZmRlZglDT05GSUdfSVBfTUFTUV9P
UFRfUkVESVJFQ1RPUg0KKwkJCW1zLT5mbGFncyAmPSB+SVBfTUFTUV9GX05P
X1NQT1JUOw0KKyNlbmRpZg0KIAkJCW1zLT5zcG9ydCA9IGgucG9ydHBbMF07
DQogCQkJaXBfbWFzcV9oYXNoKG1zKTsJLyogaGFzaCBvbiBuZXcgc3BvcnQg
Ki8NCiANCkBAIC0yMDExLDE2ICsyMTIxLDQ4IEBADQogCQkJbXMtPmRhZGRy
ID0gaXBoLT5zYWRkcjsNCiAJCX0gZWxzZSB7DQogICAgICAgICAgICAgICAg
IGlmICggbXMtPmZsYWdzICYgSVBfTUFTUV9GX05PX0RQT1JUICkgeyAvKiAg
JiYgbXMtPnByb3RvY29sID09IElQUFJPVE9fVENQICkgeyAqLw0KKyNpZmRl
ZglDT05GSUdfSVBfTUFTUV9PUFRfUkVESVJFQ1RPUg0KKwkJCWlmIChtcy0+
ZmxhZ3MgJiBJUF9NQVNRX0ZfTVBPUlQpIHsNCisJCQkJd3JpdGVfbG9jaygm
X19pcF9tYXNxX2xvY2spOw0KKw0KKwkJCQlpcF9tYXNxX3VuaGFzaChtcyk7
DQorCQkJCW1zLT5mbGFncyAmPSB+SVBfTUFTUV9GX05PX0RQT1JUOw0KKwkJ
CQltcy0+ZHBvcnQgPSBoLnBvcnRwWzBdOw0KKwkJCQlpcF9tYXNxX2hhc2go
bXMpOwkvKiBoYXNoIG9uIG5ldyBkcG9ydCAqLw0KKw0KKwkJCQl3cml0ZV91
bmxvY2soJl9faXBfbWFzcV9sb2NrKTsNCisJCQl9IGVsc2Ugew0KKwkJCQlt
cy0+ZmxhZ3MgJj0gfklQX01BU1FfRl9OT19EUE9SVDsNCisJCQkJbXMtPmRw
b3J0ID0gaC5wb3J0cFswXTsNCisJCQl9DQorI2Vsc2UNCiAgICAgICAgICAg
ICAgICAgICAgICAgICBtcy0+ZmxhZ3MgJj0gfklQX01BU1FfRl9OT19EUE9S
VDsNCiAgICAgICAgICAgICAgICAgICAgICAgICBtcy0+ZHBvcnQgPSBoLnBv
cnRwWzBdOw0KKyNlbmRpZg0KIA0KICAgICAgICAgICAgICAgICAgICAgICAg
IElQX01BU1FfREVCVUcoMSwgImlwX2Z3X2RlbWFzcXVlcmFkZSgpOiBmaWxs
ZWQgZHBvcnQ9JWRcbiIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG50b2hzKG1zLT5kcG9ydCkpOw0KIA0KICAgICAgICAgICAgICAgICB9
DQogICAgICAgICAgICAgICAgIGlmIChtcy0+ZmxhZ3MgJiBJUF9NQVNRX0Zf
Tk9fREFERFIgKSB7IC8qICAmJiBtcy0+cHJvdG9jb2wgPT0gSVBQUk9UT19U
Q1ApICB7ICovDQorI2lmZGVmCUNPTkZJR19JUF9NQVNRX09QVF9SRURJUkVD
VE9SDQorCQkJaWYgKG1zLT5mbGFncyAmIElQX01BU1FfRl9NUE9SVCkgew0K
KwkJCQl3cml0ZV9sb2NrKCZfX2lwX21hc3FfbG9jayk7DQorDQorCQkJCWlw
X21hc3FfdW5oYXNoKG1zKTsNCisJCQkJbXMtPmZsYWdzICY9IH5JUF9NQVNR
X0ZfTk9fREFERFI7DQorCQkJCW1zLT5kYWRkciA9IGlwaC0+c2FkZHI7DQor
CQkJCWlwX21hc3FfaGFzaChtcyk7CS8qIGhhc2ggb24gbmV3IGRhZGRyICov
DQorDQorCQkJCXdyaXRlX3VubG9jaygmX19pcF9tYXNxX2xvY2spOw0KKwkJ
CX0gZWxzZSB7DQorCQkJCW1zLT5mbGFncyAmPSB+SVBfTUFTUV9GX05PX0RB
RERSOw0KKwkJCQltcy0+ZGFkZHIgPSBpcGgtPnNhZGRyOw0KKwkJCX0NCisj
ZWxzZQ0KICAgICAgICAgICAgICAgICAgICAgICAgIG1zLT5mbGFncyAmPSB+
SVBfTUFTUV9GX05PX0RBRERSOw0KICAgICAgICAgICAgICAgICAgICAgICAg
IG1zLT5kYWRkciA9IGlwaC0+c2FkZHI7DQorI2VuZGlmDQogDQogICAgICAg
ICAgICAgICAgICAgICAgICAgSVBfTUFTUV9ERUJVRygxLCAiaXBfZndfZGVt
YXNxdWVyYWRlKCk6IGZpbGxlZCBkYWRkcj0lbFhcbiIsDQogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG50b2hsKG1zLT5kYWRkcikpOw0K
--214042346-1213392944-928539587=:28904--

-
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/