Print this page
2882 implement libzfs_core
2883 changing "canmount" property to "on" should not always remount dataset
2900 "zfs snapshot" should be able to create multiple, arbitrary snapshots at once
Reviewed by: George Wilson <george.wilson@delphix.com>
Reviewed by: Chris Siden <christopher.siden@delphix.com>
Reviewed by: Garrett D'Amore <garrett@damore.org>
Reviewed by: Bill Pijewski <wdp@joyent.com>
Reviewed by: Dan Kruchinin <dan.kruchinin@gmail.com>


  31 #include <sys/dmu_objset.h>
  32 #include <sys/dsl_dataset.h> /* for dsl_dataset_block_freeable() */
  33 #include <sys/dsl_dir.h> /* for dsl_dir_tempreserve_*() */
  34 #include <sys/dsl_pool.h>
  35 #include <sys/zap_impl.h> /* for fzap_default_block_shift */
  36 #include <sys/spa.h>
  37 #include <sys/sa.h>
  38 #include <sys/sa_impl.h>
  39 #include <sys/zfs_context.h>
  40 #include <sys/varargs.h>
  41 
  42 typedef void (*dmu_tx_hold_func_t)(dmu_tx_t *tx, struct dnode *dn,
  43     uint64_t arg1, uint64_t arg2);
  44 
  45 
  46 dmu_tx_t *
  47 dmu_tx_create_dd(dsl_dir_t *dd)
  48 {
  49         dmu_tx_t *tx = kmem_zalloc(sizeof (dmu_tx_t), KM_SLEEP);
  50         tx->tx_dir = dd;
  51         if (dd)
  52                 tx->tx_pool = dd->dd_pool;
  53         list_create(&tx->tx_holds, sizeof (dmu_tx_hold_t),
  54             offsetof(dmu_tx_hold_t, txh_node));
  55         list_create(&tx->tx_callbacks, sizeof (dmu_tx_callback_t),
  56             offsetof(dmu_tx_callback_t, dcb_node));
  57 #ifdef ZFS_DEBUG
  58         refcount_create(&tx->tx_space_written);
  59         refcount_create(&tx->tx_space_freed);
  60 #endif
  61         return (tx);
  62 }
  63 
  64 dmu_tx_t *
  65 dmu_tx_create(objset_t *os)
  66 {
  67         dmu_tx_t *tx = dmu_tx_create_dd(os->os_dsl_dataset->ds_dir);
  68         tx->tx_objset = os;
  69         tx->tx_lastsnap_txg = dsl_dataset_prev_snap_txg(os->os_dsl_dataset);
  70         return (tx);
  71 }




  31 #include <sys/dmu_objset.h>
  32 #include <sys/dsl_dataset.h> /* for dsl_dataset_block_freeable() */
  33 #include <sys/dsl_dir.h> /* for dsl_dir_tempreserve_*() */
  34 #include <sys/dsl_pool.h>
  35 #include <sys/zap_impl.h> /* for fzap_default_block_shift */
  36 #include <sys/spa.h>
  37 #include <sys/sa.h>
  38 #include <sys/sa_impl.h>
  39 #include <sys/zfs_context.h>
  40 #include <sys/varargs.h>
  41 
  42 typedef void (*dmu_tx_hold_func_t)(dmu_tx_t *tx, struct dnode *dn,
  43     uint64_t arg1, uint64_t arg2);
  44 
  45 
  46 dmu_tx_t *
  47 dmu_tx_create_dd(dsl_dir_t *dd)
  48 {
  49         dmu_tx_t *tx = kmem_zalloc(sizeof (dmu_tx_t), KM_SLEEP);
  50         tx->tx_dir = dd;
  51         if (dd != NULL)
  52                 tx->tx_pool = dd->dd_pool;
  53         list_create(&tx->tx_holds, sizeof (dmu_tx_hold_t),
  54             offsetof(dmu_tx_hold_t, txh_node));
  55         list_create(&tx->tx_callbacks, sizeof (dmu_tx_callback_t),
  56             offsetof(dmu_tx_callback_t, dcb_node));
  57 #ifdef ZFS_DEBUG
  58         refcount_create(&tx->tx_space_written);
  59         refcount_create(&tx->tx_space_freed);
  60 #endif
  61         return (tx);
  62 }
  63 
  64 dmu_tx_t *
  65 dmu_tx_create(objset_t *os)
  66 {
  67         dmu_tx_t *tx = dmu_tx_create_dd(os->os_dsl_dataset->ds_dir);
  68         tx->tx_objset = os;
  69         tx->tx_lastsnap_txg = dsl_dataset_prev_snap_txg(os->os_dsl_dataset);
  70         return (tx);
  71 }