patch-2.4.0-test2 linux/drivers/scsi/sd.c

Next file: linux/drivers/scsi/seagate.c
Previous file: linux/drivers/scsi/scsi_scan.c
Back to the patch index
Back to the overall index

diff -u --recursive --new-file v2.4.0-test1/linux/drivers/scsi/sd.c linux/drivers/scsi/sd.c
@@ -338,6 +338,15 @@
 			this_count = this_count >> 2;
 		}
 	}
+	if (dpnt->device->sector_size == 4096) {
+		if ((block & 7) || (SCpnt->request.nr_sectors & 7)) {
+			printk("sd.c:Bad block number requested");
+			return 0;
+		} else {
+			block = block >> 3;
+			this_count = this_count >> 3;
+		}
+	}
 	switch (SCpnt->request.cmd) {
 	case WRITE:
 		if (!dpnt->device->writeable) {
@@ -588,6 +597,11 @@
 				if (block_sectors < 4)
 					block_sectors = 4;
 				break;
+			case 4096:
+				error_sector <<=3;
+				if (block_sectors < 8)
+					block_sectors = 8;
+				break;
 			case 256:
 				error_sector >>= 1;
 				break;
@@ -889,7 +903,7 @@
 			 */
 			rscsi_disks[i].capacity = 0;
 		}
-		if (sector_size == 2048) {
+		if (sector_size > 1024) {
 			int m;
 
 			/*
@@ -899,7 +913,7 @@
 			 * of partial sectors.
 			 */
 			for (m = i << 4; m < ((i + 1) << 4); m++) {
-				sd_blocksizes[m] = 2048;
+				sd_blocksizes[m] = sector_size;
 			}
 		} {
 			/*

FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen (who was at: slshen@lbl.gov)