The directory /var/tmp may not be writable in a container's read-only mode. To address this issue, use the DPDK runtime directory as an alternative when /var/tmp is not writable.
Cc: bi...@nvidia.com Cc: dsosnow...@nvidia.com Cc: step...@networkplumber.org Cc: julien.meun...@nokia.com Signed-off-by: Yang Ming <ming.1.y...@nokia-sbell.com> --- drivers/net/mlx5/linux/mlx5_socket.c | 23 ++++++++++++++++++----- 1 file changed, 18 insertions(+), 5 deletions(-) diff --git a/drivers/net/mlx5/linux/mlx5_socket.c b/drivers/net/mlx5/linux/mlx5_socket.c index 6ce0e59643..270a105f1d 100644 --- a/drivers/net/mlx5/linux/mlx5_socket.c +++ b/drivers/net/mlx5/linux/mlx5_socket.c @@ -20,7 +20,8 @@ /* PMD socket service for tools. */ -#define MLX5_SOCKET_PATH "/var/tmp/dpdk_net_mlx5_%d" +#define MLX5_SOCKET_DPATH "/var/tmp" +#define MLX5_SOCKET_FNAME "dpdk_net_mlx5" #define MLX5_ALL_PORT_IDS 0xffff int server_socket = -1; /* Unix socket for primary process. */ @@ -177,8 +178,13 @@ mlx5_pmd_socket_init(void) ret = fcntl(server_socket, F_SETFL, flags | O_NONBLOCK); if (ret < 0) goto close; - snprintf(sun.sun_path, sizeof(sun.sun_path), MLX5_SOCKET_PATH, - getpid()); + + if (access(MLX5_SOCKET_DPATH, W_OK) == 0) + snprintf(sun.sun_path, sizeof(sun.sun_path), "%s/%s_%d", + MLX5_SOCKET_DPATH, MLX5_SOCKET_FNAME, getpid()); + else + snprintf(sun.sun_path, sizeof(sun.sun_path), "%s/%s_%d", + rte_eal_get_runtime_dir(), MLX5_SOCKET_FNAME, getpid()); remove(sun.sun_path); ret = bind(server_socket, (const struct sockaddr *)&sun, sizeof(sun)); if (ret < 0) { @@ -223,6 +229,13 @@ mlx5_pmd_socket_uninit(void) mlx5_pmd_socket_handle, NULL); claim_zero(close(server_socket)); server_socket = -1; - MKSTR(path, MLX5_SOCKET_PATH, getpid()); - claim_zero(remove(path)); + if (access(MLX5_SOCKET_DPATH, W_OK) == 0) { + MKSTR(path, "%s/%s_%d", MLX5_SOCKET_DPATH, MLX5_SOCKET_FNAME, + getpid()); + claim_zero(remove(path)); + } else { + MKSTR(path2, "%s/%s_%d", rte_eal_get_runtime_dir(), MLX5_SOCKET_FNAME, + getpid()); + claim_zero(remove(path2)); + } } -- 2.34.1