Deleted Added
full compact
geom_dev.c (274154) geom_dev.c (274366)
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

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

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
36#include <sys/cdefs.h>
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

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

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
36#include <sys/cdefs.h>
37__FBSDID("$FreeBSD: head/sys/geom/geom_dev.c 274154 2014-11-06 00:48:36Z mav $");
37__FBSDID("$FreeBSD: head/sys/geom/geom_dev.c 274366 2014-11-11 04:48:09Z pjd $");
38
39#include <sys/param.h>
40#include <sys/systm.h>
41#include <sys/malloc.h>
42#include <sys/kernel.h>
43#include <sys/conf.h>
44#include <sys/ctype.h>
45#include <sys/bio.h>

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

122static void
123g_dev_fini(struct g_class *mp)
124{
125
126 freeenv(dumpdev);
127}
128
129static int
38
39#include <sys/param.h>
40#include <sys/systm.h>
41#include <sys/malloc.h>
42#include <sys/kernel.h>
43#include <sys/conf.h>
44#include <sys/ctype.h>
45#include <sys/bio.h>

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

122static void
123g_dev_fini(struct g_class *mp)
124{
125
126 freeenv(dumpdev);
127}
128
129static int
130g_dev_setdumpdev(struct cdev *dev)
130g_dev_setdumpdev(struct cdev *dev, struct thread *td)
131{
132 struct g_kerneldump kd;
133 struct g_consumer *cp;
134 int error, len;
135
136 if (dev == NULL)
131{
132 struct g_kerneldump kd;
133 struct g_consumer *cp;
134 int error, len;
135
136 if (dev == NULL)
137 return (set_dumper(NULL, NULL));
137 return (set_dumper(NULL, NULL, td));
138
139 cp = dev->si_drv2;
140 len = sizeof(kd);
141 kd.offset = 0;
142 kd.length = OFF_MAX;
143 error = g_io_getattr("GEOM::kerneldump", cp, &len, &kd);
144 if (error == 0) {
138
139 cp = dev->si_drv2;
140 len = sizeof(kd);
141 kd.offset = 0;
142 kd.length = OFF_MAX;
143 error = g_io_getattr("GEOM::kerneldump", cp, &len, &kd);
144 if (error == 0) {
145 error = set_dumper(&kd.di, devtoname(dev));
145 error = set_dumper(&kd.di, devtoname(dev), td);
146 if (error == 0)
147 dev->si_flags |= SI_DUMPDEV;
148 }
149 return (error);
150}
151
152static void
153init_dumpdev(struct cdev *dev)
154{
155
156 if (dumpdev == NULL)
157 return;
158 if (strcmp(devtoname(dev), dumpdev) != 0)
159 return;
146 if (error == 0)
147 dev->si_flags |= SI_DUMPDEV;
148 }
149 return (error);
150}
151
152static void
153init_dumpdev(struct cdev *dev)
154{
155
156 if (dumpdev == NULL)
157 return;
158 if (strcmp(devtoname(dev), dumpdev) != 0)
159 return;
160 if (g_dev_setdumpdev(dev) == 0) {
160 if (g_dev_setdumpdev(dev, curthread) == 0) {
161 freeenv(dumpdev);
162 dumpdev = NULL;
163 }
164}
165
166static void
167g_dev_destroy(void *arg, int flags __unused)
168{

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

448 if (error == 0 && *(u_int *)data == 0)
449 error = ENOENT;
450 break;
451 case DIOCGFRONTSTUFF:
452 error = g_io_getattr("GEOM::frontstuff", cp, &i, data);
453 break;
454 case DIOCSKERNELDUMP:
455 if (*(u_int *)data == 0)
161 freeenv(dumpdev);
162 dumpdev = NULL;
163 }
164}
165
166static void
167g_dev_destroy(void *arg, int flags __unused)
168{

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

448 if (error == 0 && *(u_int *)data == 0)
449 error = ENOENT;
450 break;
451 case DIOCGFRONTSTUFF:
452 error = g_io_getattr("GEOM::frontstuff", cp, &i, data);
453 break;
454 case DIOCSKERNELDUMP:
455 if (*(u_int *)data == 0)
456 error = g_dev_setdumpdev(NULL);
456 error = g_dev_setdumpdev(NULL, td);
457 else
457 else
458 error = g_dev_setdumpdev(dev);
458 error = g_dev_setdumpdev(dev, td);
459 break;
460 case DIOCGFLUSH:
461 error = g_io_flush(cp);
462 break;
463 case DIOCGDELETE:
464 offset = ((off_t *)data)[0];
465 length = ((off_t *)data)[1];
466 if ((offset % cp->provider->sectorsize) != 0 ||

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

668
669 g_topology_assert();
670 sc = cp->private;
671 dev = sc->sc_dev;
672 g_trace(G_T_TOPOLOGY, "g_dev_orphan(%p(%s))", cp, cp->geom->name);
673
674 /* Reset any dump-area set on this device */
675 if (dev->si_flags & SI_DUMPDEV)
459 break;
460 case DIOCGFLUSH:
461 error = g_io_flush(cp);
462 break;
463 case DIOCGDELETE:
464 offset = ((off_t *)data)[0];
465 length = ((off_t *)data)[1];
466 if ((offset % cp->provider->sectorsize) != 0 ||

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

668
669 g_topology_assert();
670 sc = cp->private;
671 dev = sc->sc_dev;
672 g_trace(G_T_TOPOLOGY, "g_dev_orphan(%p(%s))", cp, cp->geom->name);
673
674 /* Reset any dump-area set on this device */
675 if (dev->si_flags & SI_DUMPDEV)
676 (void)set_dumper(NULL, NULL);
676 (void)set_dumper(NULL, NULL, curthread);
677
678 /* Destroy the struct cdev *so we get no more requests */
679 destroy_dev_sched_cb(dev, g_dev_callback, cp);
680}
681
682DECLARE_GEOM_CLASS(g_dev_class, g_dev);
677
678 /* Destroy the struct cdev *so we get no more requests */
679 destroy_dev_sched_cb(dev, g_dev_callback, cp);
680}
681
682DECLARE_GEOM_CLASS(g_dev_class, g_dev);