In npc_defrag_alloc_free_slots(), the fail_free_alloc rollback loop frees previously allocated MCAM entries after a partial allocation failure. If __npc_subbank_free() fails, we break out of the loop but rc was still zero from the successful npc_mcam_idx_2_subbank_idx() lookup, so the function incorrectly returned success. Set rc to -EFAULT so the failure is visible to callers. CC: Dan Carpenter Link: https://lore.kernel.org/netdev/adjNJEpILRZATB2N@stanley.mountain/ Fixes: 645c6e3c1999 ("octeontx2-af: npc: cn20k: virtual index support") Signed-off-by: Ratheesh Kannoth --- drivers/net/ethernet/marvell/octeontx2/af/cn20k/npc.c | 1 + 1 file changed, 1 insertion(+) diff --git a/drivers/net/ethernet/marvell/octeontx2/af/cn20k/npc.c b/drivers/net/ethernet/marvell/octeontx2/af/cn20k/npc.c index 2fcd0ee2b1e1..df192729ac1d 100644 --- a/drivers/net/ethernet/marvell/octeontx2/af/cn20k/npc.c +++ b/drivers/net/ethernet/marvell/octeontx2/af/cn20k/npc.c @@ -3541,6 +3541,7 @@ static int npc_defrag_alloc_free_slots(struct rvu *rvu, dev_err(rvu->dev, "%s: Error to free mcam idx=%u\n", __func__, save[i]); + rc = -EFAULT; break; } } -- 2.43.0