The directory /var/log 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/log 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/mlx5_rxtx.c | 33 ++++++++++++++++++++++++---------
 1 file changed, 24 insertions(+), 9 deletions(-)

diff --git a/drivers/net/mlx5/mlx5_rxtx.c b/drivers/net/mlx5/mlx5_rxtx.c
index 9c075f6a56..9e63d38524 100644
--- a/drivers/net/mlx5/mlx5_rxtx.c
+++ b/drivers/net/mlx5/mlx5_rxtx.c
@@ -6,12 +6,14 @@
 #include <stdint.h>
 #include <string.h>
 #include <stdlib.h>
+#include <unistd.h>
 
 #include <rte_mbuf.h>
 #include <rte_mempool.h>
 #include <rte_prefetch.h>
 #include <rte_common.h>
 #include <rte_branch_prediction.h>
+#include <rte_eal.h>
 #include <rte_ether.h>
 #include <rte_cycles.h>
 #include <rte_flow.h>
@@ -411,20 +413,33 @@ mlx5_dump_debug_information(const char *fname, const char 
*hex_title,
 {
        FILE *fd;
 
-       MKSTR(path, "%s/%s", MLX5_SYSTEM_LOG_DIR, fname);
-       fd = fopen(path, "a+");
-       if (!fd) {
-               DRV_LOG(WARNING, "cannot open %s for debug dump", path);
-               MKSTR(path2, "./%s", fname);
+       if (access(MLX5_SYSTEM_LOG_DIR, W_OK) == 0) {
+               MKSTR(path, "%s/%s", MLX5_SYSTEM_LOG_DIR, fname);
+               fd = fopen(path, "a+");
+               if (!fd)
+                       DRV_LOG(WARNING, "cannot open %s for debug dump", path);
+               else
+                       DRV_LOG(INFO, "New debug dump in file %s", path);
+       } else {
+               MKSTR(path2, "%s/%s", rte_eal_get_runtime_dir(), fname);
                fd = fopen(path2, "a+");
+               if (!fd)
+                       DRV_LOG(WARNING, "cannot open %s for debug dump", 
path2);
+               else
+                       DRV_LOG(INFO, "New debug dump in file %s", path2);
+       }
+
+       if (!fd) {
+               MKSTR(path3, "./%s", fname);
+               fd = fopen(path3, "a+");
                if (!fd) {
-                       DRV_LOG(ERR, "cannot open %s for debug dump", path2);
+                       DRV_LOG(ERR, "cannot open %s for debug dump", path3);
                        return;
+               } else {
+                       DRV_LOG(INFO, "New debug dump in file %s", path3);
                }
-               DRV_LOG(INFO, "New debug dump in file %s", path2);
-       } else {
-               DRV_LOG(INFO, "New debug dump in file %s", path);
        }
+
        if (hex_title)
                rte_hexdump(fd, hex_title, buf, hex_len);
        else
-- 
2.34.1

Reply via email to