Displaying 20 results from an estimated 37 matches for "libnbd_aio_direction_writ".
Did you mean:
libnbd_aio_direction_write
2019 May 31
4
[libnbd] Simultaneous read and write
...look like:
fd = nbd_aio_get_fd (nbd);
for (;;) {
/* <-- If you need to issue more commands, do that here. */
dir = nbd_aio_get_direction (nbd);
pollfd[0].fd = fd;
pollfd[0].events = 0;
if (dir & LIBNBD_AIO_DIRECTION_READ) pollfd[0].events |= POLLIN;
if (dir & LIBNBD_AIO_DIRECTION_WRITE) pollfd[0].events |= POLLOUT;
poll (pollfd, 1, -1);
if (pollfd[0].revents & LIBNBD_AIO_DIRECTION_READ)
nbd_aio_notify_read ();
else if (pollfd[0].revents & LIBNBD_AIO_DIRECTION_WRITE)
nbd_aio_notify_write ();
}
----------------------------------------------------...
2019 Jun 04
0
[PATCH libnbd v2 1/4] examples, tests: Remove want_to_send / ready logic, increase limit on cmds in flight.
...IGHT && nbd_aio_is_ready (nbd);
-
- fds[0].fd = nbd_aio_get_fd (nbd);
- fds[0].events = want_to_send ? POLLOUT : 0;
- fds[0].revents = 0;
- dir = nbd_aio_get_direction (nbd);
- if ((dir & LIBNBD_AIO_DIRECTION_READ) != 0)
- fds[0].events |= POLLIN;
- if ((dir & LIBNBD_AIO_DIRECTION_WRITE) != 0)
- fds[0].events |= POLLOUT;
-
- if (poll (fds, 1, -1) == -1) {
- perror ("poll");
- goto error;
- }
-
- if ((dir & LIBNBD_AIO_DIRECTION_READ) != 0 &&
- (fds[0].revents & POLLIN) != 0)
- nbd_aio_notify_read (nbd);
- else if ((d...
2019 Jun 18
0
[nbdkit PATCH] Experiment: nbd: Use ppoll() instead of pipe-to-self
...saction *trans, **prev;
int dir;
- char c;
+ fd.fd = h->fd;
dir = nbd_aio_get_direction (h->nbd);
nbdkit_debug ("polling, dir=%d", dir);
if (dir & LIBNBD_AIO_DIRECTION_READ)
- fds[0].events |= POLLIN;
+ fd.events |= POLLIN;
if (dir & LIBNBD_AIO_DIRECTION_WRITE)
- fds[0].events |= POLLOUT;
- if (poll (fds, 2, -1) == -1) {
- nbdkit_error ("poll: %m");
+ fd.events |= POLLOUT;
+ if (ppoll (&fd, 1, NULL, &origmask) == -1 && errno != EINTR) {
+ nbdkit_error ("ppoll: %m");
break;
}
-...
2019 May 31
0
[libnbd] Simultaneous read and write
...nbd);
> for (;;) {
> /* <-- If you need to issue more commands, do that here. */
> dir = nbd_aio_get_direction (nbd);
> pollfd[0].fd = fd;
> pollfd[0].events = 0;
> if (dir & LIBNBD_AIO_DIRECTION_READ) pollfd[0].events |= POLLIN;
> if (dir & LIBNBD_AIO_DIRECTION_WRITE) pollfd[0].events |= POLLOUT;
> poll (pollfd, 1, -1);
> if (pollfd[0].revents & LIBNBD_AIO_DIRECTION_READ)
Rather, if (pollfd[0].revents & POLLIN && dir & LIBNBD_AIO_DIRECTION_READ)
> nbd_aio_notify_read ();
> else if (pollfd[0].revents & LIB...
2019 Jun 28
3
[libnbd PATCH] tests: Enhance errors test
...ck on POLLIN, then queue
+ * multiple disconnects. XXX The last one should fail.
+ */
+ if (nbd_aio_pwrite (nbd, buf, 2 * 1024 * 1024, 0, 0) == -1) {
+ fprintf (stderr, "%s: %s\n", argv[0], nbd_get_error ());
+ exit (EXIT_FAILURE);
+ }
+ if ((nbd_aio_get_direction (nbd) & LIBNBD_AIO_DIRECTION_WRITE) == 0) {
+ fprintf (stderr, "%s: test failed: "
+ "expect to be blocked on write\n",
+ argv[0]);
+ exit (EXIT_FAILURE);
+ }
+ if (nbd_aio_disconnect (nbd, 0) == -1) {
+ fprintf (stderr, "%s: %s\n", argv[0], nbd_get_error ());
+ ex...
2019 May 21
0
[libnbd] tmp patch adding deadlock test
...nnection is dead or closed\n");
+ goto error;
+ }
+
+ fds[0].fd = nbd_aio_get_fd (conn);
+ fds[0].events = 0;
+ fds[0].revents = 0;
+ dir = nbd_aio_get_direction (conn);
+ if ((dir & LIBNBD_AIO_DIRECTION_READ) != 0)
+ fds[0].events |= POLLIN;
+ if ((dir & LIBNBD_AIO_DIRECTION_WRITE) != 0)
+ fds[0].events |= POLLOUT;
+
+ if (poll (fds, 1, -1) == -1) {
+ perror ("poll");
+ goto error;
+ }
+
+ if ((dir & LIBNBD_AIO_DIRECTION_READ) != 0 &&
+ (fds[0].revents & POLLIN) != 0)
+ nbd_aio_notify_read (conn);
+ else if ((...
2019 May 22
0
[libnbd PATCH v3 7/7] examples: Add example to demonstrate just-fixed deadlock scenario
...nnection is dead or closed\n");
+ goto error;
+ }
+
+ fds[0].fd = nbd_aio_get_fd (conn);
+ fds[0].events = 0;
+ fds[0].revents = 0;
+ dir = nbd_aio_get_direction (conn);
+ if ((dir & LIBNBD_AIO_DIRECTION_READ) != 0)
+ fds[0].events |= POLLIN;
+ if ((dir & LIBNBD_AIO_DIRECTION_WRITE) != 0)
+ fds[0].events |= POLLOUT;
+
+ if (poll (fds, 1, -1) == -1) {
+ perror ("poll");
+ goto error;
+ }
+
+ if ((dir & LIBNBD_AIO_DIRECTION_READ) != 0 &&
+ (fds[0].revents & POLLIN) != 0)
+ nbd_aio_notify_read (conn);
+ else if ((...
2019 Jul 15
0
[PATCH libnbd] examples: Include an example of integrating with the glib main loop.
...__); \
+ } while (0)
+
+/* These are the GSource functions for libnbd handles. */
+static inline int
+events_from_nbd (struct nbd_handle *nbd)
+{
+ int dir = nbd_aio_get_direction (nbd);
+ int r = 0;
+
+ if ((dir & LIBNBD_AIO_DIRECTION_READ) != 0)
+ r |= G_IO_IN;
+ if ((dir & LIBNBD_AIO_DIRECTION_WRITE) != 0)
+ r |= G_IO_OUT;
+ return r;
+}
+
+static gboolean
+prepare (GSource *sp, gint *timeout_)
+{
+ struct NBDSource *source = (struct NBDSource *) sp;
+
+ /* When the NBD handle moves out of the created state (which means
+ * that it first has a socket associated with it) we must initia...
2019 Jul 17
0
[PATCH libnbd v2] examples: Include an example of integrating with the glib main loop.
...__); \
+ } while (0)
+
+/* These are the GSource functions for libnbd handles. */
+static inline int
+events_from_nbd (struct nbd_handle *nbd)
+{
+ int dir = nbd_aio_get_direction (nbd);
+ int r = 0;
+
+ if ((dir & LIBNBD_AIO_DIRECTION_READ) != 0)
+ r |= G_IO_IN;
+ if ((dir & LIBNBD_AIO_DIRECTION_WRITE) != 0)
+ r |= G_IO_OUT;
+ return r;
+}
+
+static gboolean
+prepare (GSource *sp, gint *timeout_)
+{
+ struct NBDSource *source = (struct NBDSource *) sp;
+ int new_fd;
+ int events;
+
+ /* The poll file descriptor can change or become invalid at any
+ * time.
+ */
+ new_fd = nbd_aio_g...
2019 Jul 17
2
[PATCH libnbd v2] examples: Include an example of integrating with glib main loop.
This is working now, and incorporates all of the changes in Eric's
review, *except* that it still doesn't retire commands (although this
seems to make no obvious difference, except possibly a performance and
memory impact).
Rich.
2019 Jun 30
0
Re: [libnbd PATCH] tests: Enhance errors test
...multiple disconnects. XXX The last one should fail.
> + */
> + if (nbd_aio_pwrite (nbd, buf, 2 * 1024 * 1024, 0, 0) == -1) {
> + fprintf (stderr, "%s: %s\n", argv[0], nbd_get_error ());
> + exit (EXIT_FAILURE);
> + }
> + if ((nbd_aio_get_direction (nbd) & LIBNBD_AIO_DIRECTION_WRITE) == 0) {
> + fprintf (stderr, "%s: test failed: "
> + "expect to be blocked on write\n",
> + argv[0]);
> + exit (EXIT_FAILURE);
> + }
This test fails when run under valgrind. An abbreviated log shows
what's happening:
libnbd:...
2019 Jul 15
2
[PATCH libnbd] examples: Include an example of integrating with the glibc main loop.
** NOT WORKING **
This patch shows how to integrate libnbd and the glib main loop.
Posted mainly as a point of discussion as it doesn't quite work yet.
Rich.
2019 May 21
9
[libnbd PATCH 0/3] Avoid deadlock with in-flight commands
This might not be the final solution, but it certainly seems to solve
a deadlock for me that I could trigger by using 'nbdkit
--filter=noparallel memory 512k' and calling nbd_aio_pread for a
request larger than 256k (enough for the Linux kernel to block the
server until libnbd read()s), immediately followed by nbd_aio_pwrite
for a request larger than 256k (enough to block libnbd until the
2019 Jul 02
1
Re: [libnbd PATCH] tests: Enhance errors test
...XX The last one should fail.
>> + */
>> + if (nbd_aio_pwrite (nbd, buf, 2 * 1024 * 1024, 0, 0) == -1) {
>> + fprintf (stderr, "%s: %s\n", argv[0], nbd_get_error ());
>> + exit (EXIT_FAILURE);
>> + }
>> + if ((nbd_aio_get_direction (nbd) & LIBNBD_AIO_DIRECTION_WRITE) == 0) {
>> + fprintf (stderr, "%s: test failed: "
>> + "expect to be blocked on write\n",
>> + argv[0]);
>> + exit (EXIT_FAILURE);
>> + }
>
> This test fails when run under valgrind. An abbreviated log shows...
2019 Jun 04
9
[PATCH libnbd v2 0/4] api: Implement concurrent writer.
v1:
https://www.redhat.com/archives/libguestfs/2019-June/msg00014.html
I pushed a few bits which are uncontroversial. The main
changes since v1 are:
An extra patch removes the want_to_send / check for nbd_aio_is_ready
in examples/threaded-reads-and-writes.c. This logic was wrong since
commit 6af72b87 as was pointed out by Eric in his review. Comments
and structure of
2019 Jun 20
2
[libnbd PATCH] docs: Improve nbd_aio_get_direction documentation
...way to kick the polling thread out of
+poll in case issuing the command changes the needed polling
+direction. Possible ways to do this include polling for activity on a
+pipe-to-self, or using L<pthread_kill(3)> to send a signal that is
+masked except during L<ppoll(2)>.
+
=item C<LIBNBD_AIO_DIRECTION_WRITE> = 2
We are expected next to write to the server. If using L<poll(2)>
@@ -1727,13 +1739,12 @@ you would then call C<nbd_aio_notify_write>.
=item C<LIBNBD_AIO_DIRECTION_BOTH> = 3
-We are expected next to either read or write to the server.
-If using L<poll(2)> you w...
2019 Jul 03
1
[libnbd PATCH] tests: Make errors more robust under load
...(stderr, "%s: %s\n", argv[0], nbd_get_error ());
exit (EXIT_FAILURE);
}
+ if (nbd_aio_pwrite (nbd, buf, 2 * 1024 * 1024, 0, 0) == -1) {
+ fprintf (stderr, "%s: %s\n", argv[0], nbd_get_error ());
+ exit (EXIT_FAILURE);
+ }
if ((nbd_aio_get_direction (nbd) & LIBNBD_AIO_DIRECTION_WRITE) == 0) {
fprintf (stderr, "%s: test failed: "
"expect to be blocked on write\n",
@@ -192,6 +268,17 @@ main (int argc, char *argv[])
}
check (EINVAL, "nbd_aio_disconnect: ");
+ /* Unblock the nbdkit sh plugin */
+ if (close (witness_fd) == -...
2019 Oct 18
0
[PATCH libnbd 2/2] api: Add support for AF_VSOCK.
...quot;cmd_connect_vsock"
| CmdConnectTCP -> "cmd_connect_tcp"
| CmdConnectCommand -> "cmd_connect_command"
| CmdConnectSA -> "cmd_connect_sa"
@@ -3624,7 +3671,7 @@ let generate_lib_states_run_c () =
| NotifyWrite -> pr " r |= LIBNBD_AIO_DIRECTION_WRITE;\n"
| CmdCreate
| CmdConnectSockAddr
- | CmdConnectUnix | CmdConnectTCP
+ | CmdConnectUnix | CmdConnectVSock | CmdConnectTCP
| CmdConnectCommand | CmdConnectSA | CmdConnectSocket
| CmdIssue -> ()
) events;
diff --git a/ge...
2019 Jun 29
0
[libnbd PATCH 1/6] api: Add nbd_aio_in_flight
...a way to kick the
+polling thread out of poll in case issuing the command changes the
+needed polling direction. Possible ways to do this include polling
+for activity on a pipe-to-self, or using L<pthread_kill(3)> to send
+a signal that is masked except during L<ppoll(2)>.
=item C<LIBNBD_AIO_DIRECTION_WRITE> = 2
@@ -2012,6 +2018,22 @@ C<nbd_aio_command_completed> to actually retire the command and learn
whether the command was successful.";
};
+ "aio_in_flight", {
+ default_call with
+ args = []; ret = RInt;
+ permitted_states = [ Connected; Closed; Dead ];
+...
2019 May 22
10
[libnbd PATCH v2 0/5] Avoid deadlock with in-flight commands
On v1, we discussed whether cmds_to_issue needed to be a list, since
it never had more than one element. I played with the idea of making
it a list, and allowing the client to queue up new commands regardless
of whether the state machine is currently in READY. I also polished up
the tmp demo into a bit more full-fledged example file, worth
including since it also let me discover a hard-to-hit race