]> xenbits.xensource.com Git - libvirt.git/commitdiff
Implement remote bits for vol wiping
authorDavid Allan <dallan@redhat.com>
Mon, 1 Mar 2010 20:32:35 +0000 (15:32 -0500)
committerDavid Allan <dallan@redhat.com>
Fri, 19 Mar 2010 18:43:02 +0000 (14:43 -0400)
daemon/remote.c
daemon/remote_dispatch_args.h
daemon/remote_dispatch_prototypes.h
daemon/remote_dispatch_table.h
src/remote/remote_driver.c
src/remote/remote_protocol.c
src/remote/remote_protocol.h
src/remote/remote_protocol.x

index 7c4339fdf01a9fb7de99a1b1ac698cbf7aed71be..178b03e6d93b86356e39b18d53e63bc0539a4b21 100644 (file)
@@ -4272,6 +4272,38 @@ remoteDispatchStorageVolDelete (struct qemud_server *server ATTRIBUTE_UNUSED,
     return 0;
 }
 
+static int
+remoteDispatchStorageVolWipe(struct qemud_server *server ATTRIBUTE_UNUSED,
+                             struct qemud_client *client ATTRIBUTE_UNUSED,
+                             virConnectPtr conn,
+                             remote_message_header *hdr ATTRIBUTE_UNUSED,
+                             remote_error *rerr,
+                             remote_storage_vol_wipe_args *args,
+                             void *ret ATTRIBUTE_UNUSED)
+{
+    int retval = -1;
+    virStorageVolPtr vol;
+
+    vol = get_nonnull_storage_vol(conn, args->vol);
+    if (vol == NULL) {
+        remoteDispatchConnError(rerr, conn);
+        goto out;
+    }
+
+    if (virStorageVolWipe(vol, args->flags) == -1) {
+        remoteDispatchConnError(rerr, conn);
+        goto out;
+    }
+
+    retval = 0;
+
+out:
+    if (vol != NULL) {
+        virStorageVolFree(vol);
+    }
+    return retval;
+}
+
 static int
 remoteDispatchStorageVolGetInfo (struct qemud_server *server ATTRIBUTE_UNUSED,
                                  struct qemud_client *client ATTRIBUTE_UNUSED,
index f97155b6af1fb873825d788b74baccef328c14aa..32a6d781beaa317e4518fdfa371a7affa49172cd 100644 (file)
     remote_cpu_baseline_args val_remote_cpu_baseline_args;
     remote_domain_get_job_info_args val_remote_domain_get_job_info_args;
     remote_domain_abort_job_args val_remote_domain_abort_job_args;
+    remote_storage_vol_wipe_args val_remote_storage_vol_wipe_args;
index b81c8c3a713ae1cd7af3ac2d6b83a2d39a67edb2..4c944f679f6f6f583055914c3fb6d87f69f30cde 100644 (file)
@@ -1298,6 +1298,14 @@ static int remoteDispatchStorageVolLookupByPath(
     remote_error *err,
     remote_storage_vol_lookup_by_path_args *args,
     remote_storage_vol_lookup_by_path_ret *ret);
+static int remoteDispatchStorageVolWipe(
+    struct qemud_server *server,
+    struct qemud_client *client,
+    virConnectPtr conn,
+    remote_message_header *hdr,
+    remote_error *err,
+    remote_storage_vol_wipe_args *args,
+    void *ret);
 static int remoteDispatchSupportsFeature(
     struct qemud_server *server,
     struct qemud_client *client,
index 5ad6bff8d575b691f8c0839a8c5b3fe2c3d8221a..28e7d9a204cb7ebf26eec992ca0518bc96d7f217 100644 (file)
     .args_filter = (xdrproc_t) xdr_remote_domain_abort_job_args,
     .ret_filter = (xdrproc_t) xdr_void,
 },
+{   /* StorageVolWipe => 165 */
+    .fn = (dispatch_fn) remoteDispatchStorageVolWipe,
+    .args_filter = (xdrproc_t) xdr_remote_storage_vol_wipe_args,
+    .ret_filter = (xdrproc_t) xdr_void,
+},
index 11513bd23fcaccbea61096b6b9f0f7dbad5d78c7..0ee038e2a285b255f2020829a85c8a453679a7a8 100644 (file)
@@ -5537,6 +5537,32 @@ done:
     return rv;
 }
 
+static int
+remoteStorageVolWipe(virStorageVolPtr vol,
+                     unsigned int flags)
+{
+    int rv = -1;
+    remote_storage_vol_wipe_args args;
+    struct private_data *priv = vol->conn->storagePrivateData;
+
+    remoteDriverLock(priv);
+
+    make_nonnull_storage_vol(&args.vol, vol);
+    args.flags = flags;
+
+    if (call(vol->conn, priv, 0, REMOTE_PROC_STORAGE_VOL_WIPE,
+             (xdrproc_t) xdr_remote_storage_vol_wipe_args, (char *) &args,
+             (xdrproc_t) xdr_void, (char *) NULL) == -1)
+        goto done;
+
+    rv = 0;
+
+done:
+    remoteDriverUnlock(priv);
+    return rv;
+}
+
+
 static int
 remoteStorageVolGetInfo (virStorageVolPtr vol, virStorageVolInfoPtr info)
 {
@@ -9202,6 +9228,7 @@ static virStorageDriver storage_driver = {
     .volCreateXML = remoteStorageVolCreateXML,
     .volCreateXMLFrom = remoteStorageVolCreateXMLFrom,
     .volDelete = remoteStorageVolDelete,
+    .volWipe = remoteStorageVolWipe,
     .volGetInfo = remoteStorageVolGetInfo,
     .volGetXMLDesc = remoteStorageVolDumpXML,
     .volGetPath = remoteStorageVolGetPath,
index 701acab65066d692b882455f7ab7cf86e5647487..6bd9019fcbf87ff84f2dfa1a64b1057cbbe0dec6 100644 (file)
@@ -2285,6 +2285,17 @@ xdr_remote_storage_vol_delete_args (XDR *xdrs, remote_storage_vol_delete_args *o
         return TRUE;
 }
 
+bool_t
+xdr_remote_storage_vol_wipe_args (XDR *xdrs, remote_storage_vol_wipe_args *objp)
+{
+
+         if (!xdr_remote_nonnull_storage_vol (xdrs, &objp->vol))
+                 return FALSE;
+         if (!xdr_u_int (xdrs, &objp->flags))
+                 return FALSE;
+        return TRUE;
+}
+
 bool_t
 xdr_remote_storage_vol_dump_xml_args (XDR *xdrs, remote_storage_vol_dump_xml_args *objp)
 {
index f76e6e5762d49cc5f8503a59080adebd0015a419..c492ffd395bf1414e36884f599936fa51b45b3dd 100644 (file)
@@ -1295,6 +1295,12 @@ struct remote_storage_vol_delete_args {
 };
 typedef struct remote_storage_vol_delete_args remote_storage_vol_delete_args;
 
+struct remote_storage_vol_wipe_args {
+        remote_nonnull_storage_vol vol;
+        u_int flags;
+};
+typedef struct remote_storage_vol_wipe_args remote_storage_vol_wipe_args;
+
 struct remote_storage_vol_dump_xml_args {
         remote_nonnull_storage_vol vol;
         u_int flags;
@@ -1872,6 +1878,7 @@ enum remote_procedure {
         REMOTE_PROC_CPU_BASELINE = 162,
         REMOTE_PROC_DOMAIN_GET_JOB_INFO = 163,
         REMOTE_PROC_DOMAIN_ABORT_JOB = 164,
+        REMOTE_PROC_STORAGE_VOL_WIPE = 165,
 };
 typedef enum remote_procedure remote_procedure;
 
@@ -2110,6 +2117,7 @@ extern  bool_t xdr_remote_storage_vol_create_xml_ret (XDR *, remote_storage_vol_
 extern  bool_t xdr_remote_storage_vol_create_xml_from_args (XDR *, remote_storage_vol_create_xml_from_args*);
 extern  bool_t xdr_remote_storage_vol_create_xml_from_ret (XDR *, remote_storage_vol_create_xml_from_ret*);
 extern  bool_t xdr_remote_storage_vol_delete_args (XDR *, remote_storage_vol_delete_args*);
+extern  bool_t xdr_remote_storage_vol_wipe_args (XDR *, remote_storage_vol_wipe_args*);
 extern  bool_t xdr_remote_storage_vol_dump_xml_args (XDR *, remote_storage_vol_dump_xml_args*);
 extern  bool_t xdr_remote_storage_vol_dump_xml_ret (XDR *, remote_storage_vol_dump_xml_ret*);
 extern  bool_t xdr_remote_storage_vol_get_info_args (XDR *, remote_storage_vol_get_info_args*);
@@ -2393,6 +2401,7 @@ extern bool_t xdr_remote_storage_vol_create_xml_ret ();
 extern bool_t xdr_remote_storage_vol_create_xml_from_args ();
 extern bool_t xdr_remote_storage_vol_create_xml_from_ret ();
 extern bool_t xdr_remote_storage_vol_delete_args ();
+extern bool_t xdr_remote_storage_vol_wipe_args ();
 extern bool_t xdr_remote_storage_vol_dump_xml_args ();
 extern bool_t xdr_remote_storage_vol_dump_xml_ret ();
 extern bool_t xdr_remote_storage_vol_get_info_args ();
index 5e33da5852c573f891cf0f57b61df2a3439ce5b0..868a2c26157ca8e0d2bbc38c51ed579da9b12b71 100644 (file)
@@ -1169,6 +1169,11 @@ struct remote_storage_vol_delete_args {
     unsigned flags;
 };
 
+struct remote_storage_vol_wipe_args {
+    remote_nonnull_storage_vol vol;
+    unsigned flags;
+};
+
 struct remote_storage_vol_dump_xml_args {
     remote_nonnull_storage_vol vol;
     unsigned flags;
@@ -1703,7 +1708,8 @@ enum remote_procedure {
     REMOTE_PROC_DOMAIN_DETACH_DEVICE_FLAGS = 161,
     REMOTE_PROC_CPU_BASELINE = 162,
     REMOTE_PROC_DOMAIN_GET_JOB_INFO = 163,
-    REMOTE_PROC_DOMAIN_ABORT_JOB = 164
+    REMOTE_PROC_DOMAIN_ABORT_JOB = 164,
+    REMOTE_PROC_STORAGE_VOL_WIPE = 165
 
     /*
      * Notice how the entries are grouped in sets of 10 ?