mirror of
https://git.yoctoproject.org/poky
synced 2026-04-26 00:32:12 +02:00
dpkg: fix a link problem for dpkg-native on CentOS 5.8
[ CQID: WIND00392830 ] CentOS 5.8 provides the kernel support and headers for the sync_file_range() syscall, but glibc 2.5 doesn't implement the sync_file_range() syscall stub, so we can't link dpkg-native. Add a patch that makes dpkg require a glibc version >= 2.6 in order to use sync_file_range(). (From OE-Core rev: 197dfda0d971e5e423f1b04a13fbe7ab22d2e874) Signed-off-by: Donn Seeley <donn.seeley@windriver.com> Signed-off-by: Lei Liu <lei.liu2@windriver.com> Signed-off-by: Randy MacLeod <Randy.MacLeod@windriver.com> Signed-off-by: Jeff Polk <jeff.polk@windriver.com> Signed-off-by: Robert Yang <liezhi.yang@windriver.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
committed by
Richard Purdie
parent
f66f4b0c8e
commit
da93a41189
@@ -0,0 +1,86 @@
|
||||
CentOS 5.8 kernels and headers support the sync_file_range() system call,
|
||||
but glibc 2.5 doesn't provide the syscall stub. It appears that this
|
||||
problem is known but will never be fixed:
|
||||
|
||||
https://bugzilla.redhat.com/show_bug.cgi?id=518581
|
||||
|
||||
Bug 518581 - [RHEL5] glibc misses sync_file_range syscall interface
|
||||
|
||||
Status: CLOSED CANTFIX
|
||||
Last Closed: 2009-11-22 22:19:55
|
||||
|
||||
Kirby Zhou 2009-08-20 23:37:55 EDT
|
||||
|
||||
Description of problem:
|
||||
|
||||
glibc misses sync_file_range syscall interface. The header file and
|
||||
man page both say 'sync_file_range' should exist. From man page,
|
||||
sync_file_range should exist sinc kernel-2.6.17
|
||||
|
||||
Andreas Schwab 2009-08-21 03:24:24 EDT
|
||||
|
||||
It has only been added to glibc 2.6, and cannot be backported due to
|
||||
ABI breakage. You can always fall back to syscall(3).
|
||||
|
||||
Ulrich Drepper 2009-11-22 22:19:55 EST
|
||||
|
||||
As comment #1 says, no chance to backport this.
|
||||
|
||||
See the syscall man page for instructions.
|
||||
|
||||
Jon E 2010-03-19 10:32:37 EDT
|
||||
|
||||
then why document it if it's broken and you're not going to fix it?
|
||||
.. might want to FTFM over at sync_file_range(2) - in the meantime -
|
||||
borrowing from glibc 2.6 .. any thoughts on this implementation for a
|
||||
hacky workaround for those still on your "ancient releases" .. (eg:
|
||||
RHEL5.3)?:
|
||||
|
||||
#ifdef ULI_WONT_FIX_THIS_IN_GLIBC2.5
|
||||
#define NR_sync_file_range 277
|
||||
int sync_file_range (int fd, __off64_t from, __off64_t to, unsigned int flags)
|
||||
{
|
||||
return syscall (NR_sync_file_range, fd,
|
||||
__LONG_LONG_PAIR ((long) (from >> 32), (long) from),
|
||||
__LONG_LONG_PAIR ((long) (to >> 32), (long) to),
|
||||
flags);
|
||||
}
|
||||
#endif
|
||||
|
||||
assuming of course that you're on an x86_64 and include/asm-
|
||||
x86_64/unistd.h has the correct entry
|
||||
|
||||
(fwiw - fio is starting to use this now)
|
||||
|
||||
Rather than attempting to provide an implementation using syscall(),
|
||||
we take the more conservative route and ignore header support for
|
||||
sync_file_range() flags when the glibc version is <= 2.5.
|
||||
|
||||
Upstream-Status: Inappropriate [everyone else builds on newer hosts :-)]
|
||||
|
||||
Signed-off-by: Donn Seeley <donn.seeley@windriver.com>
|
||||
Signed-off-by: Lei Liu <lei.liu2@windriver.com>
|
||||
---
|
||||
src/archives.c | 4 ++--
|
||||
1 file changed, 2 insertions(+), 2 deletions(-)
|
||||
|
||||
--- a/src/archives.c
|
||||
+++ b/src/archives.c
|
||||
@@ -75,7 +75,7 @@
|
||||
/* Ignore the return code as it should be considered equivalent to an
|
||||
* asynchronous hint for the kernel, we are doing an fsync() later on
|
||||
* anyway. */
|
||||
-#if defined(SYNC_FILE_RANGE_WRITE)
|
||||
+#if defined(SYNC_FILE_RANGE_WRITE) && __GLIBC_PREREQ(2, 6)
|
||||
sync_file_range(fd, 0, 0, SYNC_FILE_RANGE_WRITE);
|
||||
#elif defined(HAVE_POSIX_FADVISE)
|
||||
posix_fadvise(fd, 0, 0, POSIX_FADV_DONTNEED);
|
||||
@@ -1179,7 +1179,7 @@
|
||||
return 0;
|
||||
}
|
||||
|
||||
-#if defined(SYNC_FILE_RANGE_WAIT_BEFORE)
|
||||
+#if defined(SYNC_FILE_RANGE_WAIT_BEFORE) && __GLIBC_PREREQ(2, 6)
|
||||
static void
|
||||
tar_writeback_barrier(struct fileinlist *files, struct pkginfo *pkg)
|
||||
{
|
||||
@@ -10,6 +10,7 @@ SRC_URI += "file://noman.patch \
|
||||
file://fix-abs-redefine.patch \
|
||||
file://arch_pm.patch \
|
||||
file://dpkg-configure.service \
|
||||
file://glibc2.5-sync_file_range.patch \
|
||||
"
|
||||
|
||||
SRC_URI[md5sum] = "cc25086e1e3bd9512a95f14cfe9002e1"
|
||||
|
||||
Reference in New Issue
Block a user