diff options
Diffstat (limited to 'include/sys')
-rw-r--r-- | include/sys/metaslab.h | 3 | ||||
-rw-r--r-- | include/sys/metaslab_impl.h | 1 | ||||
-rw-r--r-- | include/sys/vdev_impl.h | 1 | ||||
-rw-r--r-- | include/sys/zil_impl.h | 1 | ||||
-rw-r--r-- | include/sys/zio.h | 5 |
5 files changed, 9 insertions, 2 deletions
diff --git a/include/sys/metaslab.h b/include/sys/metaslab.h index 2cf4d2b48..99912424b 100644 --- a/include/sys/metaslab.h +++ b/include/sys/metaslab.h @@ -50,12 +50,15 @@ extern void metaslab_sync_reassess(metaslab_group_t *mg); #define METASLAB_GANG_HEADER 0x2 #define METASLAB_GANG_CHILD 0x4 #define METASLAB_GANG_AVOID 0x8 +#define METASLAB_FASTWRITE 0x10 extern int metaslab_alloc(spa_t *spa, metaslab_class_t *mc, uint64_t psize, blkptr_t *bp, int ncopies, uint64_t txg, blkptr_t *hintbp, int flags); extern void metaslab_free(spa_t *spa, const blkptr_t *bp, uint64_t txg, boolean_t now); extern int metaslab_claim(spa_t *spa, const blkptr_t *bp, uint64_t txg); +extern void metaslab_fastwrite_mark(spa_t *spa, const blkptr_t *bp); +extern void metaslab_fastwrite_unmark(spa_t *spa, const blkptr_t *bp); extern metaslab_class_t *metaslab_class_create(spa_t *spa, space_map_ops_t *ops); diff --git a/include/sys/metaslab_impl.h b/include/sys/metaslab_impl.h index 6c670a162..658359478 100644 --- a/include/sys/metaslab_impl.h +++ b/include/sys/metaslab_impl.h @@ -46,6 +46,7 @@ struct metaslab_class { uint64_t mc_deferred; /* total deferred frees */ uint64_t mc_space; /* total space (alloc + free) */ uint64_t mc_dspace; /* total deflated space */ + kmutex_t mc_fastwrite_lock; }; struct metaslab_group { diff --git a/include/sys/vdev_impl.h b/include/sys/vdev_impl.h index 5bd432beb..0b532dcdd 100644 --- a/include/sys/vdev_impl.h +++ b/include/sys/vdev_impl.h @@ -156,6 +156,7 @@ struct vdev { uint64_t vdev_ms_count; /* number of metaslabs */ metaslab_group_t *vdev_mg; /* metaslab group */ metaslab_t **vdev_ms; /* metaslab array */ + uint64_t vdev_pending_fastwrite; /* allocated fastwrites */ txg_list_t vdev_ms_list; /* per-txg dirty metaslab lists */ txg_list_t vdev_dtl_list; /* per-txg dirty DTL lists */ txg_node_t vdev_txg_node; /* per-txg dirty vdev linkage */ diff --git a/include/sys/zil_impl.h b/include/sys/zil_impl.h index 1d4c0cc6c..6c37c1ac2 100644 --- a/include/sys/zil_impl.h +++ b/include/sys/zil_impl.h @@ -40,6 +40,7 @@ extern "C" { typedef struct lwb { zilog_t *lwb_zilog; /* back pointer to log struct */ blkptr_t lwb_blk; /* on disk address of this log blk */ + boolean_t lwb_fastwrite; /* is blk marked for fastwrite? */ int lwb_nused; /* # used bytes in buffer */ int lwb_sz; /* size of block and buffer */ char *lwb_buf; /* log write buffer */ diff --git a/include/sys/zio.h b/include/sys/zio.h index 4f20cab65..289238c36 100644 --- a/include/sys/zio.h +++ b/include/sys/zio.h @@ -193,7 +193,8 @@ enum zio_flag { ZIO_FLAG_RAW = 1 << 21, ZIO_FLAG_GANG_CHILD = 1 << 22, ZIO_FLAG_DDT_CHILD = 1 << 23, - ZIO_FLAG_GODFATHER = 1 << 24 + ZIO_FLAG_GODFATHER = 1 << 24, + ZIO_FLAG_FASTWRITE = 1 << 25 }; #define ZIO_FLAG_MUSTSUCCEED 0 @@ -475,7 +476,7 @@ extern zio_t *zio_free_sync(zio_t *pio, spa_t *spa, uint64_t txg, const blkptr_t *bp, enum zio_flag flags); extern int zio_alloc_zil(spa_t *spa, uint64_t txg, blkptr_t *new_bp, - blkptr_t *old_bp, uint64_t size, boolean_t use_slog); + uint64_t size, boolean_t use_slog); extern void zio_free_zil(spa_t *spa, uint64_t txg, blkptr_t *bp); extern void zio_flush(zio_t *zio, vdev_t *vd); extern void zio_shrink(zio_t *zio, uint64_t size); |