Skip to contentSkip to conversation

Linux-2.4.15-pre9

PATCH In review Linus Torvalds 10 participants 16 messages Nov 22, 2001 – Nov 26, 2001

Subsystems (10)
VFS SCSI Block layer s390 +6 more subsystems
lore
Share & tools
lore
#0 lore raw

David Mosberger noticed that SCHED_FIFO has been broken for a while, and obviously very few people really cared, but it should be fixed now.

The USB update that I had originally documented as being part of pre8 was actually in my in-file, and is _really_ there in pre9, along with a bonus usbnet update.

I think I'm ready to hand this over to Marcelo.

Linus

-----

pre9:
- David Brownell: usbnet update
- Greg KH: USB and PCI hotplug update
- Ingo/me: fix SCHED_FIFO for UP/SMP for good (flw).
- Add back direct_IO now that it works again.

pre8:
- Richard Henderson: alpha update
- Andrew Morton: fix ext3/minix/sysv fsync behaviour.

pre7:
- Jeff Garzik: network driver updates
- Christoph Hellwig: UFS filesystem byteorder cleanups
- me: modified Andrea VM page allocator tuning

pre6:
- Russell King: /proc/cpuinfo for ARM
- Paul Mackerras: PPC update (cpuinfo etc)
- Nicolas Aspert: fix Intel 8xx agptlb flush
- Marko Myllynen: "Lindent" doesn't really need bash ;)
- Alexander Viro: /proc/cpuinfo for s390/s390x/sh, /proc/pci cleanup
- Alexander Viro: make lseek work on seqfiles

pre5:
- Greg KH: enable hotplug driver support
- Andrea Arcangeli: remove bogus sanity check
- David Mosberger: /proc/cpuinfo and scsi scatter-gather for ia64
- David Hinds: 16-bit pcmcia network driver updates/cleanups
- Hugh Dickins: remove some stale code from VM
- David Miller: /proc/cpuinfo for sparc, sparc fork bug fix, network fixes, warning fixes
- Peter Braam: intermezzo update
- Greg KH: USB updates
- Ivan Kokshaysky: /proc/cpuinfo for alpha
- David Woodhouse: jffs2 - remove dead code, remove gcc3 warning
- Hugh Dickins: fix kiobuf page allocation/deallocation

pre4:
- Mikael Pettersson: make proc_misc happy without modules
- Arjan van de Ven: clean up acpitable implementation ("micro-acpi")
- Anton Altaparmakov: LDM partition code update
- Alan Cox: final (yeah, sure) small missing pieces
- Andrey Savochkin/Andrew Morton: eepro100 config space save/restore over suspend
- Arjan van de Ven: remove power from pcmcia socket on card remove
- Greg KH: USB updates
- Neil Brown: multipath updates
- Martin Dalecki: fix up some "asmlinkage" routine markings

pre3:
- Alan Cox: more driver merging
- Al Viro: make ext2 group allocation more readable

pre2:
- Ivan Kokshaysky: fix alpha dec_and_lock with modules, for alpha config entry
- Kai Germaschewski: ISDN updates
- Jeff Garzik: network driver updates, sysv fs update
- Kai Mäkisara: SCSI tape update
- Alan Cox: large drivers merge
- Nikita Danilov: reiserfs procfs information
- Andrew Morton: ext3 merge
- Christoph Hellwig: vxfs livelock fix
- Trond Myklebust: NFS updates
- Jens Axboe: cpqarray + cciss dequeue fix
- Tim Waugh: parport_serial base_baud setting
- Matthew Dharm: usb-storage Freecom driver fixes
- Dave McCracken: wait4() thread group race fix

pre1:
- me: fix page flags race condition Andrea found
- David Miller: sparc and network updates
- various: fix loop driver that thought it was part of the VM system
- me: teach DRM about VM_RESERVED
- Alan Cox: more merging

#1 lore raw
Quoted 2 lines · Linus Torvalds

I think I'm ready to hand this over to Marcelo.

Aren't you going to include Tim Schmielau's patch to handle uptime larger than 497 days? It is a cool feature we always liked to have.

Cheers,

Anuradha

Signature · 4 lines
Debian GNU/Linux (kernel 2.4.13)

Unix is a Registered Bell of AT&T Trademark Laboratories.
		-- Donn Seeley
#2 lore raw
Quoted 7 lines · Anuradha Ratnaweera
Quoted 2 lines · Linus Torvalds

I think I'm ready to hand this over to Marcelo.

Aren't you going to include Tim Schmielau's patch to handle uptime larger than 497 days? It is a cool feature we always liked to have.

Quite frankly, right now I'm in "handle only bugs that can crash the system mode". Anything that takes 497 days to see is fairly low on my priority list. My highest priority, in fact, is to get 2.4.15 out without any embarrassment.

Because it's not as if time stops when Marcelo takes over. I've suggested to him that he wait for a while just to see what the real problem spots are, but he'll have a full-time job integrating patches.

Note that I'll probably do the same thing: when I release 2.4.15, I'll at the same time release a 2.5.0 that is identical except for version number (that makes synchronization easier later on). And I'll probably _not_ start accepting all the big waiting patches immediately, I'd rather wait for at least a week or two to see that there aren't any other issues.

It's much easier doing some of the IO patches in particular knowing that the base you start out from is stable.

Linus

#3 lore raw
Quoted 4 lines · Linus Torvalds

Quite frankly, right now I'm in "handle only bugs that can crash the system mode". Anything that takes 497 days to see is fairly low on my priority list. My highest priority, in fact, is to get 2.4.15 out without any embarrassment.

Umm...
a) /proc/interrupts has buffer overflows.
b) I have a patch that should fix them (conversion to seq_file,
done for all architectures)
c) while completely straightforward, it's large (every subarchitecture
of m68k and mips seems to have its own get_irq_list()) and may contain typos in architectures I've no access to.
d) holes had been there for quite a while and it's either
"cat /proc/interrupts always causes memory corruption" or "everything OK"

I'm not quite sure where it is - if we were in -pre<small> I'd definitely say that it's worth merging, so that trivial typos could be caught before the release; the hole obviously deserves fixing. OTOH, merging that in -final means that we are risking "2.4.15 doesn't compile on <architecture>"...

Comments?

#4 lore raw
In reply to Linus Torvalds
Quoted 19 lines · Alexander Viro
Quoted 4 lines · Linus Torvalds

Quite frankly, right now I'm in "handle only bugs that can crash the system mode". Anything that takes 497 days to see is fairly low on my priority list. My highest priority, in fact, is to get 2.4.15 out without any embarrassment.

Umm...
a) /proc/interrupts has buffer overflows.
b) I have a patch that should fix them (conversion to seq_file,
done for all architectures)
c) while completely straightforward, it's large (every subarchitecture
of m68k and mips seems to have its own get_irq_list()) and may contain typos in architectures I've no access to.
d) holes had been there for quite a while and it's either
"cat /proc/interrupts always causes memory corruption" or "everything OK"

Quoted 4 lines

I'm not quite sure where it is - if we were in -pre<small> I'd definitely say that it's worth merging, so that trivial typos could be caught before the release; the hole obviously deserves fixing. OTOH, merging that in -final means that we are risking "2.4.15 doesn't compile on <architecture>"...

If I understand things right, at least a few arches (PPC, MIPS, m68k, others) needs to implement show_trace_task anyhow, so we're already at 2.4.15 doesn't compile on <architecture>. I'd vote for a quick typo check and submit. :)

Signature · 2 lines
Tom Rini (TR1265)
http://gate.crashing.org/~trini/
#5 lore raw

PATCH 2.5.0 kill read_ahead array.

In reply to Linus Torvalds

The subject says it all...

This is removing the "write only" read_ahead sparse array from all the places where it's "used" by now.
This is just saving some memmory.

drivers/acorn/block/mfmhd.c +0 -1
diff -urN linux/drivers/acorn/block/mfmhd.c linux-new/drivers/acorn/block/mfmhd.c
@@ -1444,7 +1444,6 @@
 	hdc63463_irqpollmask	= irqmask;
 
 	blk_init_queue(BLK_DEFAULT_QUEUE(MAJOR_NR), DEVICE_REQUEST);
-	read_ahead[MAJOR_NR] = 8;	/* 8 sector (4kB?) read ahread */
 
 	add_gendisk(&mfm_gendisk);
 
drivers/block/DAC960.c +0 -6
diff -urN linux/drivers/block/DAC960.c linux-new/drivers/block/DAC960.c
@@ -2033,10 +2033,6 @@
   blksize_size[MajorNumber] = Controller->BlockSizes;
   max_sectors[MajorNumber] = Controller->MaxSectorsPerRequest;
   /*
-    Initialize Read Ahead to 128 sectors.
-  */
-  read_ahead[MajorNumber] = 128;
-  /*
     Complete initialization of the Generic Disk Information structure.
   */
   Controller->GenericDiskInfo.major = MajorNumber;
@@ -5481,8 +5477,6 @@
 				       .part[MINOR(Inode->i_rdev)]
 				       .nr_sects << 9,
 		      (u64 *) Argument);
-    case BLKRAGET:
-    case BLKRASET:
     case BLKFLSBUF:
     case BLKBSZGET:
     case BLKBSZSET:
drivers/block/acsi.c +0 -1
diff -urN linux/drivers/block/acsi.c linux-new/drivers/block/acsi.c
@@ -1786,7 +1786,6 @@
 	STramMask = ATARIHW_PRESENT(EXTD_DMA) ? 0x00000000 : 0xff000000;
 	
 	blk_init_queue(BLK_DEFAULT_QUEUE(MAJOR_NR), DEVICE_REQUEST);
-	read_ahead[MAJOR_NR] = 8;		/* 8 sector (4kB) read-ahead */
 	add_gendisk(&acsi_gendisk);
 
 #ifdef CONFIG_ATARI_SLM
drivers/block/blkpg.c +1 -12
diff -urN linux/drivers/block/blkpg.c linux-new/drivers/block/blkpg.c
@@ -210,22 +210,11 @@
 				return -EFAULT;
 			set_device_ro(dev, intval);
 			return 0;
+
 		case BLKROGET:
 			intval = (is_read_only(dev) != 0);
 			return put_user(intval, (int *)(arg));
 
-		case BLKRASET:
-			if(!capable(CAP_SYS_ADMIN))
-				return -EACCES;
-			if(arg > 0xff)
-				return -EINVAL;
-			read_ahead[MAJOR(dev)] = arg;
-			return 0;
-		case BLKRAGET:
-			if (!arg)
-				return -EINVAL;
-			return put_user(read_ahead[MAJOR(dev)], (long *) arg);
-
 		case BLKFLSBUF:
 			if(!capable(CAP_SYS_ADMIN))
 				return -EACCES;
drivers/block/cciss.c +0 -3
diff -urN linux/drivers/block/cciss.c linux-new/drivers/block/cciss.c
@@ -412,8 +412,6 @@
 	case BLKBSZGET:
 	case BLKROSET:
 	case BLKROGET:
-	case BLKRASET:
-	case BLKRAGET:
 	case BLKPG:
 	case BLKELVGET:
 	case BLKELVSET:
@@ -1948,7 +1946,6 @@
 	/* fill in the other Kernel structs */
 	blksize_size[MAJOR_NR+i] = hba[i]->blocksizes;
         hardsect_size[MAJOR_NR+i] = hba[i]->hardsizes;
-        read_ahead[MAJOR_NR+i] = READ_AHEAD;
 
 	/* Set the pointers to queue functions */ 
 	q->back_merge_fn = cpq_back_merge_fn;
drivers/block/cpqarray.c +0 -3
diff -urN linux/drivers/block/cpqarray.c linux-new/drivers/block/cpqarray.c
@@ -527,7 +527,6 @@
 		blk_queue_headactive(q, 0);
 		blksize_size[MAJOR_NR+i] = ida_blocksizes + (i*256);
 		hardsect_size[MAJOR_NR+i] = ida_hardsizes + (i*256);
-		read_ahead[MAJOR_NR+i] = READ_AHEAD;
 
 		q->back_merge_fn = cpq_back_merge_fn;
 		q->front_merge_fn = cpq_front_merge_fn;
@@ -1249,8 +1248,6 @@
 	case BLKBSZGET:
 	case BLKROSET:
 	case BLKROGET:
-	case BLKRASET:
-	case BLKRAGET:
 	case BLKELVGET:
 	case BLKELVSET:
 	case BLKPG:
drivers/block/floppy.c +0 -2
diff -urN linux/drivers/block/floppy.c linux-new/drivers/block/floppy.c
@@ -3450,8 +3450,6 @@
 	switch (cmd) {
 		case BLKROSET:
 		case BLKROGET:
-		case BLKRASET:
-		case BLKRAGET:
 		case BLKFLSBUF:
 			return blk_ioctl(device, cmd, param);
 	}
drivers/block/ll_rw_blk.c +0 -4
diff -urN linux/drivers/block/ll_rw_blk.c linux-new/drivers/block/ll_rw_blk.c
@@ -64,10 +64,6 @@
  */
 spinlock_t io_request_lock = SPIN_LOCK_UNLOCKED;
 
-/* This specifies how many sectors to read ahead on the disk. */
-
-int read_ahead[MAX_BLKDEV];
-
 /* blk_dev_struct is:
  *	*request_fn
  *	*current_request
drivers/block/paride/pcd.c +0 -1
diff -urN linux/drivers/block/paride/pcd.c linux-new/drivers/block/paride/pcd.c
@@ -356,7 +356,6 @@
 	}
 
 	blk_init_queue(BLK_DEFAULT_QUEUE(MAJOR_NR), DEVICE_REQUEST);
-	read_ahead[MAJOR_NR] = 8;	/* 8 sector (4kB) read ahead */
 
 	for (i=0;i<PCD_UNITS;i++) pcd_blocksizes[i] = 1024;
         blksize_size[MAJOR_NR] = pcd_blocksizes;
drivers/block/paride/pd.c +1 -4
diff -urN linux/drivers/block/paride/pd.c linux-new/drivers/block/paride/pd.c
@@ -397,8 +397,7 @@
         }
 	q = BLK_DEFAULT_QUEUE(MAJOR_NR);
 	blk_init_queue(q, DEVICE_REQUEST);
-        read_ahead[MAJOR_NR] = 8;       /* 8 sector (4kB) read ahead */
-        
+
 	pd_gendisk.major = major;
 	pd_gendisk.major_name = name;
 	add_gendisk(&pd_gendisk);
@@ -483,8 +482,6 @@
 	    case BLKGETSIZE64:
 	    case BLKROSET:
 	    case BLKROGET:
-	    case BLKRASET:
-	    case BLKRAGET:
 	    case BLKFLSBUF:
 	    case BLKPG:
 		return blk_ioctl(inode->i_rdev, cmd, arg);
drivers/block/paride/pf.c +1 -4
diff -urN linux/drivers/block/paride/pf.c linux-new/drivers/block/paride/pf.c
@@ -412,8 +412,7 @@
 	q->back_merge_fn = pf_back_merge_fn;
 	q->front_merge_fn = pf_front_merge_fn;
 	q->merge_requests_fn = pf_merge_requests_fn;
-        read_ahead[MAJOR_NR] = 8;       /* 8 sector (4kB) read ahead */
-        
+
 	for (i=0;i<PF_UNITS;i++) pf_blocksizes[i] = 1024;
 	blksize_size[MAJOR_NR] = pf_blocksizes;
 	for (i=0;i<PF_UNITS;i++)
@@ -482,8 +481,6 @@
                 return put_user((u64)PF.capacity << 9,(u64 *)arg);
 	    case BLKROSET:
 	    case BLKROGET:
-	    case BLKRASET:
-	    case BLKRAGET:
 	    case BLKFLSBUF:
 		return blk_ioctl(inode->i_rdev, cmd, arg);
             default:
drivers/block/ps2esdi.c +0 -3
diff -urN linux/drivers/block/ps2esdi.c linux-new/drivers/block/ps2esdi.c
@@ -181,7 +181,6 @@
 	}
 	/* set up some global information - indicating device specific info */
 	blk_init_queue(BLK_DEFAULT_QUEUE(MAJOR_NR), DEVICE_REQUEST);
-	read_ahead[MAJOR_NR] = 8;	/* 8 sector (4kB) read ahead */
 
 	/* some minor housekeeping - setup the global gendisk structure */
 	add_gendisk(&ps2esdi_gendisk);
@@ -1116,8 +1115,6 @@
 		case BLKGETSIZE64:
 		case BLKROSET:
 		case BLKROGET:
-		case BLKRASET:
-		case BLKRAGET:
 		case BLKFLSBUF:
 		case BLKBSZGET:
 		case BLKBSZSET:
drivers/block/xd.c +0 -4
diff -urN linux/drivers/block/xd.c linux-new/drivers/block/xd.c
@@ -172,7 +172,6 @@
 	}
 	devfs_handle = devfs_mk_dir (NULL, xd_gendisk.major_name, NULL);
 	blk_init_queue(BLK_DEFAULT_QUEUE(MAJOR_NR), DEVICE_REQUEST);
-	read_ahead[MAJOR_NR] = 8;	/* 8 sector (4kB) read ahead */
 	add_gendisk(&xd_gendisk);
 	xd_geninit();
 
@@ -355,8 +354,6 @@
 		case BLKFLSBUF:
 		case BLKROSET:
 		case BLKROGET:
-		case BLKRASET:
-		case BLKRAGET:
 		case BLKPG:
 			return blk_ioctl(inode->i_rdev, cmd, arg);
 
@@ -1109,7 +1106,6 @@
 	blk_cleanup_queue(BLK_DEFAULT_QUEUE(MAJOR_NR));
 	blk_size[MAJOR_NR] = NULL;
 	hardsect_size[MAJOR_NR] = NULL;
-	read_ahead[MAJOR_NR] = 0;
 	del_gendisk(&xd_gendisk);
 	release_region(xd_iobase,4);
 }
drivers/cdrom/aztcd.c +0 -1
diff -urN linux/drivers/cdrom/aztcd.c linux-new/drivers/cdrom/aztcd.c
@@ -1929,7 +1929,6 @@
 	}
 	blk_init_queue(BLK_DEFAULT_QUEUE(MAJOR_NR), DEVICE_REQUEST);
 	blksize_size[MAJOR_NR] = aztcd_blocksizes;
-	read_ahead[MAJOR_NR] = 4;
 	register_disk(NULL, MKDEV(MAJOR_NR, 0), 1, &azt_fops, 0);
 
 	if ((azt_port == 0x1f0) || (azt_port == 0x170))
drivers/cdrom/cdu31a.c +0 -1
diff -urN linux/drivers/cdrom/cdu31a.c linux-new/drivers/cdrom/cdu31a.c
@@ -3454,7 +3454,6 @@
 
 		blk_init_queue(BLK_DEFAULT_QUEUE(MAJOR_NR),
 			       DEVICE_REQUEST);
-		read_ahead[MAJOR_NR] = CDU31A_READAHEAD;
 		cdu31a_block_size = 1024;	/* 1kB default block size */
 		/* use 'mount -o block=2048' */
 		blksize_size[MAJOR_NR] = &cdu31a_block_size;
drivers/cdrom/cm206.c +0 -1
diff -urN linux/drivers/cdrom/cm206.c linux-new/drivers/cdrom/cm206.c
@@ -1501,7 +1501,6 @@
 	devfs_plain_cdrom(&cm206_info, &cm206_bdops);
 	blk_init_queue(BLK_DEFAULT_QUEUE(MAJOR_NR), DEVICE_REQUEST);
 	blksize_size[MAJOR_NR] = cm206_blocksizes;
-	read_ahead[MAJOR_NR] = 16;	/* reads ahead what? */
 	init_bh(CM206_BH, cm206_bh);
 
 	memset(cd, 0, sizeof(*cd));	/* give'm some reasonable value */
drivers/cdrom/gscd.c +0 -1
diff -urN linux/drivers/cdrom/gscd.c linux-new/drivers/cdrom/gscd.c
@@ -1021,7 +1021,6 @@
 
 	blk_init_queue(BLK_DEFAULT_QUEUE(MAJOR_NR), DEVICE_REQUEST);
 	blksize_size[MAJOR_NR] = gscd_blocksizes;
-	read_ahead[MAJOR_NR] = 4;
 
 	disk_state = 0;
 	gscdPresent = 1;
drivers/cdrom/mcd.c +0 -1
diff -urN linux/drivers/cdrom/mcd.c linux-new/drivers/cdrom/mcd.c
@@ -1077,7 +1077,6 @@
 
 	blksize_size[MAJOR_NR] = mcd_blocksizes;
 	blk_init_queue(BLK_DEFAULT_QUEUE(MAJOR_NR), DEVICE_REQUEST);
-	read_ahead[MAJOR_NR] = 4;
 
 	/* check for card */
 
drivers/cdrom/mcdx.c +0 -1
diff -urN linux/drivers/cdrom/mcdx.c linux-new/drivers/cdrom/mcdx.c
@@ -1188,7 +1188,6 @@
 	}
 
 	blk_init_queue(BLK_DEFAULT_QUEUE(MAJOR_NR), DEVICE_REQUEST);
-	read_ahead[MAJOR_NR] = READ_AHEAD;
 	blksize_size[MAJOR_NR] = mcdx_blocksizes;
 
 	xtrace(INIT, "init() subscribe irq and i/o\n");
drivers/cdrom/optcd.c +0 -1
diff -urN linux/drivers/cdrom/optcd.c linux-new/drivers/cdrom/optcd.c
@@ -2066,7 +2066,6 @@
 	hardsect_size[MAJOR_NR] = &hsecsize;
 	blksize_size[MAJOR_NR] = &blksize;
 	blk_init_queue(BLK_DEFAULT_QUEUE(MAJOR_NR), DEVICE_REQUEST);
-	read_ahead[MAJOR_NR] = 4;
 	request_region(optcd_port, 4, "optcd");
 	register_disk(NULL, MKDEV(MAJOR_NR,0), 1, &opt_fops, 0);
 
drivers/cdrom/sbpcd.c +2 -9
diff -urN linux/drivers/cdrom/sbpcd.c linux-new/drivers/cdrom/sbpcd.c
@@ -4531,12 +4531,6 @@
 		RETURN_UP(0);
 	} /* end of CDROMREADAUDIO */
 		
-	case BLKRASET:
-		if(!capable(CAP_SYS_ADMIN)) RETURN_UP(-EACCES);
-		if(!(cdi->dev)) RETURN_UP(-EINVAL);
-		if(arg > 0xff) RETURN_UP(-EINVAL);
-		read_ahead[MAJOR(cdi->dev)] = arg;
-		RETURN_UP(0);
 	default:
 		msg(DBG_IOC,"ioctl: unknown function request %04X\n", cmd);
 		RETURN_UP(-EINVAL);
@@ -5871,10 +5865,9 @@
 	(BLK_DEFAULT_QUEUE(MAJOR_NR))->merge_requests_fn = dont_merge_requests_fn;
 #endif
 	blk_queue_headactive(BLK_DEFAULT_QUEUE(MAJOR_NR), 0);
-	read_ahead[MAJOR_NR] = buffers * (CD_FRAMESIZE / 512);
-	
+
 	request_region(CDo_command,4,major_name);
-	
+
 	devfs_handle = devfs_mk_dir (NULL, "sbp", NULL);
 	for (j=0;j<NR_SBPCD;j++)
 	{
drivers/cdrom/sjcd.c +0 -1
diff -urN linux/drivers/cdrom/sjcd.c linux-new/drivers/cdrom/sjcd.c
@@ -1702,7 +1702,6 @@
 	}
 
 	blk_init_queue(BLK_DEFAULT_QUEUE(MAJOR_NR), DEVICE_REQUEST);
-	read_ahead[MAJOR_NR] = 4;
 	register_disk(NULL, MKDEV(MAJOR_NR, 0), 1, &sjcd_fops, 0);
 
 	if (check_region(sjcd_base, 4)) {
drivers/cdrom/sonycd535.c +0 -1
diff -urN linux/drivers/cdrom/sonycd535.c linux-new/drivers/cdrom/sonycd535.c
@@ -1595,7 +1595,6 @@
 				}
 				blk_init_queue(BLK_DEFAULT_QUEUE(MAJOR_NR), DEVICE_REQUEST);
 				blksize_size[MAJOR_NR] = &sonycd535_block_size;
-				read_ahead[MAJOR_NR] = 8;	/* 8 sector (4kB) read-ahead */
 
 				sony_toc = (struct s535_sony_toc *)
 					kmalloc(sizeof *sony_toc, GFP_KERNEL);
drivers/ide/hd.c +0 -3
diff -urN linux/drivers/ide/hd.c linux-new/drivers/ide/hd.c
@@ -652,8 +652,6 @@
 
 		case BLKROSET:
 		case BLKROGET:
-		case BLKRASET:
-		case BLKRAGET:
 		case BLKFLSBUF:
 		case BLKPG:
 			return blk_ioctl(inode->i_rdev, cmd, arg);
@@ -840,7 +838,6 @@
 		return -1;
 	}
 	blk_init_queue(BLK_DEFAULT_QUEUE(MAJOR_NR), DEVICE_REQUEST);
-	read_ahead[MAJOR_NR] = 8;		/* 8 sector (4kB) read-ahead */
 	add_gendisk(&hd_gendisk);
 	init_timer(&device_timer);
 	device_timer.function = hd_times_out;
drivers/ide/ide-cd.c +0 -1
diff -urN linux/drivers/ide/ide-cd.c linux-new/drivers/ide/ide-cd.c
@@ -2709,7 +2709,6 @@
 	int major = HWIF(drive)->major;
 	int minor = drive->select.b.unit << PARTN_BITS;
 
-	ide_add_setting(drive,	"breada_readahead",	SETTING_RW, BLKRAGET, BLKRASET, TYPE_INT, 0, 255, 1, 2, &read_ahead[major], NULL);
 	ide_add_setting(drive,	"file_readahead",	SETTING_RW, BLKFRAGET, BLKFRASET, TYPE_INTA, 0, INT_MAX, 1, 1024, &max_readahead[major][minor],	NULL);
 	ide_add_setting(drive,	"max_kb_per_request",	SETTING_RW, BLKSECTGET, BLKSECTSET, TYPE_INTA, 1, 255, 1, 2, &max_sectors[major][minor], NULL);
 	ide_add_setting(drive,	"dsc_overlap",		SETTING_RW, -1, -1, TYPE_BYTE, 0, 1, 1,	1, &drive->dsc_overlap, NULL);
drivers/ide/ide-disk.c +0 -1
diff -urN linux/drivers/ide/ide-disk.c linux-new/drivers/ide/ide-disk.c
@@ -689,7 +689,6 @@
 	ide_add_setting(drive,	"bswap",		SETTING_READ,					-1,			-1,			TYPE_BYTE,	0,	1,				1,	1,	&drive->bswap,			NULL);
 	ide_add_setting(drive,	"multcount",		id ? SETTING_RW : SETTING_READ,			HDIO_GET_MULTCOUNT,	HDIO_SET_MULTCOUNT,	TYPE_BYTE,	0,	id ? id->max_multsect : 0,	1,	2,	&drive->mult_count,		set_multcount);
 	ide_add_setting(drive,	"nowerr",		SETTING_RW,					HDIO_GET_NOWERR,	HDIO_SET_NOWERR,	TYPE_BYTE,	0,	1,				1,	1,	&drive->nowerr,			set_nowerr);
-	ide_add_setting(drive,	"breada_readahead",	SETTING_RW,					BLKRAGET,		BLKRASET,		TYPE_INT,	0,	255,				1,	2,	&read_ahead[major],		NULL);
 	ide_add_setting(drive,	"file_readahead",	SETTING_RW,					BLKFRAGET,		BLKFRASET,		TYPE_INTA,	0,	4096,			PAGE_SIZE,	1024,	&max_readahead[major][minor],	NULL);
 	ide_add_setting(drive,	"max_kb_per_request",	SETTING_RW,					BLKSECTGET,		BLKSECTSET,		TYPE_INTA,	1,	255,				1,	2,	&max_sectors[major][minor],	NULL);
 	ide_add_setting(drive,	"lun",			SETTING_RW,					-1,			-1,			TYPE_INT,	0,	7,				1,	1,	&drive->lun,			NULL);
drivers/ide/ide-floppy.c +0 -1
diff -urN linux/drivers/ide/ide-floppy.c linux-new/drivers/ide/ide-floppy.c
@@ -1918,7 +1918,6 @@
 	ide_add_setting(drive,	"bios_cyl",		SETTING_RW,					-1,			-1,			TYPE_INT,	0,	1023,				1,	1,	&drive->bios_cyl,		NULL);
 	ide_add_setting(drive,	"bios_head",		SETTING_RW,					-1,			-1,			TYPE_BYTE,	0,	255,				1,	1,	&drive->bios_head,		NULL);
 	ide_add_setting(drive,	"bios_sect",		SETTING_RW,					-1,			-1,			TYPE_BYTE,	0,	63,				1,	1,	&drive->bios_sect,		NULL);
-	ide_add_setting(drive,	"breada_readahead",	SETTING_RW,					BLKRAGET,		BLKRASET,		TYPE_INT,	0,	255,				1,	2,	&read_ahead[major],		NULL);
 	ide_add_setting(drive,	"file_readahead",	SETTING_RW,					BLKFRAGET,		BLKFRASET,		TYPE_INTA,	0,	INT_MAX,			1,	1024,	&max_readahead[major][minor],	NULL);
 	ide_add_setting(drive,	"max_kb_per_request",	SETTING_RW,					BLKSECTGET,		BLKSECTSET,		TYPE_INTA,	1,	255,				1,	2,	&max_sectors[major][minor],	NULL);
 
drivers/ide/ide-probe.c +1 -2
diff -urN linux/drivers/ide/ide-probe.c linux-new/drivers/ide/ide-probe.c
@@ -863,11 +863,10 @@
 		printk("%s: probed IRQ %d failed, using default.\n",
 			hwif->name, hwif->irq);
 	}
-	
+
 	init_gendisk(hwif);
 	blk_dev[hwif->major].data = hwif;
 	blk_dev[hwif->major].queue = ide_get_queue;
-	read_ahead[hwif->major] = 8;	/* (4kB) */
 	hwif->present = 1;	/* success */
 
 #if (DEBUG_SPINLOCK > 0)
drivers/md/lvm.c +0 -23
diff -urN linux/drivers/md/lvm.c linux-new/drivers/md/lvm.c
@@ -885,29 +885,6 @@
 		invalidate_buffers(inode->i_rdev);
 		break;
 
-
-	case BLKRASET:
-		/* set read ahead for block device */
-		if (!capable(CAP_SYS_ADMIN)) return -EACCES;
-
-		P_IOCTL("BLKRASET: %ld sectors for %s\n",
-			(long) arg, kdevname(inode->i_rdev));
-
-		if ((long) arg < LVM_MIN_READ_AHEAD ||
-		    (long) arg > LVM_MAX_READ_AHEAD)
-			return -EINVAL;
-		lv_ptr->lv_read_ahead = (long) arg;
-		break;
-
-
-	case BLKRAGET:
-		/* get current read ahead setting */
-		P_IOCTL("BLKRAGET %d\n", lv_ptr->lv_read_ahead);
-		if (put_user(lv_ptr->lv_read_ahead, (long *)arg))
-			return -EFAULT;
-		break;
-
-
 	case HDIO_GETGEO:
 		/* get disk geometry */
 		P_IOCTL("%s -- lvm_blk_ioctl -- HDIO_GETGEO\n", lvm_name);
drivers/md/md.c +0 -13
diff -urN linux/drivers/md/md.c linux-new/drivers/md/md.c
@@ -1734,7 +1734,6 @@
 	register_disk(&md_gendisk, MKDEV(MAJOR_NR,mdidx(mddev)),
 			1, &md_fops, md_size[mdidx(mddev)]<<1);
 
-	read_ahead[MD_MAJOR] = 1024;
 	return (0);
 }
 
@@ -2619,8 +2618,6 @@
 						(u64 *) arg);
 			goto done;
 
-		case BLKRAGET:
-		case BLKRASET:
 		case BLKFLSBUF:
 		case BLKBSZGET:
 		case BLKBSZSET:
@@ -3167,13 +3164,6 @@
 
 	sz += sprintf(page+sz, "\n");
 
-
-	sz += sprintf(page+sz, "read_ahead ");
-	if (read_ahead[MD_MAJOR] == INT_MAX)
-		sz += sprintf(page+sz, "not set\n");
-	else
-		sz += sprintf(page+sz, "%d sectors\n", read_ahead[MD_MAJOR]);
-
 	ITERATE_MDDEV(mddev,tmp) {
 		sz += sprintf(page + sz, "md%d : %sactive", mdidx(mddev),
 						mddev->pers ? "" : "in");
@@ -3663,9 +3653,6 @@
 	/* forward all md request to md_make_request */
 	blk_queue_make_request(BLK_DEFAULT_QUEUE(MAJOR_NR), md_make_request);
 
-
-	read_ahead[MAJOR_NR] = INT_MAX;
-
 	add_gendisk(&md_gendisk);
 
 	md_recovery_thread = md_register_thread(md_do_recovery, NULL, name);
drivers/message/i2o/i2o_block.c +1 -3
diff -urN linux/drivers/message/i2o/i2o_block.c linux-new/drivers/message/i2o/i2o_block.c
@@ -1170,11 +1170,9 @@
 		case BLKFLSBUF:
 		case BLKROSET:
 		case BLKROGET:
-		case BLKRASET:
-		case BLKRAGET:
 		case BLKPG:
 			return blk_ioctl(inode->i_rdev, cmd, arg);
-			
+
 		default:
 			return -EINVAL;
 	}
drivers/s390/block/xpram.c +0 -19
diff -urN linux/drivers/s390/block/xpram.c linux-new/drivers/s390/block/xpram.c
@@ -659,22 +659,6 @@
 		if ( capable(CAP_SYS_ADMIN) )invalidate_buffers(inode->i_rdev);
 		return 0;
 
-	case BLKRAGET: /* return the readahead value, 0x1263 */
-		if (!arg)  return -EINVAL;
-		err = 0; /* verify_area_20(VERIFY_WRITE, (long *) arg, sizeof(long));
-		          * if (err) return err;
-                          */
-		put_user(read_ahead[MAJOR(inode->i_rdev)], (long *)arg);
-
-		return 0;
-
-	case BLKRASET: /* set the readahead value, 0x1262 */
-		if (!capable(CAP_SYS_ADMIN)) return -EACCES;
-		if (arg > 0xff) return -EINVAL; /* limit it */
-		read_ahead[MAJOR(inode->i_rdev)] = arg;
-                atomic_eieio();
-		return 0;
-
 	case BLKRRPART: /* re-read partition table: can't do it, 0x1259 */
 		return -EINVAL;
 
@@ -1043,7 +1027,6 @@
 	blk_init_queue (q, xpram_request);
 	blk_queue_headactive (BLK_DEFAULT_QUEUE (major), 0);
 #endif /* V22/V24 */
-	read_ahead[major] = xpram_rahead;
 
 	/* we want to have XPRAM_UNUSED blocks security buffer between devices */
 	mem_usable=xpram_mem_avail-(XPRAM_UNUSED*(xpram_devs-1));
@@ -1182,7 +1165,6 @@
 	kfree(xpram_hardsects);
 	hardsect_size[major] = NULL;
  fail_malloc:
-	read_ahead[major] = 0;
 #if (XPRAM_VERSION == 22)
 	blk_dev[major].request_fn = NULL;
 #endif /* V22 */
@@ -1222,7 +1204,6 @@
 #if (XPRAM_VERSION == 22)
 	blk_dev[major].request_fn = NULL;
 #endif /* V22 */
-	read_ahead[major] = 0;
 	blk_size[major] = NULL;
 	kfree(blksize_size[major]);
 	blksize_size[major] = NULL;
drivers/s390/char/tapeblock.c +0 -1
diff -urN linux/drivers/s390/char/tapeblock.c linux-new/drivers/s390/char/tapeblock.c
@@ -102,7 +102,6 @@
     }
     if (tapeblock_major == 0) tapeblock_major = result;   /* accept dynamic major number*/
     INIT_BLK_DEV(tapeblock_major,tape_request_fn,tapeblock_getqueue,NULL);
-    read_ahead[tapeblock_major]=TAPEBLOCK_READAHEAD;
     PRINT_WARN(KERN_ERR " tape gets major %d for block device\n", result);
     blk_size[tapeblock_major] = (int*) kmalloc (256*sizeof(int),GFP_ATOMIC);
     memset(blk_size[tapeblock_major],0,256*sizeof(int));
drivers/scsi/sd.c +7 -14
diff -urN linux/drivers/scsi/sd.c linux-new/drivers/scsi/sd.c
@@ -234,8 +234,6 @@
 		case BLKGETSIZE64:
 		case BLKROSET:
 		case BLKROGET:
-		case BLKRASET:
-		case BLKRAGET:
 		case BLKFLSBUF:
 		case BLKSSZGET:
 		case BLKPG:
@@ -1217,18 +1215,14 @@
 				rscsi_disks[i].has_part_table = 1;
 			}
 		}
-	/* If our host adapter is capable of scatter-gather, then we increase
-	 * the read-ahead to 60 blocks (120 sectors).  If not, we use
-	 * a two block (4 sector) read ahead. We can only respect this with the
-	 * granularity of every 16 disks (one device major).
+
+	/* FIXME: If our host adapter is capable of scatter-gather, then we
+	 * should increase the number of blocks we read at once to 60 (120
+	 * sectors).  However there is currently no such kind of mechanism
+	 * there... Please have a look at the corresponding comment in sr.c
+	 *
+	 * --dalecki
 	 */
-	for (i = 0; i < N_USED_SD_MAJORS; i++) {
-		read_ahead[SD_MAJOR(i)] =
-		    (rscsi_disks[i * SCSI_DISKS_PER_MAJOR].device
-		     && rscsi_disks[i * SCSI_DISKS_PER_MAJOR].device->host->sg_tablesize)
-		    ? 120	/* 120 sector read-ahead */
-		    : 4;	/* 4 sector read-ahead */
-	}
 
 	return;
 }
@@ -1405,7 +1399,6 @@
 		del_gendisk(&sd_gendisks[i]);
 		blk_size[SD_MAJOR(i)] = NULL;
 		hardsect_size[SD_MAJOR(i)] = NULL;
-		read_ahead[SD_MAJOR(i)] = 0;
 	}
 	sd_template.dev_max = 0;
 	if (sd_gendisks != &sd_gendisk)
drivers/scsi/sr.c +6 -9
diff -urN linux/drivers/scsi/sr.c linux-new/drivers/scsi/sr.c
@@ -888,14 +888,12 @@
 		register_cdrom(&scsi_CDs[i].cdi);
 	}
 
-
-	/* If our host adapter is capable of scatter-gather, then we increase
-	 * the read-ahead to 16 blocks (32 sectors).  If not, we use
-	 * a two block (4 sector) read ahead. */
-	if (scsi_CDs[0].device && scsi_CDs[0].device->host->sg_tablesize)
-		read_ahead[MAJOR_NR] = 32;	/* 32 sector read-ahead.  Always removable. */
-	else
-		read_ahead[MAJOR_NR] = 4;	/* 4 sector read-ahead */
+	/* FIXME: There should be a way to increase some kind of driver read
+	 * ahead value for the device here. Plase have a look at the
+	 * corresponding note in sd.c.
+	 *
+	 * --dalecki
+	 */
 
 	return;
 }
@@ -954,7 +952,6 @@
 	blksize_size[MAJOR_NR] = NULL;
         hardsect_size[MAJOR_NR] = NULL;
 	blk_size[MAJOR_NR] = NULL;
-	read_ahead[MAJOR_NR] = 0;
 
 	sr_template.dev_max = 0;
 }
drivers/scsi/sr_ioctl.c +0 -2
diff -urN linux/drivers/scsi/sr_ioctl.c linux-new/drivers/scsi/sr_ioctl.c
@@ -550,8 +550,6 @@
 		return put_user((u64)scsi_CDs[target].capacity << 9, (u64 *)arg);
 	case BLKROSET:
 	case BLKROGET:
-	case BLKRASET:
-	case BLKRAGET:
 	case BLKFLSBUF:
 	case BLKSSZGET:
 		return blk_ioctl(cdi->dev, cmd, arg);
dump +2 -0
diff -urN linux/dump linux-new/dump
@@ -0,0 +1,2 @@
+BLKRASET
+BLKRAGET
fs/hfs/file.c +2 -2
diff -urN linux/fs/hfs/file.c linux-new/fs/hfs/file.c
@@ -313,8 +313,8 @@
 
 	bhb = bhe = buflist;
 	if (reada) {
-		if (blocks < read_ahead[MAJOR(dev)] / (HFS_SECTOR_SIZE>>9)) {
-			blocks = read_ahead[MAJOR(dev)] / (HFS_SECTOR_SIZE>>9);
+		if (blocks < reada / (HFS_SECTOR_SIZE>>9)) {
+			blocks = reada / (HFS_SECTOR_SIZE>>9);
 		}
 		if (block + blocks > size) {
 			blocks = size - block;
include/linux/fs.h +2 -1
diff -urN linux/include/linux/fs.h linux-new/include/linux/fs.h
@@ -170,8 +170,10 @@
 #define BLKRRPART  _IO(0x12,95)	/* re-read partition table */
 #define BLKGETSIZE _IO(0x12,96)	/* return device size /512 (long *arg) */
 #define BLKFLSBUF  _IO(0x12,97)	/* flush buffer cache */
+#if 0
 #define BLKRASET   _IO(0x12,98)	/* Set read ahead for block device */
 #define BLKRAGET   _IO(0x12,99)	/* get current read ahead setting */
+#endif
 #define BLKFRASET  _IO(0x12,100)/* set filesystem (mm/filemap.c) read-ahead */
 #define BLKFRAGET  _IO(0x12,101)/* get filesystem (mm/filemap.c) read-ahead */
 #define BLKSECTSET _IO(0x12,102)/* set max sectors per request (ll_rw_blk.c) */
@@ -1438,7 +1440,6 @@
 
 extern ssize_t char_read(struct file *, char *, size_t, loff_t *);
 extern ssize_t block_read(struct file *, char *, size_t, loff_t *);
-extern int read_ahead[];
 
 extern ssize_t char_write(struct file *, const char *, size_t, loff_t *);
 extern ssize_t block_write(struct file *, const char *, size_t, loff_t *);
kernel/ksyms.c +0 -1
diff -urN linux/kernel/ksyms.c linux-new/kernel/ksyms.c
@@ -496,7 +496,6 @@
 EXPORT_SYMBOL(clear_inode);
 EXPORT_SYMBOL(___strtok);
 EXPORT_SYMBOL(init_special_inode);
-EXPORT_SYMBOL(read_ahead);
 EXPORT_SYMBOL(get_hash_table);
 EXPORT_SYMBOL(get_empty_inode);
 EXPORT_SYMBOL(insert_inode_hash);
#6 lore raw
In reply to Linus Torvalds

In article <[email protected]>
[email protected] claimed this objective:

Quoted 7 lines · Anuradha Ratnaweera
Quoted 5 lines · Linus Torvalds
Quoted 2 lines

I think I'm ready to hand this over to Marcelo.

Quoted 7 lines
Quoted 2 lines

Aren't you going to include Tim Schmielau's patch to handle uptime larger than 497 days? It is a cool feature we always liked to have.

Quite frankly, right now I'm in "handle only bugs that can crash the system mode". Anything that takes 497 days to see is fairly low on my priority list. My highest priority, in fact, is to get 2.4.15 out without any embarrassment.

Back in the 60's when GE was still a mainframe manufacturer they had a counter which rolled over at about 35 days. When it started failing their competitors had good time with "GECOS fails to fail as expected." That *is* an embarrassment.

con06:news> uptime
9:56am up 427 days, 19:00, 2 users, load average: 0.87, 0.88, 0.83

Signature · 3 lines
bill davidsen <[email protected]>
  His first management concern is not solving the problem, but covering
his ass. If he lived in the middle ages he'd wear his codpiece backward.
#7 lore raw

Re: PATCH 2.5.0 kill read_ahead array.

In reply to Linus Torvalds
Quoted 3 lines · Martin Dalecki

This is removing the "write only" read_ahead sparse array from all the places where it's "used" by now.
This is just saving some memmory.

Is this a case of the "read_ahead" array is redundant and read ahead is done at a different level (not using this array), or is it a case of read ahead not being done at all? If it is not being done at all, then removing the unused array is the wrong thing to do - we should fix read ahead, and start using the array.

Cheers, Andreas
--
Andreas Dilger
http://sourceforge.net/projects/ext2resize/
http://www-mddsp.enel.ucalgary.ca/People/adilger/

#8 lore raw

Re: PATCH 2.5.0 kill read_ahead array.

In reply to Linus Torvalds
Quoted 11 lines · Andreas Dilger
Quoted 3 lines · Martin Dalecki

This is removing the "write only" read_ahead sparse array from all the places where it's "used" by now.
This is just saving some memmory.

Is this a case of the "read_ahead" array is redundant and read ahead is done at a different level (not using this array), or is it a case of read ahead not being done at all? If it is not being done at all, then removing the unused array is the wrong thing to do - we should fix read ahead, and start using the array.

No we shouldn't.

There are the following problems with the read_ahead array as it currently
stands:

1. It isn't used at all at any level!
Even the AS390 people finally cleaned aparently theyr code up.

REALY REALY Please look at the the patch.

There is only one bogous place in hfs, where this array was used at all. Literally all other places are just writing some values into it. This is what I'm calling a "write only" variable.

2. It is bound to the major number, which is the wrong granularity, since linux doesn't preserve the device type on this level and is slicing up
the minor numbers. This is the most severe brain damage of it.

3. We have anyway a filesystem read ahead layer there.

4. We have a block device driver read ahead layer there too (it's called blksize there...).

5. We have blk_dev_t and block_device structs, which are supposed to replace the current static global array, since they are the more logical place where such information should be placed. This is unevitable if we are ever willing to provide support for real kernel scalability in terms of numbers of attached devices...

Regard's.

#9 lore raw
In reply to Anuradha Ratnaweera
Quoted 7 lines · Anuradha Ratnaweera
Quoted 2 lines · Linus Torvalds

I think I'm ready to hand this over to Marcelo.

Aren't you going to include Tim Schmielau's patch to handle uptime larger than 497 days? It is a cool feature we always liked to have.

Seeing the differences between pre-patches getting smaller and smaller, I guess I finished the patch just too late in the release cycle.

I will keep an eye on it and eventually resubmit it to Marcelo when it needs rediffing.

Tim

#10 lore raw
In reply to Anuradha Ratnaweera
Quoted 6 lines · Linus Torvalds
Quoted 5 lines · Anuradha Ratnaweera
Quoted 2 lines · Linus Torvalds

I think I'm ready to hand this over to Marcelo.

Quoted 7 lines
Quoted 2 lines

Aren't you going to include Tim Schmielau's patch to handle uptime larger than 497 days? It is a cool feature we always liked to have.

Quite frankly, right now I'm in "handle only bugs that can crash the system mode". Anything that takes 497 days to see is fairly low on my priority list. My highest priority, in fact, is to get 2.4.15 out without any embarrassment.

Embarrasments like having the modules install into directories
like /lib/modules/2.4.15-greased-turkey or vmlinuz installed to an image /boot/vmlinuz-2.4.15-greased-turkey? Those sorts of embarrasments? Or was that just a last shot to see if we were still awake in 2.4?

	[...]
Quoted 1 line

Linus

Mike

Signature · 4 lines
 Michael H. Warfield    |  (770) 985-6132   |  [email protected]
  /\/\|=mhw=|\/\/       |  (678) 463-0932   |  http://www.wittsend.com/mhw/
  NIC whois:  MHW9      |  An optimist believes we live in the best of all
 PGP Key: 0xDF1DD471    |  possible worlds.  A pessimist is sure of it!
#11 lore raw

PATCH 1/1 fix SCSI non-blocksize reads

In reply to Linus Torvalds
Quoted 9 lines · Linus Torvalds

David Mosberger noticed that SCHED_FIFO has been broken for a while, and obviously very few people really cared, but it should be fixed now.

The USB update that I had originally documented as being part of pre8 was actually in my in-file, and is _really_ there in pre9, along with a bonus usbnet update.

I think I'm ready to hand this over to Marcelo.

Several SCSI drivers blindly do reads of size 1024 when trying to read
the partition table. This fails on Magneto Optical drives and similar
odd devices with 2048 byte native sector sizes. This patch fixes that so I can have partitions on my MO drive again (it lives on an Adaptec card at present and has 2048 byte sectors),

Please apply,

-Erik

--
Erik B. Andersen http://codepoet-consulting.com/
--This message was written using 73% post-consumer electrons--

drivers/scsi/BusLogic.c renamed from drivers/scsi.orig/BusLogic.c +11 -4
diff -urN linux/drivers/scsi.orig/BusLogic.c linux/drivers/scsi/BusLogic.c
@@ -4103,10 +4103,16 @@
 int BusLogic_BIOSDiskParameters(SCSI_Disk_T *Disk, KernelDevice_T Device,
 				int *Parameters)
 {
-  BusLogic_HostAdapter_T *HostAdapter =
-    (BusLogic_HostAdapter_T *) Disk->device->host->hostdata;
+  BusLogic_HostAdapter_T *HostAdapter = (BusLogic_HostAdapter_T *) Disk->device->host->hostdata;
   BIOS_DiskParameters_T *DiskParameters = (BIOS_DiskParameters_T *) Parameters;
   struct buffer_head *BufferHead;
+  int ma = MAJOR(Device);
+  int mi = (MINOR(Device) & ~0xf);
+  int block = 1024; 
+
+  if(blksize_size[ma])
+      block = blksize_size[ma][mi];
+
   if (HostAdapter->ExtendedTranslationEnabled &&
       Disk->capacity >= 2*1024*1024 /* 1 GB in 512 byte sectors */)
     {
@@ -4131,8 +4137,9 @@
   /*
     Attempt to read the first 1024 bytes from the disk device.
   */
-  BufferHead = bread(MKDEV(MAJOR(Device), MINOR(Device) & ~0x0F), 0, 1024);
-  if (BufferHead == NULL) return 0;
+  if (!(BufferHead = bread(MKDEV(ma,mi), 0, block)))
+      return 0;
+
   /*
     If the boot sector partition table flag is valid, search for a partition
     table entry whose end_head matches one of the standard BusLogic geometry
drivers/scsi/aic7xxx/aic7xxx_linux.c renamed from drivers/scsi.orig/aic7xxx/aic7xxx_linux.c +8 -4
diff -urN linux/drivers/scsi.orig/aic7xxx/aic7xxx_linux.c linux/drivers/scsi/aic7xxx/aic7xxx_linux.c
@@ -2740,13 +2740,17 @@
 	int	extended;
 	struct	ahc_softc *ahc;
 	struct	buffer_head *bh;
-
+	int ma = MAJOR(dev);
+	int mi = (MINOR(dev) & ~0xf);
+	int block = 1024; 
 	ahc = *((struct ahc_softc **)disk->device->host->hostdata);
-	bh = bread(MKDEV(MAJOR(dev), MINOR(dev) & ~0xf), 0, 1024);
 
+	if(blksize_size[ma])
+		block = blksize_size[ma][mi];
+		
+	bh = bread(MKDEV(ma,mi), 0, block);
 	if (bh) {
-		ret = scsi_partsize(bh, disk->capacity,
-				    &geom[2], &geom[0], &geom[1]);
+		ret = scsi_partsize(bh, disk->capacity, &geom[2], &geom[0], &geom[1]);
 		brelse(bh);
 		if (ret != -1)
 			return (ret);
drivers/scsi/aic7xxx_old.c renamed from drivers/scsi.orig/aic7xxx_old.c +7 -2
diff -urN linux/drivers/scsi.orig/aic7xxx_old.c linux/drivers/scsi/aic7xxx_old.c
@@ -11737,10 +11737,15 @@
   int heads, sectors, cylinders, ret;
   struct aic7xxx_host *p;
   struct buffer_head *bh;
-
+  int ma = MAJOR(dev);
+  int mi = (MINOR(dev) & ~0xf);
+  int block = 1024; 
   p = (struct aic7xxx_host *) disk->device->host->hostdata;
-  bh = bread(MKDEV(MAJOR(dev), MINOR(dev)&~0xf), 0, 1024);
 
+  if(blksize_size[ma])
+      block = blksize_size[ma][mi];
+
+  bh = bread(MKDEV(ma,mi), 0, block);
   if ( bh )
   {
     ret = scsi_partsize(bh, disk->capacity, &geom[2], &geom[0], &geom[1]);
drivers/scsi/tmscsim.c renamed from drivers/scsi.orig/tmscsim.c +8 -1
diff -urN linux/drivers/scsi.orig/tmscsim.c linux/drivers/scsi/tmscsim.c
@@ -1449,8 +1449,15 @@
     struct buffer_head *bh;
     int ret_code = -1;
     int size = disk->capacity;
+    int ma = MAJOR(devno);
+    int mi = (MINOR(devno) & ~0xf);
+    int block = 1024; 
 
-    if ((bh = bread(MKDEV(MAJOR(devno), MINOR(devno)&~0xf), 0, 1024)))
+    if(blksize_size[ma])
+	block = blksize_size[ma][mi];
+
+    bh = bread(MKDEV(ma,mi), 0, block);
+    if (bh)
     {
 	/* try to infer mapping from partition table */
 	ret_code = partsize (bh, (unsigned long) size, (unsigned int *) geom + 2,
#12 lore raw

Re: [PATCH] fix SCSI non-blocksize reads

Quoted 6 lines · Erik Andersen

Several SCSI drivers blindly do reads of size 1024 when trying to read
the partition table. This fails on Magneto Optical drives and similar
odd devices with 2048 byte native sector sizes. This patch fixes that so I can have partitions on my MO drive again (it lives on an Adaptec card at present and has 2048 byte sectors),

Please use the "block_size()" function instead of doing it by hand..

Linus

#13 lore raw

Re: [PATCH] fix SCSI non-blocksize reads

In reply to Erik Andersen
Quoted 10 lines · Linus Torvalds
Quoted 6 lines · Erik Andersen

Several SCSI drivers blindly do reads of size 1024 when trying to read
the partition table. This fails on Magneto Optical drives and similar
odd devices with 2048 byte native sector sizes. This patch fixes that so I can have partitions on my MO drive again (it lives on an Adaptec card at present and has 2048 byte sectors),

Please use the "block_size()" function instead of doing it by hand..

Ok. I just did it the same way most of the other SCSI drivers do this...

Would you like a patch that also fixes all the other SCSI drivers to use block_size() then, so they will be consistent?

-Erik

--
Erik B. Andersen http://codepoet-consulting.com/
--This message was written using 73% post-consumer electrons--

#14 lore raw

Re: [PATCH] fix SCSI non-blocksize reads

Quoted 3 lines · Erik Andersen

Would you like a patch that also fixes all the other SCSI drivers to use block_size() then, so they will be consistent?

Eventually yes, although right now I'd like to have the minimal fix.

Linus

#15 lore raw

PATCH 1/1 fix SCSI non-blocksize reads

In reply to Erik Andersen
Quoted 8 lines · Linus Torvalds
Quoted 3 lines · Erik Andersen

Would you like a patch that also fixes all the other SCSI drivers to use block_size() then, so they will be consistent?

Eventually yes, although right now I'd like to have the minimal fix.

Thanks for getting the aic7xx fix into 2.4.125-greased-turkey. Here is the rest of the SCSI non-blocksize read clean up patch to fix up the other SCSI drivers so they also do the right thing. I think this one easily passes the "obviously correct" test. Please apply (to 2.4.x and to 2.5.x),

-Erik

--
Erik B. Andersen http://codepoet-consulting.com/
--This message was written using 73% post-consumer electrons--

drivers/scsi/BusLogic.c renamed from drivers/scsi.virgin/BusLogic.c +1 -1
diff -urN linux/drivers/scsi.virgin/BusLogic.c linux/drivers/scsi/BusLogic.c
@@ -4131,7 +4131,7 @@
   /*
     Attempt to read the first 1024 bytes from the disk device.
   */
-  BufferHead = bread(MKDEV(MAJOR(Device), MINOR(Device) & ~0x0F), 0, 1024);
+  BufferHead = bread(MKDEV(MAJOR(Device), MINOR(Device) & ~0x0F), 0, block_size(Device));
   if (BufferHead == NULL) return 0;
   /*
     If the boot sector partition table flag is valid, search for a partition
drivers/scsi/megaraid.c renamed from drivers/scsi.virgin/megaraid.c +1 -9
diff -urN linux/drivers/scsi.virgin/megaraid.c linux/drivers/scsi/megaraid.c
@@ -4296,15 +4296,7 @@
 	int heads, cyls, sectors;
 	int capacity = disk->capacity;
 
-	int ma = MAJOR(dev);
-	int mi = (MINOR(dev) & ~0xf);
-
-	int block = 1024; 
-
-	if(blksize_size[ma])
-		block = blksize_size[ma][mi];
-		
-	if(!(bh = bread(MKDEV(ma,mi), 0, block)))
+	if(!(bh = bread(MKDEV(MAJOR(dev), MINOR(dev)&~0xf), 0, block_size(dev))))
 		return -1;
 
 	if( *(unsigned short *)(bh->b_data + 510) == 0xAA55 ) {
drivers/scsi/scsicam.c renamed from drivers/scsi.virgin/scsicam.c +1 -9
diff -urN linux/drivers/scsi.virgin/scsicam.c linux/drivers/scsi/scsicam.c
@@ -47,15 +47,7 @@
 	int size = disk->capacity;
 	unsigned long temp_cyl;
 
-	int ma = MAJOR(dev);
-	int mi = (MINOR(dev) & ~0xf);
-
-	int block = 1024; 
-
-	if(blksize_size[ma])
-		block = blksize_size[ma][mi];
-		
-	if (!(bh = bread(MKDEV(ma,mi), 0, block)))
+	if (!(bh = bread(MKDEV(MAJOR(dev), MINOR(dev)&~0xf), 0, block_size(dev))))
 		return -1;
 
 	/* try to infer mapping from partition table */
drivers/scsi/tmscsim.c renamed from drivers/scsi.virgin/tmscsim.c +1 -1
diff -urN linux/drivers/scsi.virgin/tmscsim.c linux/drivers/scsi/tmscsim.c
@@ -1450,7 +1450,7 @@
     int ret_code = -1;
     int size = disk->capacity;
 
-    if ((bh = bread(MKDEV(MAJOR(devno), MINOR(devno)&~0xf), 0, 1024)))
+    if ((bh = bread(MKDEV(MAJOR(devno), MINOR(devno)&~0xf), 0, block_size(devno))))
     {
 	/* try to infer mapping from partition table */
 	ret_code = partsize (bh, (unsigned long) size, (unsigned int *) geom + 2,