summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLennart Poettering <lennart@poettering.net>2006-04-26 12:57:48 +0000
committerLennart Poettering <lennart@poettering.net>2006-04-26 12:57:48 +0000
commit21b13c7904d969b69c73d26d53ac003dc3bfef60 (patch)
treee3b2d09c64354451f24f35118bcb60f3af9cc346
parent8cfa8c2267d8e9cb175224abda9fd8ef8e33eff4 (diff)
use madvise() only when it is available
git-svn-id: file:///home/lennart/svn/public/syrep/trunk@107 07ea20a6-d2c5-0310-9e02-9ef735347d72
-rw-r--r--configure.ac2
-rw-r--r--src/util.c18
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
}
}
}