* [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 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
* 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 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
* [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 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 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
` (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