diff --git a/sysvinit-2.86-hddown.patch b/sysvinit-2.86-hddown.patch index f77f910..947e1c9 100644 --- a/sysvinit-2.86-hddown.patch +++ b/sysvinit-2.86-hddown.patch @@ -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 #include #include -@@ -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 #include @@ -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; } diff --git a/sysvinit.changes b/sysvinit.changes index 71c7d3b..b657767 100644 --- a/sysvinit.changes +++ b/sysvinit.changes @@ -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 diff --git a/sysvinit.spec b/sysvinit.spec index 7e63abc..2058128 100644 --- a/sysvinit.spec +++ b/sysvinit.spec @@ -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.