pmt: e2fsprogs: cleanup
This commit is contained in:
114
jni/e2fsprogs/lib/ext2fs/qcow2.h
Executable file
114
jni/e2fsprogs/lib/ext2fs/qcow2.h
Executable file
@@ -0,0 +1,114 @@
|
||||
/*
|
||||
* qcow2.h --- structures and function prototypes for qcow2.c to generate
|
||||
* qcow2 formatted disk images. This format is used originally by QEMU
|
||||
* for virtual machines, and stores the filesystem data on disk in a
|
||||
* packed format to avoid creating sparse image files that need lots of
|
||||
* seeking to read and write.
|
||||
*
|
||||
* The qcow2 format supports zlib compression, but that is not yet
|
||||
* implemented.
|
||||
*
|
||||
* It is possible to directly mount a qcow2 image using qemu-nbd:
|
||||
*
|
||||
* [root]# modprobe nbd max_part=63
|
||||
* [root]# qemu-nbd -c /dev/nbd0 image.img
|
||||
* [root]# mount /dev/nbd0p1 /mnt/qemu
|
||||
*
|
||||
* Format details at http://people.gnome.org/~markmc/qcow-image-format.html
|
||||
*
|
||||
* Copyright (C) 2010 Red Hat, Inc., Lukas Czerner <lczerner@redhat.com>
|
||||
*
|
||||
* %Begin-Header%
|
||||
* This file may be redistributed under the terms of the GNU Public
|
||||
* License.
|
||||
* %End-Header%
|
||||
*/
|
||||
|
||||
/* Number of l2 tables in memory before writeback */
|
||||
#define L2_CACHE_PREALLOC 512
|
||||
|
||||
|
||||
#define QCOW_MAGIC (('Q' << 24) | ('F' << 16) | ('I' << 8) | 0xfb)
|
||||
#define QCOW_VERSION 2
|
||||
#define QCOW_OFLAG_COPIED (1ULL << 63)
|
||||
#define QCOW_OFLAG_COMPRESSED (1ULL << 62)
|
||||
|
||||
#define QCOW_COMPRESSED 1
|
||||
#define QCOW_ENCRYPTED 2
|
||||
#define QCOW_CORRUPTED 3
|
||||
|
||||
struct ext2_qcow2_hdr {
|
||||
__u32 magic;
|
||||
__u32 version;
|
||||
|
||||
__u64 backing_file_offset;
|
||||
__u32 backing_file_size;
|
||||
|
||||
__u32 cluster_bits;
|
||||
__u64 size;
|
||||
__u32 crypt_method;
|
||||
|
||||
__u32 l1_size;
|
||||
__u64 l1_table_offset;
|
||||
|
||||
__u64 refcount_table_offset;
|
||||
__u32 refcount_table_clusters;
|
||||
|
||||
__u32 nb_snapshots;
|
||||
__u64 snapshots_offset;
|
||||
};
|
||||
|
||||
typedef struct ext2_qcow2_l2_table L2_CACHE_HEAD;
|
||||
|
||||
struct ext2_qcow2_l2_table {
|
||||
__u32 l1_index;
|
||||
__u64 offset;
|
||||
__u64 *data;
|
||||
L2_CACHE_HEAD *next;
|
||||
};
|
||||
|
||||
struct ext2_qcow2_l2_cache {
|
||||
L2_CACHE_HEAD *used_head;
|
||||
L2_CACHE_HEAD *used_tail;
|
||||
L2_CACHE_HEAD *free_head;
|
||||
__u32 free;
|
||||
__u32 count;
|
||||
__u64 next_offset;
|
||||
};
|
||||
|
||||
struct ext2_qcow2_refcount {
|
||||
__u64 *refcount_table;
|
||||
__u64 refcount_table_offset;
|
||||
__u64 refcount_block_offset;
|
||||
|
||||
__u32 refcount_table_clusters;
|
||||
__u32 refcount_table_index;
|
||||
__u32 refcount_block_index;
|
||||
|
||||
__u16 *refcount_block;
|
||||
};
|
||||
|
||||
struct ext2_qcow2_image {
|
||||
int fd;
|
||||
struct ext2_qcow2_hdr *hdr;
|
||||
struct ext2_qcow2_l2_cache *l2_cache;
|
||||
struct ext2_qcow2_refcount refcount;
|
||||
__u32 cluster_size;
|
||||
__u32 cluster_bits;
|
||||
__u32 l1_size;
|
||||
__u32 l2_size;
|
||||
|
||||
__u64 *l1_table;
|
||||
__u64 l2_offset;
|
||||
__u64 l1_offset;
|
||||
__u64 image_size;
|
||||
};
|
||||
|
||||
/* Function prototypes */
|
||||
|
||||
/* qcow2.c */
|
||||
|
||||
/* Functions for converting qcow2 image into raw image */
|
||||
struct ext2_qcow2_hdr *qcow2_read_header(int);
|
||||
int qcow2_write_raw_image(int, int, struct ext2_qcow2_hdr *);
|
||||
|
||||
Reference in New Issue
Block a user