81) LDISKFS_SERIES="4.18-rhel8.1.series" ;;
80) LDISKFS_SERIES="4.18-rhel8.series" ;;
79) LDISKFS_SERIES="3.10-rhel7.9.series" ;;
- 78) LDISKFS_SERIES="3.10-rhel7.8.series" ;;
- 77) LDISKFS_SERIES="3.10-rhel7.7.series" ;;
- 76) LDISKFS_SERIES="3.10-rhel7.6.series" ;;
esac
], [test x$SUSE_KERNEL = xyes], [
AS_VERSION_COMPARE([$LINUXRELEASE],[5.3.18],[
]) # LDISKFS_LINUX_SERIES
#
-# LB_EXT_FREE_BLOCKS_WITH_BUFFER_HEAD
-#
-# 2.6.32-rc7 ext4_free_blocks requires struct buffer_head
-# Note that RHEL6 is pre 2.6.32-rc7 so this check is still needed.
-#
-AC_DEFUN([LB_SRC_EXT_FREE_BLOCKS_WITH_BUFFER_HEAD], [
- LB2_LINUX_TEST_SRC([ext4_free_blocks_with_buffer_head], [
- #include <linux/fs.h>
- #include "$EXT4_SRC_DIR/ext4.h"
- ],[
- ext4_free_blocks(NULL, NULL, NULL, 0, 0, 0);
- ],[],[],[ext4_free_blocks])
-])
-AC_DEFUN([LB_EXT_FREE_BLOCKS_WITH_BUFFER_HEAD], [
- LB2_MSG_LINUX_TEST_RESULT([if 'ext4_free_blocks' needs 'struct buffer_head'],
- [ext4_free_blocks_with_buffer_head], [
- AC_DEFINE(HAVE_EXT_FREE_BLOCK_WITH_BUFFER_HEAD, 1,
- [ext4_free_blocks do not require struct buffer_head])
- ])
-]) # LB_EXT_FREE_BLOCKS_WITH_BUFFER_HEAD
-
-#
# LB_EXT4_BREAD_4ARGS
#
# 3.18 ext4_bread has 4 arguments
AS_IF([test x$enable_ldiskfs != xno],[
AC_DEFUN([LB_EXT4_SRC_DIR_SRC],[
- LB_SRC_EXT_FREE_BLOCKS_WITH_BUFFER_HEAD
LB_SRC_EXT4_BREAD_4ARGS
LB_SRC_EXT4_HAVE_INFO_DQUOT
LB_SRC_EXT4_HAVE_I_CRYPT_INFO
LB2_SRC_CHECK_CONFIG_IM([FS_ENCRYPTION])
])
AC_DEFUN([LB_EXT4_SRC_DIR_RESULTS], [
- LB_EXT_FREE_BLOCKS_WITH_BUFFER_HEAD
LB_EXT4_BREAD_4ARGS
LB_EXT4_HAVE_INFO_DQUOT
LB_EXT4_HAVE_I_CRYPT_INFO
+++ /dev/null
-Index: linux-3.10.0-495.el7.x86_64/block/blk-settings.c
-===================================================================
---- linux-3.10.0-495.el7.x86_64.orig/block/blk-settings.c
-+++ linux-3.10.0-495.el7.x86_64/block/blk-settings.c
-@@ -19,6 +19,12 @@ EXPORT_SYMBOL(blk_max_low_pfn);
-
- unsigned long blk_max_pfn;
-
-+int default_max_sectors = BLK_DEF_MAX_SECTORS;
-+module_param(default_max_sectors, int, 0);
-+
-+int default_max_segments = BLK_MAX_SEGMENTS;
-+module_param(default_max_segments, int, 0);
-+
- /**
- * blk_queue_prep_rq - set a prepare_request function for queue
- * @q: queue
-@@ -108,7 +114,7 @@ EXPORT_SYMBOL_GPL(blk_queue_lld_busy);
- */
- void blk_set_default_limits(struct queue_limits *lim)
- {
-- lim->max_segments = BLK_MAX_SEGMENTS;
-+ lim->max_segments = default_max_segments;
- lim->max_integrity_segments = 0;
- lim->seg_boundary_mask = BLK_SEG_BOUNDARY_MASK;
- if (lim->limits_aux)
-@@ -268,7 +274,7 @@ void blk_limits_max_hw_sectors(struct qu
-
- limits->max_hw_sectors = max_hw_sectors;
- max_sectors = min_not_zero(max_hw_sectors, limits->max_dev_sectors);
-- max_sectors = min_t(unsigned int, max_sectors, BLK_DEF_MAX_SECTORS);
-+ max_sectors = min_t(unsigned int, max_sectors, default_max_sectors);
- limits->max_sectors = max_sectors;
- }
- EXPORT_SYMBOL(blk_limits_max_hw_sectors);
-Index: linux-3.10.0-495.el7.x86_64/drivers/message/fusion/Kconfig
-===================================================================
---- linux-3.10.0-495.el7.x86_64.orig/drivers/message/fusion/Kconfig
-+++ linux-3.10.0-495.el7.x86_64/drivers/message/fusion/Kconfig
-@@ -61,9 +61,9 @@ config FUSION_SAS
- LSISAS1078
-
- config FUSION_MAX_SGE
-- int "Maximum number of scatter gather entries (16 - 128)"
-- default "128"
-- range 16 128
-+ int "Maximum number of scatter gather entries (16 - 256)"
-+ default "256"
-+ range 16 256
- help
- This option allows you to specify the maximum number of scatter-
- gather entries per I/O. The driver default is 128, which matches
-Index: linux-3.10.0-495.el7.x86_64/drivers/message/fusion/mptbase.h
-===================================================================
---- linux-3.10.0-495.el7.x86_64.orig/drivers/message/fusion/mptbase.h
-+++ linux-3.10.0-495.el7.x86_64/drivers/message/fusion/mptbase.h
-@@ -166,10 +166,10 @@
- * Set the MAX_SGE value based on user input.
- */
- #ifdef CONFIG_FUSION_MAX_SGE
--#if CONFIG_FUSION_MAX_SGE < 16
-+#if CONFIG_FUSION_MAX_SGE < 16
- #define MPT_SCSI_SG_DEPTH 16
--#elif CONFIG_FUSION_MAX_SGE > 128
--#define MPT_SCSI_SG_DEPTH 128
-+#elif CONFIG_FUSION_MAX_SGE > 256
-+#define MPT_SCSI_SG_DEPTH 256
- #else
- #define MPT_SCSI_SG_DEPTH CONFIG_FUSION_MAX_SGE
- #endif
+++ /dev/null
-It looks like what's happening is when dm_dispatch_clone_request
-dispatches the "clone" I/O request to the underlying (real) device
-from the multipath device, the scsi driver can (often under load)
-return BLK_MQ_RQ_QUEUE_DEV_BUSY. dm_dispatch_clone_request doesn't
-have that as an exception the way it does BLK_MQ_RQ_QUEUE_BUSY and
-so it calls dm_complete_request which propagates
-the BLK_MQ_RQ_QUEUE_DEV_BUSY error code up the stack resulting
-in multipath_end_io calling fail_path and failing the path because
-there is an error value set.
-
-diff --git a/drivers/md/dm-rq.c b/drivers/md/dm-rq.c
-index 02da1e65..e4f58472 100644
---- a/drivers/md/dm-rq.c
-+++ b/drivers/md/dm-rq.c
-@@ -477,7 +477,8 @@ static int dm_dispatch_clone_request(struct request *clone, struct request *rq)
-
- clone->start_time = jiffies;
- r = blk_insert_cloned_request(clone->q, clone);
-- if (r != BLK_MQ_RQ_QUEUE_OK && r != BLK_MQ_RQ_QUEUE_BUSY)
-+ if (r != BLK_MQ_RQ_QUEUE_OK && r != BLK_MQ_RQ_QUEUE_BUSY &&
-+ r != BLK_MQ_RQ_QUEUE_DEV_BUSY)
- /* must complete clone in terms of original request */
- dm_complete_request(rq, r);
- return r;
-@@ -661,7 +662,7 @@ check_again:
- trace_block_rq_remap(clone->q, clone, disk_devt(dm_disk(md)),
- blk_rq_pos(rq));
- ret = dm_dispatch_clone_request(clone, rq);
-- if (ret == BLK_MQ_RQ_QUEUE_BUSY) {
-+ if (ret == BLK_MQ_RQ_QUEUE_BUSY || ret == BLK_MQ_RQ_QUEUE_DEV_BUSY) {
- blk_rq_unprep_clone(clone);
- tio->ti->type->release_clone_rq(clone);
- tio->clone = NULL;
+++ /dev/null
-When sector offset is larger then 2^32, the mapping from physical
-reference tag to the virtual values expected by block layer will be
-wrong.
-Linux-commit: c611529e7cd3465ec0eada0f44200e8420c38908
-
-Index: linux-3.10.0-693.21.1.el7.x86_64/drivers/scsi/sd_dif.c
-===================================================================
---- linux-3.10.0-693.21.1.el7.x86_64.orig/drivers/scsi/sd_dif.c
-+++ linux-3.10.0-693.21.1.el7.x86_64/drivers/scsi/sd_dif.c
-@@ -416,6 +416,7 @@ void sd_dif_complete(struct scsi_cmnd *s
- struct sd_dif_tuple *sdt;
- unsigned int i, j, sectors, sector_sz;
- u32 phys, virt;
-+ sector_t sector;
-
- sdkp = scsi_disk(scmd->request->rq_disk);
-
-@@ -425,9 +426,10 @@ void sd_dif_complete(struct scsi_cmnd *s
- sector_sz = scmd->device->sector_size;
- sectors = good_bytes / sector_sz;
-
-- phys = blk_rq_pos(scmd->request) & 0xffffffff;
-+ sector = blk_rq_pos(scmd->request);
- if (sector_sz == 4096)
-- phys >>= 3;
-+ sector >>= 3;
-+ phys = sector & 0xffffffff;
-
- __rq_for_each_bio(bio, scmd->request) {
- struct bio_vec *iv;
+++ /dev/null
-Index: linux-3.10.0-957.el7.x86_64/drivers/md/raid5.c
-===================================================================
---- linux-3.10.0-957.el7.x86_64.orig/drivers/md/raid5.c
-+++ linux-3.10.0-957.el7.x86_64/drivers/md/raid5.c
-@@ -3266,6 +3266,8 @@ static int add_stripe_bio(struct stripe_
- *bip = bi;
- bio_inc_remaining(bi);
- md_write_inc(conf->mddev, bi);
-+ if ((bi->bi_rw & REQ_SYNC) && !forwrite)
-+ clear_bit(R5_UPTODATE, &sh->dev[dd_idx].flags); /* force to read from disk. */
-
- if (forwrite) {
- /* check if page is covered */
-@@ -5753,6 +5755,10 @@ static bool raid5_make_request(struct md
- if (rw == WRITE)
- md_write_end(mddev);
- bio_endio(bi, 0);
-+
-+ if (bi->bi_rw & REQ_SYNC)
-+ md_wakeup_thread(mddev->thread);
-+
- return true;
- }
-
+++ /dev/null
-raid5-mmp-unplug-dev-rhel7.6.patch
-blkdev_tunables-3.9.patch
-vfs-project-quotas-rhel7.patch
-fix-integrity-verify-rhel7.patch
-fix-sd-dif-complete-rhel7.patch
-jbd2-revoke-rhashtable-rhel7.patch
-block-integrity-allow-optional-integrity-functions-rhel7.patch
-block-pass-bio-into-integrity_processing_fn-rhel7.patch
-dm-fix-handle-BLK_MQ_RQ_QUEUE_DEV_BUSY-rhel7.6.patch
-block-Ensure-we-only-enable-integrity-metadata-for-reads-and-writes-rhel7.patch
-rwsem-remove-wakeup-optimization.patch
+++ /dev/null
-raid5-mmp-unplug-dev-rhel7.6.patch
-blkdev_tunables-3.9.patch
-vfs-project-quotas-rhel7.patch
-fix-integrity-verify-rhel7.patch
-fix-sd-dif-complete-rhel7.patch
-jbd2-revoke-rhashtable-rhel7.patch
-block-integrity-allow-optional-integrity-functions-rhel7.patch
-block-pass-bio-into-integrity_processing_fn-rhel7.patch
-block-Ensure-we-only-enable-integrity-metadata-for-reads-and-writes-rhel7.patch
-rwsem-remove-wakeup-optimization.patch
+++ /dev/null
-vfs-project-quotas-rhel7.patch
-fix-integrity-verify-rhel7.patch
-fix-sd-dif-complete-rhel7.patch
-jbd2-revoke-rhashtable-rhel7.patch
-block-integrity-allow-optional-integrity-functions-rhel7.patch
-block-pass-bio-into-integrity_processing_fn-rhel7.patch
-block-Ensure-we-only-enable-integrity-metadata-for-reads-and-writes-rhel7.patch
-rwsem-remove-wakeup-optimization.patch
+++ /dev/null
-jbd2-revoke-rhashtable-rhel7.patch
+++ /dev/null
-jbd2-revoke-rhashtable-rhel7.patch
Clients since 2.6.18 DO NOT need any patches.
PATCH SERIES FOR SERVER KERNELS:
-3.10-rhel7.6.series 3.10.0-957.27.2.el7 (RHEL 7.6)
-3.10-rhel7.7.series 3.10.0-1062.18.1.el7 (RHEL 7.7)
-3.10-rhel7.8.series 3.10.0-1127.19.1.el7 (RHEL 7.8)
3.10-rhel7.9.series 3.10.0-1160.88.1.el7 (RHEL 7.9)
4.18-rhel8.series 4.18.0-80.11.2.el8 (RHEL 8.0)
4.18-rhel8.1.series 4.18.0-147.8.1.el8 (RHEL 8.1)