File mtx-1.3.11-large-slots.patch of Package mtx

--- mtxl.c.orig	2014-03-03 06:50:09.000000000 +0100
+++ mtxl.c	2014-03-03 06:52:54.000000000 +0100
@@ -39,6 +39,8 @@
 /* zap the following define when we finally add real import/export support */
 #define IMPORT_EXPORT_HACK 1 /* for the moment, import/export == storage */
 
+#define ElemsPerRES 5000  /* WEK only so many element per SCSI Read Element Status */
+
 /* First, do some SCSI routines: */
 
 /* the camlib is used on FreeBSD. */
@@ -1131,6 +1143,7 @@
 	int empty_idx = 0;
 	boolean is_attached = false;
 	int i,j;
+	int FirstElem, NumElem, NumThisRES;  /* WEK */
 
 	ElementModeSense_T *mode_sense = NULL;
 
@@ -1195,14 +1208,31 @@
 	{
 #ifdef DEBUG
 		fprintf(stderr,"Using original element status polling method (storage, import/export, drivers etc independantly)\n");
+		fprintf(stderr,"Storage start %d, Num %d, max %d\n", mode_sense->StorageStart, mode_sense->NumStorage - mode_sense->NumImportExport, mode_sense->MaxReadElementStatusData);  /* WEK */
 #endif
 		flags->elementtype = StorageElement; /* sigh! */
+
+	NumElem = mode_sense->NumStorage - mode_sense->NumImportExport;
+        FirstElem = mode_sense->StorageStart;
+
+	do
+	{
+		if  (NumElem > ElemsPerRES)
+			{
+			NumThisRES = ElemsPerRES;
+			}
+		else
+			{
+			NumThisRES = NumElem;
+			}
+
 		DataBuffer = SendElementStatusRequest(	MediumChangerFD, RequestSense,
 												inquiry_info, flags,
-												mode_sense->StorageStart,
+												FirstElem, /* WEK */
 												/* adjust for import/export. */
-												mode_sense->NumStorage - mode_sense->NumImportExport,
-												mode_sense->MaxReadElementStatusData);
+												NumThisRES, /* WEK */
+												ElemsPerRES * 52 +120);
+												/* mode_sense->MaxReadElementStatusData); WEK */
 
 		if (!DataBuffer)
 		{
@@ -1224,6 +1254,10 @@
 			DataBuffer,ElementStatus,mode_sense,NULL);
 
 		free(DataBuffer); /* sigh! */
+	FirstElem += ElemsPerRES;
+	NumElem -= ElemsPerRES;
+
+	} while ( NumElem > 0 );  /* WEK */
 
 		/* --------------IMPORT/EXPORT--------------- */
 		/* Next let's see if we need to do Import/Export: */
@@ -1237,7 +1271,8 @@
 													inquiry_info, flags,
 													mode_sense->ImportExportStart,
 													mode_sense->NumImportExport,
-													mode_sense->MaxReadElementStatusData);
+												ElemsPerRES * 52 +120);
+												/* mode_sense->MaxReadElementStatusData); WEK */
 
 			if (!DataBuffer)
 			{
@@ -1273,7 +1308,8 @@
 												inquiry_info, flags,
 												mode_sense->DataTransferStart,
 												mode_sense->NumDataTransfer,
-												mode_sense->MaxReadElementStatusData);
+												ElemsPerRES * 52 +120);
+												/* mode_sense->MaxReadElementStatusData); WEK */
 		if (!DataBuffer)
 		{
 #ifdef DEBUG
@@ -1312,7 +1348,8 @@
 													inquiry_info, flags,
 													mode_sense->MediumTransportStart,
 													1, /* only get 1, sigh. */
-													mode_sense->MaxReadElementStatusData);
+												ElemsPerRES * 52 +120);
+												/* mode_sense->MaxReadElementStatusData); WEK */
 			if (!DataBuffer)
 			{
 #ifdef DEBUG
openSUSE Build Service is sponsored by