aboutsummaryrefslogtreecommitdiffstats
path: root/fs/compat_ioctl.c
diff options
context:
space:
mode:
Diffstat (limited to 'fs/compat_ioctl.c')
-rw-r--r--fs/compat_ioctl.c395
1 files changed, 133 insertions, 262 deletions
diff --git a/fs/compat_ioctl.c b/fs/compat_ioctl.c
index 43a2508ac696..5dd0207ffd46 100644
--- a/fs/compat_ioctl.c
+++ b/fs/compat_ioctl.c
@@ -10,11 +10,11 @@
10 * ioctls. 10 * ioctls.
11 */ 11 */
12 12
13#ifdef INCLUDES
14#include <linux/config.h> 13#include <linux/config.h>
15#include <linux/types.h> 14#include <linux/types.h>
16#include <linux/compat.h> 15#include <linux/compat.h>
17#include <linux/kernel.h> 16#include <linux/kernel.h>
17#include <linux/capability.h>
18#include <linux/compiler.h> 18#include <linux/compiler.h>
19#include <linux/sched.h> 19#include <linux/sched.h>
20#include <linux/smp.h> 20#include <linux/smp.h>
@@ -81,13 +81,9 @@
81#include <linux/capi.h> 81#include <linux/capi.h>
82 82
83#include <scsi/scsi.h> 83#include <scsi/scsi.h>
84/* Ugly hack. */
85#undef __KERNEL__
86#include <scsi/scsi_ioctl.h> 84#include <scsi/scsi_ioctl.h>
87#define __KERNEL__
88#include <scsi/sg.h> 85#include <scsi/sg.h>
89 86
90#include <asm/types.h>
91#include <asm/uaccess.h> 87#include <asm/uaccess.h>
92#include <linux/ethtool.h> 88#include <linux/ethtool.h>
93#include <linux/mii.h> 89#include <linux/mii.h>
@@ -95,7 +91,6 @@
95#include <linux/watchdog.h> 91#include <linux/watchdog.h>
96#include <linux/dm-ioctl.h> 92#include <linux/dm-ioctl.h>
97 93
98#include <asm/module.h>
99#include <linux/soundcard.h> 94#include <linux/soundcard.h>
100#include <linux/lp.h> 95#include <linux/lp.h>
101#include <linux/ppdev.h> 96#include <linux/ppdev.h>
@@ -127,11 +122,7 @@
127#include <linux/dvb/dmx.h> 122#include <linux/dvb/dmx.h>
128#include <linux/dvb/frontend.h> 123#include <linux/dvb/frontend.h>
129#include <linux/dvb/video.h> 124#include <linux/dvb/video.h>
130 125#include <linux/lp.h>
131#undef INCLUDES
132#endif
133
134#ifdef CODE
135 126
136/* Aiee. Someone does not find a difference between int and long */ 127/* Aiee. Someone does not find a difference between int and long */
137#define EXT2_IOC32_GETFLAGS _IOR('f', 1, int) 128#define EXT2_IOC32_GETFLAGS _IOR('f', 1, int)
@@ -148,6 +139,12 @@
148#define EXT2_IOC32_GETVERSION _IOR('v', 1, int) 139#define EXT2_IOC32_GETVERSION _IOR('v', 1, int)
149#define EXT2_IOC32_SETVERSION _IOW('v', 2, int) 140#define EXT2_IOC32_SETVERSION _IOW('v', 2, int)
150 141
142static int do_ioctl32_pointer(unsigned int fd, unsigned int cmd,
143 unsigned long arg, struct file *f)
144{
145 return sys_ioctl(fd, cmd, (unsigned long)compat_ptr(arg));
146}
147
151static int w_long(unsigned int fd, unsigned int cmd, unsigned long arg) 148static int w_long(unsigned int fd, unsigned int cmd, unsigned long arg)
152{ 149{
153 mm_segment_t old_fs = get_fs(); 150 mm_segment_t old_fs = get_fs();
@@ -207,244 +204,6 @@ static int do_ext3_ioctl(unsigned int fd, unsigned int cmd, unsigned long arg)
207 return sys_ioctl(fd, cmd, (unsigned long)compat_ptr(arg)); 204 return sys_ioctl(fd, cmd, (unsigned long)compat_ptr(arg));
208} 205}
209 206
210struct video_tuner32 {
211 compat_int_t tuner;
212 char name[32];
213 compat_ulong_t rangelow, rangehigh;
214 u32 flags; /* It is really u32 in videodev.h */
215 u16 mode, signal;
216};
217
218static int get_video_tuner32(struct video_tuner *kp, struct video_tuner32 __user *up)
219{
220 int i;
221
222 if(get_user(kp->tuner, &up->tuner))
223 return -EFAULT;
224 for(i = 0; i < 32; i++)
225 __get_user(kp->name[i], &up->name[i]);
226 __get_user(kp->rangelow, &up->rangelow);
227 __get_user(kp->rangehigh, &up->rangehigh);
228 __get_user(kp->flags, &up->flags);
229 __get_user(kp->mode, &up->mode);
230 __get_user(kp->signal, &up->signal);
231 return 0;
232}
233
234static int put_video_tuner32(struct video_tuner *kp, struct video_tuner32 __user *up)
235{
236 int i;
237
238 if(put_user(kp->tuner, &up->tuner))
239 return -EFAULT;
240 for(i = 0; i < 32; i++)
241 __put_user(kp->name[i], &up->name[i]);
242 __put_user(kp->rangelow, &up->rangelow);
243 __put_user(kp->rangehigh, &up->rangehigh);
244 __put_user(kp->flags, &up->flags);
245 __put_user(kp->mode, &up->mode);
246 __put_user(kp->signal, &up->signal);
247 return 0;
248}
249
250struct video_buffer32 {
251 compat_caddr_t base;
252 compat_int_t height, width, depth, bytesperline;
253};
254
255static int get_video_buffer32(struct video_buffer *kp, struct video_buffer32 __user *up)
256{
257 u32 tmp;
258
259 if (get_user(tmp, &up->base))
260 return -EFAULT;
261
262 /* This is actually a physical address stored
263 * as a void pointer.
264 */
265 kp->base = (void *)(unsigned long) tmp;
266
267 __get_user(kp->height, &up->height);
268 __get_user(kp->width, &up->width);
269 __get_user(kp->depth, &up->depth);
270 __get_user(kp->bytesperline, &up->bytesperline);
271 return 0;
272}
273
274static int put_video_buffer32(struct video_buffer *kp, struct video_buffer32 __user *up)
275{
276 u32 tmp = (u32)((unsigned long)kp->base);
277
278 if(put_user(tmp, &up->base))
279 return -EFAULT;
280 __put_user(kp->height, &up->height);
281 __put_user(kp->width, &up->width);
282 __put_user(kp->depth, &up->depth);
283 __put_user(kp->bytesperline, &up->bytesperline);
284 return 0;
285}
286
287struct video_clip32 {
288 s32 x, y, width, height; /* Its really s32 in videodev.h */
289 compat_caddr_t next;
290};
291
292struct video_window32 {
293 u32 x, y, width, height, chromakey, flags;
294 compat_caddr_t clips;
295 compat_int_t clipcount;
296};
297
298/* You get back everything except the clips... */
299static int put_video_window32(struct video_window *kp, struct video_window32 __user *up)
300{
301 if(put_user(kp->x, &up->x))
302 return -EFAULT;
303 __put_user(kp->y, &up->y);
304 __put_user(kp->width, &up->width);
305 __put_user(kp->height, &up->height);
306 __put_user(kp->chromakey, &up->chromakey);
307 __put_user(kp->flags, &up->flags);
308 __put_user(kp->clipcount, &up->clipcount);
309 return 0;
310}
311
312#define VIDIOCGTUNER32 _IOWR('v',4, struct video_tuner32)
313#define VIDIOCSTUNER32 _IOW('v',5, struct video_tuner32)
314#define VIDIOCGWIN32 _IOR('v',9, struct video_window32)
315#define VIDIOCSWIN32 _IOW('v',10, struct video_window32)
316#define VIDIOCGFBUF32 _IOR('v',11, struct video_buffer32)
317#define VIDIOCSFBUF32 _IOW('v',12, struct video_buffer32)
318#define VIDIOCGFREQ32 _IOR('v',14, u32)
319#define VIDIOCSFREQ32 _IOW('v',15, u32)
320
321enum {
322 MaxClips = (~0U-sizeof(struct video_window))/sizeof(struct video_clip)
323};
324
325static int do_set_window(unsigned int fd, unsigned int cmd, unsigned long arg)
326{
327 struct video_window32 __user *up = compat_ptr(arg);
328 struct video_window __user *vw;
329 struct video_clip __user *p;
330 int nclips;
331 u32 n;
332
333 if (get_user(nclips, &up->clipcount))
334 return -EFAULT;
335
336 /* Peculiar interface... */
337 if (nclips < 0)
338 nclips = VIDEO_CLIPMAP_SIZE;
339
340 if (nclips > MaxClips)
341 return -ENOMEM;
342
343 vw = compat_alloc_user_space(sizeof(struct video_window) +
344 nclips * sizeof(struct video_clip));
345
346 p = nclips ? (struct video_clip __user *)(vw + 1) : NULL;
347
348 if (get_user(n, &up->x) || put_user(n, &vw->x) ||
349 get_user(n, &up->y) || put_user(n, &vw->y) ||
350 get_user(n, &up->width) || put_user(n, &vw->width) ||
351 get_user(n, &up->height) || put_user(n, &vw->height) ||
352 get_user(n, &up->chromakey) || put_user(n, &vw->chromakey) ||
353 get_user(n, &up->flags) || put_user(n, &vw->flags) ||
354 get_user(n, &up->clipcount) || put_user(n, &vw->clipcount) ||
355 get_user(n, &up->clips) || put_user(p, &vw->clips))
356 return -EFAULT;
357
358 if (nclips) {
359 struct video_clip32 __user *u = compat_ptr(n);
360 int i;
361 if (!u)
362 return -EINVAL;
363 for (i = 0; i < nclips; i++, u++, p++) {
364 s32 v;
365 if (get_user(v, &u->x) ||
366 put_user(v, &p->x) ||
367 get_user(v, &u->y) ||
368 put_user(v, &p->y) ||
369 get_user(v, &u->width) ||
370 put_user(v, &p->width) ||
371 get_user(v, &u->height) ||
372 put_user(v, &p->height) ||
373 put_user(NULL, &p->next))
374 return -EFAULT;
375 }
376 }
377
378 return sys_ioctl(fd, VIDIOCSWIN, (unsigned long)p);
379}
380
381static int do_video_ioctl(unsigned int fd, unsigned int cmd, unsigned long arg)
382{
383 union {
384 struct video_tuner vt;
385 struct video_buffer vb;
386 struct video_window vw;
387 unsigned long vx;
388 } karg;
389 mm_segment_t old_fs = get_fs();
390 void __user *up = compat_ptr(arg);
391 int err = 0;
392
393 /* First, convert the command. */
394 switch(cmd) {
395 case VIDIOCGTUNER32: cmd = VIDIOCGTUNER; break;
396 case VIDIOCSTUNER32: cmd = VIDIOCSTUNER; break;
397 case VIDIOCGWIN32: cmd = VIDIOCGWIN; break;
398 case VIDIOCGFBUF32: cmd = VIDIOCGFBUF; break;
399 case VIDIOCSFBUF32: cmd = VIDIOCSFBUF; break;
400 case VIDIOCGFREQ32: cmd = VIDIOCGFREQ; break;
401 case VIDIOCSFREQ32: cmd = VIDIOCSFREQ; break;
402 };
403
404 switch(cmd) {
405 case VIDIOCSTUNER:
406 case VIDIOCGTUNER:
407 err = get_video_tuner32(&karg.vt, up);
408 break;
409
410 case VIDIOCSFBUF:
411 err = get_video_buffer32(&karg.vb, up);
412 break;
413
414 case VIDIOCSFREQ:
415 err = get_user(karg.vx, (u32 __user *)up);
416 break;
417 };
418 if(err)
419 goto out;
420
421 set_fs(KERNEL_DS);
422 err = sys_ioctl(fd, cmd, (unsigned long)&karg);
423 set_fs(old_fs);
424
425 if(err == 0) {
426 switch(cmd) {
427 case VIDIOCGTUNER:
428 err = put_video_tuner32(&karg.vt, up);
429 break;
430
431 case VIDIOCGWIN:
432 err = put_video_window32(&karg.vw, up);
433 break;
434
435 case VIDIOCGFBUF:
436 err = put_video_buffer32(&karg.vb, up);
437 break;
438
439 case VIDIOCGFREQ:
440 err = put_user(((u32)karg.vx), (u32 __user *)up);
441 break;
442 };
443 }
444out:
445 return err;
446}
447
448struct compat_dmx_event { 207struct compat_dmx_event {
449 dmx_event_t event; 208 dmx_event_t event;
450 compat_time_t timeStamp; 209 compat_time_t timeStamp;
@@ -1158,6 +917,40 @@ static int sg_ioctl_trans(unsigned int fd, unsigned int cmd, unsigned long arg)
1158 return err; 917 return err;
1159} 918}
1160 919
920struct compat_sg_req_info { /* used by SG_GET_REQUEST_TABLE ioctl() */
921 char req_state;
922 char orphan;
923 char sg_io_owned;
924 char problem;
925 int pack_id;
926 compat_uptr_t usr_ptr;
927 unsigned int duration;
928 int unused;
929};
930
931static int sg_grt_trans(unsigned int fd, unsigned int cmd, unsigned long arg)
932{
933 int err, i;
934 sg_req_info_t *r;
935 struct compat_sg_req_info *o = (struct compat_sg_req_info *)arg;
936 r = compat_alloc_user_space(sizeof(sg_req_info_t)*SG_MAX_QUEUE);
937 err = sys_ioctl(fd,cmd,(unsigned long)r);
938 if (err < 0)
939 return err;
940 for (i = 0; i < SG_MAX_QUEUE; i++) {
941 void __user *ptr;
942 int d;
943
944 if (copy_in_user(o + i, r + i, offsetof(sg_req_info_t, usr_ptr)) ||
945 get_user(ptr, &r[i].usr_ptr) ||
946 get_user(d, &r[i].duration) ||
947 put_user((u32)(unsigned long)(ptr), &o[i].usr_ptr) ||
948 put_user(d, &o[i].duration))
949 return -EFAULT;
950 }
951 return err;
952}
953
1161struct sock_fprog32 { 954struct sock_fprog32 {
1162 unsigned short len; 955 unsigned short len;
1163 compat_caddr_t filter; 956 compat_caddr_t filter;
@@ -2713,6 +2506,49 @@ static int old_bridge_ioctl(unsigned int fd, unsigned int cmd, unsigned long arg
2713 return -EINVAL; 2506 return -EINVAL;
2714} 2507}
2715 2508
2509#define RTC_IRQP_READ32 _IOR('p', 0x0b, compat_ulong_t)
2510#define RTC_IRQP_SET32 _IOW('p', 0x0c, compat_ulong_t)
2511#define RTC_EPOCH_READ32 _IOR('p', 0x0d, compat_ulong_t)
2512#define RTC_EPOCH_SET32 _IOW('p', 0x0e, compat_ulong_t)
2513
2514static int rtc_ioctl(unsigned fd, unsigned cmd, unsigned long arg)
2515{
2516 mm_segment_t oldfs = get_fs();
2517 compat_ulong_t val32;
2518 unsigned long kval;
2519 int ret;
2520
2521 switch (cmd) {
2522 case RTC_IRQP_READ32:
2523 case RTC_EPOCH_READ32:
2524 set_fs(KERNEL_DS);
2525 ret = sys_ioctl(fd, (cmd == RTC_IRQP_READ32) ?
2526 RTC_IRQP_READ : RTC_EPOCH_READ,
2527 (unsigned long)&kval);
2528 set_fs(oldfs);
2529 if (ret)
2530 return ret;
2531 val32 = kval;
2532 return put_user(val32, (unsigned int __user *)arg);
2533 case RTC_IRQP_SET32:
2534 case RTC_EPOCH_SET32:
2535 ret = get_user(val32, (unsigned int __user *)arg);
2536 if (ret)
2537 return ret;
2538 kval = val32;
2539
2540 set_fs(KERNEL_DS);
2541 ret = sys_ioctl(fd, (cmd == RTC_IRQP_SET32) ?
2542 RTC_IRQP_SET : RTC_EPOCH_SET,
2543 (unsigned long)&kval);
2544 set_fs(oldfs);
2545 return ret;
2546 default:
2547 /* unreached */
2548 return -ENOIOCTLCMD;
2549 }
2550}
2551
2716#if defined(CONFIG_NCP_FS) || defined(CONFIG_NCP_FS_MODULE) 2552#if defined(CONFIG_NCP_FS) || defined(CONFIG_NCP_FS_MODULE)
2717struct ncp_ioctl_request_32 { 2553struct ncp_ioctl_request_32 {
2718 u32 function; 2554 u32 function;
@@ -2900,10 +2736,34 @@ static int do_ncp_setprivatedata(unsigned int fd, unsigned int cmd, unsigned lon
2900} 2736}
2901#endif 2737#endif
2902 2738
2903#undef CODE 2739static int
2904#endif 2740lp_timeout_trans(unsigned int fd, unsigned int cmd, unsigned long arg)
2741{
2742 struct compat_timeval *tc = (struct compat_timeval *)arg;
2743 struct timeval *tn = compat_alloc_user_space(sizeof(struct timeval));
2744 struct timeval ts;
2745 if (get_user(ts.tv_sec, &tc->tv_sec) ||
2746 get_user(ts.tv_usec, &tc->tv_usec) ||
2747 put_user(ts.tv_sec, &tn->tv_sec) ||
2748 put_user(ts.tv_usec, &tn->tv_usec))
2749 return -EFAULT;
2750 return sys_ioctl(fd, cmd, (unsigned long)tn);
2751}
2752
2753#define HANDLE_IOCTL(cmd,handler) \
2754 { (cmd), (ioctl_trans_handler_t)(handler) },
2755
2756/* pointer to compatible structure or no argument */
2757#define COMPATIBLE_IOCTL(cmd) \
2758 { (cmd), do_ioctl32_pointer },
2759
2760/* argument is an unsigned long integer, not a pointer */
2761#define ULONG_IOCTL(cmd) \
2762 { (cmd), (ioctl_trans_handler_t)sys_ioctl },
2905 2763
2906#ifdef DECLARES 2764
2765struct ioctl_trans ioctl_start[] = {
2766#include <linux/compat_ioctl.h>
2907HANDLE_IOCTL(MEMREADOOB32, mtd_rw_oob) 2767HANDLE_IOCTL(MEMREADOOB32, mtd_rw_oob)
2908HANDLE_IOCTL(MEMWRITEOOB32, mtd_rw_oob) 2768HANDLE_IOCTL(MEMWRITEOOB32, mtd_rw_oob)
2909#ifdef CONFIG_NET 2769#ifdef CONFIG_NET
@@ -2983,6 +2843,7 @@ HANDLE_IOCTL(FDPOLLDRVSTAT32, fd_ioctl_trans)
2983HANDLE_IOCTL(FDGETFDCSTAT32, fd_ioctl_trans) 2843HANDLE_IOCTL(FDGETFDCSTAT32, fd_ioctl_trans)
2984HANDLE_IOCTL(FDWERRORGET32, fd_ioctl_trans) 2844HANDLE_IOCTL(FDWERRORGET32, fd_ioctl_trans)
2985HANDLE_IOCTL(SG_IO,sg_ioctl_trans) 2845HANDLE_IOCTL(SG_IO,sg_ioctl_trans)
2846HANDLE_IOCTL(SG_GET_REQUEST_TABLE, sg_grt_trans)
2986HANDLE_IOCTL(PPPIOCGIDLE32, ppp_ioctl_trans) 2847HANDLE_IOCTL(PPPIOCGIDLE32, ppp_ioctl_trans)
2987HANDLE_IOCTL(PPPIOCSCOMPRESS32, ppp_ioctl_trans) 2848HANDLE_IOCTL(PPPIOCSCOMPRESS32, ppp_ioctl_trans)
2988HANDLE_IOCTL(PPPIOCSPASS32, ppp_sock_fprog_ioctl_trans) 2849HANDLE_IOCTL(PPPIOCSPASS32, ppp_sock_fprog_ioctl_trans)
@@ -3015,14 +2876,6 @@ COMPATIBLE_IOCTL(EXT3_IOC_GROUP_ADD)
3015#ifdef CONFIG_JBD_DEBUG 2876#ifdef CONFIG_JBD_DEBUG
3016HANDLE_IOCTL(EXT3_IOC32_WAIT_FOR_READONLY, do_ext3_ioctl) 2877HANDLE_IOCTL(EXT3_IOC32_WAIT_FOR_READONLY, do_ext3_ioctl)
3017#endif 2878#endif
3018HANDLE_IOCTL(VIDIOCGTUNER32, do_video_ioctl)
3019HANDLE_IOCTL(VIDIOCSTUNER32, do_video_ioctl)
3020HANDLE_IOCTL(VIDIOCGWIN32, do_video_ioctl)
3021HANDLE_IOCTL(VIDIOCSWIN32, do_set_window)
3022HANDLE_IOCTL(VIDIOCGFBUF32, do_video_ioctl)
3023HANDLE_IOCTL(VIDIOCSFBUF32, do_video_ioctl)
3024HANDLE_IOCTL(VIDIOCGFREQ32, do_video_ioctl)
3025HANDLE_IOCTL(VIDIOCSFREQ32, do_video_ioctl)
3026/* One SMB ioctl needs translations. */ 2879/* One SMB ioctl needs translations. */
3027#define SMB_IOC_GETMOUNTUID_32 _IOR('u', 1, compat_uid_t) 2880#define SMB_IOC_GETMOUNTUID_32 _IOR('u', 1, compat_uid_t)
3028HANDLE_IOCTL(SMB_IOC_GETMOUNTUID_32, do_smb_getmountuid) 2881HANDLE_IOCTL(SMB_IOC_GETMOUNTUID_32, do_smb_getmountuid)
@@ -3104,6 +2957,10 @@ HANDLE_IOCTL(SIOCSIWENCODE, do_wireless_ioctl)
3104HANDLE_IOCTL(SIOCGIWENCODE, do_wireless_ioctl) 2957HANDLE_IOCTL(SIOCGIWENCODE, do_wireless_ioctl)
3105HANDLE_IOCTL(SIOCSIFBR, old_bridge_ioctl) 2958HANDLE_IOCTL(SIOCSIFBR, old_bridge_ioctl)
3106HANDLE_IOCTL(SIOCGIFBR, old_bridge_ioctl) 2959HANDLE_IOCTL(SIOCGIFBR, old_bridge_ioctl)
2960HANDLE_IOCTL(RTC_IRQP_READ32, rtc_ioctl)
2961HANDLE_IOCTL(RTC_IRQP_SET32, rtc_ioctl)
2962HANDLE_IOCTL(RTC_EPOCH_READ32, rtc_ioctl)
2963HANDLE_IOCTL(RTC_EPOCH_SET32, rtc_ioctl)
3107 2964
3108#if defined(CONFIG_NCP_FS) || defined(CONFIG_NCP_FS_MODULE) 2965#if defined(CONFIG_NCP_FS) || defined(CONFIG_NCP_FS_MODULE)
3109HANDLE_IOCTL(NCP_IOC_NCPREQUEST_32, do_ncp_ncprequest) 2966HANDLE_IOCTL(NCP_IOC_NCPREQUEST_32, do_ncp_ncprequest)
@@ -3121,5 +2978,19 @@ HANDLE_IOCTL(VIDEO_GET_EVENT, do_video_get_event)
3121HANDLE_IOCTL(VIDEO_STILLPICTURE, do_video_stillpicture) 2978HANDLE_IOCTL(VIDEO_STILLPICTURE, do_video_stillpicture)
3122HANDLE_IOCTL(VIDEO_SET_SPU_PALETTE, do_video_set_spu_palette) 2979HANDLE_IOCTL(VIDEO_SET_SPU_PALETTE, do_video_set_spu_palette)
3123 2980
3124#undef DECLARES 2981/* parport */
3125#endif 2982COMPATIBLE_IOCTL(LPTIME)
2983COMPATIBLE_IOCTL(LPCHAR)
2984COMPATIBLE_IOCTL(LPABORTOPEN)
2985COMPATIBLE_IOCTL(LPCAREFUL)
2986COMPATIBLE_IOCTL(LPWAIT)
2987COMPATIBLE_IOCTL(LPSETIRQ)
2988COMPATIBLE_IOCTL(LPGETSTATUS)
2989COMPATIBLE_IOCTL(LPGETSTATUS)
2990COMPATIBLE_IOCTL(LPRESET)
2991/*LPGETSTATS not implemented, but no kernels seem to compile it in anyways*/
2992COMPATIBLE_IOCTL(LPGETFLAGS)
2993HANDLE_IOCTL(LPSETTIMEOUT, lp_timeout_trans)
2994};
2995
2996int ioctl_table_size = ARRAY_SIZE(ioctl_start);