diff -u linux-4.1.5-pax/drivers/scsi/sr.c linux-4.1.5-pax/drivers/scsi/sr.c
--- linux-4.1.5-pax/drivers/scsi/sr.c	2015-06-22 11:15:57.588675047 +0200
+++ linux-4.1.5-pax/drivers/scsi/sr.c	2015-08-15 19:45:13.148490040 +0200
@@ -317,8 +317,8 @@
 	int result = SCpnt->result;
 	unsigned int this_count = scsi_bufflen(SCpnt);
 	unsigned int good_bytes = (result == 0 ? this_count : 0);
-	int block_sectors = 0;
-	long error_sector;
+	unsigned int block_sectors = 0;
+	sector_t error_sector;
 	struct scsi_cd *cd = scsi_cd(SCpnt->request->rq_disk);
 
 #ifdef DEBUG
@@ -351,9 +351,12 @@
 			if (cd->device->sector_size == 2048)
 				error_sector <<= 2;
 			error_sector &= ~(block_sectors - 1);
-			good_bytes = (error_sector -
-				      blk_rq_pos(SCpnt->request)) << 9;
-			if (good_bytes < 0 || good_bytes >= this_count)
+			if (error_sector >= blk_rq_pos(SCpnt->request)) {
+				good_bytes = (error_sector -
+					      blk_rq_pos(SCpnt->request)) << 9;
+				if (good_bytes >= this_count)
+					good_bytes = 0;
+			} else
 				good_bytes = 0;
 			/*
 			 * The SCSI specification allows for the value
