Whamcloud - gitweb
b=24218 fix race on ksock_tx_t::tx_resid
authorVitaly Fertman <vitaly.fertman@oracle.com>
Thu, 16 Dec 2010 00:19:37 +0000 (03:19 +0300)
committerVitaly Fertman <vitaly.fertman@oracle.com>
Fri, 17 Dec 2010 01:22:17 +0000 (04:22 +0300)
commit972d3eb8c5e154edded9b29a72e72c5bb9458770
treee258bf6417ecee85e6efe3f368e132ec7d3b1549
parentaee4bb65c1071271bd6a770297a5e1d2cc779d48
b=24218 fix race on ksock_tx_t::tx_resid

o=Liang
i=isaac

If a connection is closed before ksocknal_transmit() returns to
ksocknal_process_transmit(), then nobody has refcount on conn::ksnc_sock
and all pending ZC requests will be finalized by ksocknal_connsock_decref->
ksocknal_finalize_zcreq, ksocknal_finalize_zcreq will mark not-acked ZC
request as error by setting tx::tx_reside = -1.
This is race because ksocknal_process_transmit() will check tx::tx_resid
right after calling ksocknal_transmit(), and it can get tx->tx_resid != 0
and rc == 0 then hit later LASSERT(rc < 0).
lnet/klnds/socklnd/socklnd.c
lnet/klnds/socklnd/socklnd.h
lnet/klnds/socklnd/socklnd_cb.c