mirror of
https://git.proxmox.com/git/mirror_zfs.git
synced 2026-05-22 18:40:43 +03:00
port async unlinked drain from illumos-nexenta
This patch is an async implementation of the existing sync zfs_unlinked_drain() function. This function is called at mount time and is responsible for freeing znodes that we didn't get to freeing before. We don't have to hold mounting of the dataset until the unlinked list is fully drained as is done now. Since we can process the unlinked set asynchronously this results in a better user experience when mounting a dataset with entries in the unlinked set. Reviewed by: Jorgen Lundman <lundman@lundman.net> Reviewed by: Tom Caputi <tcaputi@datto.com> Reviewed by: Brian Behlendorf <behlendorf1@llnl.gov> Reviewed-by: Matt Ahrens <mahrens@delphix.com> Reviewed by: Paul Dagnelie <pcd@delphix.com> Signed-off-by: Alek Pinchuk <apinchuk@datto.com> Closes #8142
This commit is contained in:
@@ -21,6 +21,7 @@
|
||||
|
||||
/*
|
||||
* Copyright (c) 2018 by Delphix. All rights reserved.
|
||||
* Copyright (c) 2018 Datto Inc.
|
||||
*/
|
||||
|
||||
#ifndef _SYS_DATASET_KSTATS_H
|
||||
@@ -35,6 +36,8 @@ typedef struct dataset_aggsum_stats_t {
|
||||
aggsum_t das_nwritten;
|
||||
aggsum_t das_reads;
|
||||
aggsum_t das_nread;
|
||||
aggsum_t das_nunlinks;
|
||||
aggsum_t das_nunlinked;
|
||||
} dataset_aggsum_stats_t;
|
||||
|
||||
typedef struct dataset_kstat_values {
|
||||
@@ -43,6 +46,16 @@ typedef struct dataset_kstat_values {
|
||||
kstat_named_t dkv_nwritten;
|
||||
kstat_named_t dkv_reads;
|
||||
kstat_named_t dkv_nread;
|
||||
/*
|
||||
* nunlinks is initialized to the unlinked set size on mount and
|
||||
* is incremented whenever a new entry is added to the unlinked set
|
||||
*/
|
||||
kstat_named_t dkv_nunlinks;
|
||||
/*
|
||||
* nunlinked is initialized to zero on mount and is incremented when an
|
||||
* entry is removed from the unlinked set
|
||||
*/
|
||||
kstat_named_t dkv_nunlinked;
|
||||
} dataset_kstat_values_t;
|
||||
|
||||
typedef struct dataset_kstats {
|
||||
@@ -56,4 +69,7 @@ void dataset_kstats_destroy(dataset_kstats_t *);
|
||||
void dataset_kstats_update_write_kstats(dataset_kstats_t *, int64_t);
|
||||
void dataset_kstats_update_read_kstats(dataset_kstats_t *, int64_t);
|
||||
|
||||
void dataset_kstats_update_nunlinks_kstat(dataset_kstats_t *, int64_t);
|
||||
void dataset_kstats_update_nunlinked_kstat(dataset_kstats_t *, int64_t);
|
||||
|
||||
#endif /* _SYS_DATASET_KSTATS_H */
|
||||
|
||||
Reference in New Issue
Block a user