Whamcloud - gitweb
LU-15563 build: Include the new linux/blk-integrity.h 66/47166/3
authorShaun Tancheff <shaun.tancheff@hpe.com>
Fri, 27 May 2022 15:25:05 +0000 (22:25 +0700)
committerOleg Drokin <green@whamcloud.com>
Sat, 11 Jun 2022 06:00:21 +0000 (06:00 +0000)
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
lustre/include/lustre_compat.h
lustre/osd-ldiskfs/osd_internal.h

index e1bc40d..86107f1 100644 (file)
@@ -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 <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_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
 
 #
index 6338b52..aef5943 100644 (file)
@@ -43,7 +43,6 @@
 #include <linux/blkdev.h>
 #include <linux/slab.h>
 #include <linux/security.h>
-
 #include <libcfs/linux/linux-fs.h>
 #include <obd_support.h>
 
@@ -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
index 4ca7656..67a5b2b 100644 (file)
 #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;
 
@@ -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 */