Package: sysfsutils
Version: 2.1.0+repack-1
Severity: important
Dear Maintainer,
I found that /etc/init.d/sysfs did not set any attributes. When trying
on the command line I got:
merkaba:/sys> LANG=C /etc/init.d/sysfsutils restart
Setting sysfs variables...#
When replacing #!/bin/sh -e with #!/bin/bash -e I get:
merkaba:/sys> LANG=C /etc/init.d/sysfsutils restart
Setting sysfs variables.../etc/init.d/sysfsutils: line 51: echo: write error:
Operation not permitted
When tracing via set -x I get:
Setting sysfs variables...+ sed 's/#.*$//; /^[[:space:]]*$/d;
s/^[[:space:]]*\([^=[:space:]]*\)[[:space:]]*\([^=[:space:]]*\)[[:space:]]*=[[:space:]]*\(.*\)/\1
\2 \3/' /etc/sysfs.conf
+ read f1 f2 f3
+ '[' module/pcie_aspm/parameters/policy = mode -a -n powersave -a -n '' ']'
+ '[' module/pcie_aspm/parameters/policy = owner -a -n powersave -a -n '' ']'
+ '[' module/pcie_aspm/parameters/policy -a -n powersave -a -z '' ']'
+ '[' -f /sys/module/pcie_aspm/parameters/policy ']'
+ echo -n powersave
+ echo powersave
/etc/init.d/sysfsutils: line 51: echo: write error: Operation not permitted
And indeed the parameter is no longer setable with kernel 3.2.9:
merkaba:/sys> LANG=C echo "powersave" > module/pcie_aspm/parameters/policy
echo: write error: operation not permitted
merkaba:/sys#1> ls -l module/pcie_aspm/parameters/policy
-rw-r--r-- 1 root root 4096 Mär 9 13:00 module/pcie_aspm/parameters/policy
merkaba:/sys> cat module/pcie_aspm/parameters/policy
[default] performance powersave
merkaba:/sys>
(whyever - anyway, newer kernels should handle PCIe ASPM just well)
But the script didn´t report the failure with
merkaba:/sys> ls -l /bin/sh
lrwxrwxrwx 1 root root 4 Mär 1 11:09 /bin/sh -> dash
except for a missing newline that Z-Shell marked with a "#"
Expected results:
The script reports the failure.
Even better:
The script does not abort on failure but tries to set the other attributes
in there as well while still reporting which attributes it failed to set
and why. I can open a different bug report about that if wanted.
Thanks,
Martin
-- System Information:
Debian Release: wheezy/sid
APT prefers unstable
APT policy: (500, 'unstable'), (120, 'experimental')
Architecture: amd64 (x86_64)
Kernel: Linux 3.2.0-2-amd64 (SMP w/4 CPU cores)
Locale: LANG=de_DE.UTF-8, LC_CTYPE=de_DE.UTF-8 (charmap=UTF-8)
Shell: /bin/sh linked to /bin/dash
Versions of packages sysfsutils depends on:
ii libc6 2.13-27
ii libsysfs2 2.1.0+repack-1
sysfsutils recommends no packages.
sysfsutils suggests no packages.
-- Configuration Files:
Please note: This was an attempt to make the script continue when writing
an attribute fails. But it does not do any error reporting.
I added
echo "$f2" > "/sys/$f1" 2>/dev/null || true
^^^^^^^^^^^^^^^^^^^
to it.
/etc/init.d/sysfsutils changed:
CONFFILE=/etc/sysfs.conf
[ -r "$CONFFILE" ] || exit 0
. /lib/lsb/init-functions
case "$1" in
start|restart|force-reload)
log_begin_msg "Setting sysfs variables..."
sed 's/#.*$//; /^[[:space:]]*$/d;
s/^[[:space:]]*\([^=[:space:]]*\)[[:space:]]*\([^=[:space:]]*\)[[:space:]]*=[[:space:]]*\(.*\)/\1
\2 \3/' \
$CONFFILE | {
while read f1 f2 f3; do
if [ "$f1" = "mode" -a -n "$f2" -a -n "$f3" ]; then
if [ -f "/sys/$f2" ]; then
chmod "$f3" "/sys/$f2"
else
log_failure_msg "unknown attribute $f2"
fi
elif [ "$f1" = "owner" -a -n "$f2" -a -n "$f3" ]; then
if [ -f "/sys/$f2" ]; then
chown "$f3" "/sys/$f2"
else
log_failure_msg "unknown attribute $f2"
fi
elif [ "$f1" -a -n "$f2" -a -z "$f3" ]; then
if [ -f "/sys/$f1" ]; then
# Some fields need a terminating newline, others
# need the terminating newline to be absent :-(
echo -n "$f2" > "/sys/$f1" 2>/dev/null ||
echo "$f2" > "/sys/$f1" 2>/dev/null || true
else
log_failure_msg "unknown attribute $f1"
fi
else
log_failure_msg "syntax error in $CONFFILE: '$f1' '$f2'
'$f3'"
log_end_msg 1
exit 1
fi
done
}
log_end_msg 0
;;
stop)
;;
*)
echo "Usage: /etc/init.d/sysfsutils {start|stop|force-reload|restart}"
exit 1
;;
esac
/etc/sysfs.conf changed:
module/pcie_aspm/parameters/policy = powersave
class/scsi_host/host1/link_power_management_policy = min_power
class/scsi_host/host2/link_power_management_policy = min_power
class/scsi_host/host3/link_power_management_policy = min_power
class/scsi_host/host4/link_power_management_policy = min_power
class/scsi_host/host5/link_power_management_policy = min_power
class/scsi_host/host6/link_power_management_policy = min_power
-- no debconf information
--
To UNSUBSCRIBE, email to [email protected]
with a subject of "unsubscribe". Trouble? Contact [email protected]