Deleted Added
full compact
geom_bsd.c (93776) geom_bsd.c (94287)
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_bsd.c 93776 2002-04-04 09:54:13Z phk $
35 * $FreeBSD: head/sys/geom/geom_bsd.c 94287 2002-04-09 15:43:32Z phk $
36 */
37
38
39#include <sys/param.h>
40#ifndef _KERNEL
41#include <stdio.h>
42#include <string.h>
43#include <stdlib.h>

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

221 while (p < pe) {
222 sum ^= g_dec_le2(p);
223 p += 2;
224 }
225 return (sum);
226}
227
228static int
36 */
37
38
39#include <sys/param.h>
40#ifndef _KERNEL
41#include <stdio.h>
42#include <string.h>
43#include <stdlib.h>

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

221 while (p < pe) {
222 sum ^= g_dec_le2(p);
223 p += 2;
224 }
225 return (sum);
226}
227
228static int
229g_bsd_i386(struct g_consumer *cp, int secsize, struct disklabel *dl)
229g_bsd_i386(struct g_slicer *gsp, struct g_consumer *cp, int secsize, struct disklabel *dl)
230{
231 int error;
232 u_char *buf;
233
234 buf = g_read_data(cp, secsize * 1, secsize, &error);
235 if (buf == NULL || error != 0)
236 return(ENOENT);
237 g_bsd_ledec_disklabel(buf, dl);
238 if (dl->d_magic == DISKMAGIC &&
239 dl->d_magic2 == DISKMAGIC &&
240 g_bsd_lesum(dl, buf) == 0)
241 error = 0;
242 else
243 error = ENOENT;
244 g_free(buf);
230{
231 int error;
232 u_char *buf;
233
234 buf = g_read_data(cp, secsize * 1, secsize, &error);
235 if (buf == NULL || error != 0)
236 return(ENOENT);
237 g_bsd_ledec_disklabel(buf, dl);
238 if (dl->d_magic == DISKMAGIC &&
239 dl->d_magic2 == DISKMAGIC &&
240 g_bsd_lesum(dl, buf) == 0)
241 error = 0;
242 else
243 error = ENOENT;
244 g_free(buf);
245 gsp->frontstuff = 16 * secsize;
245 return(error);
246}
247
248static int
246 return(error);
247}
248
249static int
249g_bsd_alpha(struct g_consumer *cp, int secsize, struct disklabel *dl)
250g_bsd_alpha(struct g_slicer *gsp, struct g_consumer *cp, int secsize, struct disklabel *dl)
250{
251 int error;
252 u_char *buf;
253
254 buf = g_read_data(cp, 0, secsize, &error);
255 if (buf == NULL || error != 0)
256 return(ENOENT);
257 g_bsd_ledec_disklabel(buf + 64, dl);
258 if (dl->d_magic == DISKMAGIC &&
259 dl->d_magic2 == DISKMAGIC &&
260 g_bsd_lesum(dl, buf + 64) == 0)
261 error = 0;
262 else
263 error = ENOENT;
264 g_free(buf);
251{
252 int error;
253 u_char *buf;
254
255 buf = g_read_data(cp, 0, secsize, &error);
256 if (buf == NULL || error != 0)
257 return(ENOENT);
258 g_bsd_ledec_disklabel(buf + 64, dl);
259 if (dl->d_magic == DISKMAGIC &&
260 dl->d_magic2 == DISKMAGIC &&
261 g_bsd_lesum(dl, buf + 64) == 0)
262 error = 0;
263 else
264 error = ENOENT;
265 g_free(buf);
266 gsp->frontstuff = 16 * secsize;
265 return(error);
266}
267
268static int
269g_bsd_start(struct bio *bp)
270{
271 struct g_geom *gp;
272 struct g_bsd_softc *ms;

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

315 struct g_provider *pp2;
316 int error, i, j, npart;
317 struct g_bsd_softc *ms;
318 struct disklabel *dl;
319 u_int secsize;
320 u_int fwsectors, fwheads;
321 off_t mediasize;
322 struct partition *ppp, *ppr;
267 return(error);
268}
269
270static int
271g_bsd_start(struct bio *bp)
272{
273 struct g_geom *gp;
274 struct g_bsd_softc *ms;

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

317 struct g_provider *pp2;
318 int error, i, j, npart;
319 struct g_bsd_softc *ms;
320 struct disklabel *dl;
321 u_int secsize;
322 u_int fwsectors, fwheads;
323 off_t mediasize;
324 struct partition *ppp, *ppr;
325 struct g_slicer *gsp;
323
324 g_trace(G_T_TOPOLOGY, "bsd_taste(%s,%s)", mp->name, pp->name);
325 g_topology_assert();
326 if (flags == G_TF_NORMAL &&
327 !strcmp(pp->geom->class->name, BSD_CLASS_NAME))
328 return (NULL);
329 gp = g_slice_new(mp, 8, pp, &cp, &ms, sizeof *ms, g_bsd_start);
330 if (gp == NULL)
331 return (NULL);
326
327 g_trace(G_T_TOPOLOGY, "bsd_taste(%s,%s)", mp->name, pp->name);
328 g_topology_assert();
329 if (flags == G_TF_NORMAL &&
330 !strcmp(pp->geom->class->name, BSD_CLASS_NAME))
331 return (NULL);
332 gp = g_slice_new(mp, 8, pp, &cp, &ms, sizeof *ms, g_bsd_start);
333 if (gp == NULL)
334 return (NULL);
335 gsp = gp->softc;
332 g_topology_unlock();
333 gp->dumpconf = g_bsd_dumpconf;
334 npart = 0;
335 while (1) { /* a trick to allow us to use break */
336 g_topology_unlock();
337 gp->dumpconf = g_bsd_dumpconf;
338 npart = 0;
339 while (1) { /* a trick to allow us to use break */
336 j = sizeof i;
337 error = g_io_getattr("MBR::type", cp, &j, &i);
340 error = g_getattr("MBR::type", cp, &i);
338 if (!error && i != 165 && flags == G_TF_NORMAL)
339 break;
341 if (!error && i != 165 && flags == G_TF_NORMAL)
342 break;
340 j = sizeof secsize;
341 error = g_io_getattr("GEOM::sectorsize", cp, &j, &secsize);
343 error = g_getattr("GEOM::sectorsize", cp, &secsize);
342 if (error) {
343 secsize = 512;
344 printf("g_bsd_taste: error %d Sectors are %d bytes\n",
345 error, secsize);
346 }
344 if (error) {
345 secsize = 512;
346 printf("g_bsd_taste: error %d Sectors are %d bytes\n",
347 error, secsize);
348 }
347 j = sizeof mediasize;
348 error = g_io_getattr("GEOM::mediasize", cp, &j, &mediasize);
349 error = g_getattr("GEOM::mediasize", cp, &mediasize);
349 if (error) {
350 mediasize = 0;
351 printf("g_error %d Mediasize is %lld bytes\n",
352 error, (long long)mediasize);
353 }
350 if (error) {
351 mediasize = 0;
352 printf("g_error %d Mediasize is %lld bytes\n",
353 error, (long long)mediasize);
354 }
354 error = g_bsd_i386(cp, secsize, &ms->ondisk);
355 error = g_bsd_i386(gsp, cp, secsize, &ms->ondisk);
355 if (error)
356 if (error)
356 error = g_bsd_alpha(cp, secsize, &ms->ondisk);
357 error = g_bsd_alpha(gsp, cp, secsize, &ms->ondisk);
357 if (error)
358 break;
359 dl = &ms->ondisk;
360 if (bootverbose)
361 g_hexdump(dl, sizeof(*dl));
362 if (dl->d_secsize < secsize)
363 break;
364 if (dl->d_secsize > secsize)

--- 68 unchanged lines hidden ---
358 if (error)
359 break;
360 dl = &ms->ondisk;
361 if (bootverbose)
362 g_hexdump(dl, sizeof(*dl));
363 if (dl->d_secsize < secsize)
364 break;
365 if (dl->d_secsize > secsize)

--- 68 unchanged lines hidden ---