Package: hdparm
Version: 9.53+ds-1
Severity: normal
Tags: patch

hdparm tries to configure APM on every (non-USB/non-firewire) disk
in the system without first checking if APM is supported. This *should*
be OK, since hdparm fails gracefully in this case. However, sending APM
commands to disks that don't support it can have side-effects. I received a
report that this was causing bus resets on a Cavium Sabre system with the
disk below that would sometimes escalate to a boot failure.

It seems safer to just avoid sending APM command to disks when they don't
advertise support for it - see attached patch.

# hdparm -i /dev/sdj
/dev/sdj:

 Model=SDLFOCAM-800G-1HA1, FwRev=ZZ37RE92, SerialNo=0006C7CE
 Config={ NotMFM DTR>5Mbs RotSpdTol>.5% dStbOff FmtGapReq }
 RawCHS=16383/16/63, TrkSize=0, SectSize=0, ECCbytes=50
 BuffType=unknown, BuffSize=8192kB, MaxMultSect=16, MultSect=off
 CurCHS=16383/16/63, CurSects=16514064, LBA=yes, LBAsects=1562824368
 IORDY=on/off, tPIO={min:120,w/IORDY:120}, tDMA={min:120,rec:120}
 PIO modes: pio0 pio3 pio4
 DMA modes: mdma0 mdma1 mdma2
 UDMA modes: udma0 udma1 udma2 udma3 udma4 udma5 *udma6
 AdvancedPM=no WriteCache=enabled
 Drive conforms to: unknown: ATA/ATAPI-1,2,3,4,5,6,7

 * signifies the current active mode

# hdparm -B 254 /dev/sdj

/dev/sdj:
 setting Advanced Power Management level to 0xfe (254)
SG_IO: bad/missing sense data, sb[]: 70 00 05 00 00 00 00 0a 04 53 40 fe 21 04
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
 APM_level = not supported

-- System Information:
Debian Release: buster/sid
  APT prefers unstable
  APT policy: (500, 'unstable'), (1, 'experimental')
Architecture: amd64 (x86_64)

Kernel: Linux 4.15.0-rc8-amd64 (SMP w/4 CPU cores)
Locale: LANG=en_US.UTF-8, LC_CTYPE=en_US.UTF-8 (charmap=UTF-8), 
LANGUAGE=en_US.UTF-8 (charmap=UTF-8)
Shell: /bin/sh linked to /bin/dash
Init: systemd (via /run/systemd/system)
LSM: AppArmor: enabled

Versions of packages hdparm depends on:
ii  libc6     2.26-6
ii  lsb-base  9.20170808

Versions of packages hdparm recommends:
ii  powermgmt-base  1.31+nmu1

Versions of packages hdparm suggests:
pn  apmd  <none>

-- no debconf information
diff -urpN hdparm-9.53+ds.orig/debian/hdparm-functions 
hdparm-9.53+ds/debian/hdparm-functions
--- hdparm-9.53+ds.orig/debian/hdparm-functions 2018-01-06 05:37:12.000000000 
-0700
+++ hdparm-9.53+ds/debian/hdparm-functions      2018-02-21 15:23:49.516224316 
-0700
@@ -56,7 +56,15 @@ hdparm_try_apm()
             return 1
             ;;
     esac
-    return 0
+
+    # Only activate APM on disks that support it.
+    if [ -z "$ID_ATA_FEATURE_SET_APM" ]; then
+        local ID_ATA_FEATURE_SET_APM="$(udevadm info -n "$1" -q property 
2>/dev/null | sed -n 's/^ID_ATA_FEATURE_SET_APM=//p')" || true
+    fi
+    if [ "$ID_ATA_FEATURE_SET_APM" = "1" ]; then
+        return 0
+    fi
+    return 1
 }
 
 # parse /etc/hdparm.conf and spit out a list of options for the specified

Reply via email to