On Thu, May 18, 2006, Adrian Chadd wrote:
> Hi everyone,
> 
> I'd like to propose using pread() and pwrite() in the AUFS AIO
> read/write code. This allows multiple concurrent readers/writers
> to be accessing the same filedescriptor which enables COSS
> to use AIO.
> 
> Does anyone have a problem with this? Can it be changed to just
> use it, or should I try to make it a configure/compiletime option?

Here's a diff. I need to #define _XOPEN_SOURCE 500 under linux - this,
however, causes things to just not compile. I have no idea why. :/

Could someone please help me figure out why it ain't working?

Thanks,



adrian

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;
 }
 

Reply via email to