From 0b7fc118058aadf2031316f56fcf45fb499f84b9 Mon Sep 17 00:00:00 2001 From: Shaun Tancheff Date: Wed, 29 Jun 2022 23:00:34 -0700 Subject: [PATCH] LU-15563 build: Include the new linux/blk-integrity.h Linux v5.15-rc6-17-gfe45e630a103 block: move integrity handling out of Include the new linux/blk-integrity.h Since blk-integrity is only used in osd-ldiskfs we can migrate the compatibility wrappers: blk_integrity_interval(), blk_integrity_name(), bdev_integrity_enabled(), and bip_size() to osd-ldiskfs/osd_internal.h Lustre-change: https://review.whamcloud.com/47166 Lustre-commit: afe944a12091081b3bfeaa2365fb03ef272ba9ba HPE-bug-id: LUS-10921 Signed-off-by: Shaun Tancheff Change-Id: Idcbef9b43b7d2a740291e3783f81c23454209a25 Reviewed-on: https://review.whamcloud.com/47841 Reviewed-by: Yang Sheng Tested-by: jenkins Tested-by: Maloo Reviewed-by: Andreas Dilger --- libcfs/autoconf/lustre-libcfs.m4 | 17 ++++++++ lustre/include/lustre_compat.h | 80 ------------------------------------ lustre/osd-ldiskfs/osd_internal.h | 85 +++++++++++++++++++++++++++++++++++++++ 3 files changed, 102 insertions(+), 80 deletions(-) diff --git a/libcfs/autoconf/lustre-libcfs.m4 b/libcfs/autoconf/lustre-libcfs.m4 index 66937de..517f72f 100644 --- a/libcfs/autoconf/lustre-libcfs.m4 +++ b/libcfs/autoconf/lustre-libcfs.m4 @@ -1721,6 +1721,22 @@ AC_DEFUN([LIBCFS_PROG_LINUX_RESULTS], [ ]) # +# LIBCFS_LINUX_BLK_INTEGRITY_HEADER +# +# Kernel 5.15-rc6 commit fe45e630a1035aea94c29016f2598bbde149bbe3 +# block: move integrity handling out of +# +AC_DEFUN([LIBCFS_LINUX_BLK_INTEGRITY_HEADER], [ +tmp_flags="$EXTRA_KCFLAGS" +EXTRA_KCFLAGS="-Werror" +LB_CHECK_LINUX_HEADER([linux/blk-integrity.h], [ + AC_DEFINE(HAVE_LINUX_BLK_INTEGRITY_HEADER, 1, + [linux/blk-integrity.h is present]) +]) +EXTRA_KCFLAGS="$tmp_flags" +]) # LIBCFS_LINUX_BLK_INTEGRITY_HEADER + +# # LIBCFS_PROG_LINUX # # LibCFS linux kernel checks @@ -1851,6 +1867,7 @@ LIBCFS_LINUX_STDARG_HEADER LIBCFS_HAVE_PANIC_NOTIFIER_HEADER # 5.15 LIBCFS_PARAM_SET_UINT_MINMAX +LIBCFS_LINUX_BLK_INTEGRITY_HEADER ]) # LIBCFS_PROG_LINUX # diff --git a/lustre/include/lustre_compat.h b/lustre/include/lustre_compat.h index 07aaabe..ec2f649 100644 --- a/lustre/include/lustre_compat.h +++ b/lustre/include/lustre_compat.h @@ -44,7 +44,6 @@ #include #include #include - #include #include @@ -406,85 +405,6 @@ static inline struct timespec current_time(struct inode *inode) #define smp_store_mb(var, value) set_mb(var, value) #endif -#if IS_ENABLED(CONFIG_BLK_DEV_INTEGRITY) -static inline unsigned short blk_integrity_interval(struct blk_integrity *bi) -{ -#ifdef HAVE_INTERVAL_EXP_BLK_INTEGRITY - return bi->interval_exp ? 1 << bi->interval_exp : 0; -#elif defined(HAVE_INTERVAL_BLK_INTEGRITY) - return bi->interval; -#else - return bi->sector_size; -#endif /* !HAVE_INTERVAL_EXP_BLK_INTEGRITY */ -} - -static inline const char *blk_integrity_name(struct blk_integrity *bi) -{ -#ifdef HAVE_INTERVAL_EXP_BLK_INTEGRITY - return bi->profile->name; -#else - return bi->name; -#endif -} - -static inline unsigned int bip_size(struct bio_integrity_payload *bip) -{ -#ifdef HAVE_BIP_ITER_BIO_INTEGRITY_PAYLOAD - return bip->bip_iter.bi_size; -#else - return bip->bip_size; -#endif -} -#else /* !CONFIG_BLK_DEV_INTEGRITY */ -static inline unsigned short blk_integrity_interval(struct blk_integrity *bi) -{ - return 0; -} -static inline const char *blk_integrity_name(struct blk_integrity *bi) -{ - /* gcc8 dislikes when strcmp() is called against NULL */ - return ""; -} -#endif /* !CONFIG_BLK_DEV_INTEGRITY */ - -#ifndef INTEGRITY_FLAG_READ -#define INTEGRITY_FLAG_READ BLK_INTEGRITY_VERIFY -#endif - -#ifndef INTEGRITY_FLAG_WRITE -#define INTEGRITY_FLAG_WRITE BLK_INTEGRITY_GENERATE -#endif - -static inline bool bdev_integrity_enabled(struct block_device *bdev, int rw) -{ -#if IS_ENABLED(CONFIG_BLK_DEV_INTEGRITY) - struct blk_integrity *bi = bdev_get_integrity(bdev); - - if (bi == NULL) - return false; - -#ifdef HAVE_INTERVAL_EXP_BLK_INTEGRITY - if (rw == 0 && bi->profile->verify_fn != NULL && - (bi->flags & INTEGRITY_FLAG_READ)) - return true; - - if (rw == 1 && bi->profile->generate_fn != NULL && - (bi->flags & INTEGRITY_FLAG_WRITE)) - return true; -#else - if (rw == 0 && bi->verify_fn != NULL && - (bi->flags & INTEGRITY_FLAG_READ)) - return true; - - if (rw == 1 && bi->generate_fn != NULL && - (bi->flags & INTEGRITY_FLAG_WRITE)) - return true; -#endif /* !HAVE_INTERVAL_EXP_BLK_INTEGRITY */ -#endif /* !CONFIG_BLK_DEV_INTEGRITY */ - - return false; -} - #ifdef HAVE_PAGEVEC_INIT_ONE_PARAM #define ll_pagevec_init(pvec, n) pagevec_init(pvec) #else diff --git a/lustre/osd-ldiskfs/osd_internal.h b/lustre/osd-ldiskfs/osd_internal.h index 3131ee2..0455bbe 100644 --- a/lustre/osd-ldiskfs/osd_internal.h +++ b/lustre/osd-ldiskfs/osd_internal.h @@ -67,6 +67,12 @@ #include "osd_scrub.h" #include "osd_quota_fmt.h" +#if IS_ENABLED(CONFIG_BLK_DEV_INTEGRITY) + #ifdef HAVE_LINUX_BLK_INTEGRITY_HEADER + #include + #endif +#endif + struct inode; extern struct kmem_cache *dynlock_cachep; @@ -1640,4 +1646,83 @@ static inline bool bio_integrity_prep_fn(struct bio *bio, #define unlock_dquot_transfer(inode) do {} while (0) #endif +#if IS_ENABLED(CONFIG_BLK_DEV_INTEGRITY) +static inline unsigned short blk_integrity_interval(struct blk_integrity *bi) +{ +#ifdef HAVE_INTERVAL_EXP_BLK_INTEGRITY + return bi->interval_exp ? 1 << bi->interval_exp : 0; +#elif defined(HAVE_INTERVAL_BLK_INTEGRITY) + return bi->interval; +#else + return bi->sector_size; +#endif /* !HAVE_INTERVAL_EXP_BLK_INTEGRITY */ +} + +static inline const char *blk_integrity_name(struct blk_integrity *bi) +{ +#ifdef HAVE_INTERVAL_EXP_BLK_INTEGRITY + return bi->profile->name; +#else + return bi->name; +#endif +} + +static inline unsigned int bip_size(struct bio_integrity_payload *bip) +{ +#ifdef HAVE_BIP_ITER_BIO_INTEGRITY_PAYLOAD + return bip->bip_iter.bi_size; +#else + return bip->bip_size; +#endif +} +#else /* !CONFIG_BLK_DEV_INTEGRITY */ +static inline unsigned short blk_integrity_interval(struct blk_integrity *bi) +{ + return 0; +} +static inline const char *blk_integrity_name(struct blk_integrity *bi) +{ + /* gcc8 dislikes when strcmp() is called against NULL */ + return ""; +} +#endif /* !CONFIG_BLK_DEV_INTEGRITY */ + +#ifndef INTEGRITY_FLAG_READ +#define INTEGRITY_FLAG_READ BLK_INTEGRITY_VERIFY +#endif + +#ifndef INTEGRITY_FLAG_WRITE +#define INTEGRITY_FLAG_WRITE BLK_INTEGRITY_GENERATE +#endif + +static inline bool bdev_integrity_enabled(struct block_device *bdev, int rw) +{ +#if IS_ENABLED(CONFIG_BLK_DEV_INTEGRITY) + struct blk_integrity *bi = bdev_get_integrity(bdev); + + if (bi == NULL) + return false; + +#ifdef HAVE_INTERVAL_EXP_BLK_INTEGRITY + if (rw == 0 && bi->profile->verify_fn != NULL && + (bi->flags & INTEGRITY_FLAG_READ)) + return true; + + if (rw == 1 && bi->profile->generate_fn != NULL && + (bi->flags & INTEGRITY_FLAG_WRITE)) + return true; +#else + if (rw == 0 && bi->verify_fn != NULL && + (bi->flags & INTEGRITY_FLAG_READ)) + return true; + + if (rw == 1 && bi->generate_fn != NULL && + (bi->flags & INTEGRITY_FLAG_WRITE)) + return true; +#endif /* !HAVE_INTERVAL_EXP_BLK_INTEGRITY */ +#endif /* !CONFIG_BLK_DEV_INTEGRITY */ + + return false; +} + #endif /* _OSD_INTERNAL_H */ -- 1.8.3.1