]> Git Repo - qemu.git/blob - include/block/export.h
spapr: spapr_drc_attach() cannot fail
[qemu.git] / include / block / export.h
1 /*
2  * Declarations for block exports
3  *
4  * Copyright (c) 2012, 2020 Red Hat, Inc.
5  *
6  * Authors:
7  * Paolo Bonzini <[email protected]>
8  * Kevin Wolf <[email protected]>
9  *
10  * This work is licensed under the terms of the GNU GPL, version 2 or
11  * later.  See the COPYING file in the top-level directory.
12  */
13
14 #ifndef BLOCK_EXPORT_H
15 #define BLOCK_EXPORT_H
16
17 #include "qapi/qapi-types-block-export.h"
18 #include "qemu/queue.h"
19
20 typedef struct BlockExport BlockExport;
21
22 typedef struct BlockExportDriver {
23     /* The export type that this driver services */
24     BlockExportType type;
25
26     /*
27      * The size of the driver-specific state that contains BlockExport as its
28      * first field.
29      */
30     size_t instance_size;
31
32     /* Creates and starts a new block export */
33     int (*create)(BlockExport *, BlockExportOptions *, Error **);
34
35     /*
36      * Frees a removed block export. This function is only called after all
37      * references have been dropped.
38      */
39     void (*delete)(BlockExport *);
40
41     /*
42      * Start to disconnect all clients and drop other references held
43      * internally by the export driver. When the function returns, there may
44      * still be active references while the export is in the process of
45      * shutting down.
46      */
47     void (*request_shutdown)(BlockExport *);
48 } BlockExportDriver;
49
50 struct BlockExport {
51     const BlockExportDriver *drv;
52
53     /* Unique identifier for the export */
54     char *id;
55
56     /*
57      * Reference count for this block export. This includes strong references
58      * both from the owner (qemu-nbd or the monitor) and clients connected to
59      * the export.
60      */
61     int refcount;
62
63     /*
64      * True if one of the references in refcount belongs to the user. After the
65      * user has dropped their reference, they may not e.g. remove the same
66      * export a second time (which would decrease the refcount without having
67      * it incremented first).
68      */
69     bool user_owned;
70
71     /* The AioContext whose lock protects this BlockExport object. */
72     AioContext *ctx;
73
74     /* The block device to export */
75     BlockBackend *blk;
76
77     /* List entry for block_exports */
78     QLIST_ENTRY(BlockExport) next;
79 };
80
81 BlockExport *blk_exp_add(BlockExportOptions *export, Error **errp);
82 BlockExport *blk_exp_find(const char *id);
83 void blk_exp_ref(BlockExport *exp);
84 void blk_exp_unref(BlockExport *exp);
85 void blk_exp_request_shutdown(BlockExport *exp);
86 void blk_exp_close_all(void);
87 void blk_exp_close_all_type(BlockExportType type);
88
89 #endif
This page took 0.028987 seconds and 4 git commands to generate.