[packages/lin_tape] - up to 3.0.52

baggins baggins at pld-linux.org
Sat Apr 4 22:32:48 CEST 2020


commit dc1a7dc8be58e0c1f9e3e6eca5dce1e7dbab1668
Author: Jan Rękorajski <baggins at pld-linux.org>
Date:   Sat Apr 4 22:30:24 2020 +0200

    - up to 3.0.52

 clean-ifdefs.patch  | 124 +++++++++-
 kernel-4.14.patch   | 271 ---------------------
 kernel-4.15.patch   |  34 ---
 kernel-4.17.patch   |  14 --
 kernel-4.19.patch   |  29 ---
 kernel-5.0.patch    |  13 +-
 kernel-5.6.patch    | 150 ++++++++++++
 lin_tape.fixlist    | 682 ++++++++++++++++++++++++++++------------------------
 lin_tape.spec       |  28 +--
 linux-4.11.patch    | 180 --------------
 linux-4.12.patch    |  52 ----
 linux-4.13.patch    |  28 ---
 linux-4.4.169.patch |  12 -
 linux-4.9.patch     |  37 ---
 14 files changed, 646 insertions(+), 1008 deletions(-)
---
diff --git a/lin_tape.spec b/lin_tape.spec
index 73688a3..cb8a5b8 100644
--- a/lin_tape.spec
+++ b/lin_tape.spec
@@ -5,29 +5,21 @@
 # nothing to be placed to debuginfo package
 %define		_enable_debug_packages	0
 
-%define		rel	3
+%define		rel	1
 %define		pname	lin_tape
 Summary:	IBM Tape SCSI Device Driver for Linux
 Name:		%{pname}%{_alt_kernel}
-Version:	3.0.33
+Version:	3.0.52
 Release:	%{rel}%{?_pld_builder:@%{_kernel_ver_str}}
 License:	GPL v2/LGPL
 Group:		Base/Kernel
 Source0:	%{pname}-%{version}.tgz
-# Source0-md5:	c22358f485f12baa7254aa25abe20a43
+# Source0-md5:	75cba1cbb76359085dedb5366afa7683
 Source1:	%{pname}.fixlist
 Patch0:		use-module-dir.patch
 Patch1:		clean-ifdefs.patch
-Patch2:		linux-4.9.patch
-Patch4:		linux-4.11.patch
-Patch5:		linux-4.12.patch
-Patch6:		linux-4.13.patch
-Patch7:		kernel-4.14.patch
-Patch8:		kernel-4.15.patch
-Patch9:		kernel-4.17.patch
-Patch10:	kernel-4.19.patch
-Patch11:	linux-4.4.169.patch
-Patch12:	kernel-5.0.patch
+Patch2:		kernel-5.0.patch
+Patch3:		kernel-5.6.patch
 # System Storage, Tape systems, Tape drivers and software, Tape device drivers (Linux)
 URL:		http://www.ibm.com/support/fixcentral/
 BuildRequires:	rpmbuild(macros) >= 1.701
@@ -78,15 +70,7 @@ compatible platforms.\
 %patch0 -p1
 %patch1 -p1
 %patch2 -p1
-%patch4 -p1
-%patch5 -p1
-%patch6 -p1
-%patch7 -p1
-%patch8 -p1
-%patch9 -p1
-%patch10 -p1
-%patch11 -p1
-%patch12 -p1
+%patch3 -p1
 
 install -p %{SOURCE1} .
 
diff --git a/clean-ifdefs.patch b/clean-ifdefs.patch
index 26763df..7f6cb58 100644
--- a/clean-ifdefs.patch
+++ b/clean-ifdefs.patch
@@ -1,7 +1,7 @@
 diff -ur lin_tape-3.0.18/Makefile lin_tape-3.0.18-ifdefs/Makefile
 --- lin_tape-3.0.18/Makefile	2017-05-09 21:11:32.977092391 +0200
 +++ lin_tape-3.0.18-ifdefs/Makefile	2017-05-09 21:05:59.610307494 +0200
-@@ -20,27 +20,6 @@
+@@ -20,26 +20,6 @@
  lin_tape-objs := join.o lin_tape_scsi_config.o lin_tape_scsi_tape.o lin_tape_scsi_trace.o \
               lin_tape_ioctl_tape.o lin_tape_ioctl_changer.o lin_tape_extra_ioctl.o
  
@@ -20,15 +20,14 @@ diff -ur lin_tape-3.0.18/Makefile lin_tape-3.0.18-ifdefs/Makefile
 -KERNELVER = $(shell uname -r 2>/dev/null|sed "s/[\.-]/_/g"|sed "s/\([0-9]*_[0-9]*_[0-9]*_[0-9]*\).*/\1/")
 -EXTRA_CFLAGS += -DSLESKERNEL_${KERNELVER}
 -SLESSP2 := $(shell grep -qi SP2 /etc/*release && echo 1 || echo 0)
--ifeq ($(SLESSP2), 1) 
+-ifeq ($(SLESSP2), 1)
 -EXTRA_CFLAGS += -DSLESSP2
 -endif
 -endif
 -endif
--
+ 
  ifeq ($(SFMP), 1)
  EXTRA_CFLAGS += -DSFMPENABLED
- endif
 diff -ur lin_tape-3.0.18/pfo.h lin_tape-3.0.18-ifdefs/pfo.h
 --- lin_tape-3.0.18/pfo.h	2017-02-23 19:14:41.000000000 +0100
 +++ lin_tape-3.0.18-ifdefs/pfo.h	2017-05-09 21:06:34.117699008 +0200
@@ -174,3 +173,120 @@ diff -ur lin_tape-3.0.18/pfo.h lin_tape-3.0.18-ifdefs/pfo.h
  
  /* Misc defines needed so source is same for all versions of Linux */
  #ifndef SDEV_TRANSPORT_OFFLINE
+--- lin_tape-3.0.52/lin_tape_scsi_config.h~	2020-04-04 21:53:09.000000000 +0200
++++ lin_tape-3.0.52/lin_tape_scsi_config.h	2020-04-04 21:56:46.600032193 +0200
+@@ -64,9 +64,6 @@
+     ("IBM Tape Drives and Libraries");
+ MODULE_LICENSE("GPL");
+ MODULE_VERSION("3.0.52");
+-#if defined(SLESVERSION)
+-MODULE_INFO(supported, "external");
+-#endif // defined
+ /* driver parameters */
+ int support_dio = 1;
+ module_param(support_dio, int, 0);
+--- lin_tape-3.0.52/sgmp.c~	2020-03-05 19:43:09.000000000 +0100
++++ lin_tape-3.0.52/sgmp.c	2020-04-04 21:57:56.793366544 +0200
+@@ -34,7 +34,7 @@
+  */
+ 
+ #include <linux/version.h>
+-#if !defined(SLESVERSION) && LINUX_VERSION_CODE >= KERNEL_VERSION(4,14,0)
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(4,14,0)
+ /*
+  *  History:
+  *  Started: Aug 9 by Lawrence Foard (entropy at world.std.com),
+@@ -3012,7 +3012,7 @@
+ 	return 0;
+ }
+ #endif				/* CONFIG_SCSI_PROC_FS */
+-#elif !defined(SLESVERSION) && LINUX_VERSION_CODE >= KERNEL_VERSION(3,10,0)
++#elif LINUX_VERSION_CODE >= KERNEL_VERSION(3,10,0)
+ static int sg_version_num = 30536;	/* 2 digits for each component */
+ #define SG_VERSION_STR "3.5.36"
+ 
+@@ -6026,7 +6026,7 @@
+ }
+ 
+ #endif				/* CONFIG_SCSI_PROC_FS */
+-#elif !defined(SLESVERSION) && LINUX_VERSION_CODE == KERNEL_VERSION(2,6,32)
++#elif LINUX_VERSION_CODE == KERNEL_VERSION(2,6,32)
+ static int sg_version_num = 30534;	/* 2 digits for each component */
+ #define SG_VERSION_STR "3.5.34"
+ 
+--- lin_tape-3.0.52/stmp.c~	2020-03-05 19:43:09.000000000 +0100
++++ lin_tape-3.0.52/stmp.c	2020-04-04 21:58:35.473367112 +0200
+@@ -42,7 +42,7 @@
+ 
+  */
+ #include <linux/version.h>
+-#if !defined(SLESVERSION) && LINUX_VERSION_CODE >= KERNEL_VERSION(4,14,0)
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(4,14,0)
+ /*
+    SCSI Tape Driver for Linux version 1.1 and newer. See the accompanying
+    file Documentation/scsi/st.txt for more information.
+@@ -5108,7 +5108,7 @@
+ 
+ 	return 0;
+ }
+-#elif !defined(SLESVERSION) && LINUX_VERSION_CODE >= KERNEL_VERSION(3,10,0)
++#elif LINUX_VERSION_CODE >= KERNEL_VERSION(3,10,0)
+ #include <linux/module.h>
+ #include <linux/fs.h>
+ #include <linux/kernel.h>
+@@ -10137,7 +10137,7 @@
+ 
+ 	return 0;
+ }
+-#elif !defined(SLESVERSION) && LINUX_VERSION_CODE == KERNEL_VERSION(2,6,32)
++#elif LINUX_VERSION_CODE == KERNEL_VERSION(2,6,32)
+ #include <linux/module.h>
+ #include <linux/fs.h>
+ #include <linux/kernel.h>
+--- lin_tape-3.0.52/upper.c~	2020-04-04 21:55:46.000000000 +0200
++++ lin_tape-3.0.52/upper.c	2020-04-04 21:59:12.536700966 +0200
+@@ -273,7 +273,7 @@
+ 	if (copy_from_user(pfo_cmd->scsi_cmd, hdr->cmdp, hdr->cmd_len))
+ 		return -EFAULT;
+ 
+-#if LINUX_VERSION_CODE > KERNEL_VERSION(3,12,0) && (defined(SLESVERSION) || defined(UBUNTUVERSION))
++#if LINUX_VERSION_CODE > KERNEL_VERSION(3,12,0)
+ 	if (blk_verify_command(pfo_cmd->scsi_cmd, mode & FMODE_WRITE))
+ #else
+ 	/* RHEL 6.4 and beyond */
+@@ -525,14 +525,12 @@
+ 		/* SG_IO howto says that the shorter of the two wins */
+ 		iov_data_len = iov_length((struct iovec *)iov,
+ 					hdr->iovec_count);
+-#if !defined (UBUNTUVERSION)
+ 		if (hdr->dxfer_len < iov_data_len) {
+ 			hdr->iovec_count = iov_shorten((struct iovec *)iov,
+ 							hdr->iovec_count,
+ 							hdr->dxfer_len);
+ 			iov_data_len = hdr->dxfer_len;
+ 		}
+-#endif
+ 		pfo_cmd.buffer = iov;
+ 		pfo_cmd.bufflen = iov_data_len;
+ 		pfo_cmd.iov_count = hdr->iovec_count;
+@@ -622,7 +620,7 @@
+ 	if (in_len && copy_from_user(buffer, sic->data + cmdlen, in_len))
+ 		goto error;
+ 
+-#if LINUX_VERSION_CODE > KERNEL_VERSION(3,12,0) && (defined(SLESVERSION) || defined(UBUNTUVERSION))
++#if LINUX_VERSION_CODE > KERNEL_VERSION(3,12,0)
+ 	err = blk_verify_command(scsi_cmd, mode & FMODE_WRITE);
+ #else
+ 	/* RHEL 6.4 and beyond */
+--- lin_tape-3.0.52/intercept.c~	2020-03-05 19:43:09.000000000 +0100
++++ lin_tape-3.0.52/intercept.c	2020-04-04 21:59:43.190034776 +0200
+@@ -2492,9 +2492,6 @@
+ MODULE_LICENSE("GPL");
+ MODULE_VERSION(PFO_VERSION_STR);
+ MODULE_INFO(date, PFO_DATE_STR);
+-#if defined(SLESVERSION)
+-MODULE_INFO(supported, "external");
+-#endif
+ #if LINUX_VERSION_CODE <= KERNEL_VERSION(2,6,32)
+ module_param(netbackup, int, 0444);
+ MODULE_PARM_DESC(netbackup, "!=0 to use with NetBackup application");
diff --git a/kernel-4.14.patch b/kernel-4.14.patch
deleted file mode 100644
index 00ee885..0000000
--- a/kernel-4.14.patch
+++ /dev/null
@@ -1,271 +0,0 @@
---- lin_tape-3.0.20/fo_util.c~	2017-05-27 21:22:52.000000000 +0200
-+++ lin_tape-3.0.20/fo_util.c	2017-11-17 09:04:43.375810976 +0100
-@@ -169,7 +169,7 @@
- 
- /** Enable the change of the debug control flag.
-  *  /sys/bus/scsi/drivers/pfo/debug_flag */
--static ssize_t pfoattr_debug_flag_set(struct device_driver *dev,
-+static ssize_t debug_flag_store(struct device_driver *dev,
- 					const char *buf, size_t count)
- {
- 	sscanf(buf, "0x%x", &pfo_debug_flag);
-@@ -179,19 +179,18 @@
- 
- /** Enable the cat of the debug control flag.
-  *  /sys/bus/scsi/drivers/pfo/debug_flag */
--static ssize_t pfoattr_debug_flag_get(struct device_driver *ddp, char *buf)
-+static ssize_t debug_flag_show(struct device_driver *ddp, char *buf)
- {
- 	DBG_DEBUG("");
- 	return scnprintf(buf, PAGE_SIZE,
- 		"debug flag=%04x\necho 0x<hexvalue> > debug_flag to change\n",
- 		pfo_debug_flag);
- }
--static DRIVER_ATTR(debug_flag, S_IRUGO|S_IWUSR|S_IWGRP,
--			pfoattr_debug_flag_get, pfoattr_debug_flag_set);
-+static DRIVER_ATTR_RW(debug_flag);
- 
- /** Enable the cat of the debug buffer.
-  *  /sys/bus/scsi/drivers/pfo/debug_buffer */
--static ssize_t pfoattr_debug_buffer_get(struct device_driver *ddp, char *buf)
-+static ssize_t debug_buffer_show(struct device_driver *ddp, char *buf)
- {
- 	DBG_DEBUG("");
- 	if (debug_buffer[0] == '\001') {
-@@ -202,11 +201,11 @@
- 		return strlen(buf);
- 	}
- }
--static DRIVER_ATTR(debug_buffer, S_IRUGO, pfoattr_debug_buffer_get, NULL);
-+static DRIVER_ATTR_RO(debug_buffer);
- 
- /** Enable the cat of the trace buffer.
-  *  /sys/bus/scsi/drivers/pfo/trace */
--static ssize_t pfoattr_debug_trace_get(struct device_driver *ddp, char *buf)
-+static ssize_t trace_show(struct device_driver *ddp, char *buf)
- {
- 	char *the_buffer;
- 	int strlenbuf = 0;
-@@ -232,7 +231,7 @@
- 	}
- 	return strlenbuf;
- }
--static DRIVER_ATTR(trace, S_IRUGO, pfoattr_debug_trace_get, NULL);
-+static DRIVER_ATTR_RO(trace);
- 
- int init_debug(struct device_driver *pfo_gendrv)
- {
---- lin_tape-3.0.20/intercept.c~	2017-11-18 09:30:20.000000000 +0100
-+++ lin_tape-3.0.20/intercept.c	2017-11-18 09:32:26.165820320 +0100
-@@ -299,7 +299,7 @@
- /** Perform the operations the customer has requested when they wrote to
-  * /sys/bus/scsi/drivers/pfo/ctrl
-  */
--static ssize_t pfoattr_ctrl_set(struct device_driver *dev, const char *buf,
-+static ssize_t ctrl_store(struct device_driver *dev, const char *buf,
- 				size_t count)
- {
- 	intercept_ctrl(NULL, buf, count);
-@@ -310,23 +310,22 @@
-  * /sys/bus/scsi/drivers/pfo/ctrl
-  * @return string length
-  */
--static ssize_t pfoattr_ctrl_get(struct device_driver *ddp, char *buf)
-+static ssize_t ctrl_show(struct device_driver *ddp, char *buf)
- {
- 	return resolve_ctrl_get(buf, PAGE_SIZE);
- }
--static DRIVER_ATTR(ctrl, S_IRUGO|S_IWUSR|S_IWGRP, pfoattr_ctrl_get,
--				pfoattr_ctrl_set);
-+static DRIVER_ATTR_RW(ctrl);
- 
- 
- /** Create the text the customer will see when they read
-  * /sys/bus/scsi/drivers/pfo/version
-  * @return string length
-  */
--static ssize_t pfo_version_show(struct device_driver *ddd, char *buf)
-+static ssize_t version_show(struct device_driver *ddd, char *buf)
- {
- 	return snprintf(buf, PAGE_SIZE, "[%s]\n", PFO_DATE_STR);
- }
--static DRIVER_ATTR(version, S_IRUGO, pfo_version_show, NULL);
-+static DRIVER_ATTR_RO(version);
- 
- static ssize_t devattr_vendor(struct device *dev,
- 				struct device_attribute *attr, char *buf)
---- lin_tape-3.0.20/lin_tape_scsi_config.c~	2017-05-27 21:22:51.000000000 +0200
-+++ lin_tape-3.0.20/lin_tape_scsi_config.c	2017-11-18 09:36:47.106483198 +0100
-@@ -47,7 +47,7 @@
- *                                                                              *
- *******************************************************************************/
- 
--static ssize_t tape_version_show(struct device_driver* driver, char* buf)
-+static ssize_t version_show(struct device_driver* driver, char* buf)
- {
- 	int rc;
- 
-@@ -57,7 +57,7 @@
- 	return rc;
- } /* tape_version_show() */
- 
--DRIVER_ATTR(version, 0444, tape_version_show, NULL);
-+DRIVER_ATTR_RO(version);
- 
- /*******************************************************************************
- *                                                                              *
-@@ -112,7 +112,7 @@
- 
- } /* lin_tape_debug_store() */
- 
--DRIVER_ATTR(lin_tape_debug, 0660, lin_tape_debug_show, lin_tape_debug_store);
-+DRIVER_ATTR_RW(lin_tape_debug);
- 
- /*******************************************************************************
- *                                                                              *
-@@ -167,7 +167,7 @@
- 
- } /* auto_logging_store() */
- 
--DRIVER_ATTR(auto_logging, 0660, auto_logging_show, auto_logging_store);
-+DRIVER_ATTR_RW(auto_logging);
- 
- /*******************************************************************************
- *                                                                              *
-@@ -221,7 +221,7 @@
- 
- } /* petro_store() */
- 
--DRIVER_ATTR(petro, 0660, petro_show, petro_store);
-+DRIVER_ATTR_RW(petro);
- 
- /*******************************************************************************
- *                                                                              *
-@@ -276,7 +276,7 @@
- 
- } /* support_dio_store() */
- 
--DRIVER_ATTR(support_dio, 0660, support_dio_show, support_dio_store);
-+DRIVER_ATTR_RW(support_dio);
- 
- /*******************************************************************************
- *                                                                              *
-@@ -303,7 +303,7 @@
- 	return rc;
- } /* wait_on_config_show() */
- 
--DRIVER_ATTR(wait_on_config, 0444, wait_on_config_show, NULL);
-+DRIVER_ATTR_RO(wait_on_config);
- 
- /*******************************************************************************
- *                                                                              *
-@@ -357,8 +357,7 @@
- 	return count;
- } /* changer_open_reserve_show() */
- 
--DRIVER_ATTR(changer_open_reserve, 0660, changer_open_reserve_show,
--	changer_open_reserve_store);
-+DRIVER_ATTR_RW(changer_open_reserve);
- 
- /*******************************************************************************
- *                                                                              *
-@@ -412,9 +411,7 @@
- 	return count;
- } /* default_sys_encryption_proxy_store() */
- 
--DRIVER_ATTR(default_sys_encryption_proxy, 0644,
--		default_sys_encryption_proxy_show,
--		default_sys_encryption_proxy_store);
-+DRIVER_ATTR_RW(default_sys_encryption_proxy);
- 
- /*******************************************************************************
- *                                                                              *
-@@ -470,9 +467,7 @@
- 	return count;
- } /* default_sys_encryption_write_show() */
- 
--DRIVER_ATTR(default_sys_encryption_write, 0644,
--		default_sys_encryption_write_show,
--		default_sys_encryption_write_store);
-+DRIVER_ATTR_RW(default_sys_encryption_write);
- 
- /*******************************************************************************
- *                                                                              *
-@@ -528,8 +523,7 @@
- 
- } /* disable_density_on_open_store() */
- 
--DRIVER_ATTR(disable_density_on_open, 0660, disable_density_on_open_show,
--	disable_density_on_open_store);
-+DRIVER_ATTR_RW(disable_density_on_open);
- 
- /*******************************************************************************
- *                                                                              *
-@@ -584,8 +578,7 @@
- 
- } /* dynamic_attributes_store() */
- 
--DRIVER_ATTR(dynamic_attributes, 0660, dynamic_attributes_show,
--	dynamic_attributes_store);
-+DRIVER_ATTR_RW(dynamic_attributes);
- 
- /*******************************************************************************
- *                                                                              *
-@@ -640,7 +633,7 @@
- 
- } /* disable_auto_drive_dump_store() */
- 
--DRIVER_ATTR(disable_auto_drive_dump, 0660, disable_auto_drive_dump_show, disable_auto_drive_dump_store);
-+DRIVER_ATTR_RW(disable_auto_drive_dump);
- 
- /*******************************************************************************
- *                                                                              *
-@@ -695,7 +688,7 @@
- 
- } /* busy_retry_store() */
- 
--DRIVER_ATTR(busy_retry, 0660, busy_retry_show, busy_retry_store);
-+DRIVER_ATTR_RW(busy_retry);
- 
- /*******************************************************************************
- *                                                                              *
---- lin_tape-3.0.20/stmp.c~	2017-11-18 09:30:20.000000000 +0100
-+++ lin_tape-3.0.20/stmp.c	2017-11-18 09:39:11.483862824 +0100
-@@ -5473,29 +5473,29 @@
- #else // < 4.4.21
- 
- /* The sysfs driver interface. Read-only at the moment */
--static ssize_t st_try_direct_io_show(struct device_driver *ddp, char *buf)
-+static ssize_t try_direct_io_show(struct device_driver *ddp, char *buf)
- {
- 	return snprintf(buf, PAGE_SIZE, "%d\n", try_direct_io);
- }
--static DRIVER_ATTR(try_direct_io, S_IRUGO, st_try_direct_io_show, NULL);
-+static DRIVER_ATTRRO(try_direct_io);
- 
--static ssize_t st_fixed_buffer_size_show(struct device_driver *ddp, char *buf)
-+static ssize_t fixed_buffer_size_show(struct device_driver *ddp, char *buf)
- {
- 	return snprintf(buf, PAGE_SIZE, "%d\n", st_fixed_buffer_size);
- }
--static DRIVER_ATTR(fixed_buffer_size, S_IRUGO, st_fixed_buffer_size_show, NULL);
-+static DRIVER_ATTR_RW(fixed_buffer_size);
- 
--static ssize_t st_max_sg_segs_show(struct device_driver *ddp, char *buf)
-+static ssize_t max_sg_segs_show(struct device_driver *ddp, char *buf)
- {
- 	return snprintf(buf, PAGE_SIZE, "%d\n", st_max_sg_segs);
- }
--static DRIVER_ATTR(max_sg_segs, S_IRUGO, st_max_sg_segs_show, NULL);
-+static DRIVER_ATTR_RO(max_sg_segs);
- 
--static ssize_t st_version_show(struct device_driver *ddd, char *buf)
-+static ssize_t version_show(struct device_driver *ddd, char *buf)
- {
- 	return snprintf(buf, PAGE_SIZE, "[%s]\n", verstr);
- }
--static DRIVER_ATTR(version, S_IRUGO, st_version_show, NULL);
-+static DRIVER_ATTR_RO(version);
- 
- static int do_create_sysfs_files(void)
- {
diff --git a/kernel-4.15.patch b/kernel-4.15.patch
deleted file mode 100644
index 15efac9..0000000
--- a/kernel-4.15.patch
+++ /dev/null
@@ -1,34 +0,0 @@
-diff -ur lin_tape-3.0.23/upper.c lin_tape-3.0.23.iov/upper.c
---- lin_tape-3.0.23/upper.c	2018-04-07 22:18:09.417415364 +0200
-+++ lin_tape-3.0.23.iov/upper.c	2018-04-07 22:19:26.582769230 +0200
-@@ -388,6 +388,22 @@
- 	if (hdr->iovec_count) {
- 		const int size = sizeof(struct sg_iovec) * hdr->iovec_count;
- 		size_t iov_data_len;
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(4,15,0)
-+		struct iov_iter i;
-+
-+		sg_iov = kmalloc(size, GFP_KERNEL);
-+		if (!sg_iov) {
-+			ret = -ENOMEM;
-+			goto out;
-+		}
-+
-+		ret = import_iovec(hdr->dxfer_direction == SG_DXFER_TO_DEV ? WRITE : READ, hdr->dxferp, hdr->iovec_count, 0, (struct iovec **)&sg_iov, &i);
-+		if (ret < 0)
-+			goto out;
-+
-+		iov_iter_truncate(&i, hdr->dxfer_len);
-+		iov_data_len = hdr->dxfer_len;
-+#else
- 		struct iovec *iov;
- 		int i;
- 
-@@ -426,6 +442,7 @@
- 							hdr->dxfer_len);
- 			iov_data_len = hdr->dxfer_len;
- 		}
-+#endif
- 
- 		pfo_cmd.buffer = sg_iov;
- 		pfo_cmd.bufflen = iov_data_len;
diff --git a/kernel-4.17.patch b/kernel-4.17.patch
deleted file mode 100644
index 3902b9d..0000000
--- a/kernel-4.17.patch
+++ /dev/null
@@ -1,14 +0,0 @@
---- lin_tape-3.0.23/intercept.c~	2018-06-18 19:40:39.000000000 +0200
-+++ lin_tape-3.0.23/intercept.c	2018-06-18 19:43:27.059968542 +0200
-@@ -1365,7 +1365,11 @@
- 		/* Only for fo devices */
- 		/* This 'if' must match the one above in create unique */
- #if LINUX_VERSION_CODE >= KERNEL_VERSION(4,11,0)
-+  #if LINUX_VERSION_CODE >= KERNEL_VERSION(4,17,0)
-+		sdev->request_queue = blk_alloc_queue_node(GFP_KERNEL, NUMA_NO_NODE, NULL);
-+  #else
- 		sdev->request_queue = blk_alloc_queue_node(GFP_KERNEL, NUMA_NO_NODE);
-+  #endif
- 		__scsi_init_queue(sdev->host, sdev->request_queue);
- #else
- 		sdev->request_queue = __scsi_alloc_queue(sdev->host, NULL);
diff --git a/kernel-4.19.patch b/kernel-4.19.patch
deleted file mode 100644
index 4a06007..0000000
--- a/kernel-4.19.patch
+++ /dev/null
@@ -1,29 +0,0 @@
---- lin_tape-3.0.33/lower.c.orig	2018-10-27 12:12:06.000000000 +0200
-+++ lin_tape-3.0.33/lower.c	2018-10-27 14:11:03.207396481 +0200
-@@ -276,8 +276,13 @@
- 			pfo_cmd->bufflen, local_raw_sense, pfo_cmd->timeout,
- 			pfo_cmd->retries, pfo_cmd->flags, &pfo_cmd->resid_len);
- #else
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(4,19,0)
- 			pfo_cmd->bufflen, local_raw_sense, &local_sense_data, pfo_cmd->timeout,
- 			pfo_cmd->retries, pfo_cmd->flags, 0, &pfo_cmd->resid_len);
-+#else
-+			pfo_cmd->bufflen, NULL, &local_sense_data, pfo_cmd->timeout,
-+			pfo_cmd->retries, pfo_cmd->flags, 0, &pfo_cmd->resid_len);
-+#endif
- #endif
- 	} else {
- 		/* SCSI Command from user space */
-@@ -291,8 +296,12 @@
- 	scsi_device_put(sdev);
- 	unlock_apfo_path(path_num);
- 
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(4,19,0)
- 	valid_sense = scsi_normalize_sense(local_raw_sense,
- 				SCSI_SENSE_BUFFERSIZE, &local_sense_data);
-+#else
-+	valid_sense = scsi_sense_valid(&local_sense_data);
-+#endif
- 	/* Put the SCSI command results in the structure */
- 	pfo_cmd->errors = result;
- 	pfo_cmd->scsi_status_code = result & 0xff;
diff --git a/kernel-5.0.patch b/kernel-5.0.patch
index 73ae7e3..5bad8f6 100644
--- a/kernel-5.0.patch
+++ b/kernel-5.0.patch
@@ -1,9 +1,9 @@
 --- lin_tape-3.0.33/lin_tape_ioctl_tape.c~	2019-03-10 18:06:13.000000000 +0100
 +++ lin_tape-3.0.33/lin_tape_ioctl_tape.c	2019-03-10 18:11:48.544963300 +0100
 @@ -23,6 +23,7 @@
- #include "lin_tape_timeout_tape.h"
  #include "ibmekm/inc/dd_event.h"
  #include "lin_tape_scsi_tape.h"
+ #include <linux/delay.h>
 +#include <linux/ktime.h>
  
  /*****************************************************************************
@@ -42,14 +42,3 @@
  
  	/* tv.sec in structure timeval is a "long" integer
  	* it has 4 bytes in 32-bit kernel, but 8 bytes in 64-bit kernel
---- lin_tape-3.0.33/intercept.c~	2019-03-10 18:13:48.000000000 +0100
-+++ lin_tape-3.0.33/intercept.c	2019-03-10 18:16:23.483059816 +0100
-@@ -1362,7 +1362,7 @@
- 		/* Only for fo devices */
- 		/* This 'if' must match the one above in create unique */
- #if LINUX_VERSION_CODE >= KERNEL_VERSION(4,11,0)
--  #if LINUX_VERSION_CODE >= KERNEL_VERSION(4,17,0)
-+  #if LINUX_VERSION_CODE >= KERNEL_VERSION(4,17,0) && LINUX_VERSION_CODE < KERNEL_VERSION(5,0,0)
- 		sdev->request_queue = blk_alloc_queue_node(GFP_KERNEL, NUMA_NO_NODE, NULL);
-   #else
- 		sdev->request_queue = blk_alloc_queue_node(GFP_KERNEL, NUMA_NO_NODE);
diff --git a/kernel-5.6.patch b/kernel-5.6.patch
new file mode 100644
index 0000000..651d11e
--- /dev/null
+++ b/kernel-5.6.patch
@@ -0,0 +1,150 @@
+--- lin_tape-3.0.52/lin_tape_scsi_config.h~	2020-03-05 19:43:09.000000000 +0100
++++ lin_tape-3.0.52/lin_tape_scsi_config.h	2020-04-04 21:53:09.046695460 +0200
+@@ -223,6 +223,7 @@
+ {
+ 	return single_open(file, tape_read_proc, NULL);
+ }
++#if LINUX_VERSION_CODE < KERNEL_VERSION(5,6,0)
+ static struct file_operations tape_proc_ops = {
+     .owner   = THIS_MODULE,
+     .open    = tape_open_proc,
+@@ -230,6 +231,14 @@
+     .llseek  = seq_lseek,
+     .release = single_release,
+ };
++#else
++static struct proc_ops tape_proc_ops = {
++    .proc_open    = tape_open_proc,
++    .proc_read    = seq_read,
++    .proc_lseek  = seq_lseek,
++    .proc_release = single_release,
++};
++#endif
+ #endif
+ 
+ int rd_pc_initial
+@@ -255,6 +264,7 @@
+ {
+ 	return single_open(file, changer_read_proc, NULL);
+ }
++#if LINUX_VERSION_CODE < KERNEL_VERSION(5,6,0)
+ static struct file_operations changer_proc_ops = {
+     .owner   = THIS_MODULE,
+     .open    = changer_open_proc,
+@@ -262,6 +272,14 @@
+     .llseek  = seq_lseek,
+     .release = single_release,
+ };
++#else
++static struct proc_ops changer_proc_ops = {
++    .proc_open    = changer_open_proc,
++    .proc_read    = seq_read,
++    .proc_lseek  = seq_lseek,
++    .proc_release = single_release,
++};
++#endif
+ #endif
+ 
+ static int status_read_proc
+@@ -273,6 +291,7 @@
+ {
+ 	return single_open(file, status_read_proc, NULL);
+ }
++#if LINUX_VERSION_CODE < KERNEL_VERSION(5,6,0)
+ static struct file_operations status_proc_ops = {
+     .owner   = THIS_MODULE,
+     .open    = status_open_proc,
+@@ -280,6 +299,14 @@
+     .llseek  = seq_lseek,
+     .release = single_release,
+ };
++#else
++static struct proc_ops status_proc_ops = {
++    .proc_open    = status_open_proc,
++    .proc_read    = seq_read,
++    .proc_lseek  = seq_lseek,
++    .proc_release = single_release,
++};
++#endif
+ #endif
+ 
+ int rdstatus_pc_initial
+--- lin_tape-3.0.52/lin_tape_ioctl_tape.c~	2020-03-05 19:43:09.000000000 +0100
++++ lin_tape-3.0.52/lin_tape_ioctl_tape.c	2020-04-04 22:13:44.016713929 +0200
+@@ -25,6 +25,16 @@
+ #include "lin_tape_scsi_tape.h"
+ #include <linux/delay.h>
+ 
++
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(5,6,0)
++struct lin_tape_timeval {
++  __kernel_long_t      tv_sec;
++  __kernel_suseconds_t tv_usec;
++};
++#else
++#define lin_tape_timeval timeval
++#endif
++
+ /*****************************************************************************
+  *                                                                           *
+  *              Tape Drive Ioctls                                            *
+@@ -2794,7 +2804,7 @@
+ 
+ ssize_t tape_set_tod(struct tape_descriptor** drvp)
+ {
+-	struct timeval* tv = NULL;
++	struct lin_tape_timeval* tv = NULL;
+ 	struct tod_control* buffer = NULL;
+ 	struct tape_descriptor *drv = *drvp;
+ 	int now = 0, rc = STATUS_SUCCESS;
+@@ -2810,20 +2820,20 @@
+ 		goto EXIT_LABEL;
+ 	} /* if */
+ 
+-	tv = kmalloc(sizeof(struct timeval), GFP_KERNEL);
++	tv = kmalloc(sizeof(struct lin_tape_timeval), GFP_KERNEL);
+ 	if(!tv) {
+ 		rc = -ENOMEM;
+ 		goto EXIT_LABEL;
+ 	} /* if */
+ 
+ 	memset(buffer, '\0', sizeof(struct tod_control));
+-	memset(tv, '\0', sizeof(struct timeval));
++	memset(tv, '\0', sizeof(struct lin_tape_timeval));
+ 
+ 	rc = tape_modesense_page(&drv, TODControlPageNumber, (unchar*)buffer,
+ 		sizeof(struct tod_control), True, True);
+ 	if(rc != STATUS_SUCCESS) goto EXIT_LABEL;
+ 
+-	memset(tv, '\0', sizeof(struct timeval));
++	memset(tv, '\0', sizeof(struct lin_tape_timeval));
+ #if LINUX_VERSION_CODE < KERNEL_VERSION(5, 0, 0)
+ 	do_gettimeofday(tv);
+ #else
+@@ -8930,7 +8940,7 @@
+ 
+ int erp_tod(struct tape_descriptor* drv, union cdb* tmp_cdb, char* sense_data)
+ {
+-	struct timeval* tv = NULL;
++	struct lin_tape_timeval* tv = NULL;
+ 	struct tod_control* tod_buf = NULL;
+ 	int now = 0, rc = -EIO;
+ 
+@@ -8940,7 +8950,7 @@
+ 		goto EXIT_LABEL;
+ 	} /* if */
+ 
+-	tv = kmalloc(sizeof(struct timeval), GFP_KERNEL);
++	tv = kmalloc(sizeof(struct lin_tape_timeval), GFP_KERNEL);
+ 	if(!tv) {
+ 		rc = -ENOMEM;
+ 		goto EXIT_LABEL;
+@@ -8951,7 +8961,7 @@
+ 	if(rc != STATUS_SUCCESS) goto EXIT_LABEL;
+ 
+ 	/* get time info to set TOD */
+-	memset(tv, '\0', sizeof(struct timeval));
++	memset(tv, '\0', sizeof(struct lin_tape_timeval));
+ #if LINUX_VERSION_CODE < KERNEL_VERSION(5, 0, 0)
+ 	do_gettimeofday(tv);
+ #else
diff --git a/lin_tape.fixlist b/lin_tape.fixlist
index 526d7ad..1ec4148 100644
--- a/lin_tape.fixlist
+++ b/lin_tape.fixlist
@@ -1,313 +1,369 @@
-Fixlist for Linux IBM Tape Device Driver (lin_tape)
-
-(C) Copyright IBM Corporation 2007-2017
-
- Level      Date                   Description
----------------------------------------------------------------
-3.0.23 11/03/2017   - Initial support for RHEL 6.9 (min. kernel version 2.6.32-696)
-                    - Support for LTO8
-                    - Fix for reservation conflict when reserve_6 used
-                    - Fix for failover after device rediscovery (introduced at 3.0.20)
-                    - Fix for device name after removal (introduced at 3.0.20)
-                    - Fix for read with resid through join interface
-3.0.21 09/14/2017   - Fix to process sense data from srb combination flags
-                    - Enhancement to not attempt failover when only one path left
-                    - Fix for crash on concurrency (multiple process attempting to use the same device in stress scenario)
-                    - Fix for returning ENXIO instead attempting failover (introduced at 3.0.20)
-                    - Join driver to retry attachment on LUN not serlf configured
-3.0.20 06/09/2017   - Reincorporated join driver (lin_tape_as_sfmp) with new build flag: -with sfmp
-                    - Work around for wrong SN reported by Inq. page 80h after failback
-                    - Fix for crash when HBA driver removed before lin_tape
-                    - Fix for mismatching device SN on failback
-                    - Fix for busy waits
-                    - Fix for file systems removals
-                    - Fix for file systems attributes names
-                    - Fix for column width at /proc/IBM for SN
-                    - Initial support for SLES 12 SP2 (min. kernel version 4.4.21-69)
-                    - Initial support for RHEL 7.3 (min. kernel version 3.10.0-514)
-                    - Initial support for RHEL 7.3 Power LE (min. kernel version 3.10.0-514)
-                    - Support for TS4300
-3.0.18 03/08/2017   - Prevent crash from double delete objects on removal during wait scenarios (introduced at 2.2.0)
-                    - lin_tape_as_sfmp not supported in this version
-                    - Installation for blacklist.conf enhancements
-                    - Support for TS1155
-3.0.16 01/06/2017   - Prevent crash introduced at 1.75.0 cleaning buffern and length on WRA during open
-                    - Prevent lock/crash introduced at 1.75.0 when device removal during open
-                    - Added dualaccesor_cpf for TSLM usage
-                    - Enhancement to installer to prevent blacklisting st and sg linux modules
-3.0.13 11/11/2016   - Fix for passthru error recovery after EOD detected
-                    - Fixes for device removal during wait causing lock or crash
-                    - Fix to prevent lock over lock at scatter/gather when running with low memory
-                    - Updates on daemon configuration parameters naming to match lin_taped.conf with IUG instructions
-                    - Added daemon parameter TapeDevPermissions to lin_taped.conf
-3.0.12 08/19/2016   - Fix for lin_tape_as_sfmp attachment on kenrnels 3.10.0 and beyond
-                    - Enhancement on lin_tape_as_sfmp installation
-3.0.11 08/08/2016   - Added join driver back
-                    - Fixed multiple kernel dependencies for join
-                    - Enhancement on join install
-                    - Fix on join driver for scsi rescan
-3.0.10 06/03/2016   - Removed join driver
-                    - New OEM library support
-                    - Initial support for RHEL 6.8 (min. kernel version 2.6.32-642)
-                    - Initial support for RHEL 7.2 (min. kernel version 3.10.0-327)
-3.0.8  03/16/2016   - Prevent segfault at daemon
-                    - Fix for pfo device discovery at 390x arch.
-3.0.7  02/23/2016   - Prevent crash from st/sg failover
-                    - Added reserve type to STIOCQRYP
-                    - Enabled SIOC_LOG_SENSE10 for changer
-                    - Added special open for preemption
-                    - Enabled TSM QUERY PR KEY for normal open
-                    - Fix for join build
-3.0.6  02/26/2016   - Introduction of join driver (lin_tape_as_sfmp)
-3.0.5  01/06/2016   - Fix to track LBP state
-                    - Prevent null pointer from scsi device
-                    - Fix for HBA call to restore LBP after failover
-3.0.3  11/06/2015   - Removed warnings for big-endian introduced at 3.0.1
-                    - Fix for hardcoded serial number length in daemon
-                    - Build/Install enhacements
-3.0.2  09/11/2015   - Retry Abort 4b/06
-                    - Fix for changer lock
-                    - Enhancement to disable autodump for all at once
-                    - Initial support for SLESS11 SP4 (min. kernel version 3.0.101-63)
-3.0.1  08/25/2015   - Fix for RAO IOCTL's
-                    - Increased retry time for 2/3E/0
-                    - Support for LTO7
-3.0.0  06/26/2015   - Fix for pages leak at s/g ops
-                    - Initial support for RHEL 7.1 (min. kernel version 3.10.0-229)
-                    - Initial support for RHEL 6.7 (min. kernel version 2.6.32-573)
-2.9.9  06/16/2015   - Fix for lock during autodump loop
-                    - Enhancement for bs>1M at kernels>2.6.29
-                    - Fix for pages leak at s/g
-                    - Return ENOMEM instead of EIO from lin_tape_blk_req
-2.9.8  05/08/2015   - Prevent cdev call with null pointer
-2.9.7  04/28/2015   - 3592 WDRA timout increased to 5 min
-                    - Removed enhancement to handle lot of 
-                      removals due to lock and crash,
-                      wait_on_config should be used instead
-2.9.6  03/24/2015   - Removed printk at qry_blk_prot
-                    - Fix for SN/CPF alignment on SN>16
-                    - Fix for page order adjustment that caused 
-                      data corruption at 2.9.5 (only blocksize >
-                      1M and kernel >= 2.6.29)
-                    - Daemond enhancement to handle lot of 
-                      removals
-                    - Write lock hang during autodump and s/g
-                    - Fix for 3592/E08 generation id
-                    - Initial support for RHEL 6.6 (min. kernel version 2.6.32-504.8.1)
-2.9.5  01/15/2015   - Adjustment to page order for r/w
-2.9.4  12/05/2014   - Support for 3592/E08
-                    - Fixes to multiple partition sizing
-                    - Fix to return rc on failed set active partition
-                    - Fix on failover enablement for SN > 16
-                    - Added enablement for select OEM libraries
-                    - Initial support for RHEL 7 (min. kernel version 3.10.0-123)
-2.9.3  10/27/2014   - Enhancement for SN/CPF gather
-                    - Fix for dump ready when s/g
-2.9.2  08/26/2014   - Fix for partitioning PSUM and POFM bits
-                    - Fix for TSM enh inventory media type
-                    - RHEL 7 (min. kernel version 3.10.0-123)
-2.9.1  07/28/2014   - Fix for chgr cmd call during device removal
-                    - Fix for tracing during device removal
-                    - Fixes for PR IOCTL's
-2.9.0  06/29/2014   - RAO SA update and LBP CRC32C added
-2.8.0  05/28/2014   - Enhancements to busy_retry 
-2.7.0  05/15/2014   - fixes for s/g on authomatic dump
-                    - fix for STIOCSETP on LWP set
-                    - Initial support for RHEL 6.5 (min. kernel version 2.6.32-431)
-2.6.0  02/17/2014   - Added Recommend Access Order (RAO)
-                    - noreserve changer default for failover
-2.5.0  01/14/2014   - Added SIOC_ENH_LOG_SENSE 
-                    - Initial support for SLES11 SP3 (min kernel version 3.0.79-0.11)
-2.4.0  12/18/2013   - Added Scatter/Gather for operations use. 
-2.3.0  10/01/2013   - Initial support for RHEL 6.4 (kernel version 2.6.32-358.18.1.el6)
-                    - Changed some indirection to double 
-                      indirection for CPF
-                    - Rerouted some changer commands to go 
-                      through the changer queue
-                    - Added debug tracing for the changer queue
-2.2.0  08/06/2013   - Added optional persistent_n_device 
-                      parameter to enable the ability to 
-                      persistent name non rewind open.
-2.1.0  06/11/2013   - Added busy_retry for TSM
-                    - Added ability to take log sense size 
-                      desired for ITDT
-                    - Added definition to IBM_tape.h MTWEOFI
-                    - Changed default for Jag cartridge to 6
-2.0.0  05/22/2013   - Removed flushing buffer on setposition
-1.76.0 10/22/2012   - Failover fix for bug introduced in 1.75.0
-                    - Initial support for RHEL 5.9 (min kernel version 2.6.18-348)
-1.75.0 10/17/2012   - Implemented Dynamic Runtime Attributes
-                    - Fixed host reboot on microcode load of TS3310
-                    - Fixed crash on drive cable pull
-1.74.0 08/21/2012   - Support for 64-bit position counters
-                    - Fix bug in /proc/scsi/IBMchanger with many changers
-                    - Fix to changer open count when close fails
-1.73.0 05/29/2012   - Allow option for setting TSM 3592 barcode to length 8
-                    - Fix for SLES 11 SP2 hang on failback
-                    - Initial support for SLES11 SP2 (min kernel version 3.0.13-0.27)
-1.72.0 05/22/2012   - Increase inquiry timeout to 180 for rediscovered device
-                    - Fix lin_taped crash on SAS rediscovered dvc, RH 5 & 6
-1.71.0 05/07/2012   - Eliminate multiple "REMOVED" devices on failback
-                    - Implement MTWEOFI (write filemarks with immed=1)
-                    - Fix bug on reading prog. early warning parameter
-                    - Fix potential failover bugs on read and write
-1.70.0 04/20/2012   - Fix crash on SLES 11 SP2 when offline device returns
-                    - Eliminate excessive trailing spaces in read proc
-                    - Increased inquiry timeout to three min. for failover
-1.69.0 04/13/2012   - Fix infinite loop on read proc with small buffer size
-                    - Eliminate excessive print on unsuccessful key registration
-1.68.0 03/13/2012   - Support for LTO 6 media types
-                    - Fix for crash in tape_read_proc and changer_read_proc
-                    - Data direction in failover set position from OUT to NONE
-1.67.0 02/06/2012   - Implemented Programmable Early Warning
-                    - Implemented general Mode Sense function
-                    - Implemented Verify Data
-                    - Initial support for SLES 11 SP2
-                    - Added LTO 6 inquiry strings
-1.66.0 12/08/2011   - Prevent BUSY return status in multiple open changer
-1.65.0 11/15/2011   - Change final PREEMPT to PREEMPT_AND_ABORT for DPF
-1.64.0 11/04/2011   - Serialize IO for two instances of open changer (crash fix)
-1.63.0 11/02/2011   - Catch failover case at beginning of IO requests
-1.62.0 10/14/2011   - Call malloc before lock acquisition in load_unload
-                    - Unit attention and DPF handling for PREVENT_MEDIUM_REMOVAL
-                    - STIOCP: supply missing sili bit case
-                    - reallocate changer data if missing at start of IOCTL
-                    - Change remaining ENOMEM to EOVERFLOW in overlength read
-                    - Allow removal of lin_taped if not running
-1.61.0 09/26/2011   - Allow for short erase in STERASE
-                    - Fix for crash when HBA driver uninstalled w/ alt_pathing
-1.60.0 09/12/2011   - Fix sense copy error by accounting for DID_TARGET_FAILURE
-                    - Fix CPF/DPF error introduced in 1.58.0 in ERP function
-1.59.0 08/25/2011   - Fix for read loop error with SILI bit on 
-1.58.0 08/12/2011   - Implementation of log sense page with subpage support
-                    - Added eot warning IOCTLs
-                    - Made READ SILI bit a changeable parameter
-                    - Change overlength read rc from ENOMEM to EOVERFLOW
-                    - Reset logical block protection on failover
-1.57.0 07/15/2011   - Fix for timeout error introduced in 1.56.0
-                    - Allow option for a SLES 11 and higher "supported" build
-1.56.0 07/11/2011   - Fix handling of deferred EOM flag
-                    - Update changer timeouts to 900
-1.55.0 06/17/2011   - Fix for structure size in logical block protection IOCTLs
-                    - Fix for invalid data returned with max modesense length
-                    - Introduce count to track number of open changer instances
-1.54.0 05/05/2011   - Updated erase timeout for Jag4
-1.53.0 04/13/2011   - Fix for crash when drive is power cycled while open
-1.52.0 04/01/2011   - Clear flags on lin_tape_flush for future opens
-                    - Remove check of open/busy flags during changer open
-1.51.0 02/18/2011   - Send TUR on CPF to clear RS-422 failure unit attention
-                    - Correlate device number with SCSI address in /proc/scsi
-                    - Fix seg fault with pseudo dvc when HBA driver uninstalled
-                    - Provide a method to disable setting density on open
-1.50.0 01/25/2011   - Reduce size of kernel mem allocs to avoid alloc failure
-                    - Support for get/set block-level data protection (3592-E07)
-1.49.0 12/15/2010   - Support for RHEL 6
-                    - Implementation of partitioning for 3592-E07
-                    - Fix for CPF error due to incorrect sense data returned
-1.48.0 11/11/2010   - Return correct mt device number from MTDEVICE IOCTL
-1.47.0 11/10/2010   - Fix for host hang in ERP
-1.46.0 11/03/2010   - Fix for drives becoming unavailable after software reset
-1.45.0 10/26/2010   - Fix CPF failure with cable pull before IO
-1.44.0 10/18/2010   - Fix for crash when drive is reset during tape ops (zLinux)
-1.43.0 10/01/2010   - Fix for crash when drive is reset during tape ops (pLinux)
-1.42.0 07/20/2010   - Reduce size of stchgp_s struct to match user space struct
-1.41.1 06/24/2010   - Fix for memory leak/crash in SLES 11 sp1
-1.40.0 06/02/2010   - Increased page order on read-write in SLES 11 sp1
-                    - Fixed infinite read loop on read failure
-1.39.0 05/06/2010   - Support for SLES 11 SP 1
-1.38.0 04/13/2010   - LTO 5 extended postitioning IOCTLs
-                    - Release descriptor lock before IO on init to avoid hang
-1.37.0 03/15/2010   - Set Dynamic Runtime Attributes
-                    - Removed persistent naming script in favor of new method 
-                    - Fix for duplicate changers in /proc/scsi/IBMchanger
-1.36.0 03/02/2010   - Failover changes to support WORM and Data Safe Mode
-                    - Fix for EFAULT (Bad address) error on read
-1.35.0 02/19/2010   - Fix for corruption on std write followed by passthru read
-1.34.0 02/15/2010   - Fix for I/O errors on zLinux, LTO 5
-1.33.0 02/02/2010   - LTO 5 updates
-1.32.0 12/30/2009   - Failover fixes
-1.31.1 12/04/2009   - LTO 5 partitioning IOCTLs
-                    - Fixes for SLES 11 failover
-1.30.0 11/20/2009   - lin_taped multiple pid fix
-1.29.0 10/26/2009   - SLES 11 failover implementation
-1.28.0 09/02/2009   - SLES 11 device removal/reinitialization fix
-1.27.0 08/25/2009   - Fix for failover failure error on SLES 10 & RHEL 4
-1.26.2 08/04/2009   - Fix for crashes on RHEL 4.7 and SLES 11
-1.25.0 06/23/2009   - Fix for scatter-gather page offset bug on PPC64 SLES11
-                    - Added IOCTLs for persistent reserve
-1.24.0 02/23/2009   - Support for SLES 11, kernel 2.6.27
-                    - Fix for CPF configuration bug introduced in 1.23.0
-1.23.0 01/19/2009   - CPF crash fix: cable pull/uninstall/reinstall sequence
-                    - Boundary check for max failover paths
-1.22.0 11/25/2008   - Fix for crash in RHEL 4.7
-                    - Updates for kernels >= 2.6.24
-                    - DPF crash fix: cable pull/uninstall/reinstall sequence
-1.21.0 10/23/2008   - Reserve logging 
-                    - Add "primary_path" parameter for udev
-1.20.0 10/15/2008   - read_cartridge_location to block transfers into at most
-                      600 elements
-1.19.0 09/15/2008   - IBMtapeutil fix for read_cartridge_location
-1.18.0 08/22/2008   - Fix for struct device attribute in kernels >= 2.6.13
-1.17.0 08/06/2008   - Add udev "dev" file for medium changers in
-                      kernels < 2.6.5 or > 2.6.15
-1.16.0 06/27/2008   - Change GFP_ATOMIC allocations to GFP_KERNEL
-                    - Support for the 3592-E06
-                    - Fix lin_taped restart crash after failback
-1.15.0 05/21/2008   - Release source RPM
-                    - Update 3572 inquiry string to 3572-TL
-1.14.0 04/30/2008   - Make module parameters read/writable
-                    - Fix for CPF key check on CVT
-1.13.0 03/27/2008   - Support for 3572
-1.12.1 03/07/2008   - Fixed hang introduced in 1.12.0
-1.12.0 02/26/2008   - Created "dev" file in sysfs class directory for
-                      udev & udevinfo support
-                    - Changed 3592 (E05) references to support models beyond E05
-1.11.0 12/11/2007   - Fixed seg fault when a logical dvc is accidentally removed
-                    - Fixed return code for SIOC_PASS_THROUGH   
-                    - Implemented read cartridge location IOCTL 
-                    - Removed WWNN filter check for DPF entitlement  
-1.10.0 10/01/2007   - Increaded timeout for best path selection
-                    - Fixed delete_parms_on_device() for failover
-                    - Fixed return code for SIOC_PASS_THROUGH     
-                    - Fixed maximum scsi transfer size for
-                    - running on RHEL5/SLES10 SP1 on IA64 
-                    - Increased max log sense length
-1.9.0 08/20/2007    - Added persistent naming support for RHEL5 and SLES10
-                    - Increased maximum supported tape drives from 256 to 1024
-1.8.0 07/26/2007    - Support LTO4 HH
-1.7.1 08/06/2007    - Fixed max scsi transfer size for RHEL5 on System Z
-1.7.0 07/03/2007    - Fix max scsi transfer size and sg for RHEL5 and SLES10 SP1
-                    - Added MODULE_VERSION and MODULE_PARM_DESC for driver parms
-                    - Added warning message to syslog if release fails on close
-                    - Added wait_on_config driver parameter
-                    - Removed unnecessary messages from lin_tape.errorlog
-                    - Fixed 3592 density recovery on failover
-1.6.0 05/22/2007    - Remove registered key if persistent reservation
-                      preemption fails during failover
-                    - Fixed read memory allocation on fixed block size
-1.5.0 04/30/2007    - Fixed the residual count for RHEL5
-                    - Support SLES10 SP1
-1.4.0 04/30/2007    - Removed unwanted debug messages for direct I/O
-1.3.0 04/12/2007    - Fix system-managed encryption for LTO4
-                    - Support for SIOC_PASS_THROUGH ioctl
-                    - Support direct I/O
-                    - Add driver attributes default_sys_encryption_proxy/write
-1.2.0 04/02/2007    - Support RHEL5
-                    - Fix for ENOMEM on medium changer inventory with large
-                      number of slots
-1.1.0 03/13/2007    - Application-managed encryption now enabled correctly
-                    - Fix for crash during CPF (when command never succeeds)
-                    - Fix for DPF license key validation for TS3200 library
-                    - Fix for daemon crash during data-path failover validation
-1.0.9 02/19/2007    - Fix for hang when loading lin_tape 
-                    - Fix for hang when removing module on SLES9
-1.0.8 02/09/2007    - Fixes for system-managed encryption
-                    - Support for LTO4 encryption
-                    - Fix for data-path-failover on TS3200
-                    - Fix for hang when running stress tests to multiple devices
-                    - Support for Asianux 2.0
-1.0.7 01/18/2007    - Fix for hang on RHEL4 and SLES9 when loading the driver
-1.0.6 01/05/2007    - Support for 3577, LTO4, and system-managed encryption
-                    - Support for RHEL4 and SLES9
-                    - Fix for crash on read or write to changer
-1.0.5 09/29/2006    - Initial release
+Fixlist for Linux IBM Tape Device Driver (lin_tape)
+
+(C) Copyright IBM Corporation 2007-2019
+
+ Level      Date                   Description
+---------------------------------------------------------------
+3.0.52   03/17/2020 - Initial support for RHEL 8.1 (min. kernel version 4.18.9.147)
+		    - Initial support for SLES 12 SP5 (min. kernel version 4.12.14-122)
+		    - Workaround for scsi request not detecting/reporting path down on RHEL 8.x
+3.0.51   02/21/2020 - Fix for keeping track of reservation after failover
+		    - Fix for sg lock on RHEL7
+		    - Fix for possible lock on device unconfig
+		    - Fix for drive dumps file names
+		    - Adjustment for LTO erase time out 
+		    - Enhancement for install script	    
+3.0.48 11/01/2019   - Initial support for RHEL 7.7 (min. kernel version 4.14.0-115 on Power and 3.10.0-1062 on Intel)
+3.0.48 09/18/2019   - Initial support for RHEL 8 (min. kernel version 4.18.0-80)
+                    - Initial support for SLES 15 SP1 (min. kernel version 4.12.14-197.1)
+		    - Fix for crash when all paths removed during load balancing
+		    - Fix for null pointer on join with devices with alternate path disabled
+3.0.46 07/31/2019   - General change for lock handling and devices table
+		    - Fix on daemon null pointer
+		    - Retry on unit attention and not ready sense on attachment
+		    - Daemon signal blocking fix
+		    - Introduced systemd (on RHEL 7, SLES 12 and SLES 15)
+		    - Fix for daemon not processing commands when removal in progress
+		    - Support flag for SLES
+		    - Initial support for SLES 12 SP4 (min. kernel version 4.12.14-94.41 x86_64, ppc64le and s390x)
+3.0.39 02/18/2019   - Initial support for RHEL 7.6 (min. kernel version 3.10.0-957.1.3 only)
+3.0.39 02/18/2019   - Initial support for SLES 12 SP4 (min. kernel version 4.12.14-94.41 ppc64le and s390x only)
+3.0.39 12/06/2018   - Initial support for TS1160
+		    - Initial support for RHEL 6.10 (min. kernel version 2.6.32-754 ppc64le and x86_64 only)
+                    - Initial support for Ubuntu 18.04 (min. kernel 4.15.0.34 only on ppc64le and x86_64)
+                    - Initial support for SLES 15 (min. kernel 4.12.14-23.1 only on ppc64le and s390x)
+                    - Fix for soft lock on rescan
+                    - Fix for udev attributes
+                    - New Archive Mode Unthread ioctls
+3.0.33 07/27/2018   - Initial support for RHEL 7.5 (min. kernel version 3.10.0-862 only on ppc64le and x86_64)
+                    - Initial support for Ubuntu 16.04.3 (min. kernel 4.4.0-87 Only on x86_64)
+                    - Fixed bug on CPF failing over a different device
+                    - Reduced removal waiting when device busy
+                    - Added runtime attribute PID
+                    - Fix for double lock on rescan
+3.0.32 06/07/2018   - Support for SLES 12 SP3 on kernels beyond 4.4.114
+                    - Fix for lock condition introduced at 3.0.30 when attempt to open a device busy
+                    - Fox for join driver to return sense data after CPF event
+3.0.31 04/26/2018   - Initial support for SLES 12 SP3 (min. kernel version 4.4.114-94)
+3.0.30 04/11/20185  - Fixes on join some with crash potential during failover
+                    - Fix for join driver returning ENXIO on open
+                    - Fix for memory leak on join interfaces
+                    - Fix for Verify  and extended read position application interface for missmatching endianness
+                    - Fix for logging when daemon stopped
+                    - Fix for race condition
+                    - Fix and enhancements for device removal
+                    - Fix for hang introduced at 3.0.20 on device removal during IO
+                    - Enhancements for daemon excess loop during failvoer
+                    - Fix for interlock of daemon with crash potential
+                    - Stop waiting when device gone detected
+                    - Work around ERP TOD from drive sense data parameter rounded
+                    - Fix to not use the device object once driver released
+                    - Removed small unporected window on read proc
+3.0.23 11/03/2017   - Initial support for RHEL 7.4 (min. kernel version 3.10.0-693 only on ppc64, ppc64le and x86_64)
+                    - Initial support for RHEL 6.9 (min. kernel version 2.6.32-696)
+                    - Support for LTO8
+                    - Fix for reservation conflict when reserve_6 used
+                    - Fix for failover after device rediscovery (introduced at 3.0.20)
+                    - Fix for device name after removal (introduced at 3.0.20)
+                    - Fix for read with resid through join interface
+3.0.21 09/14/2017   - Fix to process sense data from srb combination flags
+                    - Enhancement to not attempt failover when only one path left
+                    - Fix for crash on concurrency (multiple process attempting to use the same device in stress scenario)
+                    - Fix for returning ENXIO instead attempting failover (introduced at 3.0.20)
+                    - Join driver to retry attachment on LUN not serlf configured
+3.0.20 06/09/2017   - Reincorporated join driver (lin_tape_as_sfmp) with new build flag: -with sfmp
+                    - Work around for wrong SN reported by Inq. page 80h after failback
+                    - Fix for crash when HBA driver removed before lin_tape
+                    - Fix for mismatching device SN on failback
+                    - Fix for busy waits
+                    - Fix for file systems removals
+                    - Fix for file systems attributes names
+                    - Fix for column width at /proc/IBM for SN
+                    - Initial support for SLES 12 SP2 (min. kernel version 4.4.21-69)
+                    - Initial support for RHEL 7.3 (min. kernel version 3.10.0-514)
+                    - Initial support for RHEL 7.3 Power LE (min. kernel version 3.10.0-514)
+                    - Support for TS4300
+3.0.18 03/08/2017   - Prevent crash from double delete objects on removal during wait scenarios (introduced at 2.2.0)
+                    - lin_tape_as_sfmp not supported in this version
+                    - Installation for blacklist.conf enhancements
+                    - Support for TS1155
+3.0.16 01/06/2017   - Prevent crash introduced at 1.75.0 cleaning buffern and length on WRA during open
+                    - Prevent lock/crash introduced at 1.75.0 when device removal during open
+                    - Added dualaccesor_cpf for TSLM usage
+                    - Enhancement to installer to prevent blacklisting st and sg linux modules
+3.0.13 11/11/2016   - Fix for passthru error recovery after EOD detected
+                    - Fixes for device removal during wait causing lock or crash
+                    - Fix to prevent lock over lock at scatter/gather when running with low memory
+                    - Updates on daemon configuration parameters naming to match lin_taped.conf with IUG instructions
+                    - Added daemon parameter TapeDevPermissions to lin_taped.conf
+3.0.12 08/19/2016   - Fix for lin_tape_as_sfmp attachment on kenrnels 3.10.0 and beyond
+                    - Enhancement on lin_tape_as_sfmp installation
+3.0.11 08/08/2016   - Added join driver back
+                    - Fixed multiple kernel dependencies for join
+                    - Enhancement on join install
+                    - Fix on join driver for scsi rescan
+3.0.10 06/03/2016   - Removed join driver
+                    - New OEM library support
+                    - Initial support for RHEL 6.8 (min. kernel version 2.6.32-642)
+                    - Initial support for RHEL 7.2 (min. kernel version 3.10.0-327)
+3.0.8  03/16/2016   - Prevent segfault at daemon
+                    - Fix for pfo device discovery at 390x arch.
+3.0.7  02/23/2016   - Prevent crash from st/sg failover
+                    - Added reserve type to STIOCQRYP
+                    - Enabled SIOC_LOG_SENSE10 for changer
+                    - Added special open for preemption
+                    - Enabled TSM QUERY PR KEY for normal open
+                    - Fix for join build
+3.0.6  02/26/2016   - Introduction of join driver (lin_tape_as_sfmp)
+3.0.5  01/06/2016   - Fix to track LBP state
+                    - Prevent null pointer from scsi device
+                    - Fix for HBA call to restore LBP after failover
+3.0.3  11/06/2015   - Removed warnings for big-endian introduced at 3.0.1
+                    - Fix for hardcoded serial number length in daemon
+                    - Build/Install enhacements
+3.0.2  09/11/2015   - Retry Abort 4b/06
+                    - Fix for changer lock
+                    - Enhancement to disable autodump for all at once
+                    - Initial support for SLESS11 SP4 (min. kernel version 3.0.101-63)
+3.0.1  08/25/2015   - Fix for RAO IOCTL's
+                    - Increased retry time for 2/3E/0
+                    - Support for LTO7
+3.0.0  06/26/2015   - Fix for pages leak at s/g ops
+                    - Initial support for RHEL 7.1 (min. kernel version 3.10.0-229)
+                    - Initial support for RHEL 6.7 (min. kernel version 2.6.32-573)
+2.9.9  06/16/2015   - Fix for lock during autodump loop
+                    - Enhancement for bs>1M at kernels>2.6.29
+                    - Fix for pages leak at s/g
+                    - Return ENOMEM instead of EIO from lin_tape_blk_req
+2.9.8  05/08/2015   - Prevent cdev call with null pointer
+2.9.7  04/28/2015   - 3592 WDRA timout increased to 5 min
+                    - Removed enhancement to handle lot of 
+                      removals due to lock and crash,
+                      wait_on_config should be used instead
+2.9.6  03/24/2015   - Removed printk at qry_blk_prot
+                    - Fix for SN/CPF alignment on SN>16
+                    - Fix for page order adjustment that caused 
+                      data corruption at 2.9.5 (only blocksize >
+                      1M and kernel >= 2.6.29)
+                    - Daemond enhancement to handle lot of 
+                      removals
+                    - Write lock hang during autodump and s/g
+                    - Fix for 3592/E08 generation id
+                    - Initial support for RHEL 6.6 (min. kernel version 2.6.32-504.8.1)
+2.9.5  01/15/2015   - Adjustment to page order for r/w
+2.9.4  12/05/2014   - Support for 3592/E08
+                    - Fixes to multiple partition sizing
+                    - Fix to return rc on failed set active partition
+                    - Fix on failover enablement for SN > 16
+                    - Added enablement for select OEM libraries
+                    - Initial support for RHEL 7 (min. kernel version 3.10.0-123)
+2.9.3  10/27/2014   - Enhancement for SN/CPF gather
+                    - Fix for dump ready when s/g
+2.9.2  08/26/2014   - Fix for partitioning PSUM and POFM bits
+                    - Fix for TSM enh inventory media type
+                    - RHEL 7 (min. kernel version 3.10.0-123)
+2.9.1  07/28/2014   - Fix for chgr cmd call during device removal
+                    - Fix for tracing during device removal
+                    - Fixes for PR IOCTL's
+2.9.0  06/29/2014   - RAO SA update and LBP CRC32C added
+2.8.0  05/28/2014   - Enhancements to busy_retry 
+2.7.0  05/15/2014   - fixes for s/g on authomatic dump
+                    - fix for STIOCSETP on LWP set
+                    - Initial support for RHEL 6.5 (min. kernel version 2.6.32-431)
+2.6.0  02/17/2014   - Added Recommend Access Order (RAO)
+                    - noreserve changer default for failover
+2.5.0  01/14/2014   - Added SIOC_ENH_LOG_SENSE 
+                    - Initial support for SLES11 SP3 (min kernel version 3.0.79-0.11)
+2.4.0  12/18/2013   - Added Scatter/Gather for operations use. 
+2.3.0  10/01/2013   - Initial support for RHEL 6.4 (kernel version 2.6.32-358.18.1.el6)
+                    - Changed some indirection to double 
+                      indirection for CPF
+                    - Rerouted some changer commands to go 
+                      through the changer queue
+                    - Added debug tracing for the changer queue
+2.2.0  08/06/2013   - Added optional persistent_n_device 
+                      parameter to enable the ability to 
+                      persistent name non rewind open.
+2.1.0  06/11/2013   - Added busy_retry for TSM
+                    - Added ability to take log sense size 
+                      desired for ITDT
+                    - Added definition to IBM_tape.h MTWEOFI
+                    - Changed default for Jag cartridge to 6
+2.0.0  05/22/2013   - Removed flushing buffer on setposition
+1.76.0 10/22/2012   - Failover fix for bug introduced in 1.75.0
+                    - Initial support for RHEL 5.9 (min kernel version 2.6.18-348)
+1.75.0 10/17/2012   - Implemented Dynamic Runtime Attributes
+                    - Fixed host reboot on microcode load of TS3310
+                    - Fixed crash on drive cable pull
+1.74.0 08/21/2012   - Support for 64-bit position counters
+                    - Fix bug in /proc/scsi/IBMchanger with many changers
+                    - Fix to changer open count when close fails
+1.73.0 05/29/2012   - Allow option for setting TSM 3592 barcode to length 8
+                    - Fix for SLES 11 SP2 hang on failback
+                    - Initial support for SLES11 SP2 (min kernel version 3.0.13-0.27)
+1.72.0 05/22/2012   - Increase inquiry timeout to 180 for rediscovered device
+                    - Fix lin_taped crash on SAS rediscovered dvc, RH 5 & 6
+1.71.0 05/07/2012   - Eliminate multiple "REMOVED" devices on failback
+                    - Implement MTWEOFI (write filemarks with immed=1)
+                    - Fix bug on reading prog. early warning parameter
+                    - Fix potential failover bugs on read and write
+1.70.0 04/20/2012   - Fix crash on SLES 11 SP2 when offline device returns
+                    - Eliminate excessive trailing spaces in read proc
+                    - Increased inquiry timeout to three min. for failover
+1.69.0 04/13/2012   - Fix infinite loop on read proc with small buffer size
+                    - Eliminate excessive print on unsuccessful key registration
+1.68.0 03/13/2012   - Support for LTO 6 media types
+                    - Fix for crash in tape_read_proc and changer_read_proc
+                    - Data direction in failover set position from OUT to NONE
+1.67.0 02/06/2012   - Implemented Programmable Early Warning
+                    - Implemented general Mode Sense function
+                    - Implemented Verify Data
+                    - Initial support for SLES 11 SP2
+                    - Added LTO 6 inquiry strings
+1.66.0 12/08/2011   - Prevent BUSY return status in multiple open changer
+1.65.0 11/15/2011   - Change final PREEMPT to PREEMPT_AND_ABORT for DPF
+1.64.0 11/04/2011   - Serialize IO for two instances of open changer (crash fix)
+1.63.0 11/02/2011   - Catch failover case at beginning of IO requests
+1.62.0 10/14/2011   - Call malloc before lock acquisition in load_unload
+                    - Unit attention and DPF handling for PREVENT_MEDIUM_REMOVAL
+                    - STIOCP: supply missing sili bit case
+                    - reallocate changer data if missing at start of IOCTL
+                    - Change remaining ENOMEM to EOVERFLOW in overlength read
+                    - Allow removal of lin_taped if not running
+1.61.0 09/26/2011   - Allow for short erase in STERASE
+                    - Fix for crash when HBA driver uninstalled w/ alt_pathing
+1.60.0 09/12/2011   - Fix sense copy error by accounting for DID_TARGET_FAILURE
+                    - Fix CPF/DPF error introduced in 1.58.0 in ERP function
+1.59.0 08/25/2011   - Fix for read loop error with SILI bit on 
+1.58.0 08/12/2011   - Implementation of log sense page with subpage support
+                    - Added eot warning IOCTLs
+                    - Made READ SILI bit a changeable parameter
+                    - Change overlength read rc from ENOMEM to EOVERFLOW
+                    - Reset logical block protection on failover
+1.57.0 07/15/2011   - Fix for timeout error introduced in 1.56.0
+                    - Allow option for a SLES 11 and higher "supported" build
+1.56.0 07/11/2011   - Fix handling of deferred EOM flag
+                    - Update changer timeouts to 900
+1.55.0 06/17/2011   - Fix for structure size in logical block protection IOCTLs
+                    - Fix for invalid data returned with max modesense length
+                    - Introduce count to track number of open changer instances
+1.54.0 05/05/2011   - Updated erase timeout for Jag4
+1.53.0 04/13/2011   - Fix for crash when drive is power cycled while open
+1.52.0 04/01/2011   - Clear flags on lin_tape_flush for future opens
+                    - Remove check of open/busy flags during changer open
+1.51.0 02/18/2011   - Send TUR on CPF to clear RS-422 failure unit attention
+                    - Correlate device number with SCSI address in /proc/scsi
+                    - Fix seg fault with pseudo dvc when HBA driver uninstalled
+                    - Provide a method to disable setting density on open
+1.50.0 01/25/2011   - Reduce size of kernel mem allocs to avoid alloc failure
+                    - Support for get/set block-level data protection (3592-E07)
+1.49.0 12/15/2010   - Support for RHEL 6
+                    - Implementation of partitioning for 3592-E07
+                    - Fix for CPF error due to incorrect sense data returned
+1.48.0 11/11/2010   - Return correct mt device number from MTDEVICE IOCTL
+1.47.0 11/10/2010   - Fix for host hang in ERP
+1.46.0 11/03/2010   - Fix for drives becoming unavailable after software reset
+1.45.0 10/26/2010   - Fix CPF failure with cable pull before IO
+1.44.0 10/18/2010   - Fix for crash when drive is reset during tape ops (zLinux)
+1.43.0 10/01/2010   - Fix for crash when drive is reset during tape ops (pLinux)
+1.42.0 07/20/2010   - Reduce size of stchgp_s struct to match user space struct
+1.41.1 06/24/2010   - Fix for memory leak/crash in SLES 11 sp1
+1.40.0 06/02/2010   - Increased page order on read-write in SLES 11 sp1
+                    - Fixed infinite read loop on read failure
+1.39.0 05/06/2010   - Support for SLES 11 SP 1
+1.38.0 04/13/2010   - LTO 5 extended postitioning IOCTLs
+                    - Release descriptor lock before IO on init to avoid hang
+1.37.0 03/15/2010   - Set Dynamic Runtime Attributes
+                    - Removed persistent naming script in favor of new method 
+                    - Fix for duplicate changers in /proc/scsi/IBMchanger
+1.36.0 03/02/2010   - Failover changes to support WORM and Data Safe Mode
+                    - Fix for EFAULT (Bad address) error on read
+1.35.0 02/19/2010   - Fix for corruption on std write followed by passthru read
+1.34.0 02/15/2010   - Fix for I/O errors on zLinux, LTO 5
+1.33.0 02/02/2010   - LTO 5 updates
+1.32.0 12/30/2009   - Failover fixes
+1.31.1 12/04/2009   - LTO 5 partitioning IOCTLs
+                    - Fixes for SLES 11 failover
+1.30.0 11/20/2009   - lin_taped multiple pid fix
+1.29.0 10/26/2009   - SLES 11 failover implementation
+1.28.0 09/02/2009   - SLES 11 device removal/reinitialization fix
+1.27.0 08/25/2009   - Fix for failover failure error on SLES 10 & RHEL 4
+1.26.2 08/04/2009   - Fix for crashes on RHEL 4.7 and SLES 11
+1.25.0 06/23/2009   - Fix for scatter-gather page offset bug on PPC64 SLES11
+                    - Added IOCTLs for persistent reserve
+1.24.0 02/23/2009   - Support for SLES 11, kernel 2.6.27
+                    - Fix for CPF configuration bug introduced in 1.23.0
+1.23.0 01/19/2009   - CPF crash fix: cable pull/uninstall/reinstall sequence
+                    - Boundary check for max failover paths
+1.22.0 11/25/2008   - Fix for crash in RHEL 4.7
+                    - Updates for kernels >= 2.6.24
+                    - DPF crash fix: cable pull/uninstall/reinstall sequence
+1.21.0 10/23/2008   - Reserve logging 
+                    - Add "primary_path" parameter for udev
+1.20.0 10/15/2008   - read_cartridge_location to block transfers into at most
+                      600 elements
+1.19.0 09/15/2008   - IBMtapeutil fix for read_cartridge_location
+1.18.0 08/22/2008   - Fix for struct device attribute in kernels >= 2.6.13
+1.17.0 08/06/2008   - Add udev "dev" file for medium changers in
+                      kernels < 2.6.5 or > 2.6.15
+1.16.0 06/27/2008   - Change GFP_ATOMIC allocations to GFP_KERNEL
+                    - Support for the 3592-E06
+                    - Fix lin_taped restart crash after failback
+1.15.0 05/21/2008   - Release source RPM
+                    - Update 3572 inquiry string to 3572-TL
+1.14.0 04/30/2008   - Make module parameters read/writable
+                    - Fix for CPF key check on CVT
+1.13.0 03/27/2008   - Support for 3572
+1.12.1 03/07/2008   - Fixed hang introduced in 1.12.0
+1.12.0 02/26/2008   - Created "dev" file in sysfs class directory for
+                      udev & udevinfo support
+                    - Changed 3592 (E05) references to support models beyond E05
+1.11.0 12/11/2007   - Fixed seg fault when a logical dvc is accidentally removed
+                    - Fixed return code for SIOC_PASS_THROUGH   
+                    - Implemented read cartridge location IOCTL 
+                    - Removed WWNN filter check for DPF entitlement  
+1.10.0 10/01/2007   - Increaded timeout for best path selection
+                    - Fixed delete_parms_on_device() for failover
+                    - Fixed return code for SIOC_PASS_THROUGH     
+                    - Fixed maximum scsi transfer size for
+                    - running on RHEL5/SLES10 SP1 on IA64 
+                    - Increased max log sense length
+1.9.0 08/20/2007    - Added persistent naming support for RHEL5 and SLES10
+                    - Increased maximum supported tape drives from 256 to 1024
+1.8.0 07/26/2007    - Support LTO4 HH
+1.7.1 08/06/2007    - Fixed max scsi transfer size for RHEL5 on System Z
+1.7.0 07/03/2007    - Fix max scsi transfer size and sg for RHEL5 and SLES10 SP1
+                    - Added MODULE_VERSION and MODULE_PARM_DESC for driver parms
+                    - Added warning message to syslog if release fails on close
+                    - Added wait_on_config driver parameter
+                    - Removed unnecessary messages from lin_tape.errorlog
+                    - Fixed 3592 density recovery on failover
+1.6.0 05/22/2007    - Remove registered key if persistent reservation
+                      preemption fails during failover
+                    - Fixed read memory allocation on fixed block size
+1.5.0 04/30/2007    - Fixed the residual count for RHEL5
+                    - Support SLES10 SP1
+1.4.0 04/30/2007    - Removed unwanted debug messages for direct I/O
+1.3.0 04/12/2007    - Fix system-managed encryption for LTO4
+                    - Support for SIOC_PASS_THROUGH ioctl
+                    - Support direct I/O
+                    - Add driver attributes default_sys_encryption_proxy/write
+1.2.0 04/02/2007    - Support RHEL5
+                    - Fix for ENOMEM on medium changer inventory with large
+                      number of slots
+1.1.0 03/13/2007    - Application-managed encryption now enabled correctly
+                    - Fix for crash during CPF (when command never succeeds)
+                    - Fix for DPF license key validation for TS3200 library
+                    - Fix for daemon crash during data-path failover validation
+1.0.9 02/19/2007    - Fix for hang when loading lin_tape 
+                    - Fix for hang when removing module on SLES9
+1.0.8 02/09/2007    - Fixes for system-managed encryption
+                    - Support for LTO4 encryption
+                    - Fix for data-path-failover on TS3200
+                    - Fix for hang when running stress tests to multiple devices
+                    - Support for Asianux 2.0
+1.0.7 01/18/2007    - Fix for hang on RHEL4 and SLES9 when loading the driver
+1.0.6 01/05/2007    - Support for 3577, LTO4, and system-managed encryption
+                    - Support for RHEL4 and SLES9
+                    - Fix for crash on read or write to changer
+1.0.5 09/29/2006    - Initial release
diff --git a/linux-4.11.patch b/linux-4.11.patch
deleted file mode 100644
index 71fb6d0..0000000
--- a/linux-4.11.patch
+++ /dev/null
@@ -1,180 +0,0 @@
-diff -ur lin_tape-3.0.18/intercept.c lin_tape-3.0.18-4.11/intercept.c
---- lin_tape-3.0.18/intercept.c	2017-02-23 19:14:41.000000000 +0100
-+++ lin_tape-3.0.18-4.11/intercept.c	2017-05-10 00:35:27.637366919 +0200
-@@ -37,6 +37,9 @@
- #include <linux/init.h>
- #include <linux/idr.h>
- #include <scsi/scsi_driver.h>
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(4,11,0)
-+#include <scsi/scsi_transport.h>
-+#endif
- 
- #include "scsi.h"
- #include "pfo.h"
-@@ -1362,7 +1365,12 @@
- 	if (pdev->fdev_num != -1) {
- 		/* Only for fo devices */
- 		/* This 'if' must match the one above in create unique */
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(4,11,0)
-+		sdev->request_queue = blk_alloc_queue_node(GFP_KERNEL, NUMA_NO_NODE);
-+		__scsi_init_queue(sdev->host, sdev->request_queue);
-+#else
- 		sdev->request_queue = __scsi_alloc_queue(sdev->host, NULL);
-+#endif
- 	}
- 
- 	/* set device hierachy so the new dummy dev
-diff -ur lin_tape-3.0.18/lin_tape_ioctl_tape.c lin_tape-3.0.18-4.11/lin_tape_ioctl_tape.c
---- lin_tape-3.0.18/lin_tape_ioctl_tape.c	2017-05-10 00:36:01.952285733 +0200
-+++ lin_tape-3.0.18-4.11/lin_tape_ioctl_tape.c	2017-05-09 21:45:14.236233622 +0200
-@@ -6464,7 +6464,11 @@
- 	} /* if */
- 
- 	tmp_rq = (void*)sdev->request_queue;
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(4,11,0)
-+	scsi_req_init(req);
-+#else
- 	req->cmd_type = REQ_TYPE_BLOCK_PC;
-+#endif
- #ifdef REQ_QUIET
- 	req->cmd_flags |= REQ_QUIET;
- #else
-@@ -6536,15 +6540,27 @@
- 		bio = req->bio;
- 	} /* if */
- 
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(4,11,0)
-+	scsi_req(req)->cmd_len = COMMAND_SIZE(cdb[0]);
-+	memset(scsi_req(req)->cmd, '\0', MAX_CDB_SIZE);
-+	memcpy(scsi_req(req)->cmd, cdb, scsi_req(req)->cmd_len);
-+	scsi_req(req)->sense = sense_data;
-+	scsi_req(req)->sense_len = 0;
-+#else
- 	req->cmd_len = COMMAND_SIZE(cdb[0]);
- 	memset(req->cmd, '\0', MAX_CDB_SIZE);
- 	memcpy(req->cmd, cdb, req->cmd_len);
- 	req->sense = sense_data;
- 	req->sense_len = 0;
-+#endif
- 	req->timeout = timeout;
- 	req->retries = 0;
- 	blk_execute_rq(req->q, NULL, req, 1);
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(4,11,0)
-+	*resid = scsi_req(req)->resid_len;
-+#else
- 	*resid = req->resid_len;
-+#endif
- 	status_code = req->errors;
- 
- 	if(buf_len && !use_sg) {
-diff -ur lin_tape-3.0.18/lin_tape_tape.h lin_tape-3.0.18-4.11/lin_tape_tape.h
---- lin_tape-3.0.18/lin_tape_tape.h	2017-02-23 19:14:41.000000000 +0100
-+++ lin_tape-3.0.18-4.11/lin_tape_tape.h	2017-05-09 21:45:14.236233622 +0200
-@@ -85,7 +85,11 @@
- #if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,9)
- #define KOBJ_CT(kobj) ((kobj) ? atomic_read(&(kobj)->refcount) : 0)
- #else
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(4,11,0)
- #define KOBJ_CT(kobj) ((kobj) ? atomic_read(&(kobj)->kref.refcount) : 0)
-+#else
-+#define KOBJ_CT(kobj) ((kobj) ? kref_read(&(kobj)->kref) : 0)
-+#endif
- #endif
- 
- /* global definitions */
-diff -ur lin_tape-3.0.18/lower.c lin_tape-3.0.18-4.11/lower.c
---- lin_tape-3.0.18/lower.c	2017-02-23 19:14:41.000000000 +0100
-+++ lin_tape-3.0.18-4.11/lower.c	2017-05-10 00:21:19.106042388 +0200
-@@ -69,7 +69,11 @@
- /* Local function prototypes */
- static int lower_scsi_execute(struct scsi_device *sdev,
- 				struct apfo_scsi_command *pfo_cmd,
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(4,11,0)
-+				unsigned char *local_raw_sense, struct scsi_sense_hdr *sshdr);
-+#else
- 				unsigned char *local_raw_sense);
-+#endif
- 
- /** Look at the errors from the SCSI command,
-  * translate them to OS independent values.
-@@ -267,11 +271,20 @@
- 		/* SCSI Command from decide code */
- 		result = scsi_execute(sdev, pfo_cmd->scsi_cmd,
- 			pfo_cmd->data_direction, pfo_cmd->buffer,
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(4,11,0)
- 			pfo_cmd->bufflen, local_raw_sense, pfo_cmd->timeout,
- 			pfo_cmd->retries, pfo_cmd->flags, &pfo_cmd->resid_len);
-+#else
-+			pfo_cmd->bufflen, local_raw_sense, &local_sense_data, pfo_cmd->timeout,
-+			pfo_cmd->retries, pfo_cmd->flags, 0, &pfo_cmd->resid_len);
-+#endif
- 	} else {
- 		/* SCSI Command from user space */
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(4,11,0)
- 		result = lower_scsi_execute(sdev, pfo_cmd, local_raw_sense);
-+#else
-+		result = lower_scsi_execute(sdev, pfo_cmd, local_raw_sense, &local_sense_data);
-+#endif
- 	}
- 	/* Release this path */
- 	scsi_device_put(sdev);
-@@ -440,7 +453,11 @@
-  */
- static int lower_scsi_execute(struct scsi_device *sdev,
- 				struct apfo_scsi_command *pfo_cmd,
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(4,11,0)
-+				unsigned char *local_raw_sense, struct scsi_sense_hdr *sshdr) {
-+#else
- 				unsigned char *local_raw_sense) {
-+#endif
- 
- 	int err = 0;
- 	struct request *rq;
-@@ -452,7 +469,11 @@
- 		return DRIVER_ERROR << 24;
- 	}
- 
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(4,11,0)
-+	scsi_req_init(rq);
-+#else
- 	rq->cmd_type = REQ_TYPE_BLOCK_PC;
-+#endif
- 	rq->cmd_flags |= pfo_cmd->flags;
- 
- 	if ((pfo_cmd->bufflen > 0) && (pfo_cmd->data_direction != DMA_NONE)) {
-@@ -533,11 +554,19 @@
- 		}
- 	}
- 
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(4,11,0)
-+	scsi_req(rq)->cmd_len = pfo_cmd->cmd_len;
-+	memset(scsi_req(rq)->cmd, 0, BLK_MAX_CDB);
-+	memcpy(scsi_req(rq)->cmd, pfo_cmd->scsi_cmd, pfo_cmd->cmd_len);
-+	scsi_req(rq)->sense = local_raw_sense;
-+	scsi_req(rq)->sense_len = 0;
-+#else
- 	rq->cmd_len = pfo_cmd->cmd_len;
- 	memset(rq->cmd, 0, BLK_MAX_CDB);
- 	memcpy(rq->cmd, pfo_cmd->scsi_cmd, pfo_cmd->cmd_len);
- 	rq->sense = local_raw_sense;
- 	rq->sense_len = 0;
-+#endif
- 	rq->timeout = pfo_cmd->timeout;
- 	rq->retries = pfo_cmd->retries;
- 	rq->end_io_data = pfo_cmd;
-@@ -551,8 +580,15 @@
- 			DBG_ERROR("unmap returns: %d\n", err);
- 		}
- 	}
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(4,11,0)
-+	pfo_cmd->resid_len = scsi_req(rq)->resid_len;
-+	pfo_cmd->sense_len = scsi_req(rq)->sense_len;
-+	if (sshdr)
-+		scsi_normalize_sense(scsi_req(rq)->sense, scsi_req(rq)->sense_len, sshdr);
-+#else
- 	pfo_cmd->resid_len = rq->resid_len;
- 	pfo_cmd->sense_len = rq->sense_len;
-+#endif
- 	pfo_cmd->errors = rq->errors;
- 
- 	blk_put_request(rq);
diff --git a/linux-4.12.patch b/linux-4.12.patch
deleted file mode 100644
index 14ae055..0000000
--- a/linux-4.12.patch
+++ /dev/null
@@ -1,52 +0,0 @@
---- lin_tape-3.0.20/lin_tape_ioctl_tape.c.orig	2017-08-01 15:02:29.400676838 +0200
-+++ lin_tape-3.0.20/lin_tape_ioctl_tape.c	2017-08-01 15:08:53.208605776 +0200
-@@ -6554,7 +6554,11 @@
- 	req->sense_len = 0;
- #endif
- 	req->timeout = timeout;
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(4,12,0)
-+	scsi_req(req)->retries = 0;
-+#else
- 	req->retries = 0;
-+#endif
- 	blk_execute_rq(req->q, NULL, req, 1);
- #if LINUX_VERSION_CODE >= KERNEL_VERSION(4,11,0)
- 	*resid = scsi_req(req)->resid_len;
-@@ -6563,7 +6567,11 @@
- #else
- 	*resid = req->resid_len;
- #endif
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(4,12,0)
-+	status_code = scsi_req(req)->result;
-+#else
- 	status_code = req->errors;
-+#endif
- 
- 	if(buf_len && !use_sg) {
- 		buf_ptr = (char*)buffer;
---- lin_tape-3.0.20/lower.c.orig	2017-08-01 15:09:52.565988839 +0200
-+++ lin_tape-3.0.20/lower.c	2017-08-01 15:11:23.877092947 +0200
-@@ -568,7 +568,11 @@
- 	rq->sense_len = 0;
- #endif
- 	rq->timeout = pfo_cmd->timeout;
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(4,12,0)
-+	scsi_req(rq)->retries = pfo_cmd->retries;
-+#else
- 	rq->retries = pfo_cmd->retries;
-+#endif
- 	rq->end_io_data = pfo_cmd;
- 
- 	blk_execute_rq(rq->q, NULL, rq, 1);
-@@ -589,7 +593,11 @@
- 	pfo_cmd->resid_len = rq->resid_len;
- 	pfo_cmd->sense_len = rq->sense_len;
- #endif
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(4,12,0)
-+	pfo_cmd->errors = scsi_req(rq)->result;
-+#else
- 	pfo_cmd->errors = rq->errors;
-+#endif
- 
- 	blk_put_request(rq);
- 	return pfo_cmd->errors;
diff --git a/linux-4.13.patch b/linux-4.13.patch
deleted file mode 100644
index ae03180..0000000
--- a/linux-4.13.patch
+++ /dev/null
@@ -1,28 +0,0 @@
---- lin_tape-3.0.20/lin_tape_ioctl_tape.c~	2017-09-16 10:27:48.000000000 +0200
-+++ lin_tape-3.0.20/lin_tape_ioctl_tape.c	2017-09-16 10:31:03.642711575 +0200
-@@ -6465,7 +6465,11 @@
- 
- 	tmp_rq = (void*)sdev->request_queue;
- #if LINUX_VERSION_CODE >= KERNEL_VERSION(4,11,0)
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(4,13,0)
-+	scsi_req_init(scsi_req(req));
-+#else
- 	scsi_req_init(req);
-+#endif
- #else
- 	req->cmd_type = REQ_TYPE_BLOCK_PC;
- #endif
---- lin_tape-3.0.20/lower.c~	2017-09-16 10:27:48.000000000 +0200
-+++ lin_tape-3.0.20/lower.c	2017-09-16 10:32:08.377461388 +0200
-@@ -470,7 +470,11 @@
- 	}
- 
- #if LINUX_VERSION_CODE >= KERNEL_VERSION(4,11,0)
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(4,13,0)
-+	scsi_req_init(scsi_req(rq));
-+#else
- 	scsi_req_init(rq);
-+#endif
- #else
- 	rq->cmd_type = REQ_TYPE_BLOCK_PC;
- #endif
diff --git a/linux-4.4.169.patch b/linux-4.4.169.patch
deleted file mode 100644
index 48ecbd8..0000000
--- a/linux-4.4.169.patch
+++ /dev/null
@@ -1,12 +0,0 @@
---- lin_tape-3.0.33/lin_tape_scsi_tape.c~	2018-12-28 14:09:16.000000000 +0100
-+++ lin_tape-3.0.33/lin_tape_scsi_tape.c	2018-12-28 14:12:49.237558696 +0100
-@@ -11843,6 +11843,9 @@
- #elif LINUX_VERSION_CODE >= KERNEL_VERSION(4,6,0)
- 	mapped_pages = get_user_pages((ulong)user_location, number_pages,
- 			                      rw, 0, pages, NULL);
-+#elif LINUX_VERSION_CODE >= KERNEL_VERSION(4,4,169)
-+	mapped_pages = get_user_pages(current, current->mm,
-+		(ulong)user_location, number_pages, rw ? FOLL_WRITE : 0, pages, NULL);
- #else
- 	mapped_pages = get_user_pages(current, current->mm,
- 		(ulong)user_location, number_pages, rw, 0, pages, NULL);
diff --git a/linux-4.9.patch b/linux-4.9.patch
deleted file mode 100644
index c713a0f..0000000
--- a/linux-4.9.patch
+++ /dev/null
@@ -1,37 +0,0 @@
---- lin_tape-3.0.18/lin_tape_scsi_tape.c~	2017-02-23 19:14:41.000000000 +0100
-+++ lin_tape-3.0.18/lin_tape_scsi_tape.c	2017-05-09 21:28:19.916320963 +0200
-@@ -11838,13 +11838,9 @@
- 
- 	down_read(&current->mm->mmap_sem);
- #if !defined (UBUNTUVERSION)
--#if LINUX_VERSION_CODE == KERNEL_VERSION(4,4,73) \
--	|| (LINUX_VERSION_CODE >= KERNEL_VERSION(4,4,92) && LINUX_VERSION_CODE < KERNEL_VERSION(4,4,103)) \
--	|| defined(SLESKERNEL_4_4_103_6) \
--	|| (LINUX_VERSION_CODE >= KERNEL_VERSION(4,4,114) && LINUX_VERSION_CODE < KERNEL_VERSION(4,6,0) && !defined(SLESSP2))
--	mapped_pages = get_user_pages((unsigned long)user_location, number_pages,
--			                      rw, pages, NULL);
--
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(4,9,0)
-+	mapped_pages = get_user_pages((ulong)user_location, number_pages,
-+			                      rw ? FOLL_WRITE : 0, pages, NULL);
- #elif LINUX_VERSION_CODE >= KERNEL_VERSION(4,6,0)
- 	mapped_pages = get_user_pages((ulong)user_location, number_pages,
- 			                      rw, 0, pages, NULL);
---- lin_tape-3.0.33/stmp.c~	2018-06-01 20:01:49.000000000 +0200
-+++ lin_tape-3.0.33/stmp.c	2018-10-27 11:39:03.873330720 +0200
-@@ -5061,12 +5061,13 @@
- 
-         /* Try to fault in all of the necessary pages */
-         /* rw==READ means read from drive, write into memory area */
--#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4,4,114) && LINUX_VERSION_CODE < KERNEL_VERSION(4,6,0) && !defined(SLESSP2))
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(4,9,0)
- 	res = get_user_pages_unlocked(
- 		uaddr,
- 		nr_pages,
-+		rw == READ ? FOLL_WRITE : 0,
- 		pages,
--		rw == READ ? FOLL_WRITE : 0); /* don't force */
-+		NULL);
- 
- #elif LINUX_VERSION_CODE >= KERNEL_VERSION(4,4,21)
- 	res = get_user_pages_unlocked(
================================================================

---- gitweb:

http://git.pld-linux.org/gitweb.cgi/packages/lin_tape.git/commitdiff/dc1a7dc8be58e0c1f9e3e6eca5dce1e7dbab1668



More information about the pld-cvs-commit mailing list