Deleted Added
full compact
geom_dev.c (104452) geom_dev.c (104602)
1/*-
2 * Copyright (c) 2002 Poul-Henning Kamp
3 * Copyright (c) 2002 Networks Associates Technology, Inc.
4 * All rights reserved.
5 *
6 * This software was developed for the FreeBSD Project by Poul-Henning Kamp
7 * and NAI Labs, the Security Research Division of Network Associates, Inc.
8 * under DARPA/SPAWAR contract N66001-01-C-8035 ("CBOSS"), as part of the

--- 18 unchanged lines hidden (view full) ---

27 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
28 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
29 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
30 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
31 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
32 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
33 * SUCH DAMAGE.
34 *
1/*-
2 * Copyright (c) 2002 Poul-Henning Kamp
3 * Copyright (c) 2002 Networks Associates Technology, Inc.
4 * All rights reserved.
5 *
6 * This software was developed for the FreeBSD Project by Poul-Henning Kamp
7 * and NAI Labs, the Security Research Division of Network Associates, Inc.
8 * under DARPA/SPAWAR contract N66001-01-C-8035 ("CBOSS"), as part of the

--- 18 unchanged lines hidden (view full) ---

27 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
28 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
29 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
30 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
31 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
32 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
33 * SUCH DAMAGE.
34 *
35 * $FreeBSD: head/sys/geom/geom_dev.c 104452 2002-10-04 10:38:36Z phk $
35 * $FreeBSD: head/sys/geom/geom_dev.c 104602 2002-10-07 06:25:26Z phk $
36 */
37
38#include <sys/param.h>
39#include <sys/systm.h>
40#include <sys/malloc.h>
41#include <sys/kernel.h>
42#include <sys/conf.h>
43#include <sys/bio.h>

--- 182 unchanged lines hidden (view full) ---

226{
227 struct g_geom *gp, *gp2;
228 struct g_consumer *cp;
229 struct g_provider *pp2;
230 struct g_kerneldump kd;
231 int i, error;
232 u_int u;
233 struct g_ioctl *gio;
36 */
37
38#include <sys/param.h>
39#include <sys/systm.h>
40#include <sys/malloc.h>
41#include <sys/kernel.h>
42#include <sys/conf.h>
43#include <sys/bio.h>

--- 182 unchanged lines hidden (view full) ---

226{
227 struct g_geom *gp, *gp2;
228 struct g_consumer *cp;
229 struct g_provider *pp2;
230 struct g_kerneldump kd;
231 int i, error;
232 u_int u;
233 struct g_ioctl *gio;
234#if 0
235 struct sbuf *usb, *sb;
236#endif
237
238 gp = dev->si_drv1;
239 cp = dev->si_drv2;
240 pp2 = cp->provider;
241 gp2 = pp2->geom;
234
235 gp = dev->si_drv1;
236 cp = dev->si_drv2;
237 pp2 = cp->provider;
238 gp2 = pp2->geom;
239 gio = NULL;
242
243 error = 0;
244 DROP_GIANT();
245
246 i = IOCPARM_LEN(cmd);
247 switch (cmd) {
248 case DIOCGSECTORSIZE:
249 error = g_io_getattr("GEOM::sectorsize", cp, &i, data);

--- 19 unchanged lines hidden (view full) ---

269 }
270 kd.offset = 0;
271 kd.length = OFF_MAX;
272 i = sizeof kd;
273 error = g_io_getattr("GEOM::kerneldump", cp, &i, &kd);
274 if (!error)
275 dev->si_flags |= SI_DUMPDEV;
276 break;
240
241 error = 0;
242 DROP_GIANT();
243
244 i = IOCPARM_LEN(cmd);
245 switch (cmd) {
246 case DIOCGSECTORSIZE:
247 error = g_io_getattr("GEOM::sectorsize", cp, &i, data);

--- 19 unchanged lines hidden (view full) ---

267 }
268 kd.offset = 0;
269 kd.length = OFF_MAX;
270 i = sizeof kd;
271 error = g_io_getattr("GEOM::kerneldump", cp, &i, &kd);
272 if (!error)
273 dev->si_flags |= SI_DUMPDEV;
274 break;
277#if 0
278 case GEOMGETCONF:
279 /* we bogusly pass cp to avoid getting any consumers listed */
280 sb = g_conf_specific(gp2->class, gp2, pp2, cp);
281 usb = (struct sbuf *)data;
282 if (usb->s_size - 1 < sbuf_len(sb))
283 error = ENOMEM;
284 else
285 error = copyout(sbuf_data(sb), usb->s_buf, sbuf_len(sb) + 1);
286 if (!error)
287 usb->s_len = sbuf_len(sb);
288 break;
289#endif
275
290 default:
276 default:
291 gio = g_malloc(sizeof *gio, M_WAITOK);
277 gio = g_malloc(sizeof *gio, M_WAITOK | M_ZERO);
292 gio->cmd = cmd;
293 gio->data = data;
294 gio->fflag = fflag;
295 gio->td = td;
296 i = sizeof *gio;
297 if (cmd & IOC_IN)
298 error = g_io_setattr("GEOM::ioctl", cp, i, gio);
299 else
300 error = g_io_getattr("GEOM::ioctl", cp, &i, gio);
278 gio->cmd = cmd;
279 gio->data = data;
280 gio->fflag = fflag;
281 gio->td = td;
282 i = sizeof *gio;
283 if (cmd & IOC_IN)
284 error = g_io_setattr("GEOM::ioctl", cp, i, gio);
285 else
286 error = g_io_getattr("GEOM::ioctl", cp, &i, gio);
301 g_free(gio);
302 break;
303 }
304
305 PICKUP_GIANT();
287 break;
288 }
289
290 PICKUP_GIANT();
291 if (error == EDIRIOCTL) {
292 KASSERT(gio != NULL, ("NULL gio but EDIRIOCTL"));
293 KASSERT(gio->func != NULL, ("NULL function but EDIRIOCTL"));
294 error = (gio->func)(gio->dev, cmd, data, fflag, td);
295 }
296 if (gio != NULL)
297 g_free(gio);
306 g_waitidle();
307 if (error == ENOIOCTL) {
308 if (g_debugflags & G_T_TOPOLOGY) {
309 i = IOCGROUP(cmd);
310 printf("IOCTL(0x%lx) \"%s\"", cmd, gp->name);
311 if (i > ' ' && i <= '~')
312 printf(" '%c'", (int)IOCGROUP(cmd));
313 else

--- 108 unchanged lines hidden ---
298 g_waitidle();
299 if (error == ENOIOCTL) {
300 if (g_debugflags & G_T_TOPOLOGY) {
301 i = IOCGROUP(cmd);
302 printf("IOCTL(0x%lx) \"%s\"", cmd, gp->name);
303 if (i > ' ' && i <= '~')
304 printf(" '%c'", (int)IOCGROUP(cmd));
305 else

--- 108 unchanged lines hidden ---