tag 436703 patch
thanks
Hi,
I'm attaching a patch that fixes it. It basically follows
http://linux-ata.org/shutdown.html and skips the drive shutdown when the
respective /sys/block/sdX/device/scsi_disk:*/manage_start_stop exists
(leaving it for the kernel to do).
After fixing, contact [EMAIL PROTECTED] We still have a chance
of Debian being the first in the list supporting this new kernel
"feature". ;)
bye,
Roland
--- 67_init_hddown.dpatch.orig 2007-08-25 13:22:06.000000000 +0200
+++ 67_init_hddown.dpatch 2007-08-25 13:22:09.000000000 +0200
@@ -8,7 +8,15 @@
@DPATCH@
--- sysvinit-2.86.ds1/src/hddown.c 2004-06-09 14:47:45.000000000 +0200
+++ sysvinit-2.86.ds1-new/src/hddown.c 2006-01-16 18:05:48.000000000 +0100
-@@ -25,18 +25,17 @@
+@@ -12,6 +12,7 @@
+ #include <string.h>
+ #include <fcntl.h>
+ #include <dirent.h>
++#include <glob.h>
+
+ #ifdef __linux__
+
+@@ -25,18 +26,17 @@
/*
* Find all IDE disks through /proc.
*/
@@ -29,7 +37,7 @@
if (strncmp(d->d_name, "hd", 2) != 0)
continue;
buf[0] = 0;
-@@ -50,21 +49,58 @@
+@@ -50,21 +50,67 @@
}
fclose(fp);
snprintf(buf, sizeof(buf), DEV_BASE "/%s", d->d_name);
@@ -50,14 +58,23 @@
+ */
+static int find_scsidisks(const char **dev, int maxdev, int *count)
+{
-+ if (*count < maxdev) dev[(*count)++] = DEV_BASE "/sda";
-+ if (*count < maxdev) dev[(*count)++] = DEV_BASE "/sdb";
-+ if (*count < maxdev) dev[(*count)++] = DEV_BASE "/sdc";
-+ if (*count < maxdev) dev[(*count)++] = DEV_BASE "/sdd";
-+ if (*count < maxdev) dev[(*count)++] = DEV_BASE "/sde";
-+ if (*count < maxdev) dev[(*count)++] = DEV_BASE "/sdf";
-+ if (*count < maxdev) dev[(*count)++] = DEV_BASE "/sdg";
-+ if (*count < maxdev) dev[(*count)++] = DEV_BASE "/sdh";
++#define MAX_SCSI_DISKS 8
++#define DEV_NAME (DEV_BASE "/sdX")
++#define DEV_NAME_SIZE sizeof(DEV_NAME)
++ static char devnames[MAX_SCSI_DISKS][DEV_NAME_SIZE];
++ int i;
++ glob_t gl;
++ char pattern[] =
++ "/sys/block/sdX/device/scsi_disk:*/manage_start_stop";
++
++ for (i = 0; i < MAX_SCSI_DISKS; i++) {
++ memcpy(devnames[i], DEV_NAME, DEV_NAME_SIZE);
++ devnames[i][DEV_NAME_SIZE - 2] = pattern[13] = 'a' + i;
++ if (glob(pattern, 0, NULL, &gl) == 0) /* found */
++ globfree(&gl);
++ else
++ if (*count < maxdev) dev[(*count)++] = devnames[i];
++ }
+
+ return 0;
+}
@@ -94,7 +111,7 @@
{
#ifndef WIN_STANDBYNOW1
#define WIN_STANDBYNOW1 0xE0
-@@ -74,9 +110,8 @@
+@@ -74,9 +120,8 @@
#endif
unsigned char args1[4] = {WIN_STANDBYNOW1,0,0,0};
unsigned char args2[4] = {WIN_STANDBYNOW2,0,0,0};
@@ -105,7 +122,7 @@
return -1;
if (ioctl(fd, HDIO_DRIVE_CMD, &args1) &&
-@@ -87,22 +122,37 @@
+@@ -87,22 +132,37 @@
}
/*