mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-05-16 10:11:38 -04:00
net: mana: Don't overwrite port probe error with add_adev result
In mana_probe(), if mana_probe_port() fails for any port, the error
is stored in 'err' and the loop breaks. However, the subsequent
unconditional 'err = add_adev(gd, "eth")' overwrites this error.
If add_adev() succeeds, mana_probe() returns success despite ports
being left in a partially initialized state (ac->ports[i] == NULL).
Only call add_adev() when there is no prior error, so the probe
correctly fails and triggers mana_remove() cleanup.
Fixes: a69839d432 ("net: mana: Add support for auxiliary device")
Signed-off-by: Erni Sri Satya Vennela <ernis@linux.microsoft.com>
Link: https://patch.msgid.link/20260420124741.1056179-5-ernis@linux.microsoft.com
Reviewed-by: Simon Horman <horms@kernel.org>
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
This commit is contained in:
committed by
Paolo Abeni
parent
50271d7ec9
commit
a7fdaf069b
@@ -3680,10 +3680,9 @@ int mana_probe(struct gdma_dev *gd, bool resuming)
|
||||
if (!resuming) {
|
||||
for (i = 0; i < ac->num_ports; i++) {
|
||||
err = mana_probe_port(ac, i, &ac->ports[i]);
|
||||
/* we log the port for which the probe failed and stop
|
||||
* probes for subsequent ports.
|
||||
* Note that we keep running ports, for which the probes
|
||||
* were successful, unless add_adev fails too
|
||||
/* Log the port for which the probe failed, stop probing
|
||||
* subsequent ports, and skip add_adev.
|
||||
* mana_remove() will clean up already-probed ports.
|
||||
*/
|
||||
if (err) {
|
||||
dev_err(dev, "Probe Failed for port %d\n", i);
|
||||
@@ -3697,10 +3696,9 @@ int mana_probe(struct gdma_dev *gd, bool resuming)
|
||||
enable_work(&apc->queue_reset_work);
|
||||
err = mana_attach(ac->ports[i]);
|
||||
rtnl_unlock();
|
||||
/* we log the port for which the attach failed and stop
|
||||
* attach for subsequent ports
|
||||
* Note that we keep running ports, for which the attach
|
||||
* were successful, unless add_adev fails too
|
||||
/* Log the port for which the attach failed, stop
|
||||
* attaching subsequent ports, and skip add_adev.
|
||||
* mana_remove() will clean up already-attached ports.
|
||||
*/
|
||||
if (err) {
|
||||
dev_err(dev, "Attach Failed for port %d\n", i);
|
||||
@@ -3709,7 +3707,8 @@ int mana_probe(struct gdma_dev *gd, bool resuming)
|
||||
}
|
||||
}
|
||||
|
||||
err = add_adev(gd, "eth");
|
||||
if (!err)
|
||||
err = add_adev(gd, "eth");
|
||||
|
||||
schedule_delayed_work(&ac->gf_stats_work, MANA_GF_STATS_PERIOD);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user