qemu

FORK: QEMU emulator
git clone https://git.neptards.moe/neptards/qemu.git
Log | Files | Refs | Submodules | LICENSE

export.h (2495B)


      1 /*
      2  * Declarations for block exports
      3  *
      4  * Copyright (c) 2012, 2020 Red Hat, Inc.
      5  *
      6  * Authors:
      7  * Paolo Bonzini <pbonzini@redhat.com>
      8  * Kevin Wolf <kwolf@redhat.com>
      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