subr_disk.c (92074) | subr_disk.c (93496) |
---|---|
1/* 2 * ---------------------------------------------------------------------------- 3 * "THE BEER-WARE LICENSE" (Revision 42): 4 * <phk@FreeBSD.ORG> wrote this file. As long as you retain this notice you 5 * can do whatever you want with this stuff. If we meet some day, and you think 6 * this stuff is worth it, you can buy me a beer in return. Poul-Henning Kamp 7 * ---------------------------------------------------------------------------- 8 * | 1/* 2 * ---------------------------------------------------------------------------- 3 * "THE BEER-WARE LICENSE" (Revision 42): 4 * <phk@FreeBSD.ORG> wrote this file. As long as you retain this notice you 5 * can do whatever you want with this stuff. If we meet some day, and you think 6 * this stuff is worth it, you can buy me a beer in return. Poul-Henning Kamp 7 * ---------------------------------------------------------------------------- 8 * |
9 * $FreeBSD: head/sys/kern/subr_disk.c 92074 2002-03-11 08:08:02Z phk $ | 9 * $FreeBSD: head/sys/kern/subr_disk.c 93496 2002-03-31 22:37:00Z phk $ |
10 * 11 */ 12 13#include "opt_geom.h" 14#ifndef GEOM 15 16#include <sys/param.h> 17#include <sys/systm.h> --- 175 unchanged lines hidden (view full) --- 193 dp->d_dev = dev; 194 dp->d_dsflags = flags; 195 dp->d_devsw = cdevsw; 196 LIST_INSERT_HEAD(&disklist, dp, d_list); 197 198 return (dev); 199} 200 | 10 * 11 */ 12 13#include "opt_geom.h" 14#ifndef GEOM 15 16#include <sys/param.h> 17#include <sys/systm.h> --- 175 unchanged lines hidden (view full) --- 193 dp->d_dev = dev; 194 dp->d_dsflags = flags; 195 dp->d_devsw = cdevsw; 196 LIST_INSERT_HEAD(&disklist, dp, d_list); 197 198 return (dev); 199} 200 |
201int 202disk_dumpcheck(dev_t dev, u_int *count, u_int *blkno, u_int *secsize) | 201static int 202diskdumpconf(u_int onoff, dev_t dev, struct disk *dp) |
203{ | 203{ |
204 struct disk *dp; | 204 struct dumperinfo di; |
205 struct disklabel *dl; | 205 struct disklabel *dl; |
206 u_int boff; | |
207 | 206 |
208 dp = dev->si_disk; 209 if (!dp) 210 return (ENXIO); 211 if (!dp->d_slice) 212 return (ENXIO); | 207 if (!onoff) 208 return(set_dumper(NULL)); |
213 dl = dsgetlabel(dev, dp->d_slice); 214 if (!dl) 215 return (ENXIO); | 209 dl = dsgetlabel(dev, dp->d_slice); 210 if (!dl) 211 return (ENXIO); |
216 *count = Maxmem * (PAGE_SIZE / dl->d_secsize); 217 if (dumplo <= LABELSECTOR || 218 (dumplo + *count > dl->d_partitions[dkpart(dev)].p_size)) 219 return (EINVAL); 220 boff = dl->d_partitions[dkpart(dev)].p_offset + 221 dp->d_slice->dss_slices[dkslice(dev)].ds_offset; 222 *blkno = boff + dumplo; 223 *secsize = dl->d_secsize; 224 return (0); 225 | 212 bzero(&di, sizeof di); 213 di.dumper = (dumper_t *)dp->d_devsw->d_dump; 214 di.priv = dp->d_dev; 215 di.blocksize = dl->d_secsize; 216 di.mediaoffset = (off_t)(dl->d_partitions[dkpart(dev)].p_offset + 217 dp->d_slice->dss_slices[dkslice(dev)].ds_offset) * DEV_BSIZE; 218 di.mediasize = 219 (off_t)(dl->d_partitions[dkpart(dev)].p_size) * DEV_BSIZE; 220 return(set_dumper(&di)); |
226} 227 228void 229disk_invalidate (struct disk *disk) 230{ 231 if (disk->d_slice) 232 dsgone(&disk->d_slice); 233} --- 149 unchanged lines hidden (view full) --- 383 384} 385 386static int 387diskioctl(dev_t dev, u_long cmd, caddr_t data, int fflag, struct thread *td) 388{ 389 struct disk *dp; 390 int error; | 221} 222 223void 224disk_invalidate (struct disk *disk) 225{ 226 if (disk->d_slice) 227 dsgone(&disk->d_slice); 228} --- 149 unchanged lines hidden (view full) --- 378 379} 380 381static int 382diskioctl(dev_t dev, u_long cmd, caddr_t data, int fflag, struct thread *td) 383{ 384 struct disk *dp; 385 int error; |
386 u_int u; |
|
391 dev_t pdev; 392 393 pdev = dkmodpart(dkmodslice(dev, WHOLE_DISK_SLICE), RAW_PART); 394 dp = pdev->si_disk; 395 if (!dp) 396 return (ENXIO); | 387 dev_t pdev; 388 389 pdev = dkmodpart(dkmodslice(dev, WHOLE_DISK_SLICE), RAW_PART); 390 dp = pdev->si_disk; 391 if (!dp) 392 return (ENXIO); |
393 if (cmd == DIOCGKERNELDUMP) { 394 u = *(u_int *)data; 395 return (diskdumpconf(u, dev, dp)); 396 } |
|
397 error = dsioctl(dev, cmd, data, fflag, &dp->d_slice); 398 if (error == ENOIOCTL) 399 error = dp->d_devsw->d_ioctl(dev, cmd, data, fflag, td); 400 return (error); 401} 402 403static int 404diskpsize(dev_t dev) --- 26 unchanged lines hidden --- | 397 error = dsioctl(dev, cmd, data, fflag, &dp->d_slice); 398 if (error == ENOIOCTL) 399 error = dp->d_devsw->d_ioctl(dev, cmd, data, fflag, td); 400 return (error); 401} 402 403static int 404diskpsize(dev_t dev) --- 26 unchanged lines hidden --- |