1 /* $NetBSD: linux_blkio.c,v 1.16 2007/12/20 23:02:53 dsl Exp $ */
4 * Copyright (c) 2001 Wasabi Systems, Inc.
7 * Written by Frank van der Linden for Wasabi Systems, Inc.
9 * Redistribution and use in source and binary forms, with or without
10 * modification, are permitted provided that the following conditions
12 * 1. Redistributions of source code must retain the above copyright
13 * notice, this list of conditions and the following disclaimer.
14 * 2. Redistributions in binary form must reproduce the above copyright
15 * notice, this list of conditions and the following disclaimer in the
16 * documentation and/or other materials provided with the distribution.
17 * 3. All advertising materials mentioning features or use of this software
18 * must display the following acknowledgement:
19 * This product includes software developed for the NetBSD Project by
20 * Wasabi Systems, Inc.
21 * 4. The name of Wasabi Systems, Inc. may not be used to endorse
22 * or promote products derived from this software without specific prior
25 * THIS SOFTWARE IS PROVIDED BY WASABI SYSTEMS, INC. ``AS IS'' AND
26 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
27 * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
28 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL WASABI SYSTEMS, INC
29 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
30 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
31 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
32 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
33 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
34 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
35 * POSSIBILITY OF SUCH DAMAGE.
38 #include <sys/cdefs.h>
39 __KERNEL_RCSID(0, "$NetBSD: linux_blkio.c,v 1.16 2007/12/20 23:02:53 dsl Exp $");
41 #include <sys/param.h>
42 #include <sys/systm.h>
43 #include <sys/ioctl.h>
45 #include <sys/filedesc.h>
46 #include <sys/mount.h>
48 #include <sys/disklabel.h>
50 #include <sys/syscallargs.h>
52 #include <compat/linux/common/linux_types.h>
53 #include <compat/linux/common/linux_ioctl.h>
54 #include <compat/linux/common/linux_signal.h>
55 #include <compat/linux/common/linux_util.h>
56 #include <compat/linux/common/linux_blkio.h>
57 #include <compat/linux/common/linux_ipc.h>
58 #include <compat/linux/common/linux_sem.h>
60 #include <compat/linux/linux_syscallargs.h>
63 linux_ioctl_blkio(struct lwp
*l
, const struct linux_sys_ioctl_args
*uap
,
70 int (*ioctlf
)(file_t
*, u_long
, void *);
71 struct partinfo partp
;
72 struct disklabel label
;
74 if ((fp
= fd_getfile(SCARG(uap
, fd
))) == NULL
)
78 ioctlf
= fp
->f_ops
->fo_ioctl
;
79 com
= SCARG(uap
, com
);
82 case LINUX_BLKGETSIZE
:
84 * Try to get the partition size of this device. If that
85 * fails, it may be a disk without label; try to get
86 * the default label and compute the size from it.
88 error
= ioctlf(fp
, DIOCGPART
, &partp
);
90 error
= ioctlf(fp
, DIOCGDEFLABEL
, &label
);
93 size
= label
.d_nsectors
* label
.d_ntracks
*
96 size
= partp
.part
->p_size
;
97 error
= copyout(&size
, SCARG(uap
, data
), sizeof size
);
99 case LINUX_BLKSECTGET
:
100 error
= ioctlf(fp
, DIOCGDEFLABEL
, &label
);
103 error
= copyout(&label
.d_secsize
, SCARG(uap
, data
),
104 sizeof label
.d_secsize
);
108 case LINUX_BLKRRPART
:
109 case LINUX_BLKFLSBUF
:
112 case LINUX_BLKFRASET
:
113 case LINUX_BLKFRAGET
:
114 case LINUX_BLKSECTSET
:
115 case LINUX_BLKSSZGET
:
121 fd_putfile(SCARG(uap
, fd
));