mirror of
https://git.proxmox.com/git/mirror_zfs.git
synced 2024-11-17 10:01:01 +03:00
93cf20764a
4101 metaslab_debug should allow for fine-grained control 4102 space_maps should store more information about themselves 4103 space map object blocksize should be increased 4105 removing a mirrored log device results in a leaked object 4106 asynchronously load metaslab Reviewed by: Matthew Ahrens <mahrens@delphix.com> Reviewed by: Adam Leventhal <ahl@delphix.com> Reviewed by: Sebastien Roy <seb@delphix.com> Approved by: Garrett D'Amore <garrett@damore.org> Prior to this patch, space_maps were preferred solely based on the amount of free space left in each. Unfortunately, this heuristic didn't contain any information about the make-up of that free space, which meant we could keep preferring and loading a highly fragmented space map that wouldn't actually have enough contiguous space to satisfy the allocation; then unloading that space_map and repeating the process. This change modifies the space_map's to store additional information about the contiguous space in the space_map, so that we can use this information to make a better decision about which space_map to load. This requires reallocating all space_map objects to increase their bonus buffer size sizes enough to fit the new metadata. The above feature can be enabled via a new feature flag introduced by this change: com.delphix:spacemap_histogram In addition to the above, this patch allows the space_map block size to be increase. Currently the block size is set to be 4K in size, which has certain implications including the following: * 4K sector devices will not see any compression benefit * large space_maps require more metadata on-disk * large space_maps require more time to load (typically random reads) Now the space_map block size can adjust as needed up to the maximum size set via the space_map_max_blksz variable. A bug was fixed which resulted in potentially leaking an object when removing a mirrored log device. The previous logic for vdev_remove() did not deal with removing top-level vdevs that are interior vdevs (i.e. mirror) correctly. The problem would occur when removing a mirrored log device, and result in the DTL space map object being leaked; because top-level vdevs don't have DTL space map objects associated with them. References: https://www.illumos.org/issues/4101 https://www.illumos.org/issues/4102 https://www.illumos.org/issues/4103 https://www.illumos.org/issues/4105 https://www.illumos.org/issues/4106 https://github.com/illumos/illumos-gate/commit/0713e23 Porting notes: A handful of kmem_alloc() calls were converted to kmem_zalloc(). Also, the KM_PUSHPAGE and TQ_PUSHPAGE flags were used as necessary. Ported-by: Tim Chase <tim@chase2k.com> Signed-off-by: Prakash Surya <surya1@llnl.gov> Signed-off-by: Brian Behlendorf <behlendorf1@llnl.gov> Closes #2488
103 lines
3.5 KiB
Makefile
103 lines
3.5 KiB
Makefile
SUBDIRS = fm fs
|
|
|
|
COMMON_H = \
|
|
$(top_srcdir)/include/sys/arc.h \
|
|
$(top_srcdir)/include/sys/avl.h \
|
|
$(top_srcdir)/include/sys/avl_impl.h \
|
|
$(top_srcdir)/include/sys/bplist.h \
|
|
$(top_srcdir)/include/sys/bpobj.h \
|
|
$(top_srcdir)/include/sys/bptree.h \
|
|
$(top_srcdir)/include/sys/dbuf.h \
|
|
$(top_srcdir)/include/sys/ddt.h \
|
|
$(top_srcdir)/include/sys/dmu.h \
|
|
$(top_srcdir)/include/sys/dmu_impl.h \
|
|
$(top_srcdir)/include/sys/dmu_objset.h \
|
|
$(top_srcdir)/include/sys/dmu_send.h \
|
|
$(top_srcdir)/include/sys/dmu_traverse.h \
|
|
$(top_srcdir)/include/sys/dmu_tx.h \
|
|
$(top_srcdir)/include/sys/dmu_zfetch.h \
|
|
$(top_srcdir)/include/sys/dnode.h \
|
|
$(top_srcdir)/include/sys/dsl_dataset.h \
|
|
$(top_srcdir)/include/sys/dsl_deadlist.h \
|
|
$(top_srcdir)/include/sys/dsl_deleg.h \
|
|
$(top_srcdir)/include/sys/dsl_destroy.h \
|
|
$(top_srcdir)/include/sys/dsl_dir.h \
|
|
$(top_srcdir)/include/sys/dsl_pool.h \
|
|
$(top_srcdir)/include/sys/dsl_prop.h \
|
|
$(top_srcdir)/include/sys/dsl_scan.h \
|
|
$(top_srcdir)/include/sys/dsl_synctask.h \
|
|
$(top_srcdir)/include/sys/dsl_userhold.h \
|
|
$(top_srcdir)/include/sys/efi_partition.h \
|
|
$(top_srcdir)/include/sys/metaslab.h \
|
|
$(top_srcdir)/include/sys/metaslab_impl.h \
|
|
$(top_srcdir)/include/sys/nvpair.h \
|
|
$(top_srcdir)/include/sys/nvpair_impl.h \
|
|
$(top_srcdir)/include/sys/range_tree.h \
|
|
$(top_srcdir)/include/sys/refcount.h \
|
|
$(top_srcdir)/include/sys/rrwlock.h \
|
|
$(top_srcdir)/include/sys/sa.h \
|
|
$(top_srcdir)/include/sys/sa_impl.h \
|
|
$(top_srcdir)/include/sys/spa_boot.h \
|
|
$(top_srcdir)/include/sys/space_map.h \
|
|
$(top_srcdir)/include/sys/space_reftree.h \
|
|
$(top_srcdir)/include/sys/spa.h \
|
|
$(top_srcdir)/include/sys/spa_impl.h \
|
|
$(top_srcdir)/include/sys/txg.h \
|
|
$(top_srcdir)/include/sys/txg_impl.h \
|
|
$(top_srcdir)/include/sys/u8_textprep_data.h \
|
|
$(top_srcdir)/include/sys/u8_textprep.h \
|
|
$(top_srcdir)/include/sys/uberblock.h \
|
|
$(top_srcdir)/include/sys/uberblock_impl.h \
|
|
$(top_srcdir)/include/sys/uio_impl.h \
|
|
$(top_srcdir)/include/sys/unique.h \
|
|
$(top_srcdir)/include/sys/uuid.h \
|
|
$(top_srcdir)/include/sys/vdev_disk.h \
|
|
$(top_srcdir)/include/sys/vdev_file.h \
|
|
$(top_srcdir)/include/sys/vdev.h \
|
|
$(top_srcdir)/include/sys/vdev_impl.h \
|
|
$(top_srcdir)/include/sys/xvattr.h \
|
|
$(top_srcdir)/include/sys/zap.h \
|
|
$(top_srcdir)/include/sys/zap_impl.h \
|
|
$(top_srcdir)/include/sys/zap_leaf.h \
|
|
$(top_srcdir)/include/sys/zfeature.h \
|
|
$(top_srcdir)/include/sys/zfs_acl.h \
|
|
$(top_srcdir)/include/sys/zfs_context.h \
|
|
$(top_srcdir)/include/sys/zfs_ctldir.h \
|
|
$(top_srcdir)/include/sys/zfs_debug.h \
|
|
$(top_srcdir)/include/sys/zfs_delay.h \
|
|
$(top_srcdir)/include/sys/zfs_dir.h \
|
|
$(top_srcdir)/include/sys/zfs_fuid.h \
|
|
$(top_srcdir)/include/sys/zfs_rlock.h \
|
|
$(top_srcdir)/include/sys/zfs_sa.h \
|
|
$(top_srcdir)/include/sys/zfs_stat.h \
|
|
$(top_srcdir)/include/sys/zfs_vfsops.h \
|
|
$(top_srcdir)/include/sys/zfs_vnops.h \
|
|
$(top_srcdir)/include/sys/zfs_znode.h \
|
|
$(top_srcdir)/include/sys/zil.h \
|
|
$(top_srcdir)/include/sys/zil_impl.h \
|
|
$(top_srcdir)/include/sys/zio_checksum.h \
|
|
$(top_srcdir)/include/sys/zio_compress.h \
|
|
$(top_srcdir)/include/sys/zio.h \
|
|
$(top_srcdir)/include/sys/zio_impl.h \
|
|
$(top_srcdir)/include/sys/zrlock.h
|
|
|
|
KERNEL_H = \
|
|
$(top_srcdir)/include/sys/zfs_ioctl.h \
|
|
$(top_srcdir)/include/sys/zfs_onexit.h \
|
|
${top_srcdir}/include/sys/zpl.h \
|
|
$(top_srcdir)/include/sys/zvol.h
|
|
|
|
USER_H =
|
|
|
|
EXTRA_DIST = $(COMMON_H) $(KERNEL_H) $(USER_H)
|
|
|
|
if CONFIG_USER
|
|
libzfsdir = $(includedir)/libzfs/sys
|
|
libzfs_HEADERS = $(COMMON_H) $(USER_H)
|
|
endif
|
|
|
|
if CONFIG_KERNEL
|
|
kerneldir = /usr/src/zfs-$(VERSION)/include/sys
|
|
kernel_HEADERS = $(COMMON_H) $(KERNEL_H)
|
|
endif
|