Index: configure.in =================================================================== RCS file: /server/cvs-server/squid/squid/configure.in,v retrieving revision 1.319 diff -u -r1.319 configure.in --- configure.in 18 May 2006 04:03:22 -0000 1.319 +++ configure.in 18 May 2006 09:33:24 -0000 @@ -780,6 +780,27 @@ esac ]) + +dnl Enable pread()/pwrite() +AC_ARG_ENABLE(pread, +[ --enable-pread Enable using pread/pwrite for Squid Async IO. + This is slightly more efficient and is required + for COSS under Linux. + --disable-pread Disable the use of pread/pwrite.], +[ + case "$enableval" in + yes) + echo "Forcing pread()/pwrite() to be enabled" + ac_cv_func_pread='yes' + AC_DEFINE_UNQUOTED(USE_PREAD, 1) + ;; + no) + echo "Forcing pread()/pwrite() to be disabled" + ac_cv_func_pread='no' + ;; + esac +]) + dnl Disable HTTP violations AC_ARG_ENABLE(http-violations, [ --disable-http-violations Index: include/autoconf.h.in =================================================================== RCS file: /server/cvs-server/squid/squid/include/autoconf.h.in,v retrieving revision 1.136 diff -u -r1.136 autoconf.h.in --- include/autoconf.h.in 18 May 2006 04:32:19 -0000 1.136 +++ include/autoconf.h.in 18 May 2006 09:33:24 -0000 @@ -938,5 +938,7 @@ /* Enable hostname sanity checks */ #undef CHECK_HOSTNAMES +/* Enable using pread/write */ +#undef USE_PREAD #endif /* __CONFIGURE_H__ */ Index: src/fs/aufs/aiops.c =================================================================== RCS file: /server/cvs-server/squid/squid/src/fs/aufs/aiops.c,v retrieving revision 1.23 diff -u -r1.23 aiops.c --- src/fs/aufs/aiops.c 16 May 2006 05:42:14 -0000 1.23 +++ src/fs/aufs/aiops.c 18 May 2006 09:33:24 -0000 @@ -669,8 +669,12 @@ static void squidaio_do_read(squidaio_request_t * requestp) { +#if USE_PREAD + requestp->ret = pread(requestp->fd, requestp->bufferp, requestp->buflen, requestp->offset); +#else lseek(requestp->fd, requestp->offset, requestp->whence); requestp->ret = read(requestp->fd, requestp->bufferp, requestp->buflen); +#endif requestp->err = errno; } @@ -698,7 +702,12 @@ static void squidaio_do_write(squidaio_request_t * requestp) { +#if USE_PREAD + assert(requestp->offset > 0); + requestp->ret = pwrite(requestp->fd, requestp->bufferp, requestp->buflen, requestp->offset); +#else requestp->ret = write(requestp->fd, requestp->bufferp, requestp->buflen); +#endif requestp->err = errno; }