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_disk.c 219950 2011-03-24 08:37:48Z mav $"); |
38 39#include "opt_geom.h" 40 41#include <sys/param.h> 42#include <sys/systm.h> 43#include <sys/kernel.h> 44#include <sys/sysctl.h> 45#include <sys/bio.h> |
46#include <sys/ctype.h> 47#include <sys/fcntl.h> 48#include <sys/malloc.h> 49#include <sys/sysctl.h> 50#include <sys/devicestat.h> 51#include <machine/md_var.h> 52 53#include <sys/lock.h> --- 103 unchanged lines hidden (view full) --- 157 } 158 dp->d_flags &= ~DISKFLAG_OPEN; 159 } 160 return (error); 161} 162 163static void 164g_disk_kerneldump(struct bio *bp, struct disk *dp) |
165{ |
166 struct g_kerneldump *gkd; |
167 struct g_geom *gp; 168 169 gkd = (struct g_kerneldump*)bp->bio_data; 170 gp = bp->bio_to->geom; 171 g_trace(G_T_TOPOLOGY, "g_disk_kernedump(%s, %jd, %jd)", 172 gp->name, (intmax_t)gkd->offset, (intmax_t)gkd->length); 173 if (dp->d_dump == NULL) { 174 g_io_deliver(bp, ENODEV); 175 return; 176 } |
177 gkd->di.dumper = dp->d_dump; 178 gkd->di.priv = dp; 179 gkd->di.blocksize = dp->d_sectorsize; 180 gkd->di.maxiosize = dp->d_maxsize; 181 gkd->di.mediaoffset = gkd->offset; |
182 if ((gkd->offset + gkd->length) > dp->d_mediasize) 183 gkd->length = dp->d_mediasize - gkd->offset; |
184 gkd->di.mediasize = gkd->length; 185 g_io_deliver(bp, 0); |
186} 187 188static void 189g_disk_done(struct bio *bp) 190{ 191 struct bio *bp2; 192 struct disk *dp; 193 --- 338 unchanged lines hidden --- |