16.02.2018 16:21, Eric Blake wrote:
On 02/15/2018 07:51 AM, Vladimir Sementsov-Ogievskiy wrote:
Minimal realization: only one extent in server answer is supported.

Signed-off-by: Vladimir Sementsov-Ogievskiy <vsement...@virtuozzo.com>


+        meta = &local_meta;
+    }
+    memset(meta, 0, sizeof(*meta));
+    ret = nbd_read_size_string(client, meta->export_name,
+                               NBD_MAX_NAME_SIZE, errp);

Revisiting a question I raised in my first half review - you saved the name as part of the struct because we have to later compare that the final OPT_SET export name matches the request during OPT_GO (if they don't match, then we have no contexts to serve after all).  So a 'const char *' won't work, but maybe the struct could use a 'char *' pointing to malloc'd storage rather than char[MAX_NAME] that reserves array space that is mostly unused for the typical name that is much shorter than the maximum name length.

Do these 256 bytes worth creating nbd_clear_meta function, to call it from client_put and on NBD_OPT_SET_META_CONTEXT, to clear previous meta? If yes, I'd prefer to postpone it to continuation about BLOCKSTATUS for dirty bitmaps, when I'll have to upgrade meta structure, to maintain dirty bitmaps.

+    if (ret <= 0) {
+        return ret;
+    }
+    exp = nbd_export_find(meta->export_name);
+    if (exp == NULL) {
+        return nbd_opt_invalid(client, errp,
+                               "export '%s' not present", meta->export_name);

Best regards,

Reply via email to