On 12/15/18 5:01 AM, Richard W.M. Jones wrote:
This allows us to add the following callbacks:
- can_zero returns boolean
- can_fua should print "none", "emulate" or
"native"
Furthermore the following callbacks are modified in a backwards
compatible manner:
- pwrite adding flags parameter
- trim adding flags parameter
This change is not backwards compatible:
- zero may_trim parameter replaced by flags parameter
---
+=item C<can_fua>
+
+ /path/to/script can_fua <handle>
+
+This controls Forced Unit Access (FUA) behaviour of the core server.
+
+Unlike the other C<can_*> callbacks, this one is I<not> a boolean. It
+must print either "none", "emulate" or "native" to stdout.
The
+meaning of these is described in L<nbdkit-plugin(3)>.
Presumably we don't care if the user includes or omits a trailing
newline on their output?
+static int
+sh_can_fua (void *handle)
+{
+ char *h = handle;
+ const char *args[] = { script, "can_fua", h, NULL };
+ char *s = NULL;
+ size_t slen;
+ int r;
+
+ switch (call_read (&s, &slen, args)) {
+ case OK:
+ if (slen > 0 && s[slen-1] == '\n')
+ s[slen-1] = '\0';
Good - you do ignore trailing newline. Makes it easier for the author to
not worry about it either way.
+
+ case RET_FALSE:
+ free (s);
+ nbdkit_error ("%s: %s method returned unexpected code (3/false)",
+ script, "can_fua");
+ errno = EIO;
+ return -1;
+
So you decided not to take the suggestion of a false return being
equivalent to a successful output of "none". I can live with that.
Series is looking good on my quick glance through.
--
Eric Blake, Principal Software Engineer
Red Hat, Inc. +1-919-301-3266
Virtualization:
qemu.org |
libvirt.org