Message ID | 20200430182211.24211-1-julietk@linux.vnet.ibm.com |
---|---|
State | Accepted |
Delegated to: | David Miller |
Headers | show |
Series | [net] ibmvnic: Skip fatal error reset after passive init | expand |
From: Juliet Kim <julietk@linux.vnet.ibm.com> Date: Thu, 30 Apr 2020 13:22:11 -0500 > During MTU change, the following events may happen. > Client-driven CRQ initialization fails due to partner’s CRQ closed, > causing client to enqueue a reset task for FATAL_ERROR. Then passive > (server-driven) CRQ initialization succeeds, causing client to > release CRQ and enqueue a reset task for failover. If the passive > CRQ initialization occurs before the FATAL reset task is processed, > the FATAL error reset task would try to access a CRQ message queue > that was freed, causing an oops. The problem may be most likely to > occur during DLPAR add vNIC with a non-default MTU, because the DLPAR > process will automatically issue a change MTU request. > > Fix this by not processing fatal error reset if CRQ is passively > initialized after client-driven CRQ initialization fails. > > Signed-off-by: Juliet Kim <julietk@linux.vnet.ibm.com> Applied, thanks.
diff --git a/drivers/net/ethernet/ibm/ibmvnic.c b/drivers/net/ethernet/ibm/ibmvnic.c index 4bd33245bad6..3de549c6c693 100644 --- a/drivers/net/ethernet/ibm/ibmvnic.c +++ b/drivers/net/ethernet/ibm/ibmvnic.c @@ -2189,7 +2189,8 @@ static void __ibmvnic_reset(struct work_struct *work) rc = do_hard_reset(adapter, rwi, reset_state); rtnl_unlock(); } - } else { + } else if (!(rwi->reset_reason == VNIC_RESET_FATAL && + adapter->from_passive_init)) { rc = do_reset(adapter, rwi, reset_state); } kfree(rwi);
During MTU change, the following events may happen. Client-driven CRQ initialization fails due to partner’s CRQ closed, causing client to enqueue a reset task for FATAL_ERROR. Then passive (server-driven) CRQ initialization succeeds, causing client to release CRQ and enqueue a reset task for failover. If the passive CRQ initialization occurs before the FATAL reset task is processed, the FATAL error reset task would try to access a CRQ message queue that was freed, causing an oops. The problem may be most likely to occur during DLPAR add vNIC with a non-default MTU, because the DLPAR process will automatically issue a change MTU request. Fix this by not processing fatal error reset if CRQ is passively initialized after client-driven CRQ initialization fails. Signed-off-by: Juliet Kim <julietk@linux.vnet.ibm.com> --- drivers/net/ethernet/ibm/ibmvnic.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-)