--- 2.3.99-pre6-pre3-elevator/arch/sparc64/kernel/ioctl32.c.~1~ Tue Apr 18 16:12:15 2000 +++ 2.3.99-pre6-pre3-elevator/arch/sparc64/kernel/ioctl32.c Tue Apr 18 19:18:07 2000 @@ -2399,39 +2399,6 @@ return err; } -typedef struct blkelv_ioctl32_arg_s { - u32 queue_ID; - int read_latency; - int write_latency; - int max_bomb_segments; -} blkelv_ioctl32_arg_t; - -static int do_blkelv_ioctl(unsigned int fd, unsigned int cmd, blkelv_ioctl32_arg_t *arg) -{ - blkelv_ioctl_arg_t b; - int err; - mm_segment_t old_fs = get_fs(); - - if (cmd == BLKELVSET) { - err = get_user((long)b.queue_ID, &arg->queue_ID); - err |= __get_user(b.read_latency, &arg->read_latency); - err |= __get_user(b.write_latency, &arg->write_latency); - err |= __get_user(b.max_bomb_segments, &arg->max_bomb_segments); - if (err) return err; - } - set_fs (KERNEL_DS); - err = sys_ioctl(fd, cmd, (unsigned long)&b); - set_fs (old_fs); - if (cmd == BLKELVGET && !err) { - err = put_user((long)b.queue_ID, &arg->queue_ID); - err |= __put_user(b.read_latency, &arg->read_latency); - err |= __put_user(b.write_latency, &arg->write_latency); - err |= __put_user(b.max_bomb_segments, &arg->max_bomb_segments); - if (err) return err; - } - return err; -} - static int ioc_settimeout(unsigned int fd, unsigned int cmd, unsigned long arg) { return rw_long(fd, AUTOFS_IOC_SETTIMEOUT, arg); @@ -2990,6 +2957,9 @@ COMPATIBLE_IOCTL(LV_SET_STATUS) COMPATIBLE_IOCTL(LV_SET_ALLOCATION) #endif /* LVM */ +/* elevator */ +COMPATIBLE_IOCTL(BLKELVGET) +COMPATIBLE_IOCTL(BLKELVSET) /* And these ioctls need translation */ HANDLE_IOCTL(SIOCGIFNAME, dev_ifname32) HANDLE_IOCTL(SIOCGIFCONF, dev_ifconf) @@ -3036,8 +3006,6 @@ HANDLE_IOCTL(BLKFRAGET, w_long) HANDLE_IOCTL(BLKSECTGET, w_long) HANDLE_IOCTL(BLKPG, blkpg_ioctl_trans) -HANDLE_IOCTL(BLKELVGET, do_blkelv_ioctl) -HANDLE_IOCTL(BLKELVSET, do_blkelv_ioctl) HANDLE_IOCTL(FBIOPUTCMAP32, fbiogetputcmap) HANDLE_IOCTL(FBIOGETCMAP32, fbiogetputcmap) HANDLE_IOCTL(FBIOSCURSOR32, fbiogscursor) --- 2.3.99-pre6-pre3-elevator/drivers/block/elevator.c.~1~ Wed Mar 15 16:45:10 2000 +++ 2.3.99-pre6-pre3-elevator/drivers/block/elevator.c Tue Apr 18 18:34:32 2000 @@ -105,7 +105,7 @@ int ret; blkelv_ioctl_arg_t output; - output.queue_ID = elevator; + output.queue_ID = elevator->queue_ID; output.read_latency = elevator->read_latency; output.write_latency = elevator->write_latency; output.max_bomb_segments = elevator->max_bomb_segments; @@ -146,5 +146,8 @@ void elevator_init(elevator_t * elevator) { + static unsigned int queue_ID; + *elevator = ELEVATOR_DEFAULTS; + elevator->queue_ID = queue_ID++; } --- 2.3.99-pre6-pre3-elevator/include/linux/elevator.h.~1~ Wed Mar 15 16:45:13 2000 +++ 2.3.99-pre6-pre3-elevator/include/linux/elevator.h Tue Apr 18 19:06:44 2000 @@ -22,6 +22,8 @@ int read_pendings; elevator_fn * elevator_fn; + + unsigned int queue_ID; }; #define ELEVATOR_DEFAULTS \ @@ -40,14 +42,14 @@ typedef struct blkelv_ioctl_arg_s { - void * queue_ID; + int queue_ID; int read_latency; int write_latency; int max_bomb_segments; } blkelv_ioctl_arg_t; -#define BLKELVGET _IO(0x12,106) -#define BLKELVSET _IO(0x12,107) +#define BLKELVGET _IOR(0x12,106,sizeof(blkelv_ioctl_arg_t)) +#define BLKELVSET _IOW(0x12,107,sizeof(blkelv_ioctl_arg_t)) extern int blkelvget_ioctl(elevator_t *, blkelv_ioctl_arg_t *); extern int blkelvset_ioctl(elevator_t *, const blkelv_ioctl_arg_t *); --- 2.3.99-pre6-pre3-elevator/include/linux/fs.h.~1~ Tue Apr 18 16:12:18 2000 +++ 2.3.99-pre6-pre3-elevator/include/linux/fs.h Tue Apr 18 19:20:04 2000 @@ -158,8 +158,8 @@ #define BLKSSZGET _IO(0x12,104)/* get block device sector size */ #if 0 #define BLKPG _IO(0x12,105)/* See blkpg.h */ -#define BLKELVGET _IO(0x12,106)/* elevator get */ -#define BLKELVSET _IO(0x12,107)/* elevator set */ +#define BLKELVGET _IOR(0x12,106,sizeof(blkelv_ioctl_arg_t))/* elevator get */ +#define BLKELVSET _IOW(0x12,107,sizeof(blkelv_ioctl_arg_t))/* elevator set */ /* This was here just to show that the number is taken - probably all these _IO(0x12,*) ioctls should be moved to blkpg.h. */ #endif