Skip to contentSkip to conversation

net/mlx4_core: Fix error handling in mlx4_init_port_info.

PATCH In review Tarick Bedeir 4 participants 4 messages May 13, 2018 – May 14, 2018

Subsystems (4)
lore
Share & tools
lore
#0 lore raw

PATCH v2 1/1 net/mlx4_core: Fix error handling in mlx4_init_port_info.

Avoid exiting the function with a lingering sysfs file (if the first call to device_create_file() fails while the second succeeds), and avoid calling devlink_port_unregister() twice.

In other words, either mlx4_init_port_info() succeeds and returns zero, or it fails, returns non-zero, and requires no cleanup.

Fixes 096335b3f983 ("mlx4_core: Allow dynamic MTU configuration for IB

ports")

---
v1 -> v2: Added "Fixes" tag.

---
 drivers/net/ethernet/mellanox/mlx4/main.c | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)
drivers/net/ethernet/mellanox/mlx4/main.c +3 -1
index 4d84cab77105..e8a3a45d0b53 100644
@@ -3007,6 +3007,7 @@ static int mlx4_init_port_info(struct mlx4_dev *dev, int port)
 		mlx4_err(dev, "Failed to create file for port %d\n", port);
 		devlink_port_unregister(&info->devlink_port);
 		info->port = -1;
+		return err;
 	}
 
 	sprintf(info->dev_mtu_name, "mlx4_port%d_mtu", port);
@@ -3028,9 +3029,10 @@ static int mlx4_init_port_info(struct mlx4_dev *dev, int port)
 				   &info->port_attr);
 		devlink_port_unregister(&info->devlink_port);
 		info->port = -1;
+		return err;
 	}
 
-	return err;
+	return 0;
 }
 
 static void mlx4_cleanup_port_info(struct mlx4_port_info *info)
Signature · 1 line
2.17.0.441.gb46fe60e1d-goog
Reviewed-by on v2 1/1
#1 lore raw
Quoted 9 lines · Tarick Bedeir

Avoid exiting the function with a lingering sysfs file (if the first call to device_create_file() fails while the second succeeds), and avoid calling devlink_port_unregister() twice.

In other words, either mlx4_init_port_info() succeeds and returns zero, or it fails, returns non-zero, and requires no cleanup.

Fixes 096335b3f983 ("mlx4_core: Allow dynamic MTU configuration for IB

ports")

Please don't break "Fixes" lines, it complicates "grep".

IMHO, general cleanup exit point is needed in this function (goto ...), but your fix is good enough too. Thanks for doing it.

Reviewed-by on v2 1/1
#2 lore raw
In reply to Tarick Bedeir
Quoted 31 lines · Tarick Bedeir

Avoid exiting the function with a lingering sysfs file (if the first call to device_create_file() fails while the second succeeds), and avoid calling devlink_port_unregister() twice.

In other words, either mlx4_init_port_info() succeeds and returns zero, or it fails, returns non-zero, and requires no cleanup.

Fixes 096335b3f983 ("mlx4_core: Allow dynamic MTU configuration for IB

ports")

---
v1 -> v2: Added "Fixes" tag.

---
  drivers/net/ethernet/mellanox/mlx4/main.c | 4 +++-
  1 file changed, 3 insertions(+), 1 deletion(-)
drivers/net/ethernet/mellanox/mlx4/main.c +1 -0
index 4d84cab77105..e8a3a45d0b53 100644
@@ -3007,6 +3007,7 @@ static int mlx4_init_port_info(struct mlx4_dev *dev, int port)
  		mlx4_err(dev, "Failed to create file for port %d\n", port);
  		devlink_port_unregister(&info->devlink_port);
  		info->port = -1;
+		return err;
  	}
 
  	sprintf(info->dev_mtu_name, "mlx4_port%d_mtu", port);
@@ -3028,9 +3029,10 @@ static int mlx4_init_port_info(struct mlx4_dev *dev, int port)
  				   &info->port_attr);

drivers/net/ethernet/mellanox/mlx4/main.c static int mlx4_init_port_info(struct mlx4_dev *dev, int port) · line 3038

Quoted 10 lines
drivers/net/ethernet/mellanox/mlx4/main.c +2 -1
  		devlink_port_unregister(&info->devlink_port);
  		info->port = -1;
+		return err;
  	}
 
-	return err;
+	return 0;
  }
 
  static void mlx4_cleanup_port_info(struct mlx4_port_info *info)

Thanks for you patch.

Dave, please queue for -stable.

Best,
Tariq

maintainer
#3 lore raw
In reply to Tarick Bedeir

From: Tarick Bedeir <[email protected]>
Date: Sun, 13 May 2018 16:38:45 -0700

Quoted 4 lines

Avoid exiting the function with a lingering sysfs file (if the first call to device_create_file() fails while the second succeeds), and avoid calling devlink_port_unregister() twice.

Quoted 8 lines

In other words, either mlx4_init_port_info() succeeds and returns zero, or it fails, returns non-zero, and requires no cleanup.

Fixes 096335b3f983 ("mlx4_core: Allow dynamic MTU configuration for IB

ports")

---
v1 -> v2: Added "Fixes" tag.

Applied and queued up for -stable.