public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
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.



  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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox