From 21b13c7904d969b69c73d26d53ac003dc3bfef60 Mon Sep 17 00:00:00 2001 From: Lennart Poettering Date: Wed, 26 Apr 2006 12:57:48 +0000 Subject: use madvise() only when it is available git-svn-id: file:///home/lennart/svn/public/syrep/trunk@107 07ea20a6-d2c5-0310-9e02-9ef735347d72 --- configure.ac | 2 +- src/util.c | 18 ++++++++++++++++-- 2 files changed, 17 insertions(+), 3 deletions(-) diff --git a/configure.ac b/configure.ac index 2f517b4..88587e1 100644 --- a/configure.ac +++ b/configure.ac @@ -143,7 +143,7 @@ AC_C_VOLATILE # Checks for library functions. AC_FUNC_CLOSEDIR_VOID AC_FUNC_MMAP -AC_CHECK_FUNCS([atexit ftruncate getcwd gethostname memset mkdir munmap rmdir setenv strchr strdup strerror strrchr strtol putenv]) +AC_CHECK_FUNCS([atexit ftruncate getcwd gethostname memset mkdir munmap rmdir setenv strchr strdup strerror strrchr strtol putenv madvise]) #AC_FUNC_LSTAT #AC_FUNC_LSTAT_FOLLOWS_SLASHED_SYMLINK #AC_FUNC_MALLOC diff --git a/src/util.c b/src/util.c index 96b99c1..7497687 100644 --- a/src/util.c +++ b/src/util.c @@ -271,8 +271,11 @@ int copy_fd(int sfd, int dfd, off_t l) { msfo = (off_t) (sfo/psize)*psize; sm = m+(sfo-msfo); - if ((sp = mmap(NULL, sm, PROT_READ, MAP_SHARED, sfd, msfo)) != MAP_FAILED) + if ((sp = mmap(NULL, sm, PROT_READ, MAP_SHARED, sfd, msfo)) != MAP_FAILED) { +#ifdef HAVE_MADVISE madvise(sp, sm, MADV_SEQUENTIAL); +#endif + } } if ((dfo = lseek(dfd, 0, SEEK_CUR)) != (off_t) -1) { @@ -281,8 +284,11 @@ int copy_fd(int sfd, int dfd, off_t l) { mdfo = (off_t) (dfo/psize)*psize; dm = m+(dfo-mdfo); - if ((dp = mmap(NULL, dm, PROT_READ|PROT_WRITE, MAP_SHARED, dfd, mdfo)) != MAP_FAILED) + if ((dp = mmap(NULL, dm, PROT_READ|PROT_WRITE, MAP_SHARED, dfd, mdfo)) != MAP_FAILED) { +#ifdef HAVE_MADVISE madvise(dp, dm, MADV_SEQUENTIAL); +#endif + } } } @@ -363,7 +369,10 @@ int copy_fd(int sfd, int dfd, off_t l) { fprintf(stderr, "mmap(): %s\n", strerror(errno)); return -1; } + +#ifdef HAVE_MADVISE madvise(dp, dm, MADV_SEQUENTIAL); +#endif } } else if (dp == MAP_FAILED) { /* copy mmap to fd */ @@ -402,7 +411,10 @@ int copy_fd(int sfd, int dfd, off_t l) { fprintf(stderr, "mmap(): %s\n", strerror(errno)); return -1; } + +#ifdef HAVE_MADVISE madvise(sp, sm, MADV_SEQUENTIAL); +#endif } } else { /* copy mmap to mmap */ @@ -448,8 +460,10 @@ int copy_fd(int sfd, int dfd, off_t l) { return -1; } +#ifdef HAVE_MADVISE madvise(sp, sm, MADV_SEQUENTIAL); madvise(dp, dm, MADV_SEQUENTIAL); +#endif } } } -- cgit