From: Martin Dalecki <dalecki@evision-ventures.com>
To: Vojtech Pavlik <vojtech@suse.cz>
Cc: Pavel Machek <pavel@suse.cz>, Jens Axboe <axboe@suse.de>,
kernel list <linux-kernel@vger.kernel.org>
Subject: Re: another IDE cleanup: kill duplicated code
Date: Tue, 12 Feb 2002 14:17:48 +0100 [thread overview]
Message-ID: <3C6915FC.2020707@evision-ventures.com> (raw)
In-Reply-To: <20020211221102.GA131@elf.ucw.cz> <3C68F3F3.8030709@evision-ventures.com> <20020212132846.A7966@suse.cz> <3C690E56.3070606@evision-ventures.com> <20020212135701.A16420@suse.cz>
Vojtech Pavlik wrote:
>On Tue, Feb 12, 2002 at 01:45:10PM +0100, Martin Dalecki wrote:
>
>>>>The first does control an array of values, which doesn't make sense in
>>>>first place. I.e. changing it doesn't
>>>>change ANY behaviour of the kernel.
>>>>
>
>>>Actually HFS uses it ...
>>>
>
>>Please note that the use in HFS is inappriopriate. It's supposed to
>>optimize the read throughput there, which is something that shouldn't
>>be done at the fs setup layer at all. The usage of read_ahead there
>>can be just removed and everything should be fine (modulo the fact
>>that in current state the HFS filesystem code is just non-working
>>obsolete code garbage anyway ;-).
>>
>
>Yes; I just commented on that it does change some behavior of the
>kernel.
>
>>>>The second of them is trying to control a file-system level constant
>>>>inside the actual block device driver. This is a blatant violation of
>>>>the layering principle in software design, and should go as soon as
>>>>possible.
>>>>
>
>>>Yes. But still block device drivers allocate the array ...
>>>
>
>>Well if we do:
>>
>>find ./ -name "*.c" -exec grep max_readahead /dev/null {} \;
>>
>>One can already easly see that apart from ide, md, and acorn drivers
>>this has been already abstracted away one level up at the block device
>>handling as well. My suspiction is that there is now already *double*
>>initialization of the sub-slices of this array there. Anyway ide
>>should be adapted here to the same way as it's done now for scsi.
>>
>>Will you look after this or should me? (I can't until afternoon,
>>becouse I'm at my "true live" job now and have other things to do...)
>>
>
>Am I understanding you correctly that we can just remove the
>max_readahead references in IDE (and possibly also md and acorn)?
>
Yes they can certailny be killed there. However please note that I'm not
quite sure whatever some other
adjustments may be needed. I suggest to double check with the way the
scsi driver middle layer
deals with them.
OK. I can't resist. Let's have a closer look together:
~/tmp/trans/linux-2.5.4# find ./ -name "*.[ch]" -exec grep max_readahead
/dev/null {} \;
./drivers/acorn/block/mfmhd.c: max_readahead[major][minor] = arg;
./drivers/acorn/block/mfmhd.c: return
put_user(max_readahead[major][minor], (long *) arg);
1. ^^^^ Here apparently no additional allocation is needed.
./drivers/block/blkpg.c: if (!(iptr =
max_readahead[major(dev)]))
./drivers/block/blkpg.c: if (!(iptr =
max_readahead[major(dev)]))
2. ^^^^ This is just read out to the user space through ioctl()..
./drivers/block/ll_rw_blk.c:int * max_readahead[MAX_BLKDEV];
./drivers/block/ll_rw_blk.c: memset(max_readahead, 0,
sizeof(max_readahead));
3. ^^^^ This is just initialisation.
./drivers/ide/ide-probe.c: max_readahead[hwif->major] = max_ra;
./drivers/ide/ide-disk.c: ide_add_setting(drive, "fi ....
1024, &max_readahead[major][minor], NULL);
./drivers/ide/ide-floppy.c: ide_add_setting(drive, "....,
&max_readahead[major][minor], NULL);
./drivers/ide/ide-cd.c: ide_add_setting(drive, "file_readahead",. ... ,
&max_readahead[major][minor], NULL);
./drivers/ide/ide.c: kfree(max_readahead[hwif->major]);
./drivers/ide/ataraid.c: max_readahead[ATAMAJOR] = NULL;
4. ^^^^ Still just initialization.
./drivers/md/md.c: max_readahead[MAJOR_NR] = md_maxreadahead;
./include/linux/blkdev.h:extern int * max_readahead[MAX_BLKDEV];
./include/linux/blkdev.h: max_readahead[major] = NULL;
5. Still no true usage.
./mm/filemap.c:static inline int get_max_readahead(struct inode * inode)
./mm/filemap.c: if (kdev_none(inode->i_dev) ||
!max_readahead[major(inode->i_dev)])
./mm/filemap.c: return
max_readahead[major(inode->i_dev)][minor(inode->i_dev)];
./mm/filemap.c: int max_readahead = get_max_readahead(inode);
./mm/filemap.c: if (filp->f_ramax > max_readahead)
./mm/filemap.c: filp->f_ramax = max_readahead;
./mm/filemap.c: int max_readahead = get_max_readahead(inode);
./mm/filemap.c: if (filp->f_ramax > max_readahead)
./mm/filemap.c: filp->f_ramax = max_readahead;
./mm/filemap.c: ra_window =
get_max_readahead(vma->vm_file->f_dentry->d_inode);
6. Hmm I wonder how the above is working in case somebody didn't care
about this array.
Let's have a closer look at it there (mm/filemap.c).
If max_readahead array is not set at all, the filemap code just assumes
a constant
MAX_READAHEAD value. max_readahead is an upper bound value for the number
for consecutive file sectors read at once.
static inline int get_max_readahead(struct inode * inode)
{
if (kdev_none(inode->i_dev) || !max_readahead[major(inode->i_dev)])
return MAX_READAHEAD;
return max_readahead[major(inode->i_dev)][minor(inode->i_dev)];
}
Other then this we have the following code in nopage_sequention_readahead:
ra_window = get_max_readahead(vma->vm_file->f_dentry->d_inode);
ra_window = CLUSTER_OFFSET(ra_window + CLUSTER_PAGES - 1);
Obviously the first file of the two can be just killed without any harm.
So the conclusions is that not just the read_ahead array is bogous now.
The max_readahead array can be killed entierly from the kernel as well ;-).
The answer is: I'm now confident that you can just remove all the
max_readahead initialization from the ide code.
next prev parent reply other threads:[~2002-02-12 13:18 UTC|newest]
Thread overview: 53+ messages / expand[flat|nested] mbox.gz Atom feed top
2002-02-11 22:11 another IDE cleanup: kill duplicated code Pavel Machek
2002-02-12 10:52 ` Martin Dalecki
2002-02-12 12:28 ` Vojtech Pavlik
2002-02-12 12:45 ` Martin Dalecki
2002-02-12 12:57 ` Vojtech Pavlik
2002-02-12 13:17 ` Martin Dalecki [this message]
2002-02-12 13:43 ` Vojtech Pavlik
2002-02-12 13:58 ` Martin Dalecki
2002-02-12 14:42 ` Vojtech Pavlik
2002-02-12 15:23 ` Martin Dalecki
2002-02-12 15:28 ` Vojtech Pavlik
2002-02-12 15:35 ` Martin Dalecki
2002-02-12 16:56 ` Jens Axboe
2002-02-13 5:50 ` Andre Hedrick
2002-02-13 7:28 ` Vojtech Pavlik
2002-02-13 10:53 ` Martin Dalecki
2002-02-13 10:35 ` Martin Dalecki
2002-02-13 10:29 ` Andre Hedrick
2002-02-13 10:56 ` Pavel Machek
2002-02-13 11:11 ` Martin Dalecki
2002-02-13 11:25 ` Matthias Andree
2002-02-12 18:28 ` Andreas Dilger
2002-02-13 12:35 ` Martin Dalecki
2002-02-13 16:24 ` Andreas Dilger
2002-02-13 16:31 ` Martin Dalecki
2002-02-12 16:57 ` Jens Axboe
2002-02-13 5:46 ` Andre Hedrick
2002-02-13 6:42 ` Jens Axboe
2002-02-13 7:30 ` Andre Hedrick
2002-02-13 7:47 ` Jens Axboe
2002-02-13 7:44 ` Andre Hedrick
2002-02-13 7:58 ` Jens Axboe
2002-02-13 20:38 ` Rik van Riel
2002-02-13 11:01 ` Martin Dalecki
2002-02-13 11:03 ` Jens Axboe
2002-02-13 11:27 ` Vojtech Pavlik
2002-02-13 7:05 ` Vojtech Pavlik
2002-02-12 12:50 ` Martin Dalecki
2002-02-12 19:19 ` Roger Larsson
2002-02-13 10:56 ` Martin Dalecki
2002-02-12 20:03 ` Andrew Morton
2002-02-13 10:47 ` Martin Dalecki
2002-02-13 18:52 ` Andrew Morton
2002-02-14 10:04 ` Martin Dalecki
2002-02-14 10:19 ` Andrew Morton
2002-02-13 5:52 ` Andre Hedrick
2002-02-13 7:30 ` Vojtech Pavlik
2002-02-13 7:27 ` Andre Hedrick
2002-02-13 10:39 ` Vojtech Pavlik
2002-02-13 10:46 ` Andre Hedrick
2002-02-13 11:26 ` Vojtech Pavlik
2002-02-13 11:26 ` Andre Hedrick
2002-02-13 11:03 ` Daniel Egger
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=3C6915FC.2020707@evision-ventures.com \
--to=dalecki@evision-ventures.com \
--cc=axboe@suse.de \
--cc=linux-kernel@vger.kernel.org \
--cc=pavel@suse.cz \
--cc=vojtech@suse.cz \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.