Deleted Added
full compact
geom_dev.c (94287) geom_dev.c (95038)
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 94287 2002-04-09 15:43:32Z phk $
35 * $FreeBSD: head/sys/geom/geom_dev.c 95038 2002-04-19 09:24:12Z 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>
44#include <sys/lock.h>
45#include <sys/mutex.h>
46#include <sys/errno.h>
47#include <sys/time.h>
48#include <sys/disk.h>
49#include <sys/fcntl.h>
50#include <geom/geom.h>
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>
44#include <sys/lock.h>
45#include <sys/mutex.h>
46#include <sys/errno.h>
47#include <sys/time.h>
48#include <sys/disk.h>
49#include <sys/fcntl.h>
50#include <geom/geom.h>
51#include <machine/limits.h>
51
52#define CDEV_MAJOR 4
53
54static d_open_t g_dev_open;
55static d_close_t g_dev_close;
56static d_strategy_t g_dev_strategy;
57static d_ioctl_t g_dev_ioctl;
58static d_psize_t g_dev_psize;

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

234 return (error);
235}
236
237static int
238g_dev_ioctl(dev_t dev, u_long cmd, caddr_t data, int fflag, struct thread *td)
239{
240 struct g_geom *gp;
241 struct g_consumer *cp;
52
53#define CDEV_MAJOR 4
54
55static d_open_t g_dev_open;
56static d_close_t g_dev_close;
57static d_strategy_t g_dev_strategy;
58static d_ioctl_t g_dev_ioctl;
59static d_psize_t g_dev_psize;

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

235 return (error);
236}
237
238static int
239g_dev_ioctl(dev_t dev, u_long cmd, caddr_t data, int fflag, struct thread *td)
240{
241 struct g_geom *gp;
242 struct g_consumer *cp;
243 struct g_kerneldump kd;
242 int i, error;
244 int i, error;
245 u_int u;
243 struct g_ioctl *gio;
244
245 gp = dev->si_drv1;
246 cp = dev->si_drv2;
247
248 error = 0;
249 DROP_GIANT();
250

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

260 error = g_io_getattr("GEOM::fwsectors", cp, &i, data);
261 break;
262 case DIOCGFWHEADS:
263 error = g_io_getattr("GEOM::fwheads", cp, &i, data);
264 break;
265 case DIOCGFRONTSTUFF:
266 error = g_io_getattr("GEOM::frontstuff", cp, &i, data);
267 break;
246 struct g_ioctl *gio;
247
248 gp = dev->si_drv1;
249 cp = dev->si_drv2;
250
251 error = 0;
252 DROP_GIANT();
253

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

263 error = g_io_getattr("GEOM::fwsectors", cp, &i, data);
264 break;
265 case DIOCGFWHEADS:
266 error = g_io_getattr("GEOM::fwheads", cp, &i, data);
267 break;
268 case DIOCGFRONTSTUFF:
269 error = g_io_getattr("GEOM::frontstuff", cp, &i, data);
270 break;
271 case DIOCSKERNELDUMP:
272 u = *((u_int *)data);
273 if (!u) {
274 set_dumper(NULL);
275 error = 0;
276 break;
277 }
278 kd.offset = 0;
279 kd.length = OFF_MAX;
280 i = sizeof kd;
281 error = g_io_getattr("GEOM::kerneldump", cp, &i, &kd);
282 if (!error)
283 dev->si_flags |= SI_DUMPDEV;
284 break;
268 default:
269 gio = g_malloc(sizeof *gio, M_WAITOK);
270 gio->cmd = cmd;
271 gio->data = data;
272 gio->fflag = fflag;
273 gio->td = td;
274 i = sizeof *gio;
275 if (cmd & IOC_IN)

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

373 dev_t dev;
374
375 gp = cp->geom;
376 g_trace(G_T_TOPOLOGY, "g_dev_orphan(%p(%s))", cp, gp->name);
377 g_topology_assert();
378 if (cp->biocount > 0)
379 return;
380 dev = gp->softc;
285 default:
286 gio = g_malloc(sizeof *gio, M_WAITOK);
287 gio->cmd = cmd;
288 gio->data = data;
289 gio->fflag = fflag;
290 gio->td = td;
291 i = sizeof *gio;
292 if (cmd & IOC_IN)

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

390 dev_t dev;
391
392 gp = cp->geom;
393 g_trace(G_T_TOPOLOGY, "g_dev_orphan(%p(%s))", cp, gp->name);
394 g_topology_assert();
395 if (cp->biocount > 0)
396 return;
397 dev = gp->softc;
398 if (dev->si_flags & SI_DUMPDEV)
399 set_dumper(NULL);
381 destroy_dev(dev);
382 if (cp->acr > 0 || cp->acw > 0 || cp->ace > 0)
383 g_access_rel(cp, -cp->acr, -cp->acw, -cp->ace);
384 g_dettach(cp);
385 g_destroy_consumer(cp);
386 g_destroy_geom(gp);
387}
388
389DECLARE_GEOM_CLASS(g_dev_class, g_dev)
390
400 destroy_dev(dev);
401 if (cp->acr > 0 || cp->acw > 0 || cp->ace > 0)
402 g_access_rel(cp, -cp->acr, -cp->acw, -cp->ace);
403 g_dettach(cp);
404 g_destroy_consumer(cp);
405 g_destroy_geom(gp);
406}
407
408DECLARE_GEOM_CLASS(g_dev_class, g_dev)
409