File 0061-LU-15563-build-Include-the-new-linux-blk-integrity.h.patch of Package lustre_2_12
From afe944a12091081b3bfeaa2365fb03ef272ba9ba Mon Sep 17 00:00:00 2001
From: Shaun Tancheff <shaun.tancheff@hpe.com>
Date: Fri, 27 May 2022 22:25:05 +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 <linux/blkdev.h>
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 <shaun.tancheff@hpe.com>
Change-Id: Idcbef9b43b7d2a740291e3783f81c23454209a25
Reviewed-on: https://review.whamcloud.com/47166
Tested-by: jenkins <devops@whamcloud.com>
Tested-by: Maloo <maloo@whamcloud.com>
Reviewed-by: Alexey Lyashkov <alexey.lyashkov@hpe.com>
Reviewed-by: Jian Yu <yujian@whamcloud.com>
Reviewed-by: Oleg Drokin <green@whamcloud.com>
---
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(-)
--- a/libcfs/autoconf/lustre-libcfs.m4
+++ b/libcfs/autoconf/lustre-libcfs.m4
@@ -1533,6 +1533,7 @@ LIBCFS_HAVE_PANIC_NOTIFIER_HEADER
LIBCFS_PARAM_SET_UINT_MINMAX
# 5.17
LIBCFS_PDE_DATA_EXISTS
+LIBCFS_LINUX_BLK_INTEGRITY_HEADER
]) # LIBCFS_PROG_LINUX
#
@@ -1632,6 +1633,22 @@ pde_data, [
]) # LIBCFS_PDE_DATA_EXISTS
#
+# LIBCFS_LINUX_BLK_INTEGRITY_HEADER
+#
+# Kernel 5.15-rc6 commit fe45e630a1035aea94c29016f2598bbde149bbe3
+# block: move integrity handling out of <linux/blkdev.h>
+#
+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_CONFIG_FILES
#
# files that should be generated with AC_OUTPUT
--- a/lustre/include/lustre_compat.h
+++ b/lustre/include/lustre_compat.h
@@ -44,7 +44,6 @@
#include <linux/workqueue.h>
#include <linux/blkdev.h>
#include <linux/slab.h>
-
#include <libcfs/linux/linux-fs.h>
#include <lustre_patchless_compat.h>
#include <obd_support.h>
@@ -703,85 +702,6 @@ static inline struct timespec current_ti
#define READ_ONCE ACCESS_ONCE
#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
--- 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 <linux/blk-integrity.h>
+ #endif
+#endif
+
struct inode;
extern struct kmem_cache *dynlock_cachep;
@@ -1455,4 +1461,83 @@ int osd_get_integrity_profile(struct osd
integrity_vrfy_fn **verify_fn);
#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 */