Message ID | ddcd738d-e4bf-eb92-bd8c-b6168a89691a@linaro.org |
---|---|
State | New |
Headers | show |
On 2017.07.10 at 16:47 -0300, Adhemerval Zanella wrote: > > > On 10/07/2017 16:36, Zack Weinberg wrote: > > Argh, one more thing: > > > > On Mon, Jul 10, 2017 at 3:34 PM, Zack Weinberg <zackw@panix.com> wrote: > >> > >> Suggest instead "Use nonblocking mode for this operation; that is, > >> this call to @code{preadv2} will fail and set @code{errno} to > >> @code{EAGAIN} if the operation would block." > > > > "... this call to @code{preadv2} or @code{pwritev2} ..." It does work > > in both, right? > > > > zw > > > > That's the new version: > > * sysdeps/unix/sysv/linux/bits/uio-ext.h (RWF_NOWAIT): New flag. > diff --git a/sysdeps/unix/sysv/linux/bits/uio-ext.h b/sysdeps/unix/sysv/linux/bits/uio-ext.h > index 4ddb644..12cd78e 100644 > --- a/sysdeps/unix/sysv/linux/bits/uio-ext.h > +++ b/sysdeps/unix/sysv/linux/bits/uio-ext.h > @@ -46,6 +46,10 @@ extern ssize_t process_vm_writev (pid_t __pid, const struct iovec *__lvec, > #define RWF_HIPRI 0x00000001 /* High priority request. */ > #define RWF_DSYNC 0x00000002 /* per-IO O_DSYNC. */ > #define RWF_SYNC 0x00000004 /* per-IO O_SYNC. */ > +#define RWF_NOWAIT 0x00000008 /* per-IO, return -EAGAIN if operation > + would block */ > +#define RWF_SUPPORTED (RWF_HIPRI | RWF_DSYNC | RWF_SYNC | RWF_NOWAIT) In case you haven't noticed already, this still defines RWF_SUPPORTED in uio-ext.h.
On 11/07/2017 08:06, Markus Trippelsdorf wrote: > On 2017.07.10 at 16:47 -0300, Adhemerval Zanella wrote: >> >> >> On 10/07/2017 16:36, Zack Weinberg wrote: >>> Argh, one more thing: >>> >>> On Mon, Jul 10, 2017 at 3:34 PM, Zack Weinberg <zackw@panix.com> wrote: >>>> >>>> Suggest instead "Use nonblocking mode for this operation; that is, >>>> this call to @code{preadv2} will fail and set @code{errno} to >>>> @code{EAGAIN} if the operation would block." >>> >>> "... this call to @code{preadv2} or @code{pwritev2} ..." It does work >>> in both, right? >>> >>> zw >>> >> >> That's the new version: >> >> * sysdeps/unix/sysv/linux/bits/uio-ext.h (RWF_NOWAIT): New flag. > >> diff --git a/sysdeps/unix/sysv/linux/bits/uio-ext.h b/sysdeps/unix/sysv/linux/bits/uio-ext.h >> index 4ddb644..12cd78e 100644 >> --- a/sysdeps/unix/sysv/linux/bits/uio-ext.h >> +++ b/sysdeps/unix/sysv/linux/bits/uio-ext.h >> @@ -46,6 +46,10 @@ extern ssize_t process_vm_writev (pid_t __pid, const struct iovec *__lvec, >> #define RWF_HIPRI 0x00000001 /* High priority request. */ >> #define RWF_DSYNC 0x00000002 /* per-IO O_DSYNC. */ >> #define RWF_SYNC 0x00000004 /* per-IO O_SYNC. */ >> +#define RWF_NOWAIT 0x00000008 /* per-IO, return -EAGAIN if operation >> + would block */ >> +#define RWF_SUPPORTED (RWF_HIPRI | RWF_DSYNC | RWF_SYNC | RWF_NOWAIT) > > In case you haven't noticed already, this still defines RWF_SUPPORTED in > uio-ext.h. > Ugh, I will fix it, thanks for spotting it.
diff --git a/manual/llio.texi b/manual/llio.texi index ba1f455..e72c53c 100644 --- a/manual/llio.texi +++ b/manual/llio.texi @@ -770,6 +770,10 @@ Per-IO synchronization as if the file was opened with @code{O_DSYNC} flag. @item RWF_SYNC Per-IO synchronization as if the file was opened with @code{O_SYNC} flag. + +@item RWF_NOWAIT +Use nonblocking mode for this operation; that is, this call to @code{preadv2} +will fail and set @code{errno} to @code{EAGAIN} if the operation would block. @end vtable When the source file is compiled with @code{_FILE_OFFSET_BITS == 64} the diff --git a/misc/tst-preadvwritev2-common.c b/misc/tst-preadvwritev2-common.c index 4c53d56..8abedc1 100644 --- a/misc/tst-preadvwritev2-common.c +++ b/misc/tst-preadvwritev2-common.c @@ -16,21 +16,16 @@ License along with the GNU C Library; if not, see <http://www.gnu.org/licenses/>. */ +#include <limits.h> #include <support/check.h> static void do_test_with_invalid_flags (void) { - int invalid_flag = 0x1; -#ifdef RWF_HIPRI - invalid_flag <<= 1; -#endif -#ifdef RWF_DSYNC - invalid_flag <<= 1; -#endif -#ifdef RWF_SYNC - invalid_flag <<= 1; -#endif +#define RWF_SUPPORTED (RWF_HIPRI | RWF_DSYNC | RWF_SYNC | RWF_NOWAIT) + /* Set the next bit from the mask of all supported flags. */ + int invalid_flag = __builtin_clz (RWF_SUPPORTED); + invalid_flag = 0x1 << ((sizeof (int) * CHAR_BIT) - invalid_flag); char buf[32]; const struct iovec vec = { .iov_base = buf, .iov_len = sizeof (buf) }; diff --git a/sysdeps/unix/sysv/linux/bits/uio-ext.h b/sysdeps/unix/sysv/linux/bits/uio-ext.h index 4ddb644..12cd78e 100644 --- a/sysdeps/unix/sysv/linux/bits/uio-ext.h +++ b/sysdeps/unix/sysv/linux/bits/uio-ext.h @@ -46,6 +46,10 @@ extern ssize_t process_vm_writev (pid_t __pid, const struct iovec *__lvec, #define RWF_HIPRI 0x00000001 /* High priority request. */ #define RWF_DSYNC 0x00000002 /* per-IO O_DSYNC. */ #define RWF_SYNC 0x00000004 /* per-IO O_SYNC. */ +#define RWF_NOWAIT 0x00000008 /* per-IO, return -EAGAIN if operation + would block */ +#define RWF_SUPPORTED (RWF_HIPRI | RWF_DSYNC | RWF_SYNC | RWF_NOWAIT) + __END_DECLS