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 |