~ubuntu-branches/ubuntu/quantal/zfs-fuse/quantal

« back to all changes in this revision

Viewing changes to src/lib/libzfscommon/include/sys/dsl_dataset.h

  • Committer: Bazaar Package Importer
  • Author(s): Mike Hommey, Mike Hommey, Seth Heeren
  • Date: 2010-06-30 18:03:52 UTC
  • mfrom: (1.1.3 upstream)
  • Revision ID: james.westby@ubuntu.com-20100630180352-d3jq25ytbcl23q3y
Tags: 0.6.9-1
* New upstream release.

[ Mike Hommey ]
* debian/control:
  - Build depend on libssl-dev and libattr1-dev, now required to build.
  - Build depend on docbook-xml to avoid xsltproc I/O error loading
    docbook DTD.
  - Add suggestions for a NFS server and kpartx.
* debian/man/*, debian/copyright, debian/rules: Remove manual pages, they
  are now shipped upstream.
* debian/copyright: Change download link.
* src/SConstruct:
  - Add an optim option to the build system.
  - Add support for DESTDIR.
  - Force debug=1 to mean optim, no strip, no debug.
  - Use -ffunction-sections, -fdata-sections, and --gc-sections flags to
    reduce the binary sizes.
* src/lib/libumem/SConscript: Cleanup src/lib/libumem when cleaning up
  build directory.
* src/cmd/*/SConscript: Don't link zfs, zpool and zdb against libssl.
* src/lib/libumem/SConscript: Only build static libumem.
* src/lib/libumem/sol_compat.h:
  - Add atomic cas support for sparc.
  - Use atomic functions from libsolcompat in libumem on unsupported
    platforms.
* debian/rules:
  - Set optimization level in build system according to DEB_BUILD_OPTIONS.
  - Build with debug=1 to have unstripped binaries ; dh_strip will do the
    right thing.
  - Don't depend on the local location of the docbook XSLT stylesheets.
    Use the catalogged url in place of the full path.
  - Don't clean src/.sconsign.dblite and src/path.pyc.
  - Set all destination directories when installing with scons.
  - Install bash completion and zfsrc files.
  - Don't use scons cache when building.
* debian/prerm: Remove /var/lib/zfs/zpool.cache in prerm.
* debian/dirs: Create /etc/bash_completion.d.
* debian/watch: Fix watch file.
* debian/rules, debian/control, debian/compat: Switch to dh.
* debian/README.Debian: Update README.Debian.
* debian/zfs-fuse.man.xml: Update zfs-fuse manual page.
* debian/zfs-fuse.init: Start sharing datasets marked as such at daemon
  startup.
* debian/rules, debian/control: Use config.guess and config.sub from
  autotools-dev.

[ Seth Heeren ]
* debian/zfs-fuse.man.xml:
  Added notes on the precedence, zfsrc, commandline, initscript vs.
  /etc/default/zfs-fuse on some systems.
* debian/zfs-fuse.init, debian/zfs-fuse.default: Deprecating DAEMON_OPTS.
* debian/zfs-fuse.init:
  - Removing import -a -f.
  - Removing the now unnecessary 'sleep 2'.
  - Extended shutdown wait to allow for zfs-fuse daemon's own shutdown
    timeouts.
  - Re-ordered dubious PATH setting.
* debian/zfs-fuse.init: Move existing zpool.cache to new location if
  possible.

Show diffs side-by-side

added added

removed removed

Lines of Context:
42
42
struct dsl_dir;
43
43
struct dsl_pool;
44
44
 
45
 
typedef void dsl_dataset_evict_func_t(struct dsl_dataset *, void *);
46
 
 
47
45
#define DS_FLAG_INCONSISTENT    (1ULL<<0)
48
46
#define DS_IS_INCONSISTENT(ds)  \
49
47
        ((ds)->ds_phys->ds_flags & DS_FLAG_INCONSISTENT)
63
61
#define DS_FLAG_UNIQUE_ACCURATE (1ULL<<2)
64
62
 
65
63
/*
 
64
 * DS_FLAG_DEFER_DESTROY is set after 'zfs destroy -d' has been called
 
65
 * on a dataset. This allows the dataset to be destroyed using 'zfs release'.
 
66
 */
 
67
#define DS_FLAG_DEFER_DESTROY   (1ULL<<3)
 
68
#define DS_IS_DEFER_DESTROY(ds) \
 
69
        ((ds)->ds_phys->ds_flags & DS_FLAG_DEFER_DESTROY)
 
70
 
 
71
/*
66
72
 * DS_FLAG_CI_DATASET is set if the dataset contains a file system whose
67
73
 * name lookups should be performed case-insensitively.
68
74
 */
93
99
        blkptr_t ds_bp;
94
100
        uint64_t ds_next_clones_obj;    /* DMU_OT_DSL_CLONES */
95
101
        uint64_t ds_props_obj;          /* DMU_OT_DSL_PROPS for snaps */
96
 
        uint64_t ds_pad[6]; /* pad out to 320 bytes for good measure */
 
102
        uint64_t ds_userrefs_obj;       /* DMU_OT_USERREFS */
 
103
        uint64_t ds_pad[5]; /* pad out to 320 bytes for good measure */
97
104
} dsl_dataset_phys_t;
98
105
 
99
106
typedef struct dsl_dataset {
111
118
        /* has internal locking: */
112
119
        bplist_t ds_deadlist;
113
120
 
 
121
        /* to protect against multiple concurrent incremental recv */
 
122
        kmutex_t ds_recvlock;
 
123
 
114
124
        /* protected by lock on pool's dp_dirty_datasets list */
115
125
        txg_node_t ds_dirty_link;
116
126
        list_node_t ds_synced_link;
120
130
         * Protected by ds_lock:
121
131
         */
122
132
        kmutex_t ds_lock;
123
 
        void *ds_user_ptr;
124
 
        dsl_dataset_evict_func_t *ds_user_evict_func;
 
133
        objset_t *ds_objset;
 
134
        uint64_t ds_userrefs;
125
135
 
126
136
        /*
127
137
         * ds_owner is protected by the ds_rwlock and the ds_lock
143
153
        char ds_snapname[MAXNAMELEN];
144
154
} dsl_dataset_t;
145
155
 
 
156
struct dsl_ds_destroyarg {
 
157
        dsl_dataset_t *ds;              /* ds to destroy */
 
158
        dsl_dataset_t *rm_origin;       /* also remove our origin? */
 
159
        boolean_t is_origin_rm;         /* set if removing origin snap */
 
160
        boolean_t defer;                /* destroy -d requested? */
 
161
        boolean_t releasing;            /* destroying due to release? */
 
162
        boolean_t need_prep;            /* do we need to retry due to EBUSY? */
 
163
};
 
164
 
146
165
#define dsl_dataset_is_snapshot(ds)     \
147
166
        ((ds)->ds_phys->ds_num_children != 0)
148
167
 
152
171
int dsl_dataset_hold(const char *name, void *tag, dsl_dataset_t **dsp);
153
172
int dsl_dataset_hold_obj(struct dsl_pool *dp, uint64_t dsobj,
154
173
    void *tag, dsl_dataset_t **);
155
 
int dsl_dataset_own(const char *name, int flags, void *owner,
156
 
    dsl_dataset_t **dsp);
 
174
int dsl_dataset_own(const char *name, boolean_t inconsistentok,
 
175
    void *tag, dsl_dataset_t **dsp);
157
176
int dsl_dataset_own_obj(struct dsl_pool *dp, uint64_t dsobj,
158
 
    int flags, void *owner, dsl_dataset_t **);
 
177
    boolean_t inconsistentok, void *tag, dsl_dataset_t **dsp);
159
178
void dsl_dataset_name(dsl_dataset_t *ds, char *name);
160
179
void dsl_dataset_rele(dsl_dataset_t *ds, void *tag);
161
 
void dsl_dataset_disown(dsl_dataset_t *ds, void *owner);
 
180
void dsl_dataset_disown(dsl_dataset_t *ds, void *tag);
162
181
void dsl_dataset_drop_ref(dsl_dataset_t *ds, void *tag);
163
182
boolean_t dsl_dataset_tryown(dsl_dataset_t *ds, boolean_t inconsistentok,
164
 
    void *owner);
165
 
void dsl_dataset_make_exclusive(dsl_dataset_t *ds, void *owner);
 
183
    void *tag);
 
184
void dsl_dataset_make_exclusive(dsl_dataset_t *ds, void *tag);
166
185
uint64_t dsl_dataset_create_sync(dsl_dir_t *pds, const char *lastname,
167
186
    dsl_dataset_t *origin, uint64_t flags, cred_t *, dmu_tx_t *);
168
187
uint64_t dsl_dataset_create_sync_dd(dsl_dir_t *dd, dsl_dataset_t *origin,
169
188
    uint64_t flags, dmu_tx_t *tx);
170
 
int dsl_dataset_destroy(dsl_dataset_t *ds, void *tag);
171
 
int dsl_snapshots_destroy(char *fsname, char *snapname);
 
189
int dsl_dataset_destroy(dsl_dataset_t *ds, void *tag, boolean_t defer);
 
190
int dsl_snapshots_destroy(char *fsname, char *snapname, boolean_t defer);
172
191
dsl_checkfunc_t dsl_dataset_destroy_check;
173
192
dsl_syncfunc_t dsl_dataset_destroy_sync;
174
193
dsl_checkfunc_t dsl_dataset_snapshot_check;
175
194
dsl_syncfunc_t dsl_dataset_snapshot_sync;
176
 
int dsl_dataset_rollback(dsl_dataset_t *ds, dmu_objset_type_t ost);
177
195
int dsl_dataset_rename(char *name, const char *newname, boolean_t recursive);
178
 
int dsl_dataset_promote(const char *name);
 
196
int dsl_dataset_promote(const char *name, char *conflsnap);
179
197
int dsl_dataset_clone_swap(dsl_dataset_t *clone, dsl_dataset_t *origin_head,
180
198
    boolean_t force);
181
 
 
182
 
void *dsl_dataset_set_user_ptr(dsl_dataset_t *ds,
183
 
    void *p, dsl_dataset_evict_func_t func);
184
 
void *dsl_dataset_get_user_ptr(dsl_dataset_t *ds);
 
199
int dsl_dataset_user_hold(char *dsname, char *snapname, char *htag,
 
200
    boolean_t recursive, boolean_t temphold);
 
201
int dsl_dataset_user_release(char *dsname, char *snapname, char *htag,
 
202
    boolean_t recursive);
 
203
int dsl_dataset_user_release_tmp(struct dsl_pool *dp, uint64_t dsobj,
 
204
    char *htag);
 
205
int dsl_dataset_get_holds(const char *dsname, nvlist_t **nvp);
185
206
 
186
207
blkptr_t *dsl_dataset_get_blkptr(dsl_dataset_t *ds);
187
208
void dsl_dataset_set_blkptr(dsl_dataset_t *ds, blkptr_t *bp, dmu_tx_t *tx);
192
213
 
193
214
void dsl_dataset_sync(dsl_dataset_t *os, zio_t *zio, dmu_tx_t *tx);
194
215
 
195
 
void dsl_dataset_block_born(dsl_dataset_t *ds, blkptr_t *bp, dmu_tx_t *tx);
196
 
int dsl_dataset_block_kill(dsl_dataset_t *ds, blkptr_t *bp, zio_t *pio,
 
216
void dsl_dataset_block_born(dsl_dataset_t *ds, const blkptr_t *bp,
197
217
    dmu_tx_t *tx);
 
218
int dsl_dataset_block_kill(dsl_dataset_t *ds, const blkptr_t *bp,
 
219
    dmu_tx_t *tx, boolean_t async);
198
220
boolean_t dsl_dataset_block_freeable(dsl_dataset_t *ds, uint64_t blk_birth);
199
221
uint64_t dsl_dataset_prev_snap_txg(dsl_dataset_t *ds);
200
222
 
211
233
int dsl_dataset_check_quota(dsl_dataset_t *ds, boolean_t check_quota,
212
234
    uint64_t asize, uint64_t inflight, uint64_t *used,
213
235
    uint64_t *ref_rsrv);
214
 
int dsl_dataset_set_quota(const char *dsname, uint64_t quota);
 
236
int dsl_dataset_set_quota(const char *dsname, zprop_source_t source,
 
237
    uint64_t quota);
215
238
void dsl_dataset_set_quota_sync(void *arg1, void *arg2, cred_t *cr,
216
239
    dmu_tx_t *tx);
217
 
int dsl_dataset_set_reservation(const char *dsname, uint64_t reservation);
218
 
void dsl_dataset_set_flags(dsl_dataset_t *ds, uint64_t flags);
219
 
int64_t dsl_dataset_new_refreservation(dsl_dataset_t *ds, uint64_t reservation,
220
 
    dmu_tx_t *tx);
 
240
int dsl_dataset_set_reservation(const char *dsname, zprop_source_t source,
 
241
    uint64_t reservation);
 
242
 
 
243
int dsl_destroy_inconsistent(const char *dsname, void *arg);
221
244
 
222
245
#ifdef ZFS_DEBUG
223
246
#define dprintf_ds(ds, fmt, ...) do { \