mirror of
https://git.proxmox.com/git/mirror_zfs.git
synced 2026-05-22 02:27:36 +03:00
ddt: slim down ddt_entry_t
This slims down the in-memory entry to as small as it can be. The IO-related parts are made into a separate entry, since they're relatively rarely needed. The variable allocation for dde_phys is to support the upcoming flat format. Reviewed-by: Alexander Motin <mav@FreeBSD.org> Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov> Signed-off-by: Rob Norris <rob.norris@klarasystems.com> Sponsored-by: Klara, Inc. Sponsored-by: iXsystems, Inc. Closes #15893
This commit is contained in:
committed by
Brian Behlendorf
parent
4d686c3da5
commit
0ba5f503c5
+16
-6
@@ -151,16 +151,22 @@ typedef struct {
|
||||
#define DDE_FLAG_LOADED (1 << 0) /* entry ready for use */
|
||||
#define DDE_FLAG_OVERQUOTA (1 << 1) /* entry unusable, no space */
|
||||
|
||||
/*
|
||||
* Additional data to support entry update or repair. This is fixed size
|
||||
* because its relatively rarely used.
|
||||
*/
|
||||
typedef struct {
|
||||
/* key must be first for ddt_key_compare */
|
||||
ddt_key_t dde_key; /* ddt_tree key */
|
||||
ddt_phys_t dde_phys[DDT_PHYS_MAX]; /* on-disk data */
|
||||
/* copy of data after a repair read, to be rewritten */
|
||||
abd_t *dde_repair_abd;
|
||||
|
||||
/* in-flight update IOs */
|
||||
zio_t *dde_lead_zio[DDT_PHYS_MAX];
|
||||
} ddt_entry_io_t;
|
||||
|
||||
/* copy of data after a repair read, to be rewritten */
|
||||
struct abd *dde_repair_abd;
|
||||
typedef struct {
|
||||
/* key must be first for ddt_key_compare */
|
||||
ddt_key_t dde_key; /* ddt_tree key */
|
||||
avl_node_t dde_node; /* ddt_tree_node */
|
||||
|
||||
/* storage type and class the entry was loaded from */
|
||||
ddt_type_t dde_type;
|
||||
@@ -170,7 +176,9 @@ typedef struct {
|
||||
kcondvar_t dde_cv; /* signaled when load completes */
|
||||
uint64_t dde_waiters; /* count of waiters on dde_cv */
|
||||
|
||||
avl_node_t dde_node; /* ddt_tree node */
|
||||
ddt_entry_io_t *dde_io; /* IO support, when required */
|
||||
|
||||
ddt_phys_t dde_phys[]; /* physical data */
|
||||
} ddt_entry_t;
|
||||
|
||||
/*
|
||||
@@ -265,6 +273,8 @@ extern void ddt_prefetch_all(spa_t *spa);
|
||||
extern boolean_t ddt_class_contains(spa_t *spa, ddt_class_t max_class,
|
||||
const blkptr_t *bp);
|
||||
|
||||
extern void ddt_alloc_entry_io(ddt_entry_t *dde);
|
||||
|
||||
extern ddt_entry_t *ddt_repair_start(ddt_t *ddt, const blkptr_t *bp);
|
||||
extern void ddt_repair_done(ddt_t *ddt, ddt_entry_t *dde);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user