Displaying 20 results from an estimated 324 matches for "nxdata".
2020 Feb 11
1
[nbdkit PATCH] filters: Make nxdata persistent
Future patches want to allow a filter to pass a single opaque
parameter into another framework (such as ext2fs_open) or even spawn a
helper thread, which requires that nxdata be stable for the entire
life of the connection between .open and .close. Our current approach
of creating a stack-allocated nxdata for every call does not play
nicely with that scheme, so rework things into using a malloc'd
pointer. In fact, if we use struct b_conn as our filter handle, and...
2020 Feb 12
0
[PATCH nbdkit 3/3] server: filters: Remove struct b_h.
This was previously used as ‘nxdata’ and stored a tuple of ’b->next’
and the real filter handle. However after recent changes we don't
need it. We can use ‘b->next’ as nxdata, and the handle is passed to
us by the calling functions.
Inspired by Eric Blakes observations in this email:
https://www.redhat.com/archives/libgu...
2020 Feb 12
2
[nbdkit PATCH] filters: Remove most next_* wrappers
With our recent cleanups to nxdata, the only remaining difference
between functions like backend_open() and next_open() was the
signature (one used void*, the other struct backend *); the API is
compatible. All of our filters are in-tree, and we don't promise
API/ABI stability, but it is still a lot of files to touch, so the
si...
2020 Feb 12
5
[PATCH nbdkit 1/3] server: Rename global backend pointer to "top".
It's confusing to use the same terminology for a single backend as for
the linked list of backends. In particular it's often not clear if
we're calling the next backend or the whole chain of backends.
---
server/internal.h | 14 ++++++++++--
server/connections.c | 20 ++++++++---------
server/locks.c | 2 +-
server/main.c
2019 Oct 01
0
[nbdkit PATCH 3/6] retry: Check next_ops->can_FOO on retry
...++++++++++++++++++++++++++++++-----
1 file changed, 52 insertions(+), 6 deletions(-)
diff --git a/filters/retry/retry.c b/filters/retry/retry.c
index 59e7d4b8..00dbd091 100644
--- a/filters/retry/retry.c
+++ b/filters/retry/retry.c
@@ -106,6 +106,7 @@ retry_config (nbdkit_next_config *next, void *nxdata,
struct retry_handle {
int readonly; /* Save original readonly setting. */
+ unsigned reopens;
};
static void *
@@ -123,6 +124,7 @@ retry_open (nbdkit_next_open *next, void *nxdata, int readonly)
}
h->readonly = readonly;
+ h->reopens = 0;
return h;
}
@@...
2019 Oct 04
1
Re: [nbdkit PATCH 2/5] retry: Check size before transactions
...3..cf8f5246 100644
> --- a/filters/retry/retry.c
> +++ b/filters/retry/retry.c
> @@ -148,6 +148,17 @@ struct retry_data {
> int delay; /* Seconds to wait before retrying. */
> };
>
> +static bool
> +valid_range (struct nbdkit_next_ops *next_ops, void *nxdata,
> + uint32_t count, uint64_t offset, bool is_write, int *err)
> +{
> + if ((int64_t) offset + count > next_ops->get_size (nxdata)) {
> + *err = is_write ? ENOSPC : EIO;
> + return false;
> + }
> + return true;
> +}
> +
> static bool
> d...
2019 Oct 04
0
[nbdkit PATCH 2/5] retry: Check size before transactions
....c b/filters/retry/retry.c
index 840d7383..cf8f5246 100644
--- a/filters/retry/retry.c
+++ b/filters/retry/retry.c
@@ -148,6 +148,17 @@ struct retry_data {
int delay; /* Seconds to wait before retrying. */
};
+static bool
+valid_range (struct nbdkit_next_ops *next_ops, void *nxdata,
+ uint32_t count, uint64_t offset, bool is_write, int *err)
+{
+ if ((int64_t) offset + count > next_ops->get_size (nxdata)) {
+ *err = is_write ? ENOSPC : EIO;
+ return false;
+ }
+ return true;
+}
+
static bool
do_retry (struct retry_handle *h,
struct retr...
2020 Feb 11
0
[PATCH nbdkit 3/3] server: Remove explicit connection parameter, use TLS instead.
...49,13 +49,13 @@ struct backend_filter {
struct nbdkit_filter filter;
};
-/* Literally a backend, a connection pointer, and the filter's handle.
+/* Literally a backend and the filter's handle.
+ *
* This is the implementation of our handle in .open, and serves as
* a stable ‘void *nxdata’ in the filter API.
*/
-struct b_conn {
+struct b_h {
struct backend *b;
- struct connection *conn;
void *handle;
};
@@ -186,22 +186,22 @@ filter_config_complete (struct backend *b)
static int
next_preconnect (void *nxdata, int readonly)
{
- struct b_conn *b_conn = nxdata;
- return...
2018 Jan 19
0
[PATCH nbdkit filters-v2 5/5] INCOMPLETE filters: Add nbdkit-partition-filter.
...Makefile.am
@@ -32,4 +32,5 @@
SUBDIRS = \
delay \
- offset
+ offset \
+ partition
diff --git a/filters/delay/delay.c b/filters/delay/delay.c
index c8d9ef2..66b7e56 100644
--- a/filters/delay/delay.c
+++ b/filters/delay/delay.c
@@ -121,30 +121,30 @@ delay_config (nbdkit_next_config *next, void *nxdata,
/* Read data. */
static int
-delay_pread (struct nbdkit_next *next, void *nxdata,
+delay_pread (struct nbdkit_next_ops *next_ops, void *nxdata,
void *handle, void *buf, uint32_t count, uint64_t offset)
{
read_delay ();
- return next->pread (nxdata, buf, count, offset);
+...
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.
2019 Aug 30
0
[nbdkit PATCH 1/9] server: Fewer dereferences in filter
...ey (f->backend.next);
+ return b->next->magic_config_key (b->next);
}
static int
@@ -236,7 +230,7 @@ static int
filter_open (struct backend *b, struct connection *conn, int readonly)
{
struct backend_filter *f = container_of (b, struct backend_filter, backend);
- struct b_conn nxdata = { .b = f->backend.next, .conn = conn };
+ struct b_conn nxdata = { .b = b->next, .conn = conn };
void *handle;
debug ("%s: open readonly=%d", f->name, readonly);
@@ -245,24 +239,24 @@ filter_open (struct backend *b, struct connection *conn, int readonly)
handle = f...
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.
2019 Apr 24
0
[nbdkit PATCH 4/4] filters: Check for mutex failures
...akefile.am | 5 ++++-
8 files changed, 40 insertions(+), 48 deletions(-)
diff --git a/filters/cache/cache.c b/filters/cache/cache.c
index 6a9966e..b3fef42 100644
--- a/filters/cache/cache.c
+++ b/filters/cache/cache.c
@@ -209,9 +209,8 @@ cache_get_size (struct nbdkit_next_ops *next_ops, void *nxdata,
nbdkit_debug ("cache: underlying file size: %" PRIi64, size);
- pthread_mutex_lock (&lock);
+ ACQUIRE_LOCK_FOR_CURRENT_SCOPE (&lock);
r = blk_set_size (size);
- pthread_mutex_unlock (&lock);
if (r == -1)
return -1;
@@ -266,9 +265,10 @@ cache_pread (struct...
2019 May 13
3
[nbdkit PATCH v2 0/2] Bounce buffer cleanups
Based on Rich's review of my v1 that touched only cache.c, I have now
tried to bring all three filters with alignment rounding in line with
one another.
There is definitely room for future improvements once we teach nbdkit
to let filters and plugins advertise block sizes, but I'm hoping to
get NBD_CMD_CACHE implemented first.
Eric Blake (2):
blocksize: Process requests in linear order
2018 Jan 19
2
[nbdkit PATCH] Update filters to support FUA flags.
...arantee, and nbdkit may refuse to use a filter that was compiled
+against a different version rather than risk misbehavior.
=head1 C<nbdkit-filter.h>
@@ -320,11 +325,15 @@ error message and return C<-1>.
=head2 C<.pread>
int (*pread) (struct nbdkit_next_ops *next_ops, void *nxdata,
- void *handle, void *buf, uint32_t count, uint64_t offset);
+ void *handle, void *buf, uint32_t count, uint64_t offset,
+ uint32_t flags);
This intercepts the plugin C<.pread> method and can be used to read or
modify data read by the plugin.
+At...
2020 Feb 10
2
[nbdkit PATCH 03/10] filters: Wire up filter support for NBD_INFO_INIT_STATE
...b/docs/nbdkit-filter.pod
index 55dfab1..0f81684 100644
--- a/docs/nbdkit-filter.pod
+++ b/docs/nbdkit-filter.pod
@@ -413,6 +413,10 @@ cached value.
=head2 C<.can_cache>
+=head2 C<.init_sparse>
+
+=head2 C<.init_zero>
+
int (*can_write) (struct nbdkit_next_ops *next_ops, void *nxdata,
void *handle);
int (*can_flush) (struct nbdkit_next_ops *next_ops, void *nxdata,
@@ -434,6 +438,10 @@ cached value.
void *handle);
int (*can_cache) (struct nbdkit_next_ops *next_ops, void *nxdata,
void *handle);
+ int (*init_spar...
2020 Jul 21
4
[PATCH nbdkit] server: Pass the export name through filter .open calls.
...*addr, socklen_t *addrlen);
extern void nbdkit_shutdown (void);
diff --git a/include/nbdkit-filter.h b/include/nbdkit-filter.h
index 229a54b4..cec12db7 100644
--- a/include/nbdkit-filter.h
+++ b/include/nbdkit-filter.h
@@ -65,13 +65,14 @@ typedef int nbdkit_next_config_complete (nbdkit_backend *nxdata);
typedef int nbdkit_next_get_ready (nbdkit_backend *nxdata);
typedef int nbdkit_next_after_fork (nbdkit_backend *nxdata);
typedef int nbdkit_next_preconnect (nbdkit_backend *nxdata, int readonly);
-typedef int nbdkit_next_open (nbdkit_backend *nxdata, int readonly);
+typedef int nbdkit_next_ope...
2020 Aug 07
0
[nbdkit PATCH 2/3] server: Expose final thread_model to filter's .get_ready
...--git a/docs/nbdkit-filter.pod b/docs/nbdkit-filter.pod
index b6ed5504..32db0938 100644
--- a/docs/nbdkit-filter.pod
+++ b/docs/nbdkit-filter.pod
@@ -298,11 +298,18 @@ with an error message and return C<-1>.
=head2 C<.get_ready>
- int (*get_ready) (nbdkit_next_get_ready *next, void *nxdata);
+ int (*get_ready) (nbdkit_next_get_ready *next, void *nxdata,
+ int thread_model);
This intercepts the plugin C<.get_ready> method and can be used by the
filter to get ready to serve requests.
+The C<thread_model> parameter informs the filter about the final
+th...
2018 Dec 28
0
[PATCH nbdkit 5/9] cache: Allow this filter to serve requests in parallel.
...requests safely, this lock must be held
+ * when calling any blk_* functions.
+ */
+static pthread_mutex_t lock = PTHREAD_MUTEX_INITIALIZER;
enum cache_mode cache_mode = CACHE_MODE_WRITEBACK;
bool cache_on_read = false;
@@ -132,6 +138,7 @@ cache_get_size (struct nbdkit_next_ops *next_ops, void *nxdata,
void *handle)
{
int64_t size;
+ int r;
size = next_ops->get_size (nxdata);
if (size == -1)
@@ -139,7 +146,10 @@ cache_get_size (struct nbdkit_next_ops *next_ops, void *nxdata,
nbdkit_debug ("cache: underlying file size: %" PRIi64, size);
- if (blk_s...
2020 Aug 27
0
[nbdkit PATCH 1/2] filters: Add .export_description wrappers
...75ac2c4c..7ad4a005 100644
--- a/filters/ext2/ext2.c
+++ b/filters/ext2/ext2.c
@@ -294,6 +294,25 @@ static int ext2_thread_model (void)
return NBDKIT_THREAD_MODEL_SERIALIZE_CONNECTIONS;
}
+/* Description. */
+static const char *
+ext2_export_description (struct nbdkit_next_ops *next_ops, void *nxdata,
+ void *handle)
+{
+ struct handle *h = handle;
+ const char *fname = file ?: h->exportname;
+ const char *slash = fname[0] == '/' ? "" : "/";
+ const char *base = next_ops->export_description (nxdata);
+ CLEANUP_FREE char *desc = NULL...