Deleted Added
sdiff udiff text old ( 94287 ) new ( 95038 )
full compact
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 $
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
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;
242 int i, error;
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;
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;
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