2 Copyright (C) 2010 Proxmox Server Solutions GmbH
4 This program is free software: you can redistribute it and/or modify
5 it under the terms of the GNU Affero General Public License as published by
6 the Free Software Foundation, either version 3 of the License, or
7 (at your option) any later version.
9 This program is distributed in the hope that it will be useful,
10 but WITHOUT ANY WARRANTY; without even the implied warranty of
11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 GNU Affero General Public License for more details.
14 You should have received a copy of the GNU Affero General Public License
15 along with this program. If not, see <http://www.gnu.org/licenses/>.
17 Author: Dietmar Maurer <dietmar@proxmox.com>
29 #include <sys/statvfs.h>
31 #define MEMDB_MAX_FILE_SIZE (128*1024)
32 #define MEMDB_MAX_FSSIZE (30*1024*1024)
33 #define MEMDB_MAX_INODES 10000
35 #define MEMDB_BLOCKSIZE 4096
36 #define MEMDB_BLOCKS ((MEMDB_MAX_FSSIZE + MEMDB_BLOCKSIZE - 1)/MEMDB_BLOCKSIZE)
38 typedef struct memdb_tree_entry memdb_tree_entry_t
;
39 struct memdb_tree_entry
{
46 char type
; /* DT_REG .. regular file, DT_DIR ... directory */
56 char digest
[32]; /* SHA256 digest */
57 } memdb_index_extry_t
;
64 guint32 size
; /* number of entries */
65 guint32 bytes
; /* total bytes allocated */
66 memdb_index_extry_t entries
[0];
69 typedef struct db_backend db_backend_t
;
80 memdb_tree_entry_t
*root
;
81 GHashTable
*index
; /* map version ==> memdb_tree_entry */
82 GHashTable
*locks
; /* contains memdb_lock_info_t */
88 memdb_open(const char *dbfilename
);
91 memdb_close(memdb_t
*memdb
);
94 memdb_checkpoint(memdb_t
*memdb
);
97 memdb_recreate_vmlist(memdb_t
*memdb
);
103 const guchar csum
[32]);
106 memdb_update_locks(memdb_t
*memdb
);
111 struct statvfs
*stbuf
);
133 memdb_dirlist_free(GList
*dirlist
);
136 tree_entry_debug(memdb_tree_entry_t
*te
);
139 tree_entry_print(memdb_tree_entry_t
*te
);
142 memdb_tree_entry_new(const char *name
);
145 memdb_tree_entry_copy(
146 memdb_tree_entry_t
*te
,
150 memdb_tree_entry_free(memdb_tree_entry_t
*te
);
201 memdb_compute_checksum(
203 memdb_tree_entry_t
*root
,
210 memdb_tree_entry_t
*root
);
213 memdb_dump_index (memdb_index_t
*idx
);
216 memdb_index_copy(memdb_index_t
*idx
);
219 memdb_tree_entry_csum(
220 memdb_tree_entry_t
*te
,
225 const char *filename
,
226 memdb_tree_entry_t
*root
,
230 bdb_backend_close(db_backend_t
*bdb
);
244 guint64 delete_inode
);
247 bdb_backend_commit_update(
249 memdb_index_t
*master
,
250 memdb_index_t
*slave
,
254 #endif /* _PVE_MEMDB_H_ */