From d2efe0140936e5d6f7ae2c67f8780a131655e039 Mon Sep 17 00:00:00 2001 From: Patrick Farrell Date: Thu, 21 Sep 2023 17:17:36 -0400 Subject: [PATCH] EX-8277 llite: set max compression size to 64 MiB Compression size should never be larger than RPC size, so set it to a maximum of 64 MiB. Test-Parameters: trivial Signed-off-by: Patrick Farrell Change-Id: Ia5958db3504f4f442fbd41e48416924debc26192 Reviewed-on: https://review.whamcloud.com/c/ex/lustre-release/+/52466 Tested-by: jenkins Tested-by: Maloo Reviewed-by: Andreas Dilger --- lustre/include/uapi/linux/lustre/lustre_user.h | 5 ++++- lustre/lod/lod_internal.h | 9 +++++++-- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/lustre/include/uapi/linux/lustre/lustre_user.h b/lustre/include/uapi/linux/lustre/lustre_user.h index 51e68df..e4217bf 100644 --- a/lustre/include/uapi/linux/lustre/lustre_user.h +++ b/lustre/include/uapi/linux/lustre/lustre_user.h @@ -2941,7 +2941,10 @@ enum ll_compr_type { }; #define COMPR_CHUNK_MIN_BITS 16 -#define COMPR_CHUNK_MAX_BITS 31 +/* 64 MiB - a compressed chunk can never be bigger than PTLRPC_MAX_BRW_SIZE + * (which isn't easily accessed here) + */ +#define COMPR_CHUNK_MAX_BITS 26 /* == PTLRPC_MAX_BRW_BITS */ #define COMPR_LEVEL_MAX 31 #define COMPR_MIN_PAGES (1UL << (COMPR_CHUNK_MIN_BITS - PAGE_SHIFT)) #if defined(__cplusplus) diff --git a/lustre/lod/lod_internal.h b/lustre/lod/lod_internal.h index 89d26e4..4412738 100644 --- a/lustre/lod/lod_internal.h +++ b/lustre/lod/lod_internal.h @@ -671,8 +671,9 @@ lod_comp_shrink_stripe_count(struct lod_layout_component *lod_comp, } /** - * limit 2^log_bits to less than stripe_size and given stripe_size is already - * a multiple fo 64KiB, stripe_size must be a multiple of chunk size. + * Limit 2^log_bits to less than stripe_size and maximum RPC size. + * Given that stripe_size is itself always a multiple fo 64KiB, + * stripe_size must also be an even multiple of some chunk_size. */ static inline void lod_adjust_compr_chunk_size(__u16 *log_bits, __u32 stripe_size) @@ -680,6 +681,10 @@ lod_adjust_compr_chunk_size(__u16 *log_bits, __u32 stripe_size) while ((1 << *log_bits) > stripe_size || stripe_size & ((1 << *log_bits) - 1)) (*log_bits)--; + + BUILD_BUG_ON(COMPR_CHUNK_MAX_BITS > PTLRPC_MAX_BRW_BITS); + if (unlikely(*log_bits > COMPR_CHUNK_MAX_BITS)) + *log_bits = COMPR_CHUNK_MAX_BITS; } void lod_fix_desc(struct lov_desc *desc); -- 1.8.3.1