* [PATCH 1/2] xfs_io: include headers for preadv/pwritev
@ 2012-10-09 22:02 Eric Sandeen
2012-10-09 22:08 ` [PATCH 2/2] xfs_io: configure tests for preadv/pwritev & sync_file_range Eric Sandeen
` (3 more replies)
0 siblings, 4 replies; 13+ messages in thread
From: Eric Sandeen @ 2012-10-09 22:02 UTC (permalink / raw)
To: xfs-oss
We need to include uio.h to avoid:
[CC] pread.o
pread.c: In function ‘do_pread’:
pread.c:198: warning: implicit declaration of function ‘preadv’
[CC] pwrite.o
pwrite.c: In function ‘do_pwrite’:
pwrite.c:85: warning: implicit declaration of function ‘pwritev’
Signed-off-by: Eric Sandeen <sandeen@redhat.com>
---
diff --git a/io/pread.c b/io/pread.c
index 0b9454b..9fad373 100644
--- a/io/pread.c
+++ b/io/pread.c
@@ -16,6 +16,8 @@
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*/
+#define _BSD_SOURCE /* for preadv */
+#include <sys/uio.h>
#include <xfs/xfs.h>
#include <xfs/command.h>
#include <xfs/input.h>
diff --git a/io/pwrite.c b/io/pwrite.c
index 3689960..848b990 100644
--- a/io/pwrite.c
+++ b/io/pwrite.c
@@ -16,6 +16,8 @@
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*/
+#define _BSD_SOURCE /* for pwritev */
+#include <sys/uio.h>
#include <xfs/xfs.h>
#include <xfs/command.h>
#include <xfs/input.h>
_______________________________________________
xfs mailing list
xfs@oss.sgi.com
http://oss.sgi.com/mailman/listinfo/xfs
^ permalink raw reply related [flat|nested] 13+ messages in thread* [PATCH 2/2] xfs_io: configure tests for preadv/pwritev & sync_file_range 2012-10-09 22:02 [PATCH 1/2] xfs_io: include headers for preadv/pwritev Eric Sandeen @ 2012-10-09 22:08 ` Eric Sandeen 2012-10-09 22:28 ` Dave Chinner 2012-10-10 3:40 ` [PATCH 2/2 V2] " Eric Sandeen 2012-10-09 22:21 ` [PATCH 1/2] xfs_io: include headers for preadv/pwritev Dave Chinner ` (2 subsequent siblings) 3 siblings, 2 replies; 13+ messages in thread From: Eric Sandeen @ 2012-10-09 22:08 UTC (permalink / raw) To: xfs-oss On older systems we may not have preadv/pwritev and/or sync_file_range. Add the configure magic, and stub out the code where needed. (sync_file_range just needed a better test; preadv/pwritev took a little more rearranging) And fix a couple typos ("numberic") while we're at it. Signed-off-by: Eric Sandeen <sandeen@redhat.com> --- diff --git a/configure.in b/configure.in index 664c0e9..b927c32 100644 --- a/configure.in +++ b/configure.in @@ -108,6 +108,8 @@ AC_HAVE_GETMNTENT AC_HAVE_GETMNTINFO AC_HAVE_FALLOCATE AC_HAVE_FIEMAP +AC_HAVE_PREADV +AC_HAVE_SYNC_FILE_RANGE AC_HAVE_BLKID_TOPO($enable_blkid) AC_TYPE_PSINT diff --git a/include/builddefs.in b/include/builddefs.in index 81ebfcd..4a0e910 100644 --- a/include/builddefs.in +++ b/include/builddefs.in @@ -101,6 +101,8 @@ HAVE_GETMNTENT = @have_getmntent@ HAVE_GETMNTINFO = @have_getmntinfo@ HAVE_FALLOCATE = @have_fallocate@ HAVE_FIEMAP = @have_fiemap@ +HAVE_PREADV = @have_preadv@ +HAVE_SYNC_FILE_RANGE = @have_sync_file_range@ GCCFLAGS = -funsigned-char -fno-strict-aliasing -Wall # -Wbitwise -Wno-transparent-union -Wno-old-initializer -Wno-decl diff --git a/io/Makefile b/io/Makefile index bf46d56..23cd90b 100644 --- a/io/Makefile +++ b/io/Makefile @@ -58,7 +58,7 @@ CFILES += inject.c resblks.c LCFLAGS += -DHAVE_INJECT -DHAVE_RESBLKS endif -ifeq ($(PKG_PLATFORM),linux) +ifeq ($(HAVE_SYNC_FILE_RANGE),yes) CFILES += sync_file_range.c LCFLAGS += -DHAVE_SYNC_FILE_RANGE endif @@ -75,6 +75,10 @@ ifeq ($(HAVE_FALLOCATE),yes) LCFLAGS += -DHAVE_FALLOCATE endif +ifeq ($(HAVE_PREADV),yes) +LCFLAGS += -DHAVE_PREADV +endif + default: depend $(LTCOMMAND) include $(BUILDRULES) diff --git a/io/pread.c b/io/pread.c index 9fad373..9d3720e 100644 --- a/io/pread.c +++ b/io/pread.c @@ -48,7 +48,9 @@ pread_help(void) " -R -- read at random offsets in the range of bytes\n" " -Z N -- zeed the random number generator (used when reading randomly)\n" " (heh, zorry, the -s/-S arguments were already in use in pwrite)\n" +#ifdef HAVE_PREADV " -V N -- use vectored IO with N iovecs of blocksize each (preadv)\n" +#endif "\n" " When in \"random\" mode, the number of read operations will equal the\n" " number required to do a complete forward/backward scan of the range.\n" @@ -169,8 +171,9 @@ dump_buffer( } } +#ifdef HAVE_PREADV static int -do_pread( +do_preadv( int fd, off64_t offset, ssize_t count, @@ -180,10 +183,6 @@ do_pread( ssize_t oldlen = 0; ssize_t bytes = 0; - - if (!vectors) - return pread64(fd, buffer, min(count, buffer_size), offset); - /* trim the iovec if necessary */ if (count < buffersize) { size_t len = 0; @@ -205,6 +204,22 @@ do_pread( return bytes; } +#else +#define do_preadv(fd, offset, count, buffer_size) (0) +#endif + +static int +do_pread( + int fd, + off64_t offset, + ssize_t count, + ssize_t buffer_size) +{ + if (!vectors) + return pread64(fd, buffer, min(count, buffer_size), offset); + + return do_preadv(fd, offset, count, buffer_size); +} static int read_random( @@ -407,14 +422,16 @@ pread_f( case 'v': vflag = 1; break; +#ifdef HAVE_PREADV case 'V': vectors = strtoul(optarg, &sp, 0); if (!sp || sp == optarg) { - printf(_("non-numberic vector count == %s\n"), + printf(_("non-numeric vector count == %s\n"), optarg); return 0; } break; +#endif case 'Z': zeed = strtoul(optarg, &sp, 0); if (!sp || sp == optarg) { diff --git a/io/pwrite.c b/io/pwrite.c index 848b990..22a3827 100644 --- a/io/pwrite.c +++ b/io/pwrite.c @@ -52,24 +52,23 @@ pwrite_help(void) " -R -- write at random offsets in the specified range of bytes\n" " -Z N -- zeed the random number generator (used when writing randomly)\n" " (heh, zorry, the -s/-S arguments were already in use in pwrite)\n" +#ifdef HAVE_PREADV " -V N -- use vectored IO with N iovecs of blocksize each (pwritev)\n" +#endif "\n")); } +#ifdef HAVE_PREADV static int -do_pwrite( +do_pwritev( int fd, off64_t offset, ssize_t count, ssize_t buffer_size) { - int vecs = 0; - ssize_t oldlen = 0; - ssize_t bytes = 0; - - - if (!vectors) - return pwrite64(fd, buffer, min(count, buffer_size), offset); + int vecs = 0; + ssize_t oldlen = 0; + ssize_t bytes = 0; /* trim the iovec if necessary */ if (count < buffersize) { @@ -92,6 +91,23 @@ do_pwrite( return bytes; } +#else +#define do_pwritev(fd, offset, count, buffer_size) (0) +#endif + +static int +do_pwrite( + int fd, + off64_t offset, + ssize_t count, + ssize_t buffer_size) +{ + if (!vectors) + return pwrite64(fd, buffer, min(count, buffer_size), offset); + + return do_pwritev(fd, offset, count, buffer_size); +} + static int write_random( off64_t offset, @@ -298,7 +314,7 @@ pwrite_f( case 'V': vectors = strtoul(optarg, &sp, 0); if (!sp || sp == optarg) { - printf(_("non-numberic vector count == %s\n"), + printf(_("non-numeric vector count == %s\n"), optarg); return 0; } diff --git a/m4/package_libcdev.m4 b/m4/package_libcdev.m4 index 1e2c256..f489f52 100644 --- a/m4/package_libcdev.m4 +++ b/m4/package_libcdev.m4 @@ -135,3 +135,38 @@ AC_DEFUN([AC_HAVE_FIEMAP], AC_MSG_RESULT(no)) AC_SUBST(have_fiemap) ]) + +# +# Check if we have a preadv libc call (Linux) +# +AC_DEFUN([AC_HAVE_PREADV], + [ AC_MSG_CHECKING([for preadv]) + AC_TRY_LINK([ +#define _FILE_OFFSET_BITS 64 +#define _BSD_SOURCE +#include <sys/uio.h> + ], [ + preadv(0, 0, 0, 0); + ], have_preadv=yes + AC_MSG_RESULT(yes), + AC_MSG_RESULT(no)) + AC_SUBST(have_preadv) + ]) + +# +# Check if we have a sync_file_range libc call (Linux) +# +AC_DEFUN([AC_HAVE_SYNC_FILE_RANGE], + [ AC_MSG_CHECKING([for sync_file_range]) + AC_TRY_LINK([ +#define _GNU_SOURCE +#define _FILE_OFFSET_BITS 64 +#include <fcntl.h> + ], [ + sync_file_range(0, 0, 0, 0); + ], have_sync_file_range=yes + AC_MSG_RESULT(yes), + AC_MSG_RESULT(no)) + AC_SUBST(have_sync_file_range) + ]) + _______________________________________________ xfs mailing list xfs@oss.sgi.com http://oss.sgi.com/mailman/listinfo/xfs ^ permalink raw reply related [flat|nested] 13+ messages in thread
* Re: [PATCH 2/2] xfs_io: configure tests for preadv/pwritev & sync_file_range 2012-10-09 22:08 ` [PATCH 2/2] xfs_io: configure tests for preadv/pwritev & sync_file_range Eric Sandeen @ 2012-10-09 22:28 ` Dave Chinner 2012-10-09 22:32 ` Eric Sandeen 2012-10-10 3:40 ` [PATCH 2/2 V2] " Eric Sandeen 1 sibling, 1 reply; 13+ messages in thread From: Dave Chinner @ 2012-10-09 22:28 UTC (permalink / raw) To: Eric Sandeen; +Cc: xfs-oss On Tue, Oct 09, 2012 at 05:08:26PM -0500, Eric Sandeen wrote: > On older systems we may not have preadv/pwritev and/or > sync_file_range. > > Add the configure magic, and stub out the code > where needed. > > (sync_file_range just needed a better test; preadv/pwritev > took a little more rearranging) > > And fix a couple typos ("numberic") while we're at it. > > Signed-off-by: Eric Sandeen <sandeen@redhat.com> Looks fine, though the "HAVE_PREADV" in the pwritev case is a bit wierd. Perhaps doing this: > diff --git a/include/builddefs.in b/include/builddefs.in > index 81ebfcd..4a0e910 100644 > --- a/include/builddefs.in > +++ b/include/builddefs.in > @@ -101,6 +101,8 @@ HAVE_GETMNTENT = @have_getmntent@ > HAVE_GETMNTINFO = @have_getmntinfo@ > HAVE_FALLOCATE = @have_fallocate@ > HAVE_FIEMAP = @have_fiemap@ > +HAVE_PREADV = @have_preadv@ HAVE_PWRITEV = @have_preadv@ Would reduce that wierdness a bit when looking at the pwritev code.... Otherwise everything else looks ok. Cheers, Dave. -- Dave Chinner david@fromorbit.com _______________________________________________ xfs mailing list xfs@oss.sgi.com http://oss.sgi.com/mailman/listinfo/xfs ^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH 2/2] xfs_io: configure tests for preadv/pwritev & sync_file_range 2012-10-09 22:28 ` Dave Chinner @ 2012-10-09 22:32 ` Eric Sandeen 2012-10-09 22:56 ` Dave Chinner 0 siblings, 1 reply; 13+ messages in thread From: Eric Sandeen @ 2012-10-09 22:32 UTC (permalink / raw) To: Dave Chinner; +Cc: xfs-oss On 10/9/12 5:28 PM, Dave Chinner wrote: > On Tue, Oct 09, 2012 at 05:08:26PM -0500, Eric Sandeen wrote: >> On older systems we may not have preadv/pwritev and/or >> sync_file_range. >> >> Add the configure magic, and stub out the code >> where needed. >> >> (sync_file_range just needed a better test; preadv/pwritev >> took a little more rearranging) >> >> And fix a couple typos ("numberic") while we're at it. >> >> Signed-off-by: Eric Sandeen <sandeen@redhat.com> > > Looks fine, though the "HAVE_PREADV" in the pwritev case is a bit > wierd. Perhaps doing this: > >> diff --git a/include/builddefs.in b/include/builddefs.in >> index 81ebfcd..4a0e910 100644 >> --- a/include/builddefs.in >> +++ b/include/builddefs.in >> @@ -101,6 +101,8 @@ HAVE_GETMNTENT = @have_getmntent@ >> HAVE_GETMNTINFO = @have_getmntinfo@ >> HAVE_FALLOCATE = @have_fallocate@ >> HAVE_FIEMAP = @have_fiemap@ >> +HAVE_PREADV = @have_preadv@ > > HAVE_PWRITEV = @have_preadv@ > > Would reduce that wierdness a bit when looking at the pwritev > code.... Yeah I was a little unhappy w/ that. But I think then we'd also need: +ifeq ($(HAVE_PWRITEV),yes) +LCFLAGS += -DHAVE_PWRITEV +endif and at some point we might run out of room on the cmdline ;) Could change it to HAVE_PREADWRITEV or something ... -Eric > Otherwise everything else looks ok. > > Cheers, > > Dave. > _______________________________________________ xfs mailing list xfs@oss.sgi.com http://oss.sgi.com/mailman/listinfo/xfs ^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH 2/2] xfs_io: configure tests for preadv/pwritev & sync_file_range 2012-10-09 22:32 ` Eric Sandeen @ 2012-10-09 22:56 ` Dave Chinner 2012-10-09 22:57 ` Eric Sandeen 0 siblings, 1 reply; 13+ messages in thread From: Dave Chinner @ 2012-10-09 22:56 UTC (permalink / raw) To: Eric Sandeen; +Cc: xfs-oss On Tue, Oct 09, 2012 at 05:32:30PM -0500, Eric Sandeen wrote: > On 10/9/12 5:28 PM, Dave Chinner wrote: > > On Tue, Oct 09, 2012 at 05:08:26PM -0500, Eric Sandeen wrote: > >> On older systems we may not have preadv/pwritev and/or > >> sync_file_range. > >> > >> Add the configure magic, and stub out the code > >> where needed. > >> > >> (sync_file_range just needed a better test; preadv/pwritev > >> took a little more rearranging) > >> > >> And fix a couple typos ("numberic") while we're at it. > >> > >> Signed-off-by: Eric Sandeen <sandeen@redhat.com> > > > > Looks fine, though the "HAVE_PREADV" in the pwritev case is a bit > > wierd. Perhaps doing this: > > > >> diff --git a/include/builddefs.in b/include/builddefs.in > >> index 81ebfcd..4a0e910 100644 > >> --- a/include/builddefs.in > >> +++ b/include/builddefs.in > >> @@ -101,6 +101,8 @@ HAVE_GETMNTENT = @have_getmntent@ > >> HAVE_GETMNTINFO = @have_getmntinfo@ > >> HAVE_FALLOCATE = @have_fallocate@ > >> HAVE_FIEMAP = @have_fiemap@ > >> +HAVE_PREADV = @have_preadv@ > > > > HAVE_PWRITEV = @have_preadv@ > > > > Would reduce that wierdness a bit when looking at the pwritev > > code.... > > Yeah I was a little unhappy w/ that. But I think then we'd also need: > > +ifeq ($(HAVE_PWRITEV),yes) > +LCFLAGS += -DHAVE_PWRITEV > +endif True. > and at some point we might run out of room on the cmdline ;) Unlikely ;) > Could change it to HAVE_PREADWRITEV or something ... HAVE_VECTORED_IO? Cheers, Dave. -- Dave Chinner david@fromorbit.com _______________________________________________ xfs mailing list xfs@oss.sgi.com http://oss.sgi.com/mailman/listinfo/xfs ^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH 2/2] xfs_io: configure tests for preadv/pwritev & sync_file_range 2012-10-09 22:56 ` Dave Chinner @ 2012-10-09 22:57 ` Eric Sandeen 2012-10-09 23:05 ` Dave Chinner 0 siblings, 1 reply; 13+ messages in thread From: Eric Sandeen @ 2012-10-09 22:57 UTC (permalink / raw) To: Dave Chinner; +Cc: xfs-oss On 10/9/12 5:56 PM, Dave Chinner wrote: > On Tue, Oct 09, 2012 at 05:32:30PM -0500, Eric Sandeen wrote: >> On 10/9/12 5:28 PM, Dave Chinner wrote: >>> On Tue, Oct 09, 2012 at 05:08:26PM -0500, Eric Sandeen wrote: >>>> On older systems we may not have preadv/pwritev and/or >>>> sync_file_range. >>>> >>>> Add the configure magic, and stub out the code >>>> where needed. >>>> >>>> (sync_file_range just needed a better test; preadv/pwritev >>>> took a little more rearranging) >>>> >>>> And fix a couple typos ("numberic") while we're at it. >>>> >>>> Signed-off-by: Eric Sandeen <sandeen@redhat.com> >>> >>> Looks fine, though the "HAVE_PREADV" in the pwritev case is a bit >>> wierd. Perhaps doing this: >>> >>>> diff --git a/include/builddefs.in b/include/builddefs.in >>>> index 81ebfcd..4a0e910 100644 >>>> --- a/include/builddefs.in >>>> +++ b/include/builddefs.in >>>> @@ -101,6 +101,8 @@ HAVE_GETMNTENT = @have_getmntent@ >>>> HAVE_GETMNTINFO = @have_getmntinfo@ >>>> HAVE_FALLOCATE = @have_fallocate@ >>>> HAVE_FIEMAP = @have_fiemap@ >>>> +HAVE_PREADV = @have_preadv@ >>> >>> HAVE_PWRITEV = @have_preadv@ >>> >>> Would reduce that wierdness a bit when looking at the pwritev >>> code.... >> >> Yeah I was a little unhappy w/ that. But I think then we'd also need: >> >> +ifeq ($(HAVE_PWRITEV),yes) >> +LCFLAGS += -DHAVE_PWRITEV >> +endif > > True. > >> and at some point we might run out of room on the cmdline ;) > > Unlikely ;) > >> Could change it to HAVE_PREADWRITEV or something ... > > HAVE_VECTORED_IO? Thought about that but we already have readv/writev, just not *P*readv/writev. I can just add MOAR FLAGS if that looks better to you. ;) (or HAVE_PVECTORED_IO?) ;) -Eric > Cheers, > > Dave. > _______________________________________________ xfs mailing list xfs@oss.sgi.com http://oss.sgi.com/mailman/listinfo/xfs ^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH 2/2] xfs_io: configure tests for preadv/pwritev & sync_file_range 2012-10-09 22:57 ` Eric Sandeen @ 2012-10-09 23:05 ` Dave Chinner 0 siblings, 0 replies; 13+ messages in thread From: Dave Chinner @ 2012-10-09 23:05 UTC (permalink / raw) To: Eric Sandeen; +Cc: xfs-oss On Tue, Oct 09, 2012 at 05:57:56PM -0500, Eric Sandeen wrote: > On 10/9/12 5:56 PM, Dave Chinner wrote: > > On Tue, Oct 09, 2012 at 05:32:30PM -0500, Eric Sandeen wrote: > >> On 10/9/12 5:28 PM, Dave Chinner wrote: > >>> On Tue, Oct 09, 2012 at 05:08:26PM -0500, Eric Sandeen wrote: > >>>> On older systems we may not have preadv/pwritev and/or > >>>> sync_file_range. > >>>> > >>>> Add the configure magic, and stub out the code > >>>> where needed. > >>>> > >>>> (sync_file_range just needed a better test; preadv/pwritev > >>>> took a little more rearranging) > >>>> > >>>> And fix a couple typos ("numberic") while we're at it. > >>>> > >>>> Signed-off-by: Eric Sandeen <sandeen@redhat.com> > >>> > >>> Looks fine, though the "HAVE_PREADV" in the pwritev case is a bit > >>> wierd. Perhaps doing this: > >>> > >>>> diff --git a/include/builddefs.in b/include/builddefs.in > >>>> index 81ebfcd..4a0e910 100644 > >>>> --- a/include/builddefs.in > >>>> +++ b/include/builddefs.in > >>>> @@ -101,6 +101,8 @@ HAVE_GETMNTENT = @have_getmntent@ > >>>> HAVE_GETMNTINFO = @have_getmntinfo@ > >>>> HAVE_FALLOCATE = @have_fallocate@ > >>>> HAVE_FIEMAP = @have_fiemap@ > >>>> +HAVE_PREADV = @have_preadv@ > >>> > >>> HAVE_PWRITEV = @have_preadv@ > >>> > >>> Would reduce that wierdness a bit when looking at the pwritev > >>> code.... > >> > >> Yeah I was a little unhappy w/ that. But I think then we'd also need: > >> > >> +ifeq ($(HAVE_PWRITEV),yes) > >> +LCFLAGS += -DHAVE_PWRITEV > >> +endif > > > > True. > > > >> and at some point we might run out of room on the cmdline ;) > > > > Unlikely ;) > > > >> Could change it to HAVE_PREADWRITEV or something ... > > > > HAVE_VECTORED_IO? > > Thought about that but we already have readv/writev, just not *P*readv/writev. xfs_io doesn't use readv/writev, so I don't think it' a major concern. Red, green, blue, the colour of the bike shed really doesn't matter that much.... Cheers, Dave. -- Dave Chinner david@fromorbit.com _______________________________________________ xfs mailing list xfs@oss.sgi.com http://oss.sgi.com/mailman/listinfo/xfs ^ permalink raw reply [flat|nested] 13+ messages in thread
* [PATCH 2/2 V2] xfs_io: configure tests for preadv/pwritev & sync_file_range 2012-10-09 22:08 ` [PATCH 2/2] xfs_io: configure tests for preadv/pwritev & sync_file_range Eric Sandeen 2012-10-09 22:28 ` Dave Chinner @ 2012-10-10 3:40 ` Eric Sandeen 2012-10-10 23:25 ` Dave Chinner 1 sibling, 1 reply; 13+ messages in thread From: Eric Sandeen @ 2012-10-10 3:40 UTC (permalink / raw) To: xfs-oss On older systems we may not have preadv/pwritev and/or sync_file_range. Add the configure magic, and stub out the code where needed. (sync_file_range just needed a better test; preadv/pwritev took a little more rearranging) And fix a couple typos ("numberic") while we're at it. Signed-off-by: Eric Sandeen <sandeen@redhat.com> --- V2: add -DHAVE_PWRITEV and use that test in io/pwrite.c rather than HAVE_PREADV diff --git a/configure.in b/configure.in index 664c0e9..b927c32 100644 --- a/configure.in +++ b/configure.in @@ -108,6 +108,8 @@ AC_HAVE_GETMNTENT AC_HAVE_GETMNTINFO AC_HAVE_FALLOCATE AC_HAVE_FIEMAP +AC_HAVE_PREADV +AC_HAVE_SYNC_FILE_RANGE AC_HAVE_BLKID_TOPO($enable_blkid) AC_TYPE_PSINT diff --git a/include/builddefs.in b/include/builddefs.in index 04590d2..0a3fa1a 100644 --- a/include/builddefs.in +++ b/include/builddefs.in @@ -101,6 +101,8 @@ HAVE_GETMNTENT = @have_getmntent@ HAVE_GETMNTINFO = @have_getmntinfo@ HAVE_FALLOCATE = @have_fallocate@ HAVE_FIEMAP = @have_fiemap@ +HAVE_PREADV = @have_preadv@ +HAVE_SYNC_FILE_RANGE = @have_sync_file_range@ GCCFLAGS = -funsigned-char -fno-strict-aliasing -Wall # -Wbitwise -Wno-transparent-union -Wno-old-initializer -Wno-decl diff --git a/io/Makefile b/io/Makefile index bf46d56..50edf91 100644 --- a/io/Makefile +++ b/io/Makefile @@ -58,7 +58,7 @@ CFILES += inject.c resblks.c LCFLAGS += -DHAVE_INJECT -DHAVE_RESBLKS endif -ifeq ($(PKG_PLATFORM),linux) +ifeq ($(HAVE_SYNC_FILE_RANGE),yes) CFILES += sync_file_range.c LCFLAGS += -DHAVE_SYNC_FILE_RANGE endif @@ -75,6 +75,11 @@ ifeq ($(HAVE_FALLOCATE),yes) LCFLAGS += -DHAVE_FALLOCATE endif +# Also implies PWRITEV +ifeq ($(HAVE_PREADV),yes) +LCFLAGS += -DHAVE_PREADV -DHAVE_PWRITEV +endif + default: depend $(LTCOMMAND) include $(BUILDRULES) diff --git a/io/pread.c b/io/pread.c index 7e2ed7d..a42baed 100644 --- a/io/pread.c +++ b/io/pread.c @@ -47,7 +47,9 @@ pread_help(void) " -R -- read at random offsets in the range of bytes\n" " -Z N -- zeed the random number generator (used when reading randomly)\n" " (heh, zorry, the -s/-S arguments were already in use in pwrite)\n" +#ifdef HAVE_PREADV " -V N -- use vectored IO with N iovecs of blocksize each (preadv)\n" +#endif "\n" " When in \"random\" mode, the number of read operations will equal the\n" " number required to do a complete forward/backward scan of the range.\n" @@ -168,8 +170,9 @@ dump_buffer( } } +#ifdef HAVE_PREADV static int -do_pread( +do_preadv( int fd, off64_t offset, ssize_t count, @@ -179,10 +182,6 @@ do_pread( ssize_t oldlen = 0; ssize_t bytes = 0; - - if (!vectors) - return pread64(fd, buffer, min(count, buffer_size), offset); - /* trim the iovec if necessary */ if (count < buffersize) { size_t len = 0; @@ -204,6 +203,22 @@ do_pread( return bytes; } +#else +#define do_preadv(fd, offset, count, buffer_size) (0) +#endif + +static int +do_pread( + int fd, + off64_t offset, + ssize_t count, + ssize_t buffer_size) +{ + if (!vectors) + return pread64(fd, buffer, min(count, buffer_size), offset); + + return do_preadv(fd, offset, count, buffer_size); +} static int read_random( @@ -406,14 +421,16 @@ pread_f( case 'v': vflag = 1; break; +#ifdef HAVE_PREADV case 'V': vectors = strtoul(optarg, &sp, 0); if (!sp || sp == optarg) { - printf(_("non-numberic vector count == %s\n"), + printf(_("non-numeric vector count == %s\n"), optarg); return 0; } break; +#endif case 'Z': zeed = strtoul(optarg, &sp, 0); if (!sp || sp == optarg) { diff --git a/io/pwrite.c b/io/pwrite.c index 73acbac..a2f0a81 100644 --- a/io/pwrite.c +++ b/io/pwrite.c @@ -51,24 +51,23 @@ pwrite_help(void) " -R -- write at random offsets in the specified range of bytes\n" " -Z N -- zeed the random number generator (used when writing randomly)\n" " (heh, zorry, the -s/-S arguments were already in use in pwrite)\n" +#ifdef HAVE_PWRITEV " -V N -- use vectored IO with N iovecs of blocksize each (pwritev)\n" +#endif "\n")); } +#ifdef HAVE_PWRITEV static int -do_pwrite( +do_pwritev( int fd, off64_t offset, ssize_t count, ssize_t buffer_size) { - int vecs = 0; - ssize_t oldlen = 0; - ssize_t bytes = 0; - - - if (!vectors) - return pwrite64(fd, buffer, min(count, buffer_size), offset); + int vecs = 0; + ssize_t oldlen = 0; + ssize_t bytes = 0; /* trim the iovec if necessary */ if (count < buffersize) { @@ -91,6 +90,23 @@ do_pwrite( return bytes; } +#else +#define do_pwritev(fd, offset, count, buffer_size) (0) +#endif + +static int +do_pwrite( + int fd, + off64_t offset, + ssize_t count, + ssize_t buffer_size) +{ + if (!vectors) + return pwrite64(fd, buffer, min(count, buffer_size), offset); + + return do_pwritev(fd, offset, count, buffer_size); +} + static int write_random( off64_t offset, @@ -297,7 +313,7 @@ pwrite_f( case 'V': vectors = strtoul(optarg, &sp, 0); if (!sp || sp == optarg) { - printf(_("non-numberic vector count == %s\n"), + printf(_("non-numeric vector count == %s\n"), optarg); return 0; } diff --git a/m4/package_libcdev.m4 b/m4/package_libcdev.m4 index 1e2c256..f489f52 100644 --- a/m4/package_libcdev.m4 +++ b/m4/package_libcdev.m4 @@ -135,3 +135,38 @@ AC_DEFUN([AC_HAVE_FIEMAP], AC_MSG_RESULT(no)) AC_SUBST(have_fiemap) ]) + +# +# Check if we have a preadv libc call (Linux) +# +AC_DEFUN([AC_HAVE_PREADV], + [ AC_MSG_CHECKING([for preadv]) + AC_TRY_LINK([ +#define _FILE_OFFSET_BITS 64 +#define _BSD_SOURCE +#include <sys/uio.h> + ], [ + preadv(0, 0, 0, 0); + ], have_preadv=yes + AC_MSG_RESULT(yes), + AC_MSG_RESULT(no)) + AC_SUBST(have_preadv) + ]) + +# +# Check if we have a sync_file_range libc call (Linux) +# +AC_DEFUN([AC_HAVE_SYNC_FILE_RANGE], + [ AC_MSG_CHECKING([for sync_file_range]) + AC_TRY_LINK([ +#define _GNU_SOURCE +#define _FILE_OFFSET_BITS 64 +#include <fcntl.h> + ], [ + sync_file_range(0, 0, 0, 0); + ], have_sync_file_range=yes + AC_MSG_RESULT(yes), + AC_MSG_RESULT(no)) + AC_SUBST(have_sync_file_range) + ]) + _______________________________________________ xfs mailing list xfs@oss.sgi.com http://oss.sgi.com/mailman/listinfo/xfs ^ permalink raw reply related [flat|nested] 13+ messages in thread
* Re: [PATCH 2/2 V2] xfs_io: configure tests for preadv/pwritev & sync_file_range 2012-10-10 3:40 ` [PATCH 2/2 V2] " Eric Sandeen @ 2012-10-10 23:25 ` Dave Chinner 0 siblings, 0 replies; 13+ messages in thread From: Dave Chinner @ 2012-10-10 23:25 UTC (permalink / raw) To: Eric Sandeen; +Cc: xfs-oss On Tue, Oct 09, 2012 at 10:40:11PM -0500, Eric Sandeen wrote: > On older systems we may not have preadv/pwritev and/or > sync_file_range. > > Add the configure magic, and stub out the code > where needed. > > (sync_file_range just needed a better test; preadv/pwritev > took a little more rearranging) > > And fix a couple typos ("numberic") while we're at it. > > Signed-off-by: Eric Sandeen <sandeen@redhat.com> > --- > > V2: add -DHAVE_PWRITEV and use that test in io/pwrite.c > rather than HAVE_PREADV ..... > +# Also implies PWRITEV > +ifeq ($(HAVE_PREADV),yes) > +LCFLAGS += -DHAVE_PREADV -DHAVE_PWRITEV > +endif Nice solution ;) Reviewed-by: Dave Chinner <dchinner@redhat.com> -- Dave Chinner david@fromorbit.com _______________________________________________ xfs mailing list xfs@oss.sgi.com http://oss.sgi.com/mailman/listinfo/xfs ^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH 1/2] xfs_io: include headers for preadv/pwritev 2012-10-09 22:02 [PATCH 1/2] xfs_io: include headers for preadv/pwritev Eric Sandeen 2012-10-09 22:08 ` [PATCH 2/2] xfs_io: configure tests for preadv/pwritev & sync_file_range Eric Sandeen @ 2012-10-09 22:21 ` Dave Chinner 2012-10-10 3:37 ` [PATCH 1/2 V2] " Eric Sandeen 2012-10-11 20:40 ` [PATCH 1/2] " Mark Tinguely 3 siblings, 0 replies; 13+ messages in thread From: Dave Chinner @ 2012-10-09 22:21 UTC (permalink / raw) To: Eric Sandeen; +Cc: xfs-oss On Tue, Oct 09, 2012 at 05:02:10PM -0500, Eric Sandeen wrote: > We need to include uio.h to avoid: > > [CC] pread.o > pread.c: In function ‘do_pread’: > pread.c:198: warning: implicit declaration of function ‘preadv’ > [CC] pwrite.o > pwrite.c: In function ‘do_pwrite’: > pwrite.c:85: warning: implicit declaration of function ‘pwritev’ Funny, I don't recall ever seeing that error when I wrote these patches. But, yeah, I see them now. > Signed-off-by: Eric Sandeen <sandeen@redhat.com> Reviewed-by: Dave Chinner <dchinner@redhat.com> -- Dave Chinner david@fromorbit.com _______________________________________________ xfs mailing list xfs@oss.sgi.com http://oss.sgi.com/mailman/listinfo/xfs ^ permalink raw reply [flat|nested] 13+ messages in thread
* [PATCH 1/2 V2] xfs_io: include headers for preadv/pwritev 2012-10-09 22:02 [PATCH 1/2] xfs_io: include headers for preadv/pwritev Eric Sandeen 2012-10-09 22:08 ` [PATCH 2/2] xfs_io: configure tests for preadv/pwritev & sync_file_range Eric Sandeen 2012-10-09 22:21 ` [PATCH 1/2] xfs_io: include headers for preadv/pwritev Dave Chinner @ 2012-10-10 3:37 ` Eric Sandeen 2012-10-10 23:24 ` Dave Chinner 2012-10-11 20:40 ` [PATCH 1/2] " Mark Tinguely 3 siblings, 1 reply; 13+ messages in thread From: Eric Sandeen @ 2012-10-10 3:37 UTC (permalink / raw) To: Eric Sandeen; +Cc: xfs-oss We need to include uio.h to avoid: [CC] pread.o pread.c: In function ‘do_pread’: pread.c:198: warning: implicit declaration of function ‘preadv’ [CC] pwrite.o pwrite.c: In function ‘do_pwrite’: pwrite.c:85: warning: implicit declaration of function ‘pwritev’ Signed-off-by: Eric Sandeen <sandeen@redhat.com> --- V2: Move _BSD_SOURCE to PCFLAGS intead of in source files per Dave's suggestion. diff --git a/include/builddefs.in b/include/builddefs.in index 81ebfcd..04590d2 100644 --- a/include/builddefs.in +++ b/include/builddefs.in @@ -106,7 +106,7 @@ GCCFLAGS = -funsigned-char -fno-strict-aliasing -Wall # -Wbitwise -Wno-transparent-union -Wno-old-initializer -Wno-decl ifeq ($(PKG_PLATFORM),linux) -PCFLAGS = -D_GNU_SOURCE -D_XOPEN_SOURCE=500 -D_FILE_OFFSET_BITS=64 $(GCCFLAGS) +PCFLAGS = -D_GNU_SOURCE -D_BSD_SOURCE -D_XOPEN_SOURCE=500 -D_FILE_OFFSET_BITS=64 $(GCCFLAGS) DEPENDFLAGS = -D__linux__ endif ifeq ($(PKG_PLATFORM),gnukfreebsd) diff --git a/io/pread.c b/io/pread.c index 0b9454b..7e2ed7d 100644 --- a/io/pread.c +++ b/io/pread.c @@ -16,6 +16,7 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ +#include <sys/uio.h> #include <xfs/xfs.h> #include <xfs/command.h> #include <xfs/input.h> diff --git a/io/pwrite.c b/io/pwrite.c index 3689960..73acbac 100644 --- a/io/pwrite.c +++ b/io/pwrite.c @@ -16,6 +16,7 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ +#include <sys/uio.h> #include <xfs/xfs.h> #include <xfs/command.h> #include <xfs/input.h> _______________________________________________ xfs mailing list xfs@oss.sgi.com http://oss.sgi.com/mailman/listinfo/xfs ^ permalink raw reply related [flat|nested] 13+ messages in thread
* Re: [PATCH 1/2 V2] xfs_io: include headers for preadv/pwritev 2012-10-10 3:37 ` [PATCH 1/2 V2] " Eric Sandeen @ 2012-10-10 23:24 ` Dave Chinner 0 siblings, 0 replies; 13+ messages in thread From: Dave Chinner @ 2012-10-10 23:24 UTC (permalink / raw) To: Eric Sandeen; +Cc: Eric Sandeen, xfs-oss On Tue, Oct 09, 2012 at 10:37:25PM -0500, Eric Sandeen wrote: > We need to include uio.h to avoid: > > [CC] pread.o > pread.c: In function ‘do_pread’: > pread.c:198: warning: implicit declaration of function ‘preadv’ > [CC] pwrite.o > pwrite.c: In function ‘do_pwrite’: > pwrite.c:85: warning: implicit declaration of function ‘pwritev’ > > Signed-off-by: Eric Sandeen <sandeen@redhat.com> Looks good. Reviewed-by: Dave Chinner <dchinner@redhat.com> -- Dave Chinner david@fromorbit.com _______________________________________________ xfs mailing list xfs@oss.sgi.com http://oss.sgi.com/mailman/listinfo/xfs ^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH 1/2] xfs_io: include headers for preadv/pwritev 2012-10-09 22:02 [PATCH 1/2] xfs_io: include headers for preadv/pwritev Eric Sandeen ` (2 preceding siblings ...) 2012-10-10 3:37 ` [PATCH 1/2 V2] " Eric Sandeen @ 2012-10-11 20:40 ` Mark Tinguely 3 siblings, 0 replies; 13+ messages in thread From: Mark Tinguely @ 2012-10-11 20:40 UTC (permalink / raw) To: Eric Sandeen; +Cc: xfs-oss On 10/09/12 17:02, Eric Sandeen wrote: > We need to include uio.h to avoid: > > [CC] pread.o > pread.c: In function ‘do_pread’: > pread.c:198: warning: implicit declaration of function ‘preadv’ > [CC] pwrite.o > pwrite.c: In function ‘do_pwrite’: > pwrite.c:85: warning: implicit declaration of function ‘pwritev’ > > Signed-off-by: Eric Sandeen<sandeen@redhat.com> > --- I had a problem downloading this patch. It was small, so I recreated. I hope it was correct. Committed to git://oss.sgi.com/xfs/cmds/xfsprogs.git, master branch. --Mark. _______________________________________________ xfs mailing list xfs@oss.sgi.com http://oss.sgi.com/mailman/listinfo/xfs ^ permalink raw reply [flat|nested] 13+ messages in thread
end of thread, other threads:[~2012-10-11 20:39 UTC | newest] Thread overview: 13+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2012-10-09 22:02 [PATCH 1/2] xfs_io: include headers for preadv/pwritev Eric Sandeen 2012-10-09 22:08 ` [PATCH 2/2] xfs_io: configure tests for preadv/pwritev & sync_file_range Eric Sandeen 2012-10-09 22:28 ` Dave Chinner 2012-10-09 22:32 ` Eric Sandeen 2012-10-09 22:56 ` Dave Chinner 2012-10-09 22:57 ` Eric Sandeen 2012-10-09 23:05 ` Dave Chinner 2012-10-10 3:40 ` [PATCH 2/2 V2] " Eric Sandeen 2012-10-10 23:25 ` Dave Chinner 2012-10-09 22:21 ` [PATCH 1/2] xfs_io: include headers for preadv/pwritev Dave Chinner 2012-10-10 3:37 ` [PATCH 1/2 V2] " Eric Sandeen 2012-10-10 23:24 ` Dave Chinner 2012-10-11 20:40 ` [PATCH 1/2] " Mark Tinguely
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox