Compare commits
No commits in common. 'c9' and 'i8c' have entirely different histories.
@ -1 +1 @@
|
||||
SOURCES/smartmontools-7.2.tar.gz
|
||||
SOURCES/smartmontools-7.1.tar.gz
|
||||
|
@ -1 +1 @@
|
||||
8d68241096f6ed5b1bbcd8b427fa4a881c1f3e33 SOURCES/smartmontools-7.2.tar.gz
|
||||
207dc2b50cab1c6fba7bc248665fbbe3189374e1 SOURCES/smartmontools-7.1.tar.gz
|
||||
|
@ -1,32 +0,0 @@
|
||||
diff -up smartmontools-7.2/smartd.cpp.capnotify smartmontools-7.2/smartd.cpp
|
||||
--- smartmontools-7.2/smartd.cpp.capnotify 2020-11-23 19:25:16.000000000 +0100
|
||||
+++ smartmontools-7.2/smartd.cpp 2021-06-16 12:06:03.985526022 +0200
|
||||
@@ -1020,6 +1020,8 @@ static void capabilities_drop_now()
|
||||
capng_clear(CAPNG_SELECT_BOTH);
|
||||
capng_updatev(CAPNG_ADD, (capng_type_t)(CAPNG_EFFECTIVE|CAPNG_PERMITTED),
|
||||
CAP_SYS_ADMIN, CAP_MKNOD, CAP_SYS_RAWIO, -1);
|
||||
+ capng_updatev(CAPNG_ADD, (capng_type_t)(CAPNG_BOUNDING_SET),
|
||||
+ CAP_SETGID, CAP_SETUID, CAP_CHOWN, CAP_FOWNER, CAP_DAC_OVERRIDE, -1);
|
||||
capng_apply(CAPNG_SELECT_BOTH);
|
||||
}
|
||||
|
||||
@@ -1030,9 +1032,8 @@ static void capabilities_check_config(de
|
||||
for (unsigned i = 0; i < configs.size(); i++) {
|
||||
dev_config & cfg = configs[i];
|
||||
if (!cfg.emailaddress.empty() || !cfg.emailcmdline.empty()) {
|
||||
- PrintOut(LOG_INFO, "Device: %s, --capabilites is set, mail will be suppressed.\n",
|
||||
+ PrintOut(LOG_INFO, "Device: %s, --capabilites is set, mail notification may not work.\n",
|
||||
cfg.name.c_str());
|
||||
- cfg.emailaddress.clear(); cfg.emailcmdline.clear();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1633,7 +1634,7 @@ static void Usage()
|
||||
#ifdef HAVE_LIBCAP_NG
|
||||
PrintOut(LOG_INFO," -C, --capabilities\n");
|
||||
PrintOut(LOG_INFO," Drop unneeded Linux process capabilities.\n"
|
||||
- " Warning: Mail notification does not work when used.\n\n");
|
||||
+ " Warning: Mail notification may not work when used.\n\n");
|
||||
#endif
|
||||
PrintOut(LOG_INFO," -d, --debug\n");
|
||||
PrintOut(LOG_INFO," Start smartd in debug mode\n\n");
|
@ -0,0 +1,85 @@
|
||||
From da45fc39390208c30b3ba656ccfb478e217b7401 Mon Sep 17 00:00:00 2001
|
||||
From: "Milan P. Gandhi" <mgandhi@redhat.com>
|
||||
Date: Mon, 17 Oct 2022 14:23:54 +0530
|
||||
Subject: [PATCH 1/3] scsiprint.cpp: Attempted fix to tickets 1272, 1331 and
|
||||
1346: Log sub-page handling
|
||||
|
||||
---
|
||||
smartmontools-7.1/scsiprint.cpp | 27 +++++++++++++++++----------
|
||||
1 file changed, 17 insertions(+), 10 deletions(-)
|
||||
|
||||
diff --git a/smartmontools-7.1/scsiprint.cpp b/smartmontools-7.1/scsiprint.cpp
|
||||
index 4c52268..1edb7c2 100644
|
||||
--- a/smartmontools-7.1/scsiprint.cpp
|
||||
+++ b/smartmontools-7.1/scsiprint.cpp
|
||||
@@ -118,8 +118,10 @@ static void
|
||||
scsiGetSupportedLogPages(scsi_device * device)
|
||||
{
|
||||
bool got_subpages = false;
|
||||
- int k, bump, err, payload_len, num_unreported, num_unreported_spg;
|
||||
- int payload_len_pg0_0 = 0;
|
||||
+ int k, bump, err, resp_len, num_unreported, num_unreported_spg;
|
||||
+ int resp_len_pg0_0 = 0;
|
||||
+ int resp_len_pg0_ff = 0; /* in SPC-4, response length of supported
|
||||
+ * log pages _and_ log subpages */
|
||||
const uint8_t * up;
|
||||
uint8_t sup_lpgs[LOG_RESP_LEN];
|
||||
|
||||
@@ -143,7 +145,7 @@ scsiGetSupportedLogPages(scsi_device * device)
|
||||
(scsi_version <= SCSI_VERSION_HIGHEST)) {
|
||||
/* unclear what code T10 will choose for SPC-6 */
|
||||
memcpy(sup_lpgs, gBuf, LOG_RESP_LEN);
|
||||
- payload_len_pg0_0 = sup_lpgs[3];
|
||||
+ resp_len_pg0_0 = sup_lpgs[3];
|
||||
if ((err = scsiLogSense(device, SUPPORTED_LPAGES, SUPP_SPAGE_L_SPAGE,
|
||||
gBuf, LOG_RESP_LONG_LEN,
|
||||
-1 /* just single not double fetch */))) {
|
||||
@@ -160,33 +162,38 @@ scsiGetSupportedLogPages(scsi_device * device)
|
||||
if (scsi_debugmode > 0)
|
||||
pout("%s supported subpages is bad SPF=%u SUBPG=%u\n",
|
||||
logSenRspStr, !! (0x40 & gBuf[0]), gBuf[2]);
|
||||
- } else
|
||||
+ } else {
|
||||
+ resp_len_pg0_ff = sg_get_unaligned_be16(gBuf + 2);
|
||||
got_subpages = true;
|
||||
+ }
|
||||
}
|
||||
- } else
|
||||
+ } else {
|
||||
memcpy(sup_lpgs, gBuf, LOG_RESP_LEN);
|
||||
+ resp_len_pg0_0 = sup_lpgs[3];
|
||||
+ }
|
||||
|
||||
if (got_subpages) {
|
||||
- payload_len = sg_get_unaligned_be16(gBuf + 2);
|
||||
- if (payload_len <= payload_len_pg0_0) {
|
||||
+ resp_len = sg_get_unaligned_be16(gBuf + 2);
|
||||
+ if (resp_len_pg0_ff <= resp_len_pg0_0) {
|
||||
/* something is rotten ....., ignore SUPP_SPAGE_L_SPAGE */
|
||||
- payload_len = payload_len_pg0_0;
|
||||
+ resp_len = resp_len_pg0_0;
|
||||
bump = 1;
|
||||
up = sup_lpgs + LOGPAGEHDRSIZE;
|
||||
got_subpages = false;
|
||||
(void)got_subpages; // not yet used below, suppress warning
|
||||
} else {
|
||||
+ resp_len = resp_len_pg0_ff;
|
||||
bump = 2;
|
||||
up = gBuf + LOGPAGEHDRSIZE;
|
||||
}
|
||||
} else {
|
||||
- payload_len = payload_len_pg0_0;
|
||||
+ resp_len = resp_len_pg0_0;
|
||||
bump = 1;
|
||||
up = sup_lpgs + LOGPAGEHDRSIZE;
|
||||
}
|
||||
|
||||
num_unreported_spg = 0;
|
||||
- for (num_unreported = 0, k = 0; k < payload_len; k += bump, up += bump) {
|
||||
+ for (num_unreported = 0, k = 0; k < resp_len; k += bump, up += bump) {
|
||||
uint8_t pg_num = 0x3f & up[0];
|
||||
uint8_t sub_pg_num = (0x40 & up[0]) ? up[1] : 0;
|
||||
|
||||
--
|
||||
2.35.1
|
||||
|
@ -0,0 +1,185 @@
|
||||
From b6064d5ba30ee355e71e7543fdb66ea99fcebae4 Mon Sep 17 00:00:00 2001
|
||||
From: "Milan P. Gandhi" <mgandhi@redhat.com>
|
||||
Date: Mon, 17 Oct 2022 14:24:42 +0530
|
||||
Subject: [PATCH 2/3] scsiprint.cpp: Add 'Accumulated power on time' field to
|
||||
'smartctl -a'
|
||||
|
||||
---
|
||||
smartmontools-7.1/scsiprint.cpp | 82 ++++++++++++++++++++++-----------
|
||||
1 file changed, 56 insertions(+), 26 deletions(-)
|
||||
|
||||
diff --git a/smartmontools-7.1/scsiprint.cpp b/smartmontools-7.1/scsiprint.cpp
|
||||
index 1edb7c2..81bed88 100644
|
||||
--- a/smartmontools-7.1/scsiprint.cpp
|
||||
+++ b/smartmontools-7.1/scsiprint.cpp
|
||||
@@ -120,7 +120,7 @@ scsiGetSupportedLogPages(scsi_device * device)
|
||||
bool got_subpages = false;
|
||||
int k, bump, err, resp_len, num_unreported, num_unreported_spg;
|
||||
int resp_len_pg0_0 = 0;
|
||||
- int resp_len_pg0_ff = 0; /* in SPC-4, response length of supported
|
||||
+ int resp_len_pg0_ff = 0; /* in SPC-4, response length of supported
|
||||
* log pages _and_ log subpages */
|
||||
const uint8_t * up;
|
||||
uint8_t sup_lpgs[LOG_RESP_LEN];
|
||||
@@ -163,13 +163,13 @@ scsiGetSupportedLogPages(scsi_device * device)
|
||||
pout("%s supported subpages is bad SPF=%u SUBPG=%u\n",
|
||||
logSenRspStr, !! (0x40 & gBuf[0]), gBuf[2]);
|
||||
} else {
|
||||
- resp_len_pg0_ff = sg_get_unaligned_be16(gBuf + 2);
|
||||
+ resp_len_pg0_ff = sg_get_unaligned_be16(gBuf + 2);
|
||||
got_subpages = true;
|
||||
- }
|
||||
+ }
|
||||
}
|
||||
} else {
|
||||
memcpy(sup_lpgs, gBuf, LOG_RESP_LEN);
|
||||
- resp_len_pg0_0 = sup_lpgs[3];
|
||||
+ resp_len_pg0_0 = sup_lpgs[3];
|
||||
}
|
||||
|
||||
if (got_subpages) {
|
||||
@@ -182,7 +182,7 @@ scsiGetSupportedLogPages(scsi_device * device)
|
||||
got_subpages = false;
|
||||
(void)got_subpages; // not yet used below, suppress warning
|
||||
} else {
|
||||
- resp_len = resp_len_pg0_ff;
|
||||
+ resp_len = resp_len_pg0_ff;
|
||||
bump = 2;
|
||||
up = gBuf + LOGPAGEHDRSIZE;
|
||||
}
|
||||
@@ -1162,12 +1162,14 @@ static const char * reassign_status[] = {
|
||||
// Returns 0 if ok else FAIL* bitmask. Note can have a status entry
|
||||
// and up to 2048 events (although would hope to have less). May set
|
||||
// FAILLOG if serious errors detected (in the future).
|
||||
+// When only_pow_time is true only print "Accumulated power on time"
|
||||
+// data, if available.
|
||||
static int
|
||||
-scsiPrintBackgroundResults(scsi_device * device)
|
||||
+scsiPrintBackgroundResults(scsi_device * device, bool only_pow_time)
|
||||
{
|
||||
+ bool noheader = true;
|
||||
+ bool firstresult = true;
|
||||
int num, j, m, err, truncated;
|
||||
- int noheader = 1;
|
||||
- int firstresult = 1;
|
||||
int retval = 0;
|
||||
uint8_t * ucp;
|
||||
static const char * hname = "Background scan results";
|
||||
@@ -1188,9 +1190,12 @@ scsiPrintBackgroundResults(scsi_device * device)
|
||||
// compute page length
|
||||
num = sg_get_unaligned_be16(gBuf + 2) + 4;
|
||||
if (num < 20) {
|
||||
- print_on();
|
||||
- pout("%s %s length is %d, no scan status\n", hname, logSenStr, num);
|
||||
- print_off();
|
||||
+ if (! only_pow_time) {
|
||||
+ print_on();
|
||||
+ pout("%s %s length is %d, no scan status\n", hname, logSenStr,
|
||||
+ num);
|
||||
+ print_off();
|
||||
+ }
|
||||
return FAILSMART;
|
||||
}
|
||||
truncated = (num > LOG_RESP_LONG_LEN) ? num : 0;
|
||||
@@ -1205,22 +1210,32 @@ scsiPrintBackgroundResults(scsi_device * device)
|
||||
switch (pc) {
|
||||
case 0:
|
||||
if (noheader) {
|
||||
- noheader = 0;
|
||||
- pout("%s log\n", hname);
|
||||
+ noheader = false;
|
||||
+ if (! only_pow_time)
|
||||
+ pout("%s log\n", hname);
|
||||
}
|
||||
- pout(" Status: ");
|
||||
+ if (! only_pow_time)
|
||||
+ pout(" Status: ");
|
||||
if ((pl < 16) || (num < 16)) {
|
||||
- pout("\n");
|
||||
+ if (! only_pow_time)
|
||||
+ pout("\n");
|
||||
break;
|
||||
}
|
||||
j = ucp[9];
|
||||
- if (j < (int)(sizeof(bms_status) / sizeof(bms_status[0])))
|
||||
- pout("%s\n", bms_status[j]);
|
||||
- else
|
||||
- pout("unknown [0x%x] background scan status value\n", j);
|
||||
+ if (! only_pow_time) {
|
||||
+ if (j < (int)(sizeof(bms_status) / sizeof(bms_status[0])))
|
||||
+ pout("%s\n", bms_status[j]);
|
||||
+ else
|
||||
+ pout("unknown [0x%x] background scan status value\n", j);
|
||||
+ }
|
||||
j = sg_get_unaligned_be32(ucp + 4);
|
||||
- pout(" Accumulated power on time, hours:minutes %d:%02d "
|
||||
- "[%d minutes]\n", (j / 60), (j % 60), j);
|
||||
+ pout("%sAccumulated power on time, hours:minutes %d:%02d",
|
||||
+ (only_pow_time ? "" : " "), (j / 60), (j % 60));
|
||||
+ if (only_pow_time) {
|
||||
+ pout("\n");
|
||||
+ break;
|
||||
+ } else
|
||||
+ pout(" [%d minutes]\n", j);
|
||||
jglb["power_on_time"]["hours"] = j / 60;
|
||||
jglb["power_on_time"]["minutes"] = j % 60;
|
||||
pout(" Number of background scans performed: %d, ",
|
||||
@@ -1232,9 +1247,12 @@ scsiPrintBackgroundResults(scsi_device * device)
|
||||
break;
|
||||
default:
|
||||
if (noheader) {
|
||||
- noheader = 0;
|
||||
- pout("\n%s log\n", hname);
|
||||
+ noheader = false;
|
||||
+ if (! only_pow_time)
|
||||
+ pout("\n%s log\n", hname);
|
||||
}
|
||||
+ if (only_pow_time)
|
||||
+ break;
|
||||
if (firstresult) {
|
||||
firstresult = 0;
|
||||
pout("\n # when lba(hex) [sk,asc,ascq] "
|
||||
@@ -1262,10 +1280,11 @@ scsiPrintBackgroundResults(scsi_device * device)
|
||||
num -= pl;
|
||||
ucp += pl;
|
||||
}
|
||||
- if (truncated)
|
||||
+ if (truncated && (! only_pow_time))
|
||||
pout(" >>>> log truncated, fetched %d of %d available "
|
||||
"bytes\n", LOG_RESP_LONG_LEN, truncated);
|
||||
- pout("\n");
|
||||
+ if (! only_pow_time)
|
||||
+ pout("\n");
|
||||
return retval;
|
||||
}
|
||||
|
||||
@@ -2447,6 +2466,17 @@ scsiPrintMain(scsi_device * device, const scsi_print_options & options)
|
||||
scsiGetSupportedLogPages(device);
|
||||
if (gTempLPage)
|
||||
scsiPrintTemp(device);
|
||||
+ }
|
||||
+ // in the 'smartctl -a" case only want: "Accumulated power on time"
|
||||
+ if ((! options.smart_background_log) && is_disk) {
|
||||
+ if (! checkedSupportedLogPages)
|
||||
+ scsiGetSupportedLogPages(device);
|
||||
+ res = 0;
|
||||
+ if (gBackgroundResultsLPage)
|
||||
+ res = scsiPrintBackgroundResults(device, true);
|
||||
+ any_output = true;
|
||||
+ }
|
||||
+ if (options.smart_vendor_attrib) {
|
||||
if (gStartStopLPage)
|
||||
scsiGetStartStopData(device);
|
||||
if (is_disk) {
|
||||
@@ -2488,7 +2518,7 @@ scsiPrintMain(scsi_device * device, const scsi_print_options & options)
|
||||
scsiGetSupportedLogPages(device);
|
||||
res = 0;
|
||||
if (gBackgroundResultsLPage)
|
||||
- res = scsiPrintBackgroundResults(device);
|
||||
+ res = scsiPrintBackgroundResults(device, false);
|
||||
else {
|
||||
pout("Device does not support Background scan results logging\n");
|
||||
failuretest(OPTIONAL_CMD, returnval|=FAILSMART);
|
||||
--
|
||||
2.35.1
|
||||
|
@ -0,0 +1,31 @@
|
||||
Index: trunk/smartmontools/scsiprint.cpp
|
||||
===================================================================
|
||||
--- smartmontools/scsiprint.cpp (revision 5076)
|
||||
+++ smartmontools/scsiprint.cpp (revision 5090)
|
||||
@@ -2340,6 +2340,6 @@
|
||||
!wce ? "Disabled" : "Enabled");
|
||||
}
|
||||
- } else
|
||||
any_output = true;
|
||||
+ }
|
||||
|
||||
if (options.drive_info)
|
||||
@@ -2463,12 +2463,10 @@
|
||||
if (gTempLPage)
|
||||
scsiPrintTemp(device);
|
||||
- }
|
||||
- // in the 'smartctl -a" case only want: "Accumulated power on time"
|
||||
- if ((! options.smart_background_log) && is_disk) {
|
||||
- if (! checkedSupportedLogPages)
|
||||
- scsiGetSupportedLogPages(device);
|
||||
- res = 0;
|
||||
- if (gBackgroundResultsLPage)
|
||||
- res = scsiPrintBackgroundResults(device, true);
|
||||
+ // in the 'smartctl -A' case only want: "Accumulated power on time"
|
||||
+ if ((! options.smart_background_log) && is_disk) {
|
||||
+ res = 0;
|
||||
+ if (gBackgroundResultsLPage)
|
||||
+ res = scsiPrintBackgroundResults(device, true);
|
||||
+ }
|
||||
any_output = true;
|
||||
}
|
@ -1,38 +0,0 @@
|
||||
diff -up smartmontools-7.2/os_linux.cpp.permsfix smartmontools-7.2/os_linux.cpp
|
||||
--- smartmontools-7.2/os_linux.cpp.permsfix 2021-11-02 22:08:51.956425716 +0100
|
||||
+++ smartmontools-7.2/os_linux.cpp 2021-11-02 22:09:55.928583584 +0100
|
||||
@@ -1022,7 +1022,7 @@ bool linux_aacraid_device::open()
|
||||
return set_err(ENOENT, "aac entry not found in /proc/devices");
|
||||
|
||||
//Create misc device file in /dev/ used for communication with driver
|
||||
- if(mknod(dev_name,S_IFCHR,makedev(mjr,aHost)))
|
||||
+ if(mknod(dev_name,S_IFCHR|0600,makedev(mjr,aHost)))
|
||||
return set_err(errno,"cannot create %s:%s",dev_name,strerror(errno));
|
||||
|
||||
afd = ::open(dev_name,O_RDWR);
|
||||
@@ -1298,14 +1298,14 @@ bool linux_megaraid_device::open()
|
||||
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));
|
||||
+ n1=mknod("/dev/megaraid_sas_ioctl_node", S_IFCHR|0600, 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));
|
||||
+ n1=mknod("/dev/megadev0", S_IFCHR|0600, makedev(mjr, 0));
|
||||
if(report > 0)
|
||||
pout("Creating /dev/megadev0 = %d\n", n1 >= 0 ? 0 : errno);
|
||||
if (n1 >= 0 || errno == EEXIST)
|
||||
@@ -2970,7 +2970,7 @@ bool linux_smart_interface::get_dev_mega
|
||||
n1=0;
|
||||
if (sscanf(line, "%d megaraid_sas_ioctl%n", &mjr, &n1) == 1 && n1 == 22) {
|
||||
scan_megasas = true;
|
||||
- n1=mknod("/dev/megaraid_sas_ioctl_node", S_IFCHR, makedev(mjr, 0));
|
||||
+ n1=mknod("/dev/megaraid_sas_ioctl_node", S_IFCHR|0600, makedev(mjr, 0));
|
||||
if(scsi_debugmode > 0)
|
||||
pout("Creating /dev/megaraid_sas_ioctl_node = %d\n", n1 >= 0 ? 0 : errno);
|
||||
if (n1 >= 0 || errno == EEXIST)
|
@ -1,6 +1,6 @@
|
||||
# command line options for smartd
|
||||
# Add -s /var/lib/smartmontools to enable state persistence
|
||||
smartd_opts="-q never --capabilities"
|
||||
smartd_opts="-q never"
|
||||
|
||||
# autogenerated config file options
|
||||
# smartd_conf_opts="-H -m root"
|
||||
|
Loading…
Reference in new issue