2001-11-22 06:49:56

by Linus Torvalds

[permalink] [raw]
Subject: Linux-2.4.15-pre9


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


2001-11-22 07:47:46

by Anuradha Ratnaweera

[permalink] [raw]
Subject: Re: Linux-2.4.15-pre9

On Wed, Nov 21, 2001 at 10:44:30PM -0800, Linus Torvalds wrote:
>
> 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

--

Debian GNU/Linux (kernel 2.4.13)

Unix is a Registered Bell of AT&T Trademark Laboratories.
-- Donn Seeley

2001-11-22 08:41:55

by Erik Andersen

[permalink] [raw]
Subject: [PATCH] fix SCSI non-blocksize reads

On Wed Nov 21, 2001 at 10:44:30PM -0800, Linus Torvalds wrote:
>
> 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--


diff -urN linux/drivers/scsi.orig/BusLogic.c linux/drivers/scsi/BusLogic.c
--- linux/drivers/scsi.orig/BusLogic.c Sun Sep 30 13:26:07 2001
+++ linux/drivers/scsi/BusLogic.c Thu Nov 22 01:32:56 2001
@@ -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
diff -urN linux/drivers/scsi.orig/aic7xxx/aic7xxx_linux.c linux/drivers/scsi/aic7xxx/aic7xxx_linux.c
--- linux/drivers/scsi.orig/aic7xxx/aic7xxx_linux.c Thu Oct 25 14:53:49 2001
+++ linux/drivers/scsi/aic7xxx/aic7xxx_linux.c Thu Nov 22 01:29:02 2001
@@ -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);
diff -urN linux/drivers/scsi.orig/aic7xxx_old.c linux/drivers/scsi/aic7xxx_old.c
--- linux/drivers/scsi.orig/aic7xxx_old.c Thu Oct 11 10:43:30 2001
+++ linux/drivers/scsi/aic7xxx_old.c Thu Nov 22 01:30:24 2001
@@ -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]);
diff -urN linux/drivers/scsi.orig/tmscsim.c linux/drivers/scsi/tmscsim.c
--- linux/drivers/scsi.orig/tmscsim.c Sun Sep 30 13:26:08 2001
+++ linux/drivers/scsi/tmscsim.c Thu Nov 22 01:31:56 2001
@@ -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,

2001-11-22 17:15:09

by Linus Torvalds

[permalink] [raw]
Subject: Re: [PATCH] fix SCSI non-blocksize reads


On Thu, 22 Nov 2001, Erik Andersen wrote:
>
> 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

2001-11-22 17:21:20

by Erik Andersen

[permalink] [raw]
Subject: Re: [PATCH] fix SCSI non-blocksize reads

On Thu Nov 22, 2001 at 09:09:23AM -0800, Linus Torvalds wrote:
>
> On Thu, 22 Nov 2001, Erik Andersen wrote:
> >
> > 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--

2001-11-22 18:46:13

by Linus Torvalds

[permalink] [raw]
Subject: Re: [PATCH] fix SCSI non-blocksize reads


On Thu, 22 Nov 2001, Erik Andersen wrote:
>
> 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

2001-11-22 18:57:45

by Linus Torvalds

[permalink] [raw]
Subject: Re: Linux-2.4.15-pre9


On Thu, 22 Nov 2001, Anuradha Ratnaweera wrote:
>
> On Wed, Nov 21, 2001 at 10:44:30PM -0800, Linus Torvalds wrote:
> >
> > 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

2001-11-22 19:17:14

by Tim Schmielau

[permalink] [raw]
Subject: Re: Linux-2.4.15-pre9

On Thu, 22 Nov 2001, Anuradha Ratnaweera wrote:

> On Wed, Nov 21, 2001 at 10:44:30PM -0800, Linus Torvalds wrote:
> >
> > 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

2001-11-22 19:35:10

by Alexander Viro

[permalink] [raw]
Subject: Re: Linux-2.4.15-pre9



On Thu, 22 Nov 2001, Linus Torvalds wrote:

> 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?

2001-11-22 19:47:51

by Tom Rini

[permalink] [raw]
Subject: Re: Linux-2.4.15-pre9

On Thu, Nov 22, 2001 at 02:34:46PM -0500, Alexander Viro wrote:
>
>
> On Thu, 22 Nov 2001, Linus Torvalds wrote:
>
> > 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>"...

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. :)

--
Tom Rini (TR1265)
http://gate.crashing.org/~trini/

2001-11-22 22:11:07

by Leif Sawyer

[permalink] [raw]
Subject: RE: Linux-2.4.15-pre9

Linus wrote:
> Quite frankly, right now I'm in "handle only bugs that can crash the
> system mode". [...] My highest priority, in fact, is to get 2.4.15
> out without any embarrassment.
>

Well, here's an oops, caused on my Thinkpad 760ED, 80Mb ram.

I can boot into 2.4.15-pre9 without problems, however I get the message
to "Try pci=biosirq"
This option works in 2.4.14 and prior. [ As a side note, it still does not
fix the problem of my 3ccFE575CT pcmcia card being recognized as anything
but
IRQ0. 2.4.8mdk26 (yea, yeah) does see the card with IRQ=9. ]

adding the 'pci=biosirq' to my kernel boot command line causes an oops:

ksymoops 2.4.3 on i586 2.4.14. Options used
-V (default)
-k /dev/null (specified)
-l /dev/null (specified)
-o /lib/modules/2.4.15-pre9 (specified)
-m /usr/src/linux/System.map (specified)

Error (regular_file): read_ksyms /dev/null is not a regular file, ignored
No modules in ksyms, skipping objects
No ksyms, skipping lsmod
CPU: 0
EIP: 0010:[<c00fdbad>] Not tainted
Using defaults from ksymoops -t elf32-i386 -a i386
EFLAGS: 00010246
eax: 0000c026 ebx: 00000000 ecx: 00000030 edx: 00001144
esi: c1144000 edi: c114dfa0 ebp: c114df88 esp: c114df6c
ds: 0018 es: 0018 ss: 0018
Process swapper (pid: 1, stackpage=c114d000)
Stack: b10e0246 00000018 c114dfa0 c0251130 00001144 c0252ce4 c00fd9ad
00000000
00000286 c010ddaa 00000010 00000018 c1144000 40000030 c026c114
00010f00
c026bfd8 c0105000 0008e000 c027048e c02701d1 00000000 c02510f8
00000000
Call Trace: [<c010ddaa>] [<c010f000>] [<c01a53d6>] [<c0105259>] [<c0105000>]
[<c0105706>] [<c0105250>]
Code: 66 8e c0 87 f7 e8 dc 00 00 00 e8 68 00 00 00 e8 1f 00 00 00

>>EIP; c00fdbac Before first symbol <=====
Trace; c010ddaa <pcibios_get_irq_routing_table+4a/100>
Trace; c010f000 <set_mtrr_done+40/70>
Trace; c01a53d6 <pci_init+6/40>
Trace; c0105258 <init+8/140>
Trace; c0105000 <_stext+0/0>
Trace; c0105706 <kernel_thread+26/30>
Trace; c0105250 <init+0/140>
Code; c00fdbac Before first symbol
00000000 <_EIP>:
Code; c00fdbac Before first symbol <=====
0: 66 8e c0 mov %ax,%es <=====
Code; c00fdbae Before first symbol
3: 87 f7 xchg %esi,%edi
Code; c00fdbb0 Before first symbol
5: e8 dc 00 00 00 call e6 <_EIP+0xe6> c00fdc92 Before
first symbol
Code; c00fdbb6 Before first symbol
a: e8 68 00 00 00 call 77 <_EIP+0x77> c00fdc22 Before
first symbol
Code; c00fdbba Before first symbol
f: e8 1f 00 00 00 call 33 <_EIP+0x33> c00fdbde Before
first symbol

<0>Kernel panic: Attempted to kill init!

1 error issued. Results may not be reliable.

--

I'd say that this crashes the system.. :-)

Happy Day of thanks to everybody on the list. Without all of us, the world
would not be as fun a place to be.

Leif

2001-11-22 22:27:31

by Linus Torvalds

[permalink] [raw]
Subject: RE: Linux-2.4.15-pre9


On Thu, 22 Nov 2001, Leif Sawyer wrote:
>
> adding the 'pci=biosirq' to my kernel boot command line causes an oops:

Well, you seem to have a buggered BIOS - the oops is actually in the BIOS
segment, and the BIOS appears to try to re-load the ES segment register
with some strange non-existing segment.

Your BIOS PCI irq routing routines probably only work in real-mode or
something like that.

This is the reason Linux avoids BIOS calls like the plague, and why you
have to ask for them explicitly - the likelihood of any random BIOS being
broken is actually rather high. That's probably because

- the BIOS is written mostly in assembly
- the BIOS is tested exclusively with DOS and Windows
- most BIOS writers appear to simply be incompetent, or just not care.

Not a good combination, in short.

I'd love to just remove the support for BIOS calls entirely, but for every
ten broken machines there is one machine that actually works, so..

Linus

2001-11-22 22:46:03

by Linus Torvalds

[permalink] [raw]
Subject: RE: Linux-2.4.15-pre9


On Thu, 22 Nov 2001, Leif Sawyer wrote:
>
> This option works in 2.4.14 and prior.

Oh, I didn't notice this part.

If it actually works in 2.4.14, can you check _which_ pre-patch changes
behaviour? I don't see _any_ changes that look even remotely likely to
cause BIOS routines to oops, and it might just be random luck, for all I
know.

Linus

2001-11-23 16:20:33

by Michael H. Warfield

[permalink] [raw]
Subject: Re: Linux-2.4.15-pre9

On Thu, Nov 22, 2001 at 10:52:03AM -0800, Linus Torvalds wrote:

> On Thu, 22 Nov 2001, Anuradha Ratnaweera wrote:
> >
> > On Wed, Nov 21, 2001 at 10:44:30PM -0800, Linus Torvalds wrote:
> > >
> > > 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.

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?

[...]

> Linus

Mike
--
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!

2001-11-23 16:20:53

by Jeff Garzik

[permalink] [raw]
Subject: RE: Linux-2.4.15-pre9

On Thu, 22 Nov 2001, Linus Torvalds wrote:
> On Thu, 22 Nov 2001, Leif Sawyer wrote:
> >
> > adding the 'pci=biosirq' to my kernel boot command line causes an oops:
>
> Well, you seem to have a buggered BIOS - the oops is actually in the BIOS
> segment, and the BIOS appears to try to re-load the ES segment register
> with some strange non-existing segment.
>
> Your BIOS PCI irq routing routines probably only work in real-mode or
> something like that.

There are bugs in PCI recently... I got a report showing a machine that
booted fine into 2.4.8, but in 2.4.15 reports "this system does not
support PCI" right after it -detects- PCIBIOS successfully. He got
tired of debuggin before I could get more info :(

Jeff



2001-11-24 00:05:18

by Erik Andersen

[permalink] [raw]
Subject: [PATCH] fix SCSI non-blocksize reads

On Thu Nov 22, 2001 at 10:40:14AM -0800, Linus Torvalds wrote:
>
> On Thu, 22 Nov 2001, Erik Andersen wrote:
> >
> > 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--


diff -urN linux/drivers/scsi.virgin/BusLogic.c linux/drivers/scsi/BusLogic.c
--- linux/drivers/scsi.virgin/BusLogic.c Sun Sep 30 13:26:07 2001
+++ linux/drivers/scsi/BusLogic.c Fri Nov 23 16:43:52 2001
@@ -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
diff -urN linux/drivers/scsi.virgin/megaraid.c linux/drivers/scsi/megaraid.c
--- linux/drivers/scsi.virgin/megaraid.c Thu Oct 25 14:53:51 2001
+++ linux/drivers/scsi/megaraid.c Fri Nov 23 16:47:08 2001
@@ -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 ) {
diff -urN linux/drivers/scsi.virgin/scsicam.c linux/drivers/scsi/scsicam.c
--- linux/drivers/scsi.virgin/scsicam.c Thu Nov 18 20:09:14 1999
+++ linux/drivers/scsi/scsicam.c Fri Nov 23 16:47:33 2001
@@ -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 */
diff -urN linux/drivers/scsi.virgin/tmscsim.c linux/drivers/scsi/tmscsim.c
--- linux/drivers/scsi.virgin/tmscsim.c Sun Sep 30 13:26:08 2001
+++ linux/drivers/scsi/tmscsim.c Fri Nov 23 16:48:28 2001
@@ -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,

2001-11-26 12:02:23

by Martin Dalecki

[permalink] [raw]
Subject: PATCH 2.5.0 kill read_ahead array.

diff -urN linux/drivers/acorn/block/mfmhd.c linux-new/drivers/acorn/block/mfmhd.c
--- linux/drivers/acorn/block/mfmhd.c Thu Oct 25 22:58:35 2001
+++ linux-new/drivers/acorn/block/mfmhd.c Mon Nov 26 03:06:16 2001
@@ -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);

diff -urN linux/drivers/block/DAC960.c linux-new/drivers/block/DAC960.c
--- linux/drivers/block/DAC960.c Thu Oct 25 22:58:35 2001
+++ linux-new/drivers/block/DAC960.c Mon Nov 26 02:49:45 2001
@@ -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:
diff -urN linux/drivers/block/acsi.c linux-new/drivers/block/acsi.c
--- linux/drivers/block/acsi.c Fri Nov 9 22:58:03 2001
+++ linux-new/drivers/block/acsi.c Mon Nov 26 03:03:41 2001
@@ -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
diff -urN linux/drivers/block/blkpg.c linux-new/drivers/block/blkpg.c
--- linux/drivers/block/blkpg.c Sun Nov 11 19:20:21 2001
+++ linux-new/drivers/block/blkpg.c Mon Nov 26 02:27:33 2001
@@ -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;
diff -urN linux/drivers/block/cciss.c linux-new/drivers/block/cciss.c
--- linux/drivers/block/cciss.c Fri Nov 9 23:28:46 2001
+++ linux-new/drivers/block/cciss.c Mon Nov 26 02:48:52 2001
@@ -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;
diff -urN linux/drivers/block/cpqarray.c linux-new/drivers/block/cpqarray.c
--- linux/drivers/block/cpqarray.c Fri Nov 9 23:28:46 2001
+++ linux-new/drivers/block/cpqarray.c Mon Nov 26 02:47:51 2001
@@ -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:
diff -urN linux/drivers/block/floppy.c linux-new/drivers/block/floppy.c
--- linux/drivers/block/floppy.c Thu Oct 25 22:58:34 2001
+++ linux-new/drivers/block/floppy.c Mon Nov 26 02:29:29 2001
@@ -3450,8 +3450,6 @@
switch (cmd) {
case BLKROSET:
case BLKROGET:
- case BLKRASET:
- case BLKRAGET:
case BLKFLSBUF:
return blk_ioctl(device, cmd, param);
}
diff -urN linux/drivers/block/ll_rw_blk.c linux-new/drivers/block/ll_rw_blk.c
--- linux/drivers/block/ll_rw_blk.c Mon Oct 29 21:11:17 2001
+++ linux-new/drivers/block/ll_rw_blk.c Mon Nov 26 02:22:51 2001
@@ -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
diff -urN linux/drivers/block/paride/pcd.c linux-new/drivers/block/paride/pcd.c
--- linux/drivers/block/paride/pcd.c Sat Oct 27 11:03:47 2001
+++ linux-new/drivers/block/paride/pcd.c Mon Nov 26 02:51:42 2001
@@ -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;
diff -urN linux/drivers/block/paride/pd.c linux-new/drivers/block/paride/pd.c
--- linux/drivers/block/paride/pd.c Fri Nov 9 22:58:03 2001
+++ linux-new/drivers/block/paride/pd.c Mon Nov 26 02:50:50 2001
@@ -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);
diff -urN linux/drivers/block/paride/pf.c linux-new/drivers/block/paride/pf.c
--- linux/drivers/block/paride/pf.c Thu Oct 25 22:58:35 2001
+++ linux-new/drivers/block/paride/pf.c Mon Nov 26 02:52:19 2001
@@ -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:
diff -urN linux/drivers/block/ps2esdi.c linux-new/drivers/block/ps2esdi.c
--- linux/drivers/block/ps2esdi.c Fri Nov 9 23:01:21 2001
+++ linux-new/drivers/block/ps2esdi.c Mon Nov 26 03:04:08 2001
@@ -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:
diff -urN linux/drivers/block/xd.c linux-new/drivers/block/xd.c
--- linux/drivers/block/xd.c Fri Nov 9 23:01:21 2001
+++ linux-new/drivers/block/xd.c Mon Nov 26 02:46:22 2001
@@ -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);
}
diff -urN linux/drivers/cdrom/aztcd.c linux-new/drivers/cdrom/aztcd.c
--- linux/drivers/cdrom/aztcd.c Thu Oct 25 22:58:35 2001
+++ linux-new/drivers/cdrom/aztcd.c Mon Nov 26 02:53:02 2001
@@ -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))
diff -urN linux/drivers/cdrom/cdu31a.c linux-new/drivers/cdrom/cdu31a.c
--- linux/drivers/cdrom/cdu31a.c Thu Oct 25 22:58:35 2001
+++ linux-new/drivers/cdrom/cdu31a.c Mon Nov 26 02:54:01 2001
@@ -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;
diff -urN linux/drivers/cdrom/cm206.c linux-new/drivers/cdrom/cm206.c
--- linux/drivers/cdrom/cm206.c Thu Oct 25 22:58:35 2001
+++ linux-new/drivers/cdrom/cm206.c Mon Nov 26 02:54:31 2001
@@ -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 */
diff -urN linux/drivers/cdrom/gscd.c linux-new/drivers/cdrom/gscd.c
--- linux/drivers/cdrom/gscd.c Thu Oct 25 22:58:35 2001
+++ linux-new/drivers/cdrom/gscd.c Mon Nov 26 02:54:54 2001
@@ -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;
diff -urN linux/drivers/cdrom/mcd.c linux-new/drivers/cdrom/mcd.c
--- linux/drivers/cdrom/mcd.c Thu Oct 25 22:58:35 2001
+++ linux-new/drivers/cdrom/mcd.c Mon Nov 26 02:55:28 2001
@@ -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 */

diff -urN linux/drivers/cdrom/mcdx.c linux-new/drivers/cdrom/mcdx.c
--- linux/drivers/cdrom/mcdx.c Thu Oct 25 22:58:35 2001
+++ linux-new/drivers/cdrom/mcdx.c Mon Nov 26 02:55:58 2001
@@ -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");
diff -urN linux/drivers/cdrom/optcd.c linux-new/drivers/cdrom/optcd.c
--- linux/drivers/cdrom/optcd.c Thu Oct 25 22:58:35 2001
+++ linux-new/drivers/cdrom/optcd.c Mon Nov 26 02:59:31 2001
@@ -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);

diff -urN linux/drivers/cdrom/sbpcd.c linux-new/drivers/cdrom/sbpcd.c
--- linux/drivers/cdrom/sbpcd.c Thu Oct 25 22:58:35 2001
+++ linux-new/drivers/cdrom/sbpcd.c Mon Nov 26 03:01:11 2001
@@ -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++)
{
diff -urN linux/drivers/cdrom/sjcd.c linux-new/drivers/cdrom/sjcd.c
--- linux/drivers/cdrom/sjcd.c Thu Oct 25 22:58:35 2001
+++ linux-new/drivers/cdrom/sjcd.c Mon Nov 26 03:01:36 2001
@@ -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)) {
diff -urN linux/drivers/cdrom/sonycd535.c linux-new/drivers/cdrom/sonycd535.c
--- linux/drivers/cdrom/sonycd535.c Thu Oct 25 22:58:35 2001
+++ linux-new/drivers/cdrom/sonycd535.c Mon Nov 26 03:02:25 2001
@@ -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);
diff -urN linux/drivers/ide/hd.c linux-new/drivers/ide/hd.c
--- linux/drivers/ide/hd.c Mon Oct 15 22:27:42 2001
+++ linux-new/drivers/ide/hd.c Mon Nov 26 03:04:37 2001
@@ -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;
diff -urN linux/drivers/ide/ide-cd.c linux-new/drivers/ide/ide-cd.c
--- linux/drivers/ide/ide-cd.c Thu Oct 25 08:53:51 2001
+++ linux-new/drivers/ide/ide-cd.c Mon Nov 26 03:05:02 2001
@@ -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);
diff -urN linux/drivers/ide/ide-disk.c linux-new/drivers/ide/ide-disk.c
--- linux/drivers/ide/ide-disk.c Wed Nov 21 06:35:28 2001
+++ linux-new/drivers/ide/ide-disk.c Mon Nov 26 02:31:42 2001
@@ -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);
diff -urN linux/drivers/ide/ide-floppy.c linux-new/drivers/ide/ide-floppy.c
--- linux/drivers/ide/ide-floppy.c Thu Oct 11 18:14:32 2001
+++ linux-new/drivers/ide/ide-floppy.c Mon Nov 26 02:32:14 2001
@@ -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);

diff -urN linux/drivers/ide/ide-probe.c linux-new/drivers/ide/ide-probe.c
--- linux/drivers/ide/ide-probe.c Thu Oct 11 18:14:32 2001
+++ linux-new/drivers/ide/ide-probe.c Mon Nov 26 02:30:40 2001
@@ -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)
diff -urN linux/drivers/md/lvm.c linux-new/drivers/md/lvm.c
--- linux/drivers/md/lvm.c Mon Nov 19 18:56:04 2001
+++ linux-new/drivers/md/lvm.c Mon Nov 26 03:11:21 2001
@@ -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);
diff -urN linux/drivers/md/md.c linux-new/drivers/md/md.c
--- linux/drivers/md/md.c Thu Oct 25 22:58:34 2001
+++ linux-new/drivers/md/md.c Mon Nov 26 02:33:46 2001
@@ -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);
diff -urN linux/drivers/message/i2o/i2o_block.c linux-new/drivers/message/i2o/i2o_block.c
--- linux/drivers/message/i2o/i2o_block.c Thu Oct 25 22:58:35 2001
+++ linux-new/drivers/message/i2o/i2o_block.c Mon Nov 26 03:09:04 2001
@@ -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;
}
diff -urN linux/drivers/s390/block/xpram.c linux-new/drivers/s390/block/xpram.c
--- linux/drivers/s390/block/xpram.c Thu Oct 25 22:58:35 2001
+++ linux-new/drivers/s390/block/xpram.c Mon Nov 26 03:07:23 2001
@@ -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;
diff -urN linux/drivers/s390/char/tapeblock.c linux-new/drivers/s390/char/tapeblock.c
--- linux/drivers/s390/char/tapeblock.c Thu Oct 25 22:58:35 2001
+++ linux-new/drivers/s390/char/tapeblock.c Mon Nov 26 03:08:01 2001
@@ -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));
diff -urN linux/drivers/scsi/sd.c linux-new/drivers/scsi/sd.c
--- linux/drivers/scsi/sd.c Fri Nov 9 23:05:06 2001
+++ linux-new/drivers/scsi/sd.c Mon Nov 26 03:13:51 2001
@@ -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)
diff -urN linux/drivers/scsi/sr.c linux-new/drivers/scsi/sr.c
--- linux/drivers/scsi/sr.c Thu Oct 25 22:58:35 2001
+++ linux-new/drivers/scsi/sr.c Mon Nov 26 02:45:19 2001
@@ -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;
}
diff -urN linux/drivers/scsi/sr_ioctl.c linux-new/drivers/scsi/sr_ioctl.c
--- linux/drivers/scsi/sr_ioctl.c Mon Oct 15 22:27:42 2001
+++ linux-new/drivers/scsi/sr_ioctl.c Mon Nov 26 03:14:37 2001
@@ -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);
diff -urN linux/dump linux-new/dump
--- linux/dump Thu Jan 1 01:00:00 1970
+++ linux-new/dump Mon Nov 26 03:12:16 2001
@@ -0,0 +1,2 @@
+BLKRASET
+BLKRAGET
diff -urN linux/fs/hfs/file.c linux-new/fs/hfs/file.c
--- linux/fs/hfs/file.c Sun Aug 12 19:56:56 2001
+++ linux-new/fs/hfs/file.c Mon Nov 26 02:23:10 2001
@@ -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;
diff -urN linux/include/linux/fs.h linux-new/include/linux/fs.h
--- linux/include/linux/fs.h Thu Nov 22 20:46:19 2001
+++ linux-new/include/linux/fs.h Mon Nov 26 03:23:50 2001
@@ -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 *);
diff -urN linux/kernel/ksyms.c linux-new/kernel/ksyms.c
--- linux/kernel/ksyms.c Wed Nov 21 23:07:25 2001
+++ linux-new/kernel/ksyms.c Mon Nov 26 02:23:04 2001
@@ -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);


Attachments:
kill-read_ahead.patch (26.46 kB)

2001-11-26 15:19:12

by Bill Davidsen

[permalink] [raw]
Subject: Re: Linux-2.4.15-pre9

In article <[email protected]>
[email protected] claimed this objective:
>
>On Thu, 22 Nov 2001, Anuradha Ratnaweera wrote:
>>
>> On Wed, Nov 21, 2001 at 10:44:30PM -0800, Linus Torvalds wrote:
>> >
>> > 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.

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

--
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.

2001-11-26 16:35:20

by Andreas Dilger

[permalink] [raw]
Subject: Re: PATCH 2.5.0 kill read_ahead array.

On Nov 26, 2001 12:52 +0100, Martin Dalecki wrote:
> 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/

2001-11-26 17:03:20

by Martin Dalecki

[permalink] [raw]
Subject: Re: PATCH 2.5.0 kill read_ahead array.

Andreas Dilger wrote:
>
> On Nov 26, 2001 12:52 +0100, Martin Dalecki wrote:
> > 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.