63 lines
2.4 KiB
Diff
63 lines
2.4 KiB
Diff
From f201d3a068d2bbdc36b89d248b521ba2da3ad741 Mon Sep 17 00:00:00 2001
|
|
From: chrfranke <authors@smartmontools.org>
|
|
Date: Thu, 11 Oct 2018 18:51:35 +0000
|
|
Subject: [PATCH 204/291] os_linux.cpp: Fix '-d megaraid' open crash on missing
|
|
/proc/devices. There is no /proc/devices on ESXi (see #800) and WSL.
|
|
|
|
git-svn-id: http://svn.code.sf.net/p/smartmontools/code/trunk@4809 4ea69e1a-61f1-4043-bf83-b5c94c648137
|
|
---
|
|
smartmontools/ChangeLog | 5 +++++
|
|
smartmontools/os_linux.cpp | 34 ++++++++++++++++++----------------
|
|
2 files changed, 23 insertions(+), 16 deletions(-)
|
|
|
|
diff --git a/smartmontools/os_linux.cpp b/smartmontools/os_linux.cpp
|
|
index 1a1b0858..9790818a 100644
|
|
--- a/smartmontools/os_linux.cpp
|
|
+++ b/smartmontools/os_linux.cpp
|
|
@@ -1299,24 +1299,26 @@ bool linux_megaraid_device::open()
|
|
}
|
|
/* Perform mknod of device ioctl node */
|
|
FILE * fp = fopen("/proc/devices", "r");
|
|
- while (fgets(line, sizeof(line), fp) != NULL) {
|
|
- int n1 = 0;
|
|
- if (sscanf(line, "%d megaraid_sas_ioctl%n", &mjr, &n1) == 1 && n1 == 22) {
|
|
- n1=mknod("/dev/megaraid_sas_ioctl_node", S_IFCHR, makedev(mjr, 0));
|
|
- if(report > 0)
|
|
- pout("Creating /dev/megaraid_sas_ioctl_node = %d\n", n1 >= 0 ? 0 : errno);
|
|
- if (n1 >= 0 || errno == EEXIST)
|
|
- break;
|
|
- }
|
|
- else if (sscanf(line, "%d megadev%n", &mjr, &n1) == 1 && n1 == 11) {
|
|
- n1=mknod("/dev/megadev0", S_IFCHR, makedev(mjr, 0));
|
|
- if(report > 0)
|
|
- pout("Creating /dev/megadev0 = %d\n", n1 >= 0 ? 0 : errno);
|
|
- if (n1 >= 0 || errno == EEXIST)
|
|
- break;
|
|
+ if (fp) {
|
|
+ while (fgets(line, sizeof(line), fp) != NULL) {
|
|
+ int n1 = 0;
|
|
+ if (sscanf(line, "%d megaraid_sas_ioctl%n", &mjr, &n1) == 1 && n1 == 22) {
|
|
+ n1=mknod("/dev/megaraid_sas_ioctl_node", S_IFCHR, makedev(mjr, 0));
|
|
+ if(report > 0)
|
|
+ pout("Creating /dev/megaraid_sas_ioctl_node = %d\n", n1 >= 0 ? 0 : errno);
|
|
+ if (n1 >= 0 || errno == EEXIST)
|
|
+ break;
|
|
+ }
|
|
+ else if (sscanf(line, "%d megadev%n", &mjr, &n1) == 1 && n1 == 11) {
|
|
+ n1=mknod("/dev/megadev0", S_IFCHR, makedev(mjr, 0));
|
|
+ if(report > 0)
|
|
+ pout("Creating /dev/megadev0 = %d\n", n1 >= 0 ? 0 : errno);
|
|
+ if (n1 >= 0 || errno == EEXIST)
|
|
+ break;
|
|
+ }
|
|
}
|
|
+ fclose(fp);
|
|
}
|
|
- fclose(fp);
|
|
|
|
/* Open Device IOCTL node */
|
|
if ((m_fd = ::open("/dev/megaraid_sas_ioctl_node", O_RDWR)) >= 0) {
|
|
--
|
|
2.19.1
|
|
|