Anywhere that we compute 'f = container_of(b)' then use 'f->backend.',
we can instead just use 'b->'. Similarly, during registration, we can
use the 'filename' input rather than our just-copied 'f->filename'.
Signed-off-by: Eric Blake <eblake(a)redhat.com>
---
server/filters.c | 170 ++++++++++++++++++++++-------------------------
1 file changed, 79 insertions(+), 91 deletions(-)
diff --git a/server/filters.c b/server/filters.c
index bb6394fb..287c8747 100644
--- a/server/filters.c
+++ b/server/filters.c
@@ -68,7 +68,7 @@ filter_free (struct backend *b)
{
struct backend_filter *f = container_of (b, struct backend_filter, backend);
- f->backend.next->free (f->backend.next);
+ b->next->free (b->next);
/* Acquiring this lock prevents any filter callbacks from running
* simultaneously.
@@ -94,7 +94,7 @@ filter_thread_model (struct backend *b)
{
struct backend_filter *f = container_of (b, struct backend_filter, backend);
int filter_thread_model = NBDKIT_THREAD_MODEL_PARALLEL;
- int thread_model = f->backend.next->thread_model (f->backend.next);
+ int thread_model = b->next->thread_model (b->next);
if (f->filter.thread_model) {
filter_thread_model = f->filter.thread_model ();
@@ -114,9 +114,7 @@ filter_thread_model (struct backend *b)
static const char *
plugin_name (struct backend *b)
{
- struct backend_filter *f = container_of (b, struct backend_filter, backend);
-
- return f->backend.next->plugin_name (f->backend.next);
+ return b->next->plugin_name (b->next);
}
static const char *
@@ -161,9 +159,7 @@ filter_usage (struct backend *b)
static void
filter_dump_fields (struct backend *b)
{
- struct backend_filter *f = container_of (b, struct backend_filter, backend);
-
- f->backend.next->dump_fields (f->backend.next);
+ b->next->dump_fields (b->next);
}
static int
@@ -183,11 +179,11 @@ filter_config (struct backend *b, const char *key, const char
*value)
f->name, key, value);
if (f->filter.config) {
- if (f->filter.config (next_config, f->backend.next, key, value) == -1)
+ if (f->filter.config (next_config, b->next, key, value) == -1)
exit (EXIT_FAILURE);
}
else
- f->backend.next->config (f->backend.next, key, value);
+ b->next->config (b->next, key, value);
}
static int
@@ -206,11 +202,11 @@ filter_config_complete (struct backend *b)
debug ("%s: config_complete", f->name);
if (f->filter.config_complete) {
- if (f->filter.config_complete (next_config_complete, f->backend.next) == -1)
+ if (f->filter.config_complete (next_config_complete, b->next) == -1)
exit (EXIT_FAILURE);
}
else
- f->backend.next->config_complete (f->backend.next);
+ b->next->config_complete (b->next);
}
/* magic_config_key only applies to plugins, so this passes the
@@ -219,9 +215,7 @@ filter_config_complete (struct backend *b)
static const char *
plugin_magic_config_key (struct backend *b)
{
- struct backend_filter *f = container_of (b, struct backend_filter, backend);
-
- return f->backend.next->magic_config_key (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->filter.open (next_open, &nxdata, readonly);
if (handle == NULL)
return -1;
- connection_set_handle (conn, f->backend.i, handle);
+ connection_set_handle (conn, b->i, handle);
return 0;
}
else
- return f->backend.next->open (f->backend.next, conn, readonly);
+ return b->next->open (b->next, conn, readonly);
}
static void
filter_close (struct backend *b, struct connection *conn)
{
struct backend_filter *f = container_of (b, struct backend_filter, backend);
- void *handle = connection_get_handle (conn, f->backend.i);
+ void *handle = connection_get_handle (conn, b->i);
debug ("%s: close", f->name);
if (f->filter.close)
f->filter.close (handle);
- f->backend.next->close (f->backend.next, conn);
+ b->next->close (b->next, conn);
}
/* The next_functions structure contains pointers to backend
@@ -459,15 +453,15 @@ static int
filter_prepare (struct backend *b, struct connection *conn)
{
struct backend_filter *f = container_of (b, struct backend_filter, backend);
- void *handle = connection_get_handle (conn, f->backend.i);
- struct b_conn nxdata = { .b = f->backend.next, .conn = conn };
+ void *handle = connection_get_handle (conn, b->i);
+ struct b_conn nxdata = { .b = b->next, .conn = conn };
debug ("%s: prepare", f->name);
/* Call these in order starting from the filter closest to the
* plugin.
*/
- if (f->backend.next->prepare (f->backend.next, conn) == -1)
+ if (b->next->prepare (b->next, conn) == -1)
return -1;
if (f->filter.prepare &&
@@ -481,8 +475,8 @@ static int
filter_finalize (struct backend *b, struct connection *conn)
{
struct backend_filter *f = container_of (b, struct backend_filter, backend);
- void *handle = connection_get_handle (conn, f->backend.i);
- struct b_conn nxdata = { .b = f->backend.next, .conn = conn };
+ void *handle = connection_get_handle (conn, b->i);
+ struct b_conn nxdata = { .b = b->next, .conn = conn };
debug ("%s: finalize", f->name);
@@ -493,157 +487,157 @@ filter_finalize (struct backend *b, struct connection *conn)
f->filter.finalize (&next_ops, &nxdata, handle) == -1)
return -1;
- return f->backend.next->finalize (f->backend.next, conn);
+ return b->next->finalize (b->next, conn);
}
static int64_t
filter_get_size (struct backend *b, struct connection *conn)
{
struct backend_filter *f = container_of (b, struct backend_filter, backend);
- void *handle = connection_get_handle (conn, f->backend.i);
- struct b_conn nxdata = { .b = f->backend.next, .conn = conn };
+ void *handle = connection_get_handle (conn, b->i);
+ struct b_conn nxdata = { .b = b->next, .conn = conn };
debug ("%s: get_size", f->name);
if (f->filter.get_size)
return f->filter.get_size (&next_ops, &nxdata, handle);
else
- return f->backend.next->get_size (f->backend.next, conn);
+ return b->next->get_size (b->next, conn);
}
static int
filter_can_write (struct backend *b, struct connection *conn)
{
struct backend_filter *f = container_of (b, struct backend_filter, backend);
- void *handle = connection_get_handle (conn, f->backend.i);
- struct b_conn nxdata = { .b = f->backend.next, .conn = conn };
+ void *handle = connection_get_handle (conn, b->i);
+ struct b_conn nxdata = { .b = b->next, .conn = conn };
debug ("%s: can_write", f->name);
if (f->filter.can_write)
return f->filter.can_write (&next_ops, &nxdata, handle);
else
- return f->backend.next->can_write (f->backend.next, conn);
+ return b->next->can_write (b->next, conn);
}
static int
filter_can_flush (struct backend *b, struct connection *conn)
{
struct backend_filter *f = container_of (b, struct backend_filter, backend);
- void *handle = connection_get_handle (conn, f->backend.i);
- struct b_conn nxdata = { .b = f->backend.next, .conn = conn };
+ void *handle = connection_get_handle (conn, b->i);
+ struct b_conn nxdata = { .b = b->next, .conn = conn };
debug ("%s: can_flush", f->name);
if (f->filter.can_flush)
return f->filter.can_flush (&next_ops, &nxdata, handle);
else
- return f->backend.next->can_flush (f->backend.next, conn);
+ return b->next->can_flush (b->next, conn);
}
static int
filter_is_rotational (struct backend *b, struct connection *conn)
{
struct backend_filter *f = container_of (b, struct backend_filter, backend);
- void *handle = connection_get_handle (conn, f->backend.i);
- struct b_conn nxdata = { .b = f->backend.next, .conn = conn };
+ void *handle = connection_get_handle (conn, b->i);
+ struct b_conn nxdata = { .b = b->next, .conn = conn };
debug ("%s: is_rotational", f->name);
if (f->filter.is_rotational)
return f->filter.is_rotational (&next_ops, &nxdata, handle);
else
- return f->backend.next->is_rotational (f->backend.next, conn);
+ return b->next->is_rotational (b->next, conn);
}
static int
filter_can_trim (struct backend *b, struct connection *conn)
{
struct backend_filter *f = container_of (b, struct backend_filter, backend);
- void *handle = connection_get_handle (conn, f->backend.i);
- struct b_conn nxdata = { .b = f->backend.next, .conn = conn };
+ void *handle = connection_get_handle (conn, b->i);
+ struct b_conn nxdata = { .b = b->next, .conn = conn };
debug ("%s: can_trim", f->name);
if (f->filter.can_trim)
return f->filter.can_trim (&next_ops, &nxdata, handle);
else
- return f->backend.next->can_trim (f->backend.next, conn);
+ return b->next->can_trim (b->next, conn);
}
static int
filter_can_zero (struct backend *b, struct connection *conn)
{
struct backend_filter *f = container_of (b, struct backend_filter, backend);
- void *handle = connection_get_handle (conn, f->backend.i);
- struct b_conn nxdata = { .b = f->backend.next, .conn = conn };
+ void *handle = connection_get_handle (conn, b->i);
+ struct b_conn nxdata = { .b = b->next, .conn = conn };
debug ("%s: can_zero", f->name);
if (f->filter.can_zero)
return f->filter.can_zero (&next_ops, &nxdata, handle);
else
- return f->backend.next->can_zero (f->backend.next, conn);
+ return b->next->can_zero (b->next, conn);
}
static int
filter_can_extents (struct backend *b, struct connection *conn)
{
struct backend_filter *f = container_of (b, struct backend_filter, backend);
- void *handle = connection_get_handle (conn, f->backend.i);
- struct b_conn nxdata = { .b = f->backend.next, .conn = conn };
+ void *handle = connection_get_handle (conn, b->i);
+ struct b_conn nxdata = { .b = b->next, .conn = conn };
debug ("%s: can_extents", f->name);
if (f->filter.can_extents)
return f->filter.can_extents (&next_ops, &nxdata, handle);
else
- return f->backend.next->can_extents (f->backend.next, conn);
+ return b->next->can_extents (b->next, conn);
}
static int
filter_can_fua (struct backend *b, struct connection *conn)
{
struct backend_filter *f = container_of (b, struct backend_filter, backend);
- void *handle = connection_get_handle (conn, f->backend.i);
- struct b_conn nxdata = { .b = f->backend.next, .conn = conn };
+ void *handle = connection_get_handle (conn, b->i);
+ struct b_conn nxdata = { .b = b->next, .conn = conn };
debug ("%s: can_fua", f->name);
if (f->filter.can_fua)
return f->filter.can_fua (&next_ops, &nxdata, handle);
else
- return f->backend.next->can_fua (f->backend.next, conn);
+ return b->next->can_fua (b->next, conn);
}
static int
filter_can_multi_conn (struct backend *b, struct connection *conn)
{
struct backend_filter *f = container_of (b, struct backend_filter, backend);
- void *handle = connection_get_handle (conn, f->backend.i);
- struct b_conn nxdata = { .b = f->backend.next, .conn = conn };
+ void *handle = connection_get_handle (conn, b->i);
+ struct b_conn nxdata = { .b = b->next, .conn = conn };
debug ("%s: can_multi_conn", f->name);
if (f->filter.can_multi_conn)
return f->filter.can_multi_conn (&next_ops, &nxdata, handle);
else
- return f->backend.next->can_multi_conn (f->backend.next, conn);
+ return b->next->can_multi_conn (b->next, conn);
}
static int
filter_can_cache (struct backend *b, struct connection *conn)
{
struct backend_filter *f = container_of (b, struct backend_filter, backend);
- void *handle = connection_get_handle (conn, f->backend.i);
- struct b_conn nxdata = { .b = f->backend.next, .conn = conn };
+ void *handle = connection_get_handle (conn, b->i);
+ struct b_conn nxdata = { .b = b->next, .conn = conn };
debug ("%s: can_cache", f->name);
if (f->filter.can_cache)
return f->filter.can_cache (&next_ops, &nxdata, handle);
else
- return f->backend.next->can_cache (f->backend.next, conn);
+ return b->next->can_cache (b->next, conn);
}
static int
@@ -652,8 +646,8 @@ filter_pread (struct backend *b, struct connection *conn,
uint32_t flags, int *err)
{
struct backend_filter *f = container_of (b, struct backend_filter, backend);
- void *handle = connection_get_handle (conn, f->backend.i);
- struct b_conn nxdata = { .b = f->backend.next, .conn = conn };
+ void *handle = connection_get_handle (conn, b->i);
+ struct b_conn nxdata = { .b = b->next, .conn = conn };
assert (flags == 0);
@@ -664,8 +658,7 @@ filter_pread (struct backend *b, struct connection *conn,
return f->filter.pread (&next_ops, &nxdata, handle,
buf, count, offset, flags, err);
else
- return f->backend.next->pread (f->backend.next, conn,
- buf, count, offset, flags, err);
+ return b->next->pread (b->next, conn, buf, count, offset, flags, err);
}
static int
@@ -674,8 +667,8 @@ filter_pwrite (struct backend *b, struct connection *conn,
uint32_t flags, int *err)
{
struct backend_filter *f = container_of (b, struct backend_filter, backend);
- void *handle = connection_get_handle (conn, f->backend.i);
- struct b_conn nxdata = { .b = f->backend.next, .conn = conn };
+ void *handle = connection_get_handle (conn, b->i);
+ struct b_conn nxdata = { .b = b->next, .conn = conn };
assert (!(flags & ~NBDKIT_FLAG_FUA));
@@ -686,8 +679,7 @@ filter_pwrite (struct backend *b, struct connection *conn,
return f->filter.pwrite (&next_ops, &nxdata, handle,
buf, count, offset, flags, err);
else
- return f->backend.next->pwrite (f->backend.next, conn,
- buf, count, offset, flags, err);
+ return b->next->pwrite (b->next, conn, buf, count, offset, flags, err);
}
static int
@@ -695,8 +687,8 @@ filter_flush (struct backend *b, struct connection *conn, uint32_t
flags,
int *err)
{
struct backend_filter *f = container_of (b, struct backend_filter, backend);
- void *handle = connection_get_handle (conn, f->backend.i);
- struct b_conn nxdata = { .b = f->backend.next, .conn = conn };
+ void *handle = connection_get_handle (conn, b->i);
+ struct b_conn nxdata = { .b = b->next, .conn = conn };
assert (flags == 0);
@@ -705,7 +697,7 @@ filter_flush (struct backend *b, struct connection *conn, uint32_t
flags,
if (f->filter.flush)
return f->filter.flush (&next_ops, &nxdata, handle, flags, err);
else
- return f->backend.next->flush (f->backend.next, conn, flags, err);
+ return b->next->flush (b->next, conn, flags, err);
}
static int
@@ -714,8 +706,8 @@ filter_trim (struct backend *b, struct connection *conn,
uint32_t flags, int *err)
{
struct backend_filter *f = container_of (b, struct backend_filter, backend);
- void *handle = connection_get_handle (conn, f->backend.i);
- struct b_conn nxdata = { .b = f->backend.next, .conn = conn };
+ void *handle = connection_get_handle (conn, b->i);
+ struct b_conn nxdata = { .b = b->next, .conn = conn };
assert (flags == 0);
@@ -726,8 +718,7 @@ filter_trim (struct backend *b, struct connection *conn,
return f->filter.trim (&next_ops, &nxdata, handle, count, offset, flags,
err);
else
- return f->backend.next->trim (f->backend.next, conn, count, offset, flags,
- err);
+ return b->next->trim (b->next, conn, count, offset, flags, err);
}
static int
@@ -735,8 +726,8 @@ filter_zero (struct backend *b, struct connection *conn,
uint32_t count, uint64_t offset, uint32_t flags, int *err)
{
struct backend_filter *f = container_of (b, struct backend_filter, backend);
- void *handle = connection_get_handle (conn, f->backend.i);
- struct b_conn nxdata = { .b = f->backend.next, .conn = conn };
+ void *handle = connection_get_handle (conn, b->i);
+ struct b_conn nxdata = { .b = b->next, .conn = conn };
assert (!(flags & ~(NBDKIT_FLAG_MAY_TRIM | NBDKIT_FLAG_FUA)));
@@ -747,8 +738,7 @@ filter_zero (struct backend *b, struct connection *conn,
return f->filter.zero (&next_ops, &nxdata, handle,
count, offset, flags, err);
else
- return f->backend.next->zero (f->backend.next, conn,
- count, offset, flags, err);
+ return b->next->zero (b->next, conn, count, offset, flags, err);
}
static int
@@ -757,8 +747,8 @@ filter_extents (struct backend *b, struct connection *conn,
struct nbdkit_extents *extents, int *err)
{
struct backend_filter *f = container_of (b, struct backend_filter, backend);
- void *handle = connection_get_handle (conn, f->backend.i);
- struct b_conn nxdata = { .b = f->backend.next, .conn = conn };
+ void *handle = connection_get_handle (conn, b->i);
+ struct b_conn nxdata = { .b = b->next, .conn = conn };
assert (!(flags & ~NBDKIT_FLAG_REQ_ONE));
@@ -770,9 +760,8 @@ filter_extents (struct backend *b, struct connection *conn,
count, offset, flags,
extents, err);
else
- return f->backend.next->extents (f->backend.next, conn,
- count, offset, flags,
- extents, err);
+ return b->next->extents (b->next, conn, count, offset, flags,
+ extents, err);
}
static int
@@ -781,8 +770,8 @@ filter_cache (struct backend *b, struct connection *conn,
uint32_t flags, int *err)
{
struct backend_filter *f = container_of (b, struct backend_filter, backend);
- void *handle = connection_get_handle (conn, f->backend.i);
- struct b_conn nxdata = { .b = f->backend.next, .conn = conn };
+ void *handle = connection_get_handle (conn, b->i);
+ struct b_conn nxdata = { .b = b->next, .conn = conn };
assert (flags == 0);
@@ -793,8 +782,7 @@ filter_cache (struct backend *b, struct connection *conn,
return f->filter.cache (&next_ops, &nxdata, handle,
count, offset, flags, err);
else
- return f->backend.next->cache (f->backend.next, conn,
- count, offset, flags, err);
+ return b->next->cache (b->next, conn, count, offset, flags, err);
}
static struct backend filter_functions = {
@@ -858,7 +846,7 @@ filter_register (struct backend *next, size_t index, const char
*filename,
if (f->filename == NULL) goto out_of_memory;
f->dl = dl;
- debug ("registering filter %s", f->filename);
+ debug ("registering filter %s", filename);
/* Call the initialization function which returns the address of the
* filter's own 'struct nbdkit_filter'.
@@ -866,7 +854,7 @@ filter_register (struct backend *next, size_t index, const char
*filename,
filter = filter_init ();
if (!filter) {
fprintf (stderr, "%s: %s: filter registration function failed\n",
- program_name, f->filename);
+ program_name, filename);
exit (EXIT_FAILURE);
}
@@ -887,14 +875,14 @@ filter_register (struct backend *next, size_t index, const char
*filename,
fprintf (stderr,
"%s: %s: filter is incompatible with this version of nbdkit, "
"and appears to stem from nbdkit 1.14 or earlier\n",
- program_name, f->filename);
+ program_name, filename);
exit (EXIT_FAILURE);
}
if (strcmp (filter->_nbdkit_version, NBDKIT_VERSION_STRING) != 0) {
fprintf (stderr,
"%s: %s: filter is incompatible with this version of nbdkit "
"(_nbdkit_version = %s)\n",
- program_name, f->filename, filter->_nbdkit_version);
+ program_name, filename, filter->_nbdkit_version);
exit (EXIT_FAILURE);
}
@@ -903,14 +891,14 @@ filter_register (struct backend *next, size_t index, const char
*filename,
/* Only filter.name is required. */
if (f->filter.name == NULL) {
fprintf (stderr, "%s: %s: filter must have a .name field\n",
- program_name, f->filename);
+ program_name, filename);
exit (EXIT_FAILURE);
}
len = strlen (f->filter.name);
if (len == 0) {
fprintf (stderr, "%s: %s: filter.name field must not be empty\n",
- program_name, f->filename);
+ program_name, filename);
exit (EXIT_FAILURE);
}
for (i = 0; i < len; ++i) {
@@ -920,7 +908,7 @@ filter_register (struct backend *next, size_t index, const char
*filename,
fprintf (stderr,
"%s: %s: filter.name ('%s') field "
"must contain only ASCII alphanumeric characters\n",
- program_name, f->filename, f->filter.name);
+ program_name, filename, f->filter.name);
exit (EXIT_FAILURE);
}
}
--
2.21.0