diff -urN lvm/drivers/md/lvm.c lvm-fix/drivers/md/lvm.c --- lvm/drivers/md/lvm.c Thu Oct 4 18:51:34 2001 +++ lvm-fix/drivers/md/lvm.c Thu Oct 4 18:51:48 2001 @@ -259,9 +259,13 @@ #include "lvm-internal.h" -#define LVM_CORRECT_READ_AHEAD( a) \ - if ( a < LVM_MIN_READ_AHEAD || \ - a > LVM_MAX_READ_AHEAD) a = LVM_MAX_READ_AHEAD; +#define LVM_CORRECT_READ_AHEAD(a) \ +do { \ + if ((a) < LVM_MIN_READ_AHEAD || \ + (a) > LVM_MAX_READ_AHEAD) \ + (a) = LVM_DEFAULT_READ_AHEAD; \ + read_ahead[MAJOR_NR] = (a); \ +} while(0) #ifndef WRITEA # define WRITEA WRITE @@ -414,17 +418,13 @@ static struct gendisk lvm_gendisk = { - MAJOR_NR, /* major # */ - LVM_NAME, /* name of major */ - 0, /* number of times minor is shifted - to get real minor */ - 1, /* maximum partitions per device */ - lvm_hd_struct, /* partition table */ - lvm_size, /* device size in blocks, copied - to block_size[] */ - MAX_LV, /* number or real devices */ - NULL, /* internal */ - NULL, /* pointer to next gendisk struct (internal) */ + major: MAJOR_NR, + major_name: LVM_NAME, + minor_shift: 0, + max_p: 1, + part: lvm_hd_struct, + sizes: lvm_size, + nr_real: MAX_LV, }; /* @@ -939,6 +939,11 @@ return -EFAULT; break; + case BLKGETSIZE64: + if (put_user((u64)lv_ptr->lv_size << 9, (u64 *)arg)) + return -EFAULT; + break; + case BLKFLSBUF: /* flush buffer cache */ @@ -962,6 +967,7 @@ (long) arg > LVM_MAX_READ_AHEAD) return -EINVAL; lv_ptr->lv_read_ahead = (long) arg; + read_ahead[MAJOR_NR] = lv_ptr->lv_read_ahead; break; diff -urN lvm/include/linux/lvm.h lvm-fix/include/linux/lvm.h --- lvm/include/linux/lvm.h Thu Oct 4 18:51:34 2001 +++ lvm-fix/include/linux/lvm.h Thu Oct 4 18:51:48 2001 @@ -260,8 +260,9 @@ #define LVM_MAX_STRIPES 128 /* max # of stripes */ #define LVM_MAX_SIZE ( 1024LU * 1024 / SECTOR_SIZE * 1024 * 1024) /* 1TB[sectors] */ #define LVM_MAX_MIRRORS 2 /* future use */ -#define LVM_MIN_READ_AHEAD 2 /* minimum read ahead sectors */ -#define LVM_MAX_READ_AHEAD 120 /* maximum read ahead sectors */ +#define LVM_MIN_READ_AHEAD 0 /* minimum read ahead sectors */ +#define LVM_DEFAULT_READ_AHEAD 1024 /* default read ahead sectors for 512k scsi segments */ +#define LVM_MAX_READ_AHEAD 10000 /* 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) */