mirror of
				https://git.proxmox.com/git/mirror_zfs.git
				synced 2025-10-26 18:05:04 +03:00 
			
		
		
		
	 f1512ee61e
			
		
	
	
		f1512ee61e
		
	
	
	
	
		
			
			5027 zfs large block support Reviewed by: Alek Pinchuk <pinchuk.alek@gmail.com> Reviewed by: George Wilson <george.wilson@delphix.com> Reviewed by: Josef 'Jeff' Sipek <josef.sipek@nexenta.com> Reviewed by: Richard Elling <richard.elling@richardelling.com> Reviewed by: Saso Kiselkov <skiselkov.ml@gmail.com> Reviewed by: Brian Behlendorf <behlendorf1@llnl.gov> Approved by: Dan McDonald <danmcd@omniti.com> References: https://www.illumos.org/issues/5027 https://github.com/illumos/illumos-gate/commit/b515258 Porting Notes: * Included in this patch is a tiny ISP2() cleanup in zio_init() from Illumos 5255. * Unlike the upstream Illumos commit this patch does not impose an arbitrary 128K block size limit on volumes. Volumes, like filesystems, are limited by the zfs_max_recordsize=1M module option. * By default the maximum record size is limited to 1M by the module option zfs_max_recordsize. This value may be safely increased up to 16M which is the largest block size supported by the on-disk format. At the moment, 1M blocks clearly offer a significant performance improvement but the benefits of going beyond this for the majority of workloads are less clear. * The illumos version of this patch increased DMU_MAX_ACCESS to 32M. This was determined not to be large enough when using 16M blocks because the zfs_make_xattrdir() function will fail (EFBIG) when assigning a TX. This was immediately observed under Linux because all newly created files must have a security xattr created and that was failing. Therefore, we've set DMU_MAX_ACCESS to 64M. * On 32-bit platforms a hard limit of 1M is set for blocks due to the limited virtual address space. We should be able to relax this one the ABD patches are merged. Ported-by: Brian Behlendorf <behlendorf1@llnl.gov> Closes #354
		
			
				
	
	
		
			90 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			90 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /*
 | |
|  * CDDL HEADER START
 | |
|  *
 | |
|  * The contents of this file are subject to the terms of the
 | |
|  * Common Development and Distribution License (the "License").
 | |
|  * You may not use this file except in compliance with the License.
 | |
|  *
 | |
|  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
 | |
|  * or http://www.opensolaris.org/os/licensing.
 | |
|  * See the License for the specific language governing permissions
 | |
|  * and limitations under the License.
 | |
|  *
 | |
|  * When distributing Covered Code, include this CDDL HEADER in each
 | |
|  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
 | |
|  * If applicable, add the following below this CDDL HEADER, with the
 | |
|  * fields enclosed by brackets "[]" replaced with your own identifying
 | |
|  * information: Portions Copyright [yyyy] [name of copyright owner]
 | |
|  *
 | |
|  * CDDL HEADER END
 | |
|  */
 | |
| 
 | |
| /*
 | |
|  * Copyright (c) 2013 by Delphix. All rights reserved.
 | |
|  * Copyright (c) 2013 by Saso Kiselkov. All rights reserved.
 | |
|  */
 | |
| 
 | |
| #ifndef _ZFEATURE_COMMON_H
 | |
| #define	_ZFEATURE_COMMON_H
 | |
| 
 | |
| #include <sys/fs/zfs.h>
 | |
| #include <sys/inttypes.h>
 | |
| #include <sys/types.h>
 | |
| 
 | |
| #ifdef	__cplusplus
 | |
| extern "C" {
 | |
| #endif
 | |
| 
 | |
| struct zfeature_info;
 | |
| 
 | |
| typedef enum spa_feature {
 | |
| 	SPA_FEATURE_NONE = -1,
 | |
| 	SPA_FEATURE_ASYNC_DESTROY,
 | |
| 	SPA_FEATURE_EMPTY_BPOBJ,
 | |
| 	SPA_FEATURE_LZ4_COMPRESS,
 | |
| 	SPA_FEATURE_SPACEMAP_HISTOGRAM,
 | |
| 	SPA_FEATURE_ENABLED_TXG,
 | |
| 	SPA_FEATURE_HOLE_BIRTH,
 | |
| 	SPA_FEATURE_EXTENSIBLE_DATASET,
 | |
| 	SPA_FEATURE_EMBEDDED_DATA,
 | |
| 	SPA_FEATURE_BOOKMARKS,
 | |
| 	SPA_FEATURE_FS_SS_LIMIT,
 | |
| 	SPA_FEATURE_LARGE_BLOCKS,
 | |
| 	SPA_FEATURES
 | |
| } spa_feature_t;
 | |
| 
 | |
| #define	SPA_FEATURE_DISABLED	(-1ULL)
 | |
| 
 | |
| typedef struct zfeature_info {
 | |
| 	spa_feature_t fi_feature;
 | |
| 	const char *fi_uname;	/* User-facing feature name */
 | |
| 	const char *fi_guid;	/* On-disk feature identifier */
 | |
| 	const char *fi_desc;	/* Feature description */
 | |
| 	boolean_t fi_can_readonly; /* Can open pool readonly w/o support? */
 | |
| 	boolean_t fi_mos;	/* Is the feature necessary to read the MOS? */
 | |
| 	/* Activate this feature at the same time it is enabled */
 | |
| 	boolean_t fi_activate_on_enable;
 | |
| 	/* array of dependencies, terminated by SPA_FEATURE_NONE */
 | |
| 	const spa_feature_t *fi_depends;
 | |
| } zfeature_info_t;
 | |
| 
 | |
| typedef int (zfeature_func_t)(zfeature_info_t *, void *);
 | |
| 
 | |
| #define	ZFS_FEATURE_DEBUG
 | |
| 
 | |
| extern zfeature_info_t spa_feature_table[SPA_FEATURES];
 | |
| 
 | |
| extern boolean_t zfeature_is_valid_guid(const char *);
 | |
| 
 | |
| extern boolean_t zfeature_is_supported(const char *);
 | |
| extern int zfeature_lookup_name(const char *, spa_feature_t *);
 | |
| extern boolean_t zfeature_depends_on(spa_feature_t, spa_feature_t);
 | |
| 
 | |
| extern void zpool_feature_init(void);
 | |
| 
 | |
| #ifdef	__cplusplus
 | |
| }
 | |
| #endif
 | |
| 
 | |
| #endif	/* _ZFEATURE_COMMON_H */
 |