A race between unregister_reply & early reply.
When buffers are busy for the early transfer, they cannon be unlinked
by unregister_reply, so the RPC gets into UNREGISTERING state. The
coming reply_in_callback for the early RPC already has unlinked flag
set due to previous mdunlink attempt, but we handle it properly only
for UNILNK event, whereas this is PUT in this case.
Signed-off-by: Vitaly Fertman <vitaly.fertman@seagate.com>
Change-Id: I98a939e54d5d9298f217761c8c7289843e46162d
Seagate-bug-id: MRP-3323
Reviewed-by: Alexey Leonidovich Lyashkov <alexey.lyashkov@seagate.com>
Reviewed-by: Andriy Skulysh <andriy.skulysh@seagate.com>
Tested-by: Parinay Vijayprakash Kondekar <parinay.kondekar@seagate.com>
Reviewed-on: http://review.whamcloud.com/18934
Tested-by: Jenkins
Tested-by: Maloo <hpdd-maloo@intel.com>
Reviewed-by: Chris Horn <hornc@cray.com>
Reviewed-by: Andreas Dilger <andreas.dilger@intel.com>
Reviewed-by: Oleg Drokin <oleg.drokin@intel.com>
req->rq_early_count++; /* number received, client side */
- if (req->rq_replied) /* already got the real reply */
- goto out_wake;
+ /* already got the real reply or buffers are already unlinked */
+ if (req->rq_replied ||
+ req->rq_reply_unlinked == 1)
+ goto out_wake;
req->rq_early = 1;
req->rq_reply_off = ev->offset;