Displaying 20 results from an estimated 25 matches for "backend_can_write".
2019 Aug 30
0
[nbdkit PATCH 6/9] server: Cache per-connection can_FOO flags
...bool using_tls;
bool structured_replies;
bool meta_context_base_allocation;
diff --git a/server/backend.c b/server/backend.c
index 374d8540..196b48e4 100644
--- a/server/backend.c
+++ b/server/backend.c
@@ -144,73 +144,130 @@ backend_get_size (struct backend *b, struct connection *conn)
int
backend_can_write (struct backend *b, struct connection *conn)
{
+ struct b_conn_handle *h = &conn->handles[b->i];
+
debug ("%s: can_write", b->name);
- return b->can_write (b, conn);
+ if (h->can_write == -1)
+ h->can_write = b->can_write (b, conn);
+ return h->can_...
2019 Aug 30
3
[nbdkit PATCH v2 0/2] caching .can_write
This is a subset of the last half of the larger 9-patch series. The
uncontroversial first half of that series is pushed, but here, I tried
to reduce the size of the patches by splitting out some of the more
complex changes, so that the rest of the changes remaining in the
series are more mechanical. In turn, it forced me to write timing
tests, which let me spot another spot where we are wasting
2020 Feb 11
0
[PATCH nbdkit 3/3] server: Remove explicit connection parameter, use TLS instead.
...null__ (1)));
-extern int backend_reopen (struct backend *b, struct connection *conn,
- int readonly)
- __attribute__((__nonnull__ (1, 2)));
-extern int64_t backend_get_size (struct backend *b, struct connection *conn)
- __attribute__((__nonnull__ (1, 2)));
-extern int backend_can_write (struct backend *b, struct connection *conn)
- __attribute__((__nonnull__ (1, 2)));
-extern int backend_can_flush (struct backend *b, struct connection *conn)
- __attribute__((__nonnull__ (1, 2)));
-extern int backend_is_rotational (struct backend *b, struct connection *conn)
- __attribute__((__...
2020 Feb 11
4
[PATCH nbdkit v2 0/3] server: Remove explicit connection parameter.
v1 was here:
https://www.redhat.com/archives/libguestfs/2020-February/msg00081.html
v2 replaces
struct connection *conn = GET_CONN;
with
GET_CONN;
which sets conn implicitly and asserts that it is non-NULL.
If we actually want to test if conn is non-NULL or behave
differently, then you must use threadlocal_get_conn() instead,
and some existing uses do that.
Rich.
2020 Feb 11
5
[PATCH nbdkit 0/3] server: Remove explicit connection parameter.
The third patch is a large but mechanical change which gets rid of
passing around struct connection * entirely within the server,
preferring instead to reference the connection through thread-local
storage.
I hope this is a gateway to simplifying other parts of the code.
Rich.
2020 Feb 12
0
[PATCH nbdkit 3/3] server: filters: Remove struct b_h.
...t, readonly);
}
static int64_t
next_get_size (void *nxdata)
{
- struct b_h *b_h = nxdata;
- return backend_get_size (b_h->b);
+ struct backend *b_next = nxdata;
+ return backend_get_size (b_next);
}
static int
next_can_write (void *nxdata)
{
- struct b_h *b_h = nxdata;
- return backend_can_write (b_h->b);
+ struct backend *b_next = nxdata;
+ return backend_can_write (b_next);
}
static int
next_can_flush (void *nxdata)
{
- struct b_h *b_h = nxdata;
- return backend_can_flush (b_h->b);
+ struct backend *b_next = nxdata;
+ return backend_can_flush (b_next);
}
static int...
2019 Aug 30
0
[nbdkit PATCH 9/9] server: Move command validation from protocol.c to backend.c
Now instead of validating just the client's request, we are validating
that all filters are passing valid requests on down.
In protocol.c, we were able to assert that our computation of eflags
populated all of the flags, and thus calls such as backend_can_write
would not fail; however, with filters, keeping those assertions mean
the burden is now on the filter to avoid calling into next_ops->FOO
without first priming the cache of next_ops->can_FOO. An audit of
existing filters did not find any more culprits.
Signed-off-by: Eric Blake <eblake@re...
2020 Feb 12
5
[PATCH nbdkit 1/3] server: Rename global backend pointer to "top".
...end_get_size (top);
if (size == -1)
return -1;
if (size < 0) {
@@ -98,57 +98,57 @@ protocol_common_open (uint64_t *exportsize, uint16_t *flags)
/* Check all flags even if they won't be advertised, to prime the
* cache and make later request validation easier.
*/
- fl = backend_can_write (backend);
+ fl = backend_can_write (top);
if (fl == -1)
return -1;
if (!fl)
eflags |= NBD_FLAG_READ_ONLY;
- fl = backend_can_zero (backend);
+ fl = backend_can_zero (top);
if (fl == -1)
return -1;
if (fl)
eflags |= NBD_FLAG_SEND_WRITE_ZEROES;
- fl = backend_...
2019 Aug 30
15
[nbdkit PATCH 0/9] can_FOO caching, more filter validation
It's easy to use the sh script to demonstrate that nbdkit is
inefficiently calling into .get_size, .can_fua, and friends more than
necessary. We've also commented on the list in the past that it would
be nice to ensure that when filters call into next_ops, they are not
violating constraints (as we've have to fix several bugs in the past
where we did not have such checking to protect
2019 Oct 07
6
[nbdkit PATCH 0/5] More retry fixes
I think this is my last round of patches for issues I identified with
the retry filter. With this in place, it should be safe to interject
another filter in between retry and the plugin.
Eric Blake (5):
retry: Don't call into closed plugin
tests: Refactor test-retry-reopen-fail.sh
tests: Enhance retry test to cover failed reopen
server: Move prepare/finalize/close recursion to
2019 Sep 19
0
[PATCH nbdkit v2 2/4] filters: Implement next_ops .reopen call.
...l__ (1, 2)));
+extern int backend_reopen (struct backend *b, struct connection *conn,
+ int readonly)
+ __attribute__((__nonnull__ (1, 2)));
extern int64_t backend_get_size (struct backend *b, struct connection *conn)
__attribute__((__nonnull__ (1, 2)));
extern int backend_can_write (struct backend *b, struct connection *conn)
--
2.23.0
2019 Sep 19
0
[PATCH nbdkit v3 1/3] filters: Implement next_ops .reopen call.
...l__ (1, 2)));
+extern int backend_reopen (struct backend *b, struct connection *conn,
+ int readonly)
+ __attribute__((__nonnull__ (1, 2)));
extern int64_t backend_get_size (struct backend *b, struct connection *conn)
__attribute__((__nonnull__ (1, 2)));
extern int backend_can_write (struct backend *b, struct connection *conn)
--
2.23.0
2019 Aug 30
0
[nbdkit PATCH v2 2/2] server: Remember .open(readonly) status
...quot;, b->name, readonly);
+
+ assert (h->handle == NULL);
+ assert (h->can_write == -1);
+ if (readonly)
+ h->can_write = 0;
+ return b->open (b, conn, readonly);
+}
+
void
backend_set_handle (struct backend *b, struct connection *conn, void *handle)
{
@@ -195,12 +209,8 @@ backend_can_write (struct backend *b, struct connection *conn)
debug ("%s: can_write", b->name);
- if (h->can_write == -1) {
- /* Special case for outermost backend when -r is in effect. */
- if (readonly && b == backend)
- return h->can_write = 0;
+ if (h->can_write =...
2020 Feb 12
2
[nbdkit PATCH] filters: Remove most next_* wrappers
...ruct backend *b_next = nxdata;
- return backend_reopen (b_next, readonly);
-}
-
-static int64_t
-next_get_size (void *nxdata)
-{
- struct backend *b_next = nxdata;
- return backend_get_size (b_next);
-}
-
-static int
-next_can_write (void *nxdata)
-{
- struct backend *b_next = nxdata;
- return backend_can_write (b_next);
-}
-
-static int
-next_can_flush (void *nxdata)
-{
- struct backend *b_next = nxdata;
- return backend_can_flush (b_next);
-}
-
-static int
-next_is_rotational (void *nxdata)
-{
- struct backend *b_next = nxdata;
- return backend_is_rotational (b_next);
-}
-
-static int
-next_can_trim...
2020 Feb 12
0
[PATCH nbdkit 2/3] server: Rename ‘struct b_conn_handle’ to plain ‘struct handle’.
...tsize &&
@@ -291,7 +291,7 @@ int64_t
backend_get_size (struct backend *b)
{
GET_CONN;
- struct b_conn_handle *h = &conn->handles[b->i];
+ struct handle *h = get_handle (conn, b->i);
controlpath_debug ("%s: get_size", b->name);
@@ -305,7 +305,7 @@ int
backend_can_write (struct backend *b)
{
GET_CONN;
- struct b_conn_handle *h = &conn->handles[b->i];
+ struct handle *h = get_handle (conn, b->i);
controlpath_debug ("%s: can_write", b->name);
@@ -319,7 +319,7 @@ int
backend_can_flush (struct backend *b)
{
GET_CONN;
- stru...
2020 Feb 11
1
[nbdkit PATCH] filters: Make nxdata persistent
...nn *nxdata = handle;
+ assert (nxdata->b == b->next && nxdata->conn == conn);
if (f->filter.can_write)
- return f->filter.can_write (&next_ops, &nxdata, handle);
+ return f->filter.can_write (&next_ops, nxdata, nxdata->handle);
else
return backend_can_write (b->next, conn);
}
@@ -470,10 +494,11 @@ static int
filter_can_flush (struct backend *b, struct connection *conn, void *handle)
{
struct backend_filter *f = container_of (b, struct backend_filter, backend);
- struct b_conn nxdata = { .b = b->next, .conn = conn };
+ struct b_conn *nxda...
2020 Sep 21
0
[nbdkit PATCH v3 06/14] api: Add .export_description
...9a4 100644
--- a/server/filters.c
+++ b/server/filters.c
@@ -291,6 +291,7 @@ filter_close (struct backend *b, void *handle)
static struct nbdkit_next_ops next_ops = {
.reopen = backend_reopen,
+ .export_description = backend_export_description,
.get_size = backend_get_size,
.can_write = backend_can_write,
.can_flush = backend_can_flush,
@@ -334,6 +335,17 @@ filter_finalize (struct backend *b, void *handle)
return 0;
}
+static const char *
+filter_export_description (struct backend *b, void *handle)
+{
+ struct backend_filter *f = container_of (b, struct backend_filter, backend);
+
+ if (f...
2019 Sep 19
6
[PATCH nbdkit 0/2] Add new retry filter.
This is a retry filter implementation as outlined here:
https://www.redhat.com/archives/libguestfs/2019-September/msg00167.html
It is only lightly tested. One way to test it is to try an SSH copy
(see the commit message for patch 2/2), and in the middle of the copy
kill the per-connection sshd on the remote machine. You will see that
the copy recovers after a few seconds. Add the nbdkit -v
2019 Sep 19
7
[PATCH nbdkit v2 0/4] Add new retry filter.
v1 was here:
https://www.redhat.com/archives/libguestfs/2019-September/msg00199.html
v2:
- Adds a fairly simple yet comprehensive test using sh plugin.
- Rebase and retest.
Patch 1 is a misc patch not really related to the series.
Rich.
2019 Dec 12
9
[PATCH nbdkit 0/7] server: Allow datapath debug messages to be suppressed.
The immediate reason for this patch is to reduce the amount of
debugging in virt-v2v with using the virt-v2v -v option (because this
implies running nbdkit in verbose mode too). Most of the messages are
datapath ones about pread/pwrite requests, and in fact as we've added
more filters on top of nbdkit these messages have got more and more
verbose. However they are not particularly