]> git.proxmox.com Git - mirror_zfs.git/blame - zfs/lib/libudmu/include/udmu.h
Remove stray stub kernel files which should be brought in my linux-kernel-module...
[mirror_zfs.git] / zfs / lib / libudmu / include / udmu.h
CommitLineData
34dc7c2f
BB
1/* -*- mode: c; c-basic-offset: 8; indent-tabs-mode: nil; -*-
2 * vim:expandtab:shiftwidth=8:tabstop=8:
3 *
4 * Copyright (c) 2006 Cluster File Systems, Inc.
5 * Author: Alex Tomas <alex@clusterfs.com>
6 * Author: Atul Vidwansa <atul.vidwansa@sun.com>
7 * Author: Manoj Joseph <manoj.joseph@sun.com>
8 *
9 * This file is part of the Lustre file system, http://www.lustre.org
10 * Lustre is a trademark of Cluster File Systems, Inc.
11 *
12 * You may have signed or agreed to another license before downloading
13 * this software. If so, you are bound by the terms and conditions
14 * of that agreement, and the following does not apply to you. See the
15 * LICENSE file included with this distribution for more information.
16 *
17 * If you did not agree to a different license, then this copy of Lustre
18 * is open source software; you can redistribute it and/or modify it
19 * under the terms of version 2 of the GNU General Public License as
20 * published by the Free Software Foundation.
21 *
22 * In either case, Lustre is distributed in the hope that it will be
23 * useful, but WITHOUT ANY WARRANTY; without even the implied warranty
24 * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
25 * license text for more details.
26 */
27
28#ifndef _DMU_H
29#define _DMU_H
30
31#ifdef __cplusplus
32extern "C" {
33#endif
34
35#include <stdint.h>
36
37#define LUSTRE_ZPL_VERSION 1ULL
38
39#ifndef AT_TYPE
40#define AT_TYPE 0x0001
41#define AT_MODE 0x0002
42#define AT_UID 0x0004
43#define AT_GID 0x0008
44#define AT_FSID 0x0010
45#define AT_NODEID 0x0020
46#define AT_NLINK 0x0040
47#define AT_SIZE 0x0080
48#define AT_ATIME 0x0100
49#define AT_MTIME 0x0200
50#define AT_CTIME 0x0400
51#define AT_RDEV 0x0800
52#define AT_BLKSIZE 0x1000
53#define AT_NBLOCKS 0x2000
54#define AT_SEQ 0x8000
55#endif
56
57#define ACCESSED (AT_ATIME)
58#define STATE_CHANGED (AT_CTIME)
59#define CONTENT_MODIFIED (AT_MTIME | AT_CTIME)
60
61#define LOOKUP_DIR 0x01 /* want parent dir vp */
62#define LOOKUP_XATTR 0x02 /* lookup up extended attr dir */
63#define CREATE_XATTR_DIR 0x04 /* Create extended attr dir */
64
65#define S_IFDOOR 0xD000 /* door */
66#define S_IFPORT 0xE000 /* event port */
67
68struct statvfs64;
69
70/* Data structures required for Solaris ZFS compatability */
71#if !defined(__sun__)
72
73#ifndef _SOL_SYS_TIME_H
74typedef struct timespec timestruc_t;
75#endif
76
77#endif
78
79typedef enum vtype {
80 VNON = 0,
81 VREG = 1,
82 VDIR = 2,
83 VBLK = 3,
84 VCHR = 4,
85 VLNK = 5,
86 VFIFO = 6,
87 VDOOR = 7,
88 VPROC = 8,
89 VSOCK = 9,
90 VPORT = 10,
91 VBAD = 11
92} vtype_t;
93
94typedef struct vnattr {
95 unsigned int va_mask; /* bit-mask of attributes */
96 vtype_t va_type; /* vnode type (for create) */
97 mode_t va_mode; /* file access mode */
98 uid_t va_uid; /* owner user id */
99 gid_t va_gid; /* owner group id */
100 dev_t va_fsid; /* file system id (dev for now) */
101 unsigned long long va_nodeid; /* node id */
102 nlink_t va_nlink; /* number of references to file */
103 off_t va_size; /* file size in bytes */
104 timestruc_t va_atime; /* time of last access */
105 timestruc_t va_mtime; /* time of last modification */
106 timestruc_t va_ctime; /* time of last status change */
107 dev_t va_rdev; /* device the file represents */
108 unsigned int va_blksize; /* fundamental block size */
109 unsigned int va_blkbits;
110 unsigned long long va_nblocks; /* # of blocks allocated */
111 unsigned int va_seq; /* sequence number */
112} vnattr_t;
113
114typedef struct udmu_objset {
115 struct objset *os;
116 struct zilog *zilog;
117 uint64_t root; /* id of root znode */
118 uint64_t unlinkedobj;
119} udmu_objset_t;
120
121
122/* definitions from dmu.h */
123#ifndef _SYS_DMU_H
124
125typedef struct objset objset_t;
126typedef struct dmu_tx dmu_tx_t;
127typedef struct dmu_buf dmu_buf_t;
128
129#define DMU_NEW_OBJECT (-1ULL)
130#define DMU_OBJECT_END (-1ULL)
131
132#endif
133
134#ifndef _SYS_TXG_H
135#define TXG_WAIT 1ULL
136#define TXG_NOWAIT 2ULL
137#endif
138
139#define ZFS_DIRENT_MAKE(type, obj) (((uint64_t)type << 60) | obj)
140
141#define FTAG ((char *)__func__)
142
143void udmu_init();
144
145void udmu_fini();
146
147void udmu_debug(int level);
148
149/* udmu object-set API */
150
151int udmu_objset_open(char *osname, char *import_dir, int import, int force, udmu_objset_t *uos);
152
153void udmu_objset_close(udmu_objset_t *uos, int export_pool);
154
155int udmu_objset_statvfs(udmu_objset_t *uos, struct statvfs64 *statp);
156
157int udmu_objset_root(udmu_objset_t *uos, dmu_buf_t **dbp, void *tag);
158
159void udmu_wait_synced(udmu_objset_t *uos, dmu_tx_t *tx);
160
161/* udmu ZAP API */
162
163int udmu_zap_lookup(udmu_objset_t *uos, dmu_buf_t *zap_db, const char *name,
164 void *value, int value_size, int intsize);
165
166void udmu_zap_create(udmu_objset_t *uos, dmu_buf_t **zap_dbp, dmu_tx_t *tx, void *tag);
167
168int udmu_zap_insert(udmu_objset_t *uos, dmu_buf_t *zap_db, dmu_tx_t *tx,
169 const char *name, void *value, int len);
170
171int udmu_zap_delete(udmu_objset_t *uos, dmu_buf_t *zap_db, dmu_tx_t *tx,
172 const char *name);
173
174/* udmu object API */
175
176void udmu_object_create(udmu_objset_t *uos, dmu_buf_t **dbp, dmu_tx_t *tx, void *tag);
177
178int udmu_object_get_dmu_buf(udmu_objset_t *uos, uint64_t object,
179 dmu_buf_t **dbp, void *tag);
180
181void udmu_object_put_dmu_buf(dmu_buf_t *db, void *tag);
182
183uint64_t udmu_object_get_id(dmu_buf_t *db);
184
185int udmu_object_read(udmu_objset_t *uos, dmu_buf_t *db, uint64_t offset,
186 uint64_t size, void *buf);
187
188void udmu_object_write(udmu_objset_t *uos, dmu_buf_t *db, struct dmu_tx *tx,
189 uint64_t offset, uint64_t size, void *buf);
190
191void udmu_object_getattr(dmu_buf_t *db, vnattr_t *vap);
192
193void udmu_object_setattr(dmu_buf_t *db, dmu_tx_t *tx, vnattr_t *vap);
194
195void udmu_object_punch(udmu_objset_t *uos, dmu_buf_t *db, dmu_tx_t *tx,
196 uint64_t offset, uint64_t len);
197
198int udmu_object_delete(udmu_objset_t *uos, dmu_buf_t **db, dmu_tx_t *tx, void *tag);
199
200/*udmu transaction API */
201
202dmu_tx_t *udmu_tx_create(udmu_objset_t *uos);
203
204void udmu_tx_hold_write(dmu_tx_t *tx, uint64_t object, uint64_t off, int len);
205
206void udmu_tx_hold_free(dmu_tx_t *tx, uint64_t object, uint64_t off,
207 uint64_t len);
208
209void udmu_tx_hold_zap(dmu_tx_t *tx, uint64_t object, int add, char *name);
210
211void udmu_tx_hold_bonus(dmu_tx_t *tx, uint64_t object);
212
213void udmu_tx_abort(dmu_tx_t *tx);
214
215int udmu_tx_assign(dmu_tx_t *tx, uint64_t txg_how);
216
217void udmu_tx_wait(dmu_tx_t *tx);
218
219int udmu_indblk_overhead(dmu_buf_t *db, unsigned long *used,
220 unsigned long *overhead);
221
222void udmu_tx_commit(dmu_tx_t *tx);
223
224void * udmu_tx_cb_create(size_t bytes);
225
226int udmu_tx_cb_add(dmu_tx_t *tx, void *func, void *data);
227
228int udmu_tx_cb_destroy(void *data);
229
230int udmu_object_is_zap(dmu_buf_t *);
231
232int udmu_indblk_overhead(dmu_buf_t *db, unsigned long *used, unsigned
233 long *overhead);
234
235int udmu_get_blocksize(dmu_buf_t *db, long *blksz);
236
237#ifdef __cplusplus
238}
239#endif
240
241#endif /* _DMU_H */