]> git.proxmox.com Git - mirror_zfs.git/blobdiff - module/zfs/zcp.c
async zvol minor node creation interferes with receive
[mirror_zfs.git] / module / zfs / zcp.c
index 870ba0366578c706ce0b59fecb6d2985fd4d6061..e8cf96d496dd373524561db81ae2cc9b3221bb1d 100644 (file)
 #include <sys/zcp_iter.h>
 #include <sys/zcp_prop.h>
 #include <sys/zcp_global.h>
+#include <sys/zvol.h>
 
 #ifndef KM_NORMALPRI
 #define        KM_NORMALPRI    0
@@ -1155,6 +1156,7 @@ zcp_eval(const char *poolname, const char *program, boolean_t sync,
        runinfo.zri_space_used = 0;
        runinfo.zri_curinstrs = 0;
        runinfo.zri_maxinstrs = instrlimit;
+       runinfo.zri_new_zvols = fnvlist_alloc();
 
        if (sync) {
                err = dsl_sync_task_sig(poolname, NULL, zcp_eval_sync,
@@ -1166,6 +1168,16 @@ zcp_eval(const char *poolname, const char *program, boolean_t sync,
        }
        lua_close(state);
 
+       /*
+        * Create device minor nodes for any new zvols.
+        */
+       for (nvpair_t *pair = nvlist_next_nvpair(runinfo.zri_new_zvols, NULL);
+           pair != NULL;
+           pair = nvlist_next_nvpair(runinfo.zri_new_zvols, pair)) {
+               zvol_create_minor(nvpair_name(pair));
+       }
+       fnvlist_free(runinfo.zri_new_zvols);
+
        return (runinfo.zri_result);
 }