Whamcloud - gitweb
LU-5528 ptlrpc: fix race between connect vs resend 23/11723/12
authorAlexander.Boyko <alexander_boyko@xyratex.com>
Wed, 20 Aug 2014 13:07:35 +0000 (17:07 +0400)
committerOleg Drokin <oleg.drokin@intel.com>
Tue, 23 Dec 2014 04:00:09 +0000 (04:00 +0000)
commit8645c6f7e95b81dedbc5d47a9ab76947343ed05e
treed6d2db244a6c261f302cb0fe9152a9a27c31f9c6
parentd1a717ed189a1245af1f96ecb701cd869956ef75
LU-5528 ptlrpc: fix race between connect vs resend

Buggy code at ptlrpc_connect_interpret()
finish:
rc = ptlrpc_import_recovery_state_machine(imp);
...
Set import connection flags
When import has FULL state ptlrpc_import_recovery_state_machine()
wakeup all waiters on import and all delayed request, which was
resented. And it could happened that request was send without
updated flags and AT is disabled. If such request is in progress
on the server, server drop the new instance, and could do early reply
for it. But this early reply confuse client, cause it wait real
reply(no AT for this request). Client try to touch buffer outside
reply and got EPROTO error.
The same bug existed for initital connect too. Import became FULL
before import connection flags was set.

Signed-off-by: Alexander Boyko <alexander_boyko@xyratex.com>
Xyratex-bug-id: MRP-2034
Change-Id: Ic6959e3194c23bdd88a7da1a8f0ea9b4cd4285f0
Reviewed-on: http://review.whamcloud.com/11723
Reviewed-by: Li Wei <wei.g.li@intel.com>
Tested-by: Jenkins
Tested-by: Maloo <hpdd-maloo@intel.com>
Reviewed-by: Alexander Boyko <alexander.boyko@seagate.com>
Reviewed-by: Liang Zhen <liang.zhen@intel.com>
Reviewed-by: Oleg Drokin <oleg.drokin@intel.com>
lustre/ptlrpc/import.c
lustre/ptlrpc/niobuf.c