OBS User unknown 2007-06-14 14:17:25 +00:00 committed by Git OBS Bridge
parent 7829692707
commit 01e570923f
3 changed files with 43 additions and 25 deletions

View File

@ -1,5 +1,5 @@
--- src/hddown.c
+++ src/hddown.c 2007-06-12 16:19:45.618059522 +0200
+++ src/hddown.c 2007-06-12 19:24:34.351142441 +0200
@@ -5,6 +5,9 @@
*/
char *v_hddown = "@(#)hddown.c 1.02 22-Apr-2003 miquels@cistron.nl";
@ -10,7 +10,7 @@
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
@@ -18,6 +21,315 @@ char *v_hddown = "@(#)hddown.c 1.02 22
@@ -18,6 +21,326 @@ char *v_hddown = "@(#)hddown.c 1.02 22
#include <sys/ioctl.h>
#include <linux/hdreg.h>
@ -77,27 +77,13 @@
+ if (ret != '0')
+ continue; /* not a hard disk */
+
+ fp = hdopen(SYS_BLK "/%s/size", d->d_name);
+ if ((long)fp <= 0) {
+ if ((long)fp < 0)
+ goto empty; /* error */
+ continue; /* no entry `size' */
+ }
+
+ ptr = fgets(buf, sizeof(buf), fp);
+ fclose(fp);
+ if (ptr == (char*)0)
+ continue; /* should not happen */
+
+ ptr = strstrip(buf);
+ if (*ptr == '\0')
+ continue; /* should not happen */
+
+ if (((size_t)atoll(buf) >= (1<<28)) && flush_cache_ext(d->d_name))
+ (*flags) |= DISK_EXTFLUSH;
+
+ if (d->d_name[0] == 'h') {
+ (*flags) |= DISK_IS_IDE;
+ if ((ret = flush_cache_ext(d->d_name))) {
+ if (ret < 0)
+ goto empty;
+ (*flags) |= DISK_EXTFLUSH;
+ }
+ break; /* old IDE disk not managed by kernel, out here */
+ }
+
@ -150,6 +136,11 @@
+ continue; /* no SATA but a real SCSI disk */
+
+ (*flags) |= (DISK_IS_IDE|DISK_IS_SATA);
+ if ((ret = flush_cache_ext(d->d_name))) {
+ if (ret < 0)
+ goto empty;
+ (*flags) |= DISK_EXTFLUSH;
+ }
+ break; /* new SATA disk to shutdown, out here */
+ }
+ }
@ -286,12 +277,32 @@
+#endif
+ unsigned char args[4+IDBYTES];
+ unsigned short *id = (unsigned short*)(&args[4]);
+ char buf[NAME_MAX+1];
+ char buf[NAME_MAX+1], *ptr;
+ int fd = -1, ret = 0;
+ FILE *fp;
+
+ fp = hdopen(SYS_BLK "/%s/size", device);
+ if ((long)fp <= 0) {
+ if ((long)fp < 0)
+ return -1; /* error */
+ goto out; /* no entry `size' */
+ }
+
+ ptr = fgets(buf, sizeof(buf), fp);
+ fclose(fp);
+ if (ptr == (char*)0)
+ goto out; /* should not happen */
+
+ ptr = strstrip(buf);
+ if (*ptr == '\0')
+ goto out; /* should not happen */
+
+ if ((size_t)atoll(buf) < (1<<28))
+ goto out; /* small disk */
+
+ ret = snprintf(buf, sizeof(buf), DEV_BASE "/%s", device);
+ if ((ret >= sizeof(buf)) || (ret < 0))
+ return -1;
+ return -1; /* error */
+
+ if ((fd = open(buf, O_RDONLY|O_NONBLOCK)) < 0)
+ goto out;
@ -326,7 +337,7 @@
#define MAX_DISKS 64
#define PROC_IDE "/proc/ide"
#define DEV_BASE "/dev"
@@ -104,7 +416,7 @@ int hddown(void)
@@ -104,7 +427,7 @@ int hddown(void)
return 0;
}

View File

@ -1,3 +1,8 @@
-------------------------------------------------------------------
Wed Jun 13 13:09:35 CEST 2007 - werner@suse.de
- bug #229210: avoid HDIO_DRIVE_CM ioctl for real SCSI disks.
-------------------------------------------------------------------
Tue Jun 12 11:42:43 CEST 2007 - werner@suse.de

View File

@ -22,7 +22,7 @@ Group: System/Base
PreReq: coreutils
Autoreqprov: on
Version: 2.86
Release: 81
Release: 83
Summary: SysV-Style init
BuildRoot: %{_tmppath}/%{name}-%{version}-build
Source: sysvinit-2.86.tar.bz2
@ -282,6 +282,8 @@ rm -rf ${RPM_BUILD_ROOT}
%doc %{_mandir}/man8/startpar.8.gz
%changelog
* Wed Jun 13 2007 - werner@suse.de
- bug #229210: avoid HDIO_DRIVE_CM ioctl for real SCSI disks.
* Tue Jun 12 2007 - werner@suse.de
- bug #229210: check for the FLUSH CACHE EXT capability for large
disks and use this capability if available.