--- 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