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