public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
* Re: PATCH: killing read_ahead[]
       [not found] <Pine.GSO.4.21.0010251435100.12098-100000@weyl.math.psu.edu>
@ 2000-10-26 20:44 ` Linus Torvalds
  2000-10-29 14:43   ` Alexander Viro
  0 siblings, 1 reply; 5+ messages in thread
From: Linus Torvalds @ 2000-10-26 20:44 UTC (permalink / raw)
  To: Alexander Viro; +Cc: Rik van Riel, Jeff Garzik, Martin Dalecki, linux-kernel



On Wed, 25 Oct 2000, Alexander Viro wrote:
> 
> Linus, what do you think about that? I can do the remaining filesystems
> and give it initial testing today.

Ok, looks reasonable, if not really pretty. I'd probably prefer

	last_page = size >> PAGE_CACHE_SIZE;
	last_page_size = size & (PAGE_CACHE_SIZE-1);

and then the three cases would be

	if (index < last_page) {
		full page case - ok.
	}
	if (index > last_page || !last_page_size) {
		bad case, past the end
	}
	partial_page.

I see why you did it the way you did, but while it makes it really cheap
to test for "index past the end", it makes for less obvious calculations
in other places, I feel.

The alternative is to have an entirely different approach, where the page
cache itself only knows about the maximum page (in which case your current
"last_page" calculation is right on), and then anybody who needs to know
about partial pages needs to get THAT information from the inode.

I'd almost prefer the alternative approach. Especially as right now the
only real problem we're fighting is to make sure we never return an
invalid page - the sub-page offset really doesn't matter for those things,
and everybody who cares about the sub-page-information already obviously
has it.

		Linus

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
Please read the FAQ at http://www.tux.org/lkml/

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: PATCH: killing read_ahead[]
       [not found] <39F5999B.91DDC98@evision-ventures.com>
@ 2000-10-26 23:39 ` Jeff V. Merkey
  2000-10-27  0:47   ` Jeff V. Merkey
  0 siblings, 1 reply; 5+ messages in thread
From: Jeff V. Merkey @ 2000-10-26 23:39 UTC (permalink / raw)
  To: Martin Dalecki; +Cc: linux-kernel, torvalds


Martin,

A lot of changes.  Have you tested this adequately?   Changes of this
magnitude this late in the 2.4 cycle could break a lot of stuff.  I'll
apply your patch, and let you know.

:-)

Jeff

Martin Dalecki wrote:
> 
> Hello!
> 
> Please have a look at the following patch and feel free to be scared
> by the fact how UTTERLY BROKEN and ARBITRARY the current usage of the
> read_ahead[] array and during the whole past decade was!
> If you really care about clean internal interfaces this should be
> one of those prio number ONE targets to shoot at...
> 
> The most amanzing thing is that the whole test10-pre5 kernel with this
> patch applied doesn't show any performance penalties for me at all!
> And of corse it's about 10k smaller...
> 
> --mdcki
> 
>   ------------------------------------------------------------------------
> diff -ur linux-test10-pre5/arch/sparc64/kernel/ioctl32.c linux/arch/sparc64/kernel/ioctl32.c
> --- linux-test10-pre5/arch/sparc64/kernel/ioctl32.c     Tue Oct 24 13:52:02 2000
> +++ linux/arch/sparc64/kernel/ioctl32.c Tue Oct 24 15:37:56 2000
> @@ -2136,7 +2136,7 @@
>         uint32_t lv_badblock;
>         uint32_t lv_allocation;
>         uint32_t lv_io_timeout;
> -       uint32_t lv_read_ahead;
> +       uint32_t lv_NOT_USED;
>         /* delta to version 1 starts here */
>         u32 lv_snapshot_org;
>         u32 lv_snapshot_prev;
> @@ -3100,7 +3100,6 @@
>  COMPATIBLE_IOCTL(BLKROGET)
>  COMPATIBLE_IOCTL(BLKRRPART)
>  COMPATIBLE_IOCTL(BLKFLSBUF)
> -COMPATIBLE_IOCTL(BLKRASET)
>  COMPATIBLE_IOCTL(BLKFRASET)
>  COMPATIBLE_IOCTL(BLKSECTSET)
>  COMPATIBLE_IOCTL(BLKSSZGET)
> @@ -3621,7 +3620,6 @@
>  HANDLE_IOCTL(SIOCRTMSG, ret_einval)
>  HANDLE_IOCTL(SIOCGSTAMP, do_siocgstamp)
>  HANDLE_IOCTL(HDIO_GETGEO, hdio_getgeo)
> -HANDLE_IOCTL(BLKRAGET, w_long)
>  HANDLE_IOCTL(BLKGETSIZE, w_long)
>  HANDLE_IOCTL(0x1260, broken_blkgetsize)
>  HANDLE_IOCTL(BLKFRAGET, w_long)
> diff -ur linux-test10-pre5/drivers/acorn/block/mfmhd.c linux/drivers/acorn/block/mfmhd.c
> --- linux-test10-pre5/drivers/acorn/block/mfmhd.c       Wed Oct  4 01:39:44 2000
> +++ linux/drivers/acorn/block/mfmhd.c   Tue Oct 24 15:35:40 2000
> @@ -1231,8 +1231,6 @@
>         case BLKFLSBUF:
>         case BLKROSET:
>         case BLKROGET:
> -       case BLKRASET:
> -       case BLKRAGET:
>         case BLKPG:
>                 return blk_ioctl(dev, cmd, arg);
> 
> @@ -1448,7 +1446,6 @@
>         hdc63463_irqpollmask    = irqmask;
> 
>         blk_init_queue(BLK_DEFAULT_QUEUE(MAJOR_NR), DEVICE_REQUEST);
> -       read_ahead[MAJOR_NR] = 8;       /* 8 sector (4kB?) read ahread */
> 
>  #ifndef MODULE
>         mfm_gendisk.next = gendisk_head;
> diff -ur linux-test10-pre5/drivers/block/DAC960.c linux/drivers/block/DAC960.c
> --- linux-test10-pre5/drivers/block/DAC960.c    Tue Oct 24 13:52:03 2000
> +++ linux/drivers/block/DAC960.c        Tue Oct 24 15:24:51 2000
> @@ -1931,10 +1931,7 @@
>    Controller->GenericDiskInfo.sizes = Controller->PartitionSizes;
>    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.
>    */
> @@ -4964,16 +4961,6 @@
>        return put_user(Controller->GenericDiskInfo.part[MINOR(Inode->i_rdev)]
>                                                  .nr_sects,
>                       (long *) Argument);
> -    case BLKRAGET:
> -      /* Get Read-Ahead. */
> -      if ((long *) Argument == NULL) return -EINVAL;
> -      return put_user(read_ahead[MAJOR(Inode->i_rdev)], (long *) Argument);
> -    case BLKRASET:
> -      /* Set Read-Ahead. */
> -      if (!capable(CAP_SYS_ADMIN)) return -EACCES;
> -      if (Argument > 256) return -EINVAL;
> -      read_ahead[MAJOR(Inode->i_rdev)] = Argument;
> -      return 0;
>      case BLKFLSBUF:
>        /* Flush Buffers. */
>        if (!capable(CAP_SYS_ADMIN)) return -EACCES;
> diff -ur linux-test10-pre5/drivers/block/acsi.c linux/drivers/block/acsi.c
> --- linux-test10-pre5/drivers/block/acsi.c      Thu Feb 17 00:42:05 2000
> +++ linux/drivers/block/acsi.c  Tue Oct 24 15:24:13 2000
> @@ -1792,9 +1792,8 @@
>         }
>         phys_acsi_buffer = virt_to_phys( acsi_buffer );
>         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 */
>         acsi_gendisk.next = gendisk_head;
>         gendisk_head = &acsi_gendisk;
> 
> diff -ur linux-test10-pre5/drivers/block/ataflop.c linux/drivers/block/ataflop.c
> --- linux-test10-pre5/drivers/block/ataflop.c   Wed Jul  5 20:24:40 2000
> +++ linux/drivers/block/ataflop.c       Tue Oct 24 15:33:40 2000
> @@ -1571,8 +1571,6 @@
>         switch (cmd) {
>                 case BLKROSET:
>                 case BLKROGET:
> -               case BLKRASET:
> -               case BLKRAGET:
>                 case BLKFLSBUF:
>                         return blk_ioctl(device, cmd, param);
>         }
> diff -ur linux-test10-pre5/drivers/block/blkpg.c linux/drivers/block/blkpg.c
> --- linux-test10-pre5/drivers/block/blkpg.c     Mon Mar 13 04:32:57 2000
> +++ linux/drivers/block/blkpg.c Tue Oct 24 15:29:31 2000
> @@ -29,7 +29,7 @@
>   */
> 
>  #include <linux/errno.h>
> -#include <linux/fs.h>                  /* for BLKRASET, ... */
> +#include <linux/fs.h>
>  #include <linux/sched.h>               /* for capable() */
>  #include <linux/blk.h>                 /* for set_device_ro() */
>  #include <linux/blkpg.h>
> @@ -220,18 +220,6 @@
>                 case BLKROGET:
>                         intval = (is_read_only(dev) != 0);
>                         return put_user(intval, (int *)(arg));
> -
> -               case BLKRASET:
> -                       if(!capable(CAP_SYS_ADMIN))
> -                               return -EACCES;
> -                       if(!dev || 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))
> diff -ur linux-test10-pre5/drivers/block/cciss.c linux/drivers/block/cciss.c
> --- linux-test10-pre5/drivers/block/cciss.c     Tue Oct 24 13:52:03 2000
> +++ linux/drivers/block/cciss.c Tue Oct 24 15:34:14 2000
> @@ -395,8 +395,6 @@
>         case BLKFLSBUF:
>         case BLKROSET:
>         case BLKROGET:
> -       case BLKRASET:
> -       case BLKRAGET:
>         case BLKPG:
>                 return( blk_ioctl(inode->i_rdev, cmd, arg));
>         case CCISS_GETPCIINFO:
> @@ -1841,7 +1839,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;
> 
>                 /* Fill in the gendisk data */
>                 hba[i]->gendisk.major = MAJOR_NR + i;
> diff -ur linux-test10-pre5/drivers/block/cpqarray.c linux/drivers/block/cpqarray.c
> --- linux-test10-pre5/drivers/block/cpqarray.c  Tue Oct 24 13:52:03 2000
> +++ linux/drivers/block/cpqarray.c      Tue Oct 24 15:33:53 2000
> @@ -503,7 +503,6 @@
>                 blk_queue_headactive(BLK_DEFAULT_QUEUE(MAJOR_NR + i), 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;
> 
>                 ida_gendisk[i].major = MAJOR_NR + i;
>                 ida_gendisk[i].major_name = "ida";
> @@ -1209,8 +1208,6 @@
>         case BLKFLSBUF:
>         case BLKROSET:
>         case BLKROGET:
> -       case BLKRASET:
> -       case BLKRAGET:
>         case BLKPG:
>                 return blk_ioctl(inode->i_rdev, cmd, arg);
> 
> diff -ur linux-test10-pre5/drivers/block/floppy.c linux/drivers/block/floppy.c
> --- linux-test10-pre5/drivers/block/floppy.c    Tue Oct 24 13:52:03 2000
> +++ linux/drivers/block/floppy.c        Tue Oct 24 15:33:28 2000
> @@ -3455,8 +3455,6 @@
>         switch (cmd) {
>                 case BLKROSET:
>                 case BLKROGET:
> -               case BLKRASET:
> -               case BLKRAGET:
>                 case BLKFLSBUF:
>                         return blk_ioctl(device, cmd, param);
>         }
> diff -ur linux-test10-pre5/drivers/block/ll_rw_blk.c linux/drivers/block/ll_rw_blk.c
> --- linux-test10-pre5/drivers/block/ll_rw_blk.c Tue Oct 24 13:52:03 2000
> +++ linux/drivers/block/ll_rw_blk.c     Tue Oct 24 15:25:23 2000
> @@ -65,10 +65,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 -ur linux-test10-pre5/drivers/block/paride/pcd.c linux/drivers/block/paride/pcd.c
> --- linux-test10-pre5/drivers/block/paride/pcd.c        Wed Apr  5 04:25:14 2000
> +++ linux/drivers/block/paride/pcd.c    Tue Oct 24 15:23:56 2000
> @@ -344,7 +344,6 @@
>                 if (PCD.present) register_cdrom(&PCD.info);
> 
>         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 -ur linux-test10-pre5/drivers/block/paride/pd.c linux/drivers/block/paride/pd.c
> --- linux-test10-pre5/drivers/block/paride/pd.c Tue Jun 20 16:24:52 2000
> +++ linux/drivers/block/paride/pd.c     Tue Oct 24 15:34:00 2000
> @@ -453,8 +453,7 @@
>         q->back_merge_fn = pd_back_merge_fn;
>         q->front_merge_fn = pd_front_merge_fn;
>         q->merge_requests_fn = pd_merge_requests_fn;
> -        read_ahead[MAJOR_NR] = 8;       /* 8 sector (4kB) read ahead */
> -
> +
>         pd_gendisk.major = major;
>         pd_gendisk.major_name = name;
>         pd_gendisk.next = gendisk_head;
> @@ -543,8 +542,6 @@
>                  return pd_revalidate(inode->i_rdev);
>             case BLKROSET:
>             case BLKROGET:
> -           case BLKRASET:
> -           case BLKRAGET:
>             case BLKFLSBUF:
>             case BLKPG:
>                 return blk_ioctl(inode->i_rdev, cmd, arg);
> diff -ur linux-test10-pre5/drivers/block/paride/pf.c linux/drivers/block/paride/pf.c
> --- linux-test10-pre5/drivers/block/paride/pf.c Wed Apr  5 04:25:14 2000
> +++ linux/drivers/block/paride/pf.c     Tue Oct 24 15:34:06 2000
> @@ -413,8 +413,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++)
> @@ -491,8 +490,6 @@
>                  return (0);
>             case BLKROSET:
>             case BLKROGET:
> -           case BLKRASET:
> -           case BLKRAGET:
>             case BLKFLSBUF:
>                 return blk_ioctl(inode->i_rdev, cmd, arg);
>              default:
> diff -ur linux-test10-pre5/drivers/block/ps2esdi.c linux/drivers/block/ps2esdi.c
> --- linux-test10-pre5/drivers/block/ps2esdi.c   Fri Jul 14 21:20:22 2000
> +++ linux/drivers/block/ps2esdi.c       Tue Oct 24 15:33:46 2000
> @@ -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 */
>         ps2esdi_gendisk.next = gendisk_head;
> @@ -1153,8 +1152,6 @@
> 
>                 case BLKROSET:
>                 case BLKROGET:
> -               case BLKRASET:
> -               case BLKRAGET:
>                 case BLKFLSBUF:
>                 case BLKPG:
>                         return blk_ioctl(inode->i_rdev, cmd, arg);
> diff -ur linux-test10-pre5/drivers/block/xd.c linux/drivers/block/xd.c
> --- linux-test10-pre5/drivers/block/xd.c        Tue Oct 24 13:52:03 2000
> +++ linux/drivers/block/xd.c    Tue Oct 24 15:33:35 2000
> @@ -168,7 +168,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 */
>         xd_gendisk.next = gendisk_head;
>         gendisk_head = &xd_gendisk;
>         xd_geninit();
> @@ -352,8 +351,6 @@
>                 case BLKFLSBUF:
>                 case BLKROSET:
>                 case BLKROGET:
> -               case BLKRASET:
> -               case BLKRAGET:
>                 case BLKPG:
>                         return blk_ioctl(inode->i_rdev, cmd, arg);
> 
> @@ -1116,7 +1113,6 @@
>         blk_cleanup_queue(BLK_DEFAULT_QUEUE(MAJOR_NR));
>         blk_size[MAJOR_NR] = NULL;
>         hardsect_size[MAJOR_NR] = NULL;
> -       read_ahead[MAJOR_NR] = 0;
>         for (gdp = &gendisk_head; *gdp; gdp = &((*gdp)->next))
>                 if (*gdp == &xd_gendisk)
>                         break;
> diff -ur linux-test10-pre5/drivers/cdrom/aztcd.c linux/drivers/cdrom/aztcd.c
> --- linux-test10-pre5/drivers/cdrom/aztcd.c     Fri Jul 14 21:20:22 2000
> +++ linux/drivers/cdrom/aztcd.c Tue Oct 24 15:20:59 2000
> @@ -1803,7 +1803,6 @@
>  #ifndef AZT_KERNEL_PRIOR_2_1
>         blksize_size[MAJOR_NR] = aztcd_blocksizes;
>  #endif
> -       read_ahead[MAJOR_NR] = 4;
>         register_disk(NULL, MKDEV(MAJOR_NR,0), 1, &azt_fops, 0);
> 
>          if ((azt_port==0x1f0)||(azt_port==0x170))
> diff -ur linux-test10-pre5/drivers/cdrom/cdu31a.c linux/drivers/cdrom/cdu31a.c
> --- linux-test10-pre5/drivers/cdrom/cdu31a.c    Wed Jul 19 06:40:47 2000
> +++ linux/drivers/cdrom/cdu31a.c        Tue Oct 24 15:20:45 2000
> @@ -3508,7 +3508,6 @@
>        is_a_cdu31a = strcmp("CD-ROM CDU31A", drive_config.product_id) == 0;
> 
>        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 -ur linux-test10-pre5/drivers/cdrom/cm206.c linux/drivers/cdrom/cm206.c
> --- linux-test10-pre5/drivers/cdrom/cm206.c     Wed Jul 19 06:40:47 2000
> +++ linux/drivers/cdrom/cm206.c Tue Oct 24 15:19:59 2000
> @@ -26,7 +26,7 @@
>   25 feb 1995: 0.21a writes also in interrupt mode, still some
>               small bugs to be found... Larger buffer.
>    2 mrt 1995: 0.22 Bug found (cd-> nowhere, interrupt was called in
> -              initialization), read_ahead of 16. Timeouts implemented.
> +              initialization), read ahead of 16. Timeouts implemented.
>               unclear if they do something...
>    7 mrt 1995: 0.23 Start of background read-ahead.
>   18 mrt 1995: 0.24 Working background read-ahead. (still problems)
> @@ -1399,7 +1399,6 @@
>    }
>    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 -ur linux-test10-pre5/drivers/cdrom/gscd.c linux/drivers/cdrom/gscd.c
> --- linux-test10-pre5/drivers/cdrom/gscd.c      Wed Jul 19 07:52:32 2000
> +++ linux/drivers/cdrom/gscd.c  Tue Oct 24 15:19:38 2000
> @@ -1086,8 +1086,7 @@
> 
>         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 -ur linux-test10-pre5/drivers/cdrom/mcd.c linux/drivers/cdrom/mcd.c
> --- linux-test10-pre5/drivers/cdrom/mcd.c       Wed Oct  4 01:39:49 2000
> +++ linux/drivers/cdrom/mcd.c   Tue Oct 24 15:19:25 2000
> @@ -1194,7 +1194,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 -ur linux-test10-pre5/drivers/cdrom/mcdx.c linux/drivers/cdrom/mcdx.c
> --- linux-test10-pre5/drivers/cdrom/mcdx.c      Wed Jul 19 06:40:47 2000
> +++ linux/drivers/cdrom/mcdx.c  Tue Oct 24 15:19:16 2000
> @@ -1118,7 +1118,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 -ur linux-test10-pre5/drivers/cdrom/optcd.c linux/drivers/cdrom/optcd.c
> --- linux-test10-pre5/drivers/cdrom/optcd.c     Wed Jul  5 22:15:19 2000
> +++ linux/drivers/cdrom/optcd.c Tue Oct 24 15:19:04 2000
> @@ -2069,7 +2069,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 -ur linux-test10-pre5/drivers/cdrom/sbpcd.c linux/drivers/cdrom/sbpcd.c
> --- linux-test10-pre5/drivers/cdrom/sbpcd.c     Tue Oct 24 13:52:03 2000
> +++ linux/drivers/cdrom/sbpcd.c Tue Oct 24 15:18:52 2000
> @@ -4508,13 +4508,7 @@
>                 msg(DBG_AUD,"read_audio: successful return.\n");
>                 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);
> @@ -5816,10 +5810,8 @@
>         }
>         blk_init_queue(BLK_DEFAULT_QUEUE(MAJOR_NR), DEVICE_REQUEST);
>         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 -ur linux-test10-pre5/drivers/cdrom/sbpcd.h linux/drivers/cdrom/sbpcd.h
> --- linux-test10-pre5/drivers/cdrom/sbpcd.h     Mon Sep 11 12:04:09 2000
> +++ linux/drivers/cdrom/sbpcd.h Tue Oct 24 15:17:49 2000
> @@ -162,7 +162,7 @@
>  /*==========================================================================*/
>  /*==========================================================================*/
>  /*
> - * driver's own read_ahead, data mode
> + * driver's own read ahead, data mode
>   */
>  #define SBP_BUFFER_FRAMES 8
> 
> diff -ur linux-test10-pre5/drivers/cdrom/sjcd.c linux/drivers/cdrom/sjcd.c
> --- linux-test10-pre5/drivers/cdrom/sjcd.c      Fri Jul 14 21:20:22 2000
> +++ linux/drivers/cdrom/sjcd.c  Tue Oct 24 15:27:12 2000
> @@ -1479,7 +1479,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 -ur linux-test10-pre5/drivers/cdrom/sonycd535.c linux/drivers/cdrom/sonycd535.c
> --- linux-test10-pre5/drivers/cdrom/sonycd535.c Wed Oct  4 01:39:49 2000
> +++ linux/drivers/cdrom/sonycd535.c     Tue Oct 24 15:18:00 2000
> @@ -1599,7 +1599,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 -ur linux-test10-pre5/drivers/i2o/i2o_block.c linux/drivers/i2o/i2o_block.c
> --- linux-test10-pre5/drivers/i2o/i2o_block.c   Fri Jul  7 04:24:51 2000
> +++ linux/drivers/i2o/i2o_block.c       Tue Oct 24 15:35:53 2000
> @@ -963,8 +963,6 @@
>                 case BLKFLSBUF:
>                 case BLKROSET:
>                 case BLKROGET:
> -               case BLKRASET:
> -               case BLKRAGET:
>                 case BLKPG:
>                         return blk_ioctl(inode->i_rdev, cmd, arg);
> 
> diff -ur linux-test10-pre5/drivers/ide/hd.c linux/drivers/ide/hd.c
> --- linux-test10-pre5/drivers/ide/hd.c  Wed Jul  5 20:24:41 2000
> +++ linux/drivers/ide/hd.c      Tue Oct 24 15:34:53 2000
> @@ -646,8 +646,6 @@
> 
>                 case BLKROSET:
>                 case BLKROGET:
> -               case BLKRASET:
> -               case BLKRAGET:
>                 case BLKFLSBUF:
>                 case BLKPG:
>                         return blk_ioctl(inode->i_rdev, cmd, arg);
> @@ -829,7 +827,6 @@
>                 return -1;
>         }
>         blk_init_queue(BLK_DEFAULT_QUEUE(MAJOR_NR), DEVICE_REQUEST);
> -       read_ahead[MAJOR_NR] = 8;               /* 8 sector (4kB) read-ahead */
>         hd_gendisk.next = gendisk_head;
>         gendisk_head = &hd_gendisk;
>         init_timer(&device_timer);
> diff -ur linux-test10-pre5/drivers/ide/ide-cd.c linux/drivers/ide/ide-cd.c
> --- linux-test10-pre5/drivers/ide/ide-cd.c      Mon Sep 11 12:04:10 2000
> +++ linux/drivers/ide/ide-cd.c  Tue Oct 24 14:55:18 2000
> @@ -2402,7 +2402,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 -ur linux-test10-pre5/drivers/ide/ide-disk.c linux/drivers/ide/ide-disk.c
> --- linux-test10-pre5/drivers/ide/ide-disk.c    Tue Oct 24 13:52:05 2000
> +++ linux/drivers/ide/ide-disk.c        Tue Oct 24 14:26:51 2000
> @@ -702,7 +702,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,      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,  "lun",                  SETTING_RW,                                     -1,                     -1,                     TYPE_INT,       0,      7,                              1,      1,      &drive->lun,                    NULL);
> diff -ur linux-test10-pre5/drivers/ide/ide-floppy.c linux/drivers/ide/ide-floppy.c
> --- linux-test10-pre5/drivers/ide/ide-floppy.c  Fri Apr 14 07:50:32 2000
> +++ linux/drivers/ide/ide-floppy.c      Tue Oct 24 15:17:15 2000
> @@ -1520,7 +1520,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 -ur linux-test10-pre5/drivers/ide/ide-probe.c linux/drivers/ide/ide-probe.c
> --- linux-test10-pre5/drivers/ide/ide-probe.c   Fri Aug  4 01:29:49 2000
> +++ linux/drivers/ide/ide-probe.c       Tue Oct 24 14:27:43 2000
> @@ -853,7 +853,6 @@
>         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 -ur linux-test10-pre5/drivers/md/lvm.c linux/drivers/md/lvm.c
> --- linux-test10-pre5/drivers/md/lvm.c  Wed Oct  4 01:39:52 2000
> +++ linux/drivers/md/lvm.c      Tue Oct 24 15:39:53 2000
> @@ -173,10 +173,6 @@
>  #include <linux/errno.h>
>  #include <linux/lvm.h>
> 
> -#define        LVM_CORRECT_READ_AHEAD(a)                               \
> -       (((a) < LVM_MIN_READ_AHEAD || (a) > LVM_MAX_READ_AHEAD) \
> -        ? LVM_MAX_READ_AHEAD : (a))
> -
>  #ifndef WRITEA
>  #  define WRITEA WRITE
>  #endif
> @@ -878,34 +874,6 @@
>                 invalidate_buffers(inode->i_rdev);
>                 break;
> 
> -
> -       case BLKRASET:
> -               /* set read ahead for block device */
> -               if (!capable(CAP_SYS_ADMIN)) return -EACCES;
> -
> -#ifdef DEBUG_IOCTL
> -               printk(KERN_DEBUG
> -                      "%s -- lvm_blk_ioctl -- BLKRASET: %d sectors for %02X:%02X\n",
> -                      lvm_name, (long) arg, MAJOR(inode->i_rdev), minor);
> -#endif
> -               if ((long) arg < LVM_MIN_READ_AHEAD ||
> -                   (long) arg > LVM_MAX_READ_AHEAD)
> -                       return -EINVAL;
> -               read_ahead[MAJOR_NR] = lv_ptr->lv_read_ahead = (long) arg;
> -               break;
> -
> -
> -       case BLKRAGET:
> -               /* get current read ahead setting */
> -#ifdef DEBUG_IOCTL
> -               printk(KERN_DEBUG
> -                      "%s -- lvm_blk_ioctl -- BLKRAGET\n", lvm_name);
> -#endif
> -               if (put_user(lv_ptr->lv_read_ahead, (long *)arg))
> -                       return -EFAULT;
> -               break;
> -
> -
>         case HDIO_GETGEO:
>                 /* get disk geometry */
>  #ifdef DEBUG_IOCTL
> @@ -2080,7 +2048,6 @@
>         lvm_size[MINOR(lv_ptr->lv_dev)] = lv_ptr->lv_size >> 1;
>         vg_lv_map[MINOR(lv_ptr->lv_dev)].vg_number = vg_ptr->vg_number;
>         vg_lv_map[MINOR(lv_ptr->lv_dev)].lv_number = lv_ptr->lv_number;
> -       read_ahead[MAJOR_NR] = lv_ptr->lv_read_ahead = LVM_CORRECT_READ_AHEAD(lv_ptr->lv_read_ahead);
>         vg_ptr->lv_cur++;
>         lv_ptr->lv_status = lv_status_save;
> 
> @@ -2331,7 +2298,6 @@
>         lvm_size[MINOR(lv_ptr->lv_dev)] = lv_ptr->lv_size >> 1;
>         /* vg_lv_map array doesn't have to be changed here */
> 
> -       read_ahead[MAJOR_NR] = lv_ptr->lv_read_ahead = LVM_CORRECT_READ_AHEAD(lv_ptr->lv_read_ahead);
>         lv_ptr->lv_status = lv_status_save;
> 
>         return 0;
> diff -ur linux-test10-pre5/drivers/md/md.c linux/drivers/md/md.c
> --- linux-test10-pre5/drivers/md/md.c   Tue Oct 24 13:52:05 2000
> +++ linux/drivers/md/md.c       Tue Oct 24 15:10:53 2000
> @@ -1674,7 +1674,6 @@
>         md_hd_struct[mdidx(mddev)].start_sect = 0;
>         md_hd_struct[mdidx(mddev)].nr_sects = md_size[mdidx(mddev)] << 1;
> 
> -       read_ahead[MD_MAJOR] = 1024;
>         return (0);
>  }
> 
> @@ -2561,22 +2560,6 @@
>                         invalidate_buffers(dev);
>                         goto done;
> 
> -               case BLKRASET:
> -                       if (arg > 0xff) {
> -                               err = -EINVAL;
> -                               goto abort;
> -                       }
> -                       read_ahead[MAJOR(dev)] = arg;
> -                       goto done;
> -
> -               case BLKRAGET:
> -                       if (!arg) {
> -                               err = -EINVAL;
> -                               goto abort;
> -                       }
> -                       err = md_put_user (read_ahead[
> -                               MAJOR(dev)], (long *) arg);
> -                       goto done;
>                 default:
>         }
> 
> @@ -3097,12 +3080,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");
> @@ -3603,9 +3580,7 @@
> 
>         /* 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;
>         md_gendisk.next = gendisk_head;
> 
>         gendisk_head = &md_gendisk;
> diff -ur linux-test10-pre5/drivers/s390/block/dasd.c linux/drivers/s390/block/dasd.c
> --- linux-test10-pre5/drivers/s390/block/dasd.c Thu Jun 22 07:31:02 2000
> +++ linux/drivers/s390/block/dasd.c     Tue Oct 24 15:15:58 2000
> @@ -385,16 +385,6 @@
>                         rc = fsync_dev (inp->i_rdev);
>                         break;
>                 }
> -       case BLKRAGET:{
> -                       rc = copy_to_user ((long *) data,
> -                                       read_ahead + MAJOR_NR, sizeof (long));
> -                       break;
> -               }
> -       case BLKRASET:{
> -                       rc = copy_from_user (read_ahead + MAJOR_NR,
> -                                            (long *) data, sizeof (long));
> -                       break;
> -               }
>         case BLKRRPART:{
>                         INTERNAL_CHECK ("BLKRPART not implemented%s", "");
>                         rc = -EINVAL;
> @@ -1460,7 +1450,6 @@
>                 return rc;
>         }
>  #endif /* DASD_PARANOIA */
> -        read_ahead[MAJOR_NR] = 8;
>          blk_size[MAJOR_NR] = dasd_blks;
>         hardsect_size[MAJOR_NR] = dasd_secsize;
>         blksize_size[MAJOR_NR] = dasd_blksize;
> diff -ur linux-test10-pre5/drivers/s390/block/mdisk.c linux/drivers/s390/block/mdisk.c
> --- linux-test10-pre5/drivers/s390/block/mdisk.c        Fri May 12 20:41:44 2000
> +++ linux/drivers/s390/block/mdisk.c    Tue Oct 24 15:15:27 2000
> @@ -221,23 +221,10 @@
>                 fsync_dev(inode->i_rdev);
>                 invalidate_buffers(inode->i_rdev);
>                 return 0;
> -
> -       case BLKRAGET: /* return the readahead value */
> -               if (!arg)  return -EINVAL;
> -               err = access_ok(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 */
> -               if (!suser()) return -EACCES;
> -               if (arg > 0xff) return -EINVAL; /* limit it */
> -               read_ahead[MAJOR(inode->i_rdev)] = arg;
> -               return 0;
> -
> +
>         case BLKRRPART: /* re-read partition table: can't do it */
>                 return -EINVAL;
> -
> +
>         case HDIO_GETGEO:
>                 /*
>                  * get geometry of device -> linear
> @@ -709,7 +696,6 @@
>         /*
>          * setup sizes for available devices
>          */
> -       read_ahead[MAJOR_NR] = MDISK_RAHEAD;    /* 8 sector (4kB) read-ahead */
>         blk_size[MAJOR_NR] = mdisk_sizes;       /* size of reserved mdisk    */
>         blksize_size[MAJOR_NR] = mdisk_blksizes;   /* blksize of device      */
>         hardsect_size[MAJOR_NR] = mdisk_hardsects;
> diff -ur linux-test10-pre5/drivers/s390/block/mdisk.h linux/drivers/s390/block/mdisk.h
> --- linux-test10-pre5/drivers/s390/block/mdisk.h        Fri May 12 20:41:44 2000
> +++ linux/drivers/s390/block/mdisk.h    Tue Oct 24 15:42:06 2000
> @@ -11,7 +11,6 @@
>  #include <linux/types.h>
> 
>  #define MDISK_DEVS 8                   /* for disks                        */
> -#define MDISK_RAHEAD 8                 /* read ahead                       */
>  #define MDISK_BLKSIZE 1024             /* 1k blocks                        */
>  #define MDISK_HARDSECT 512             /* FIXME -- 512 byte blocks         */
>  #define MDISK_MAXSECTORS 256           /* max sectors for one request      */
> diff -ur linux-test10-pre5/drivers/scsi/sd.c linux/drivers/scsi/sd.c
> --- linux-test10-pre5/drivers/scsi/sd.c Wed Oct  4 01:40:01 2000
> +++ linux/drivers/scsi/sd.c     Tue Oct 24 15:34:33 2000
> @@ -227,8 +227,6 @@
> 
>                 case BLKROSET:
>                 case BLKROGET:
> -               case BLKRASET:
> -               case BLKRAGET:
>                 case BLKFLSBUF:
>                 case BLKSSZGET:
>                 case BLKPG:
> @@ -1167,18 +1165,6 @@
>                                 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).
> -        */
> -       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;
>  }
> @@ -1386,7 +1372,6 @@
>         for (i = 0; i < N_USED_SD_MAJORS; 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 -ur linux-test10-pre5/drivers/scsi/sr.c linux/drivers/scsi/sr.c
> --- linux-test10-pre5/drivers/scsi/sr.c Wed Oct  4 01:40:02 2000
> +++ linux/drivers/scsi/sr.c     Tue Oct 24 15:22:24 2000
> @@ -803,15 +803,6 @@
>                 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 */
> -
>         return;
>  }
> 
> @@ -874,7 +865,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 -ur linux-test10-pre5/drivers/scsi/sr_ioctl.c linux/drivers/scsi/sr_ioctl.c
> --- linux-test10-pre5/drivers/scsi/sr_ioctl.c   Mon Sep 11 12:04:13 2000
> +++ linux/drivers/scsi/sr_ioctl.c       Tue Oct 24 15:34:37 2000
> @@ -485,8 +485,6 @@
>         switch (cmd) {
>         case BLKROSET:
>         case BLKROGET:
> -       case BLKRASET:
> -       case BLKRAGET:
>         case BLKFLSBUF:
>         case BLKSSZGET:
>                 return blk_ioctl(cdi->dev, cmd, arg);
> diff -ur linux-test10-pre5/fs/block_dev.c linux/fs/block_dev.c
> --- linux-test10-pre5/fs/block_dev.c    Wed Oct  4 01:40:07 2000
> +++ linux/fs/block_dev.c        Tue Oct 24 14:50:54 2000
> @@ -27,7 +27,7 @@
>  {
>         struct inode * inode = filp->f_dentry->d_inode;
>         ssize_t blocksize, blocksize_bits, i, buffercount, write_error;
> -       ssize_t block, blocks;
> +       ssize_t block;
>         loff_t offset;
>         ssize_t chars;
>         ssize_t written;
> @@ -83,41 +83,19 @@
>                 if (!bh)
>                         return written ? written : -EIO;
> 
> -               if (!buffer_uptodate(bh))
> -               {
> -                 if (chars == blocksize)
> -                   wait_on_buffer(bh);
> -                 else
> -                 {
> -                   bhlist[0] = bh;
> -                   if (!filp->f_reada || !read_ahead[MAJOR(dev)]) {
> -                     /* We do this to force the read of a single buffer */
> -                     blocks = 1;
> -                   } else {
> -                     /* Read-ahead before write */
> -                     blocks = read_ahead[MAJOR(dev)] / (blocksize >> 9) / 2;
> -                     if (block + blocks > size) blocks = size - block;
> -                     if (blocks > NBUF) blocks=NBUF;
> -                     if (!blocks) blocks = 1;
> -                     for(i=1; i<blocks; i++)
> -                     {
> -                       bhlist[i] = getblk (dev, block+i, blocksize);
> -                       if (!bhlist[i])
> -                       {
> -                         while(i >= 0) brelse(bhlist[i--]);
> -                         return written ? written : -EIO;
> -                       }
> -                     }
> -                   }
> -                   ll_rw_block(READ, blocks, bhlist);
> -                   for(i=1; i<blocks; i++) brelse(bhlist[i]);
> -                   wait_on_buffer(bh);
> -                   if (!buffer_uptodate(bh)) {
> -                         brelse(bh);
> -                         return written ? written : -EIO;
> -                   }
> -                 };
> -               };
> +               if (!buffer_uptodate(bh)) {
> +                       if (chars == blocksize)
> +                               wait_on_buffer(bh);
> +                       else {
> +                               bhlist[0] = bh;
> +                               ll_rw_block(READ, 1, bhlist);
> +                               wait_on_buffer(bh);
> +                               if (!buffer_uptodate(bh)) {
> +                                       brelse(bh);
> +                                       return written ? written : -EIO;
> +                               }
> +                       }
> +               }
>  #endif
>                 block++;
>                 p = offset + bh->b_data;
> @@ -170,7 +148,7 @@
>         loff_t offset;
>         ssize_t blocksize;
>         ssize_t blocksize_bits, i;
> -       size_t blocks, rblocks, left;
> +       size_t blocks, left;
>         int bhrequest, uptodate;
>         struct buffer_head ** bhb, ** bhe;
>         struct buffer_head * buflist[NBUF];
> @@ -212,15 +190,8 @@
>         block = offset >> blocksize_bits;
>         offset &= blocksize-1;
>         size >>= blocksize_bits;
> -       rblocks = blocks = (left + offset + blocksize - 1) >> blocksize_bits;
> +       blocks = (left + offset + blocksize - 1) >> blocksize_bits;
>         bhb = bhe = buflist;
> -       if (filp->f_reada) {
> -               if (blocks < read_ahead[MAJOR(dev)] / (blocksize >> 9))
> -                       blocks = read_ahead[MAJOR(dev)] / (blocksize >> 9);
> -               if (rblocks > blocks)
> -                       blocks = rblocks;
> -
> -       }
>         if (block + blocks > size) {
>                 blocks = size - block;
>                 if (blocks == 0)
> @@ -274,7 +245,7 @@
>                                         left = 0;
>                                         break;
>                                 }
> -                       }
> +                       }
>                         if (left < blocksize - offset)
>                                 chars = left;
>                         else
> diff -ur linux-test10-pre5/fs/hfs/file.c linux/fs/hfs/file.c
> --- linux-test10-pre5/fs/hfs/file.c     Mon Sep 11 12:04:18 2000
> +++ linux/fs/hfs/file.c Tue Oct 24 15:25:57 2000
> @@ -312,9 +312,6 @@
> 
>         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 (block + blocks > size) {
>                         blocks = size - block;
>                 }
> diff -ur linux-test10-pre5/include/linux/fs.h linux/include/linux/fs.h
> --- linux-test10-pre5/include/linux/fs.h        Tue Oct 24 13:54:06 2000
> +++ linux/include/linux/fs.h    Tue Oct 24 15:32:40 2000
> @@ -166,8 +166,6 @@
>  #define BLKRRPART  _IO(0x12,95)        /* re-read partition table */
>  #define BLKGETSIZE _IO(0x12,96)        /* return device size */
>  #define BLKFLSBUF  _IO(0x12,97)        /* flush buffer cache */
> -#define BLKRASET   _IO(0x12,98)        /* Set read ahead for block device */
> -#define BLKRAGET   _IO(0x12,99)        /* get current read ahead setting */
>  #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) */
> @@ -1234,7 +1232,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 -ur linux-test10-pre5/include/linux/lvm.h linux/include/linux/lvm.h
> --- linux-test10-pre5/include/linux/lvm.h       Thu May 25 03:38:26 2000
> +++ linux/include/linux/lvm.h   Tue Oct 24 15:39:08 2000
> @@ -263,8 +263,6 @@
>  #define        LVM_MAX_STRIPES         128     /* max # of stripes */
>  #define        LVM_MAX_SIZE            ( 1024LU * 1024 * 1024 * 2)     /* 1TB[sectors] */
>  #define        LVM_MAX_MIRRORS         2       /* future use */
> -#define        LVM_MIN_READ_AHEAD      0       /* minimum read ahead sectors */
> -#define        LVM_MAX_READ_AHEAD      256     /* maximum read ahead sectors */
>  #define        LVM_MAX_LV_IO_TIMEOUT   60      /* seconds I/O timeout (future use) */
>  #define        LVM_PARTITION           0xfe    /* LVM partition id */
>  #define        LVM_NEW_PARTITION       0x8e    /* new LVM partition id (10/09/1999) */
> @@ -554,7 +552,6 @@
>      uint32_t lv_badblock;      /* for future use */
>      uint32_t lv_allocation;
>      uint32_t lv_io_timeout;    /* for future use */
> -    uint32_t lv_read_ahead;    /* HM, for future use */
>    }
>  lv_disk_v1_t;
> 
> @@ -585,7 +582,6 @@
>      uint32_t lv_badblock;      /* for future use */
>      uint32_t lv_allocation;
>      uint32_t lv_io_timeout;    /* for future use */
> -    uint32_t lv_read_ahead;
> 
>      /* delta to version 1 starts here */
>      struct lv_v2 *lv_snapshot_org;
> @@ -625,7 +621,6 @@
>      uint32_t lv_badblock;      /* for future use */
>      uint32_t lv_allocation;
>      uint32_t lv_io_timeout;    /* for future use */
> -    uint32_t lv_read_ahead;    /* HM, for future use */
>    }
>  lv_disk_v2_t;
> 
> diff -ur linux-test10-pre5/kernel/ksyms.c linux/kernel/ksyms.c
> --- linux-test10-pre5/kernel/ksyms.c    Wed Oct  4 01:40:16 2000
> +++ linux/kernel/ksyms.c        Tue Oct 24 14:21:29 2000
> @@ -487,7 +487,6 @@
>  EXPORT_SYMBOL(nr_async_pages);
>  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);
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
Please read the FAQ at http://www.tux.org/lkml/

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: PATCH: killing read_ahead[]
  2000-10-26 23:39 ` Jeff V. Merkey
@ 2000-10-27  0:47   ` Jeff V. Merkey
  0 siblings, 0 replies; 5+ messages in thread
From: Jeff V. Merkey @ 2000-10-27  0:47 UTC (permalink / raw)
  To: Martin Dalecki, linux-kernel, torvalds



"Jeff V. Merkey" wrote:
> 
> Martin,
> 
> A lot of changes.  Have you tested this adequately?   Changes of this
> magnitude this late in the 2.4 cycle could break a lot of stuff.  I'll
> apply your patch, and let you know.
> 
> :-)
> 
> Jeff

Martin,

1.  Adaptec SCSI driver on a 4 x P6 POCA blows up with timeout errors
then hard hangs machine.
2.  DVD-RAM drive gets scsi timeout errors on AMD K6 System.
3.  Cannot see the MASHITA RW-CDROM with ide-scsi loaded with patch.
4.  2.4.0 hard locks on dual processor PIII 400Mhz during kernel boot.

:-)

Well, I tried the patch.  Looks like some SMP issues of some kind.  

Jeff
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
Please read the FAQ at http://www.tux.org/lkml/

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: PATCH: killing read_ahead[]
  2000-10-26 20:44 ` Linus Torvalds
@ 2000-10-29 14:43   ` Alexander Viro
  0 siblings, 0 replies; 5+ messages in thread
From: Alexander Viro @ 2000-10-29 14:43 UTC (permalink / raw)
  To: Linus Torvalds; +Cc: Rik van Riel, Jeff Garzik, Martin Dalecki, linux-kernel



On Thu, 26 Oct 2000, Linus Torvalds wrote:

> The alternative is to have an entirely different approach, where the page
> cache itself only knows about the maximum page (in which case your current
> "last_page" calculation is right on), and then anybody who needs to know
> about partial pages needs to get THAT information from the inode.
> 
> I'd almost prefer the alternative approach. Especially as right now the
> only real problem we're fighting is to make sure we never return an
> invalid page - the sub-page offset really doesn't matter for those things,
> and everybody who cares about the sub-page-information already obviously
> has it.

s/everybody/almost &/
There are only two places where we really care. And one of them can be
trivially shot.
	* O_APPEND handling. Well, duh - we can take the main loop
of generic_file_write() into a separate function (do_generic_file_write())
and be done with that - grab the semaphore, possibly adjust the ->f_pos,
pass the actor to do_generic_file_write(), be happy.
	* do_generic_file_read() should know how much to copy from the
last page. We could push that into the actor. Or we could mirror that
data in struct address_space.

	But yes, 99% of cases care only about the index of last page. So
I really don't think that size>>PAGE_CACHE_SHIFT makes sense from VM point
of view.

	OK, I have the "push to actor" variant and I'll send it once it
will get some testing. Changing it to "mirror both" is not a problem, anyway.

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
Please read the FAQ at http://www.tux.org/lkml/

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: PATCH: killing read_ahead[]
       [not found] <Pine.LNX.4.10.10010251036010.1337-100000@penguin.transmeta.com>
@ 2000-10-30 16:35 ` Martin Dalecki
  0 siblings, 0 replies; 5+ messages in thread
From: Martin Dalecki @ 2000-10-30 16:35 UTC (permalink / raw)
  To: Linus Torvalds; +Cc: Rik van Riel, Jeff Garzik, linux-kernel

Linus Torvalds wrote:
> 
> On Wed, 25 Oct 2000, Rik van Riel wrote:
> >
> > OTOH, block-dev readahead makes sense for filesystems where
> > the packing locality is close to the access pattern BUT NOT
> > close to anything the page cache would recognise as being
> > close.
> 
> I dunno. The main reason I'd like to get the block devices into the page
> cache is that right now there is no way to mmap them - something that can
> potentially be _very_ useful, regardless of readahead.
> 
> And quite frankly, the generic file readahead has been pounded upon and
> tested a lot more than the block device read-ahead ever was. I bet it
> performs better if for no other reason.

And then of course the FS is the LOGICAL level of access to the device -
so
if read ahead matters then it's this level where it should happen -
since
this is the place where actual predictability of the next access
(actually
the assumption that the access will happen at least semi-sequentially)
has good
chances to be right. So you are completely right that the page-cache is
the right place where the rahead logic should take place. I have just
filled
the argumentation gap ;-).

-- 
- phone: +49 214 8656 283
- job:   STOCK-WORLD Media AG, LEV .de (MY OPPINNIONS ARE MY OWN!)
- langs: de_DE.ISO8859-1, en_US, pl_PL.ISO8859-2, last ressort:
ru_RU.KOI8-R
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
Please read the FAQ at http://www.tux.org/lkml/

^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2000-10-30 15:42 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
     [not found] <Pine.LNX.4.10.10010251036010.1337-100000@penguin.transmeta.com>
2000-10-30 16:35 ` PATCH: killing read_ahead[] Martin Dalecki
     [not found] <39F5999B.91DDC98@evision-ventures.com>
2000-10-26 23:39 ` Jeff V. Merkey
2000-10-27  0:47   ` Jeff V. Merkey
     [not found] <Pine.GSO.4.21.0010251435100.12098-100000@weyl.math.psu.edu>
2000-10-26 20:44 ` Linus Torvalds
2000-10-29 14:43   ` Alexander Viro

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox