This source file includes following definitions.
- linux_ioctl_blkio
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39 #include <sys/param.h>
40 #include <sys/systm.h>
41 #include <sys/ioctl.h>
42 #include <sys/file.h>
43 #include <sys/filedesc.h>
44 #include <sys/mount.h>
45 #include <sys/proc.h>
46 #include <sys/disklabel.h>
47
48 #include <sys/syscallargs.h>
49
50 #include <compat/linux/linux_types.h>
51 #include <compat/linux/linux_ioctl.h>
52 #include <compat/linux/linux_signal.h>
53 #include <compat/linux/linux_util.h>
54 #include <compat/linux/linux_blkio.h>
55
56 #include <compat/linux/linux_syscallargs.h>
57
58 int
59 linux_ioctl_blkio(struct proc *p, struct linux_sys_ioctl_args *uap,
60 register_t *retval)
61 {
62 u_long com;
63 long size;
64 int error;
65 struct filedesc *fdp;
66 struct file *fp;
67 int (*ioctlf)(struct file *, u_long, caddr_t, struct proc *);
68 struct partinfo partp;
69 struct disklabel label;
70
71 fdp = p->p_fd;
72 if ((fp = fd_getfile(fdp, SCARG(uap, fd))) == NULL)
73 return (EBADF);
74 FREF(fp);
75 error = 0;
76 ioctlf = fp->f_ops->fo_ioctl;
77 com = SCARG(uap, com);
78
79 switch (com) {
80 case LINUX_BLKGETSIZE:
81
82
83
84
85
86 error = ioctlf(fp, DIOCGPART, (caddr_t)&partp, p);
87 if (error != 0) {
88 error = ioctlf(fp, DIOCGDINFO, (caddr_t)&label, p);
89 if (error != 0)
90 break;
91 size = label.d_nsectors * label.d_ntracks *
92 label.d_ncylinders;
93 } else
94
95 size = DL_GETPSIZE(partp.part);
96 error = copyout(&size, SCARG(uap, data), sizeof size);
97 break;
98 case LINUX_BLKSECTGET:
99 error = ioctlf(fp, DIOCGDINFO, (caddr_t)&label, p);
100 if (error != 0)
101 break;
102 error = copyout(&label.d_secsize, SCARG(uap, data),
103 sizeof label.d_secsize);
104 break;
105 case LINUX_BLKROSET:
106 case LINUX_BLKROGET:
107 case LINUX_BLKRRPART:
108 case LINUX_BLKFLSBUF:
109 case LINUX_BLKRASET:
110 case LINUX_BLKRAGET:
111 case LINUX_BLKFRASET:
112 case LINUX_BLKFRAGET:
113 case LINUX_BLKSECTSET:
114 case LINUX_BLKSSZGET:
115 case LINUX_BLKPG:
116 default:
117 error = ENOTTY;
118 }
119
120 FRELE(fp);
121 return error;
122 }