PATCH: killing read_ahead[]
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
Quoted 1,001 lines · Martin Dalecki
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 -urlinux-test10-pre5/arch/sparc64/kernel/ioctl32.clinux/arch/sparc64/kernel/ioctl32.carch/sparc64/kernel/ioctl32.c Tue Oct 24 15:37:56 2000 renamed from arch/sparc64/kernel/ioctl32.c Tue Oct 24 13:52:02 2000 +1
-3@@ -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.clinux/drivers/acorn/block/mfmhd.cdrivers/acorn/block/mfmhd.c Tue Oct 24 15:35:40 2000 renamed from drivers/acorn/block/mfmhd.c Wed Oct 4 01:39:44 2000 +0
-3@@ -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.clinux/drivers/block/DAC960.cdrivers/block/DAC960.c Tue Oct 24 15:24:51 2000 renamed from drivers/block/DAC960.c Tue Oct 24 13:52:03 2000 +1
-14@@ -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.clinux/drivers/block/acsi.cdrivers/block/acsi.c Tue Oct 24 15:24:13 2000 renamed from drivers/block/acsi.c Thu Feb 17 00:42:05 2000 +1
-2@@ -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.clinux/drivers/block/ataflop.cdrivers/block/ataflop.c Tue Oct 24 15:33:40 2000 renamed from drivers/block/ataflop.c Wed Jul 5 20:24:40 2000 +0
-2@@ -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.clinux/drivers/block/blkpg.cdrivers/block/blkpg.c Tue Oct 24 15:29:31 2000 renamed from drivers/block/blkpg.c Mon Mar 13 04:32:57 2000 +1
-13@@ -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.clinux/drivers/block/cciss.cdrivers/block/cciss.c Tue Oct 24 15:34:14 2000 renamed from drivers/block/cciss.c Tue Oct 24 13:52:03 2000 +0
-3@@ -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.clinux/drivers/block/cpqarray.cdrivers/block/cpqarray.c Tue Oct 24 15:33:53 2000 renamed from drivers/block/cpqarray.c Tue Oct 24 13:52:03 2000 +0
-3@@ -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.clinux/drivers/block/floppy.cdrivers/block/floppy.c Tue Oct 24 15:33:28 2000 renamed from drivers/block/floppy.c Tue Oct 24 13:52:03 2000 +0
-2@@ -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.clinux/drivers/block/ll_rw_blk.cdrivers/block/ll_rw_blk.c Tue Oct 24 15:25:23 2000 renamed from drivers/block/ll_rw_blk.c Tue Oct 24 13:52:03 2000 +0
-4@@ -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_requestdiff -ur
linux-test10-pre5/drivers/block/paride/pcd.clinux/drivers/block/paride/pcd.cdrivers/block/paride/pcd.c Tue Oct 24 15:23:56 2000 renamed from drivers/block/paride/pcd.c Wed Apr 5 04:25:14 2000 +0
-1@@ -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.clinux/drivers/block/paride/pd.cdrivers/block/paride/pd.c Tue Oct 24 15:34:00 2000 renamed from drivers/block/paride/pd.c Tue Jun 20 16:24:52 2000 +1
-4@@ -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.clinux/drivers/block/paride/pf.cdrivers/block/paride/pf.c Tue Oct 24 15:34:06 2000 renamed from drivers/block/paride/pf.c Wed Apr 5 04:25:14 2000 +1
-4@@ -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.clinux/drivers/block/ps2esdi.cdrivers/block/ps2esdi.c Tue Oct 24 15:33:46 2000 renamed from drivers/block/ps2esdi.c Fri Jul 14 21:20:22 2000 +0
-3@@ -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.clinux/drivers/block/xd.cdrivers/block/xd.c Tue Oct 24 15:33:35 2000 renamed from drivers/block/xd.c Tue Oct 24 13:52:03 2000 +0
-4@@ -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.clinux/drivers/cdrom/aztcd.cdrivers/cdrom/aztcd.c Tue Oct 24 15:20:59 2000 renamed from drivers/cdrom/aztcd.c Fri Jul 14 21:20:22 2000 +0
-1@@ -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.clinux/drivers/cdrom/cdu31a.cdrivers/cdrom/cdu31a.c Tue Oct 24 15:20:45 2000 renamed from drivers/cdrom/cdu31a.c Wed Jul 19 06:40:47 2000 +0
-1@@ -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.clinux/drivers/cdrom/cm206.cdrivers/cdrom/cm206.c Tue Oct 24 15:19:59 2000 renamed from drivers/cdrom/cm206.c Wed Jul 19 06:40:47 2000 +1
-2@@ -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.clinux/drivers/cdrom/gscd.cdrivers/cdrom/gscd.c Tue Oct 24 15:19:38 2000 renamed from drivers/cdrom/gscd.c Wed Jul 19 07:52:32 2000 +1
-2@@ -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.clinux/drivers/cdrom/mcd.cdrivers/cdrom/mcd.c Tue Oct 24 15:19:25 2000 renamed from drivers/cdrom/mcd.c Wed Oct 4 01:39:49 2000 +0
-1@@ -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.clinux/drivers/cdrom/mcdx.cdrivers/cdrom/mcdx.c Tue Oct 24 15:19:16 2000 renamed from drivers/cdrom/mcdx.c Wed Jul 19 06:40:47 2000 +0
-1@@ -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.clinux/drivers/cdrom/optcd.cdrivers/cdrom/optcd.c Tue Oct 24 15:19:04 2000 renamed from drivers/cdrom/optcd.c Wed Jul 5 22:15:19 2000 +0
-1@@ -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.clinux/drivers/cdrom/sbpcd.cdrivers/cdrom/sbpcd.c Tue Oct 24 15:18:52 2000 renamed from drivers/cdrom/sbpcd.c Tue Oct 24 13:52:03 2000 +2
-10@@ -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.hlinux/drivers/cdrom/sbpcd.hdrivers/cdrom/sbpcd.h Tue Oct 24 15:17:49 2000 renamed from drivers/cdrom/sbpcd.h Mon Sep 11 12:04:09 2000 +1
-1@@ -162,7 +162,7 @@ /*==========================================================================*/ /*==========================================================================*/ /* - * driver's own read_ahead, data mode + * driver's own read ahead, data mode */ #define SBP_BUFFER_FRAMES 8diff -ur
linux-test10-pre5/drivers/cdrom/sjcd.clinux/drivers/cdrom/sjcd.cdrivers/cdrom/sjcd.c Tue Oct 24 15:27:12 2000 renamed from drivers/cdrom/sjcd.c Fri Jul 14 21:20:22 2000 +0
-1@@ -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.clinux/drivers/cdrom/sonycd535.cdrivers/cdrom/sonycd535.c Tue Oct 24 15:18:00 2000 renamed from drivers/cdrom/sonycd535.c Wed Oct 4 01:39:49 2000 +0
-1@@ -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.clinux/drivers/i2o/i2o_block.cdrivers/i2o/i2o_block.c Tue Oct 24 15:35:53 2000 renamed from drivers/i2o/i2o_block.c Fri Jul 7 04:24:51 2000 +0
-2@@ -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.clinux/drivers/ide/hd.cdrivers/ide/hd.c Tue Oct 24 15:34:53 2000 renamed from drivers/ide/hd.c Wed Jul 5 20:24:41 2000 +0
-3@@ -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.clinux/drivers/ide/ide-cd.cdrivers/ide/ide-cd.c Tue Oct 24 14:55:18 2000 renamed from drivers/ide/ide-cd.c Mon Sep 11 12:04:10 2000 +0
-1@@ -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.clinux/drivers/ide/ide-disk.cdrivers/ide/ide-disk.c Tue Oct 24 14:26:51 2000 renamed from drivers/ide/ide-disk.c Tue Oct 24 13:52:05 2000 +0
-1@@ -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.clinux/drivers/ide/ide-floppy.cdrivers/ide/ide-floppy.c Tue Oct 24 15:17:15 2000 renamed from drivers/ide/ide-floppy.c Fri Apr 14 07:50:32 2000 +0
-1@@ -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.clinux/drivers/ide/ide-probe.cdrivers/ide/ide-probe.c Tue Oct 24 14:27:43 2000 renamed from drivers/ide/ide-probe.c Fri Aug 4 01:29:49 2000 +0
-1@@ -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.clinux/drivers/md/lvm.cdrivers/md/lvm.c Tue Oct 24 15:39:53 2000 renamed from drivers/md/lvm.c Wed Oct 4 01:39:52 2000 +0
-34@@ -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.clinux/drivers/md/md.cdrivers/md/md.c Tue Oct 24 15:10:53 2000 renamed from drivers/md/md.c Tue Oct 24 13:52:05 2000 +0
-25@@ -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.clinux/drivers/s390/block/dasd.cdrivers/s390/block/dasd.c Tue Oct 24 15:15:58 2000 renamed from drivers/s390/block/dasd.c Thu Jun 22 07:31:02 2000 +0
-11@@ -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.clinux/drivers/s390/block/mdisk.cdrivers/s390/block/mdisk.c Tue Oct 24 15:15:27 2000 renamed from drivers/s390/block/mdisk.c Fri May 12 20:41:44 2000 +2
-16@@ -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.hlinux/drivers/s390/block/mdisk.hdrivers/s390/block/mdisk.h Tue Oct 24 15:42:06 2000 renamed from drivers/s390/block/mdisk.h Fri May 12 20:41:44 2000 +0
-1@@ -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.clinux/drivers/scsi/sd.cdrivers/scsi/sd.c Tue Oct 24 15:34:33 2000 renamed from drivers/scsi/sd.c Wed Oct 4 01:40:01 2000 +0
-15@@ -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.clinux/drivers/scsi/sr.cdrivers/scsi/sr.c Tue Oct 24 15:22:24 2000 renamed from drivers/scsi/sr.c Wed Oct 4 01:40:02 2000 +0
-10@@ -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.clinux/drivers/scsi/sr_ioctl.cdrivers/scsi/sr_ioctl.c Tue Oct 24 15:34:37 2000 renamed from drivers/scsi/sr_ioctl.c Mon Sep 11 12:04:13 2000 +0
-2@@ -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.clinux/fs/block_dev.cfs/block_dev.c Tue Oct 24 14:50:54 2000 renamed from fs/block_dev.c Wed Oct 4 01:40:07 2000 +17
-46@@ -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; elsediff -ur
linux-test10-pre5/fs/hfs/file.clinux/fs/hfs/file.cfs/hfs/file.c Tue Oct 24 15:25:57 2000 renamed from fs/hfs/file.c Mon Sep 11 12:04:18 2000 +0
-3@@ -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.hlinux/include/linux/fs.hinclude/linux/fs.h Tue Oct 24 15:32:40 2000 renamed from include/linux/fs.h Tue Oct 24 13:54:06 2000 +0
-3@@ -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.hlinux/include/linux/lvm.hinclude/linux/lvm.h Tue Oct 24 15:39:08 2000 renamed from include/linux/lvm.h Thu May 25 03:38:26 2000 +0
-5@@ -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.clinux/kernel/ksyms.c
kernel/ksyms.c Tue Oct 24 14:21:29 2000 line 492
Quoted 7 lines
kernel/ksyms.c Tue Oct 24 14:21:29 2000 renamed from kernel/ksyms.c Wed Oct 4 01:40:16 2000 +0
-1@@ -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 [email protected]
Please read the FAQ at http://www.tux.org/lkml/
Quoted 10 lines · Jeff V. Merkey
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 [email protected]
Please read the FAQ at http://www.tux.org/lkml/