From: Shaun Tancheff Date: Fri, 27 May 2022 15:25:05 +0000 (+0700) Subject: LU-15563 build: Include the new linux/blk-integrity.h X-Git-Tag: 2.15.51~130 X-Git-Url: https://git.whamcloud.com/?a=commitdiff_plain;h=afe944a12091081b3bfeaa2365fb03ef272ba9ba;p=fs%2Flustre-release.git 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 HPE-bug-id: LUS-10921 Signed-off-by: Shaun Tancheff Change-Id: Idcbef9b43b7d2a740291e3783f81c23454209a25 Reviewed-on: https://review.whamcloud.com/47166 Tested-by: jenkins Tested-by: Maloo Reviewed-by: Alexey Lyashkov Reviewed-by: Jian Yu Reviewed-by: Oleg Drokin --- diff --git a/libcfs/autoconf/lustre-libcfs.m4 b/libcfs/autoconf/lustre-libcfs.m4 index e1bc40d..86107f1 100644 --- a/libcfs/autoconf/lustre-libcfs.m4 +++ b/libcfs/autoconf/lustre-libcfs.m4 @@ -1866,6 +1866,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 @@ -2005,6 +2021,7 @@ LIBCFS_HAVE_CIPHER_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 6338b52..aef5943 100644 --- a/lustre/include/lustre_compat.h +++ b/lustre/include/lustre_compat.h @@ -43,7 +43,6 @@ #include #include #include - #include #include @@ -405,85 +404,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 4ca7656..67a5b2b 100644 --- a/lustre/osd-ldiskfs/osd_internal.h +++ b/lustre/osd-ldiskfs/osd_internal.h @@ -66,6 +66,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; @@ -1656,4 +1662,83 @@ static inline int 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 */