Whamcloud - gitweb
b=24218 fix contention on ksock_tx_t
authorLiang Zhen <liang@whamcloud.com>
Fri, 19 Nov 2010 03:47:07 +0000 (11:47 +0800)
committerJohann Lombardi <johann.lombardi@oracle.com>
Wed, 2 Feb 2011 12:31:14 +0000 (13:31 +0100)
commit05f5babc05491d6d8289118927e355c57d5b7d48
tree80032ecaf357ad64ce69635093ba7c036e0e5696
parent6fba5c26e954318b143cf4303f5f4d0a2c00e879
b=24218 fix contention on ksock_tx_t

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