Changeset View
Changeset View
Standalone View
Standalone View
sys/dev/md/md.c
Show First 20 Lines • Show All 954 Lines • ▼ Show 20 Lines | while (len > 0) { | ||||
ma_offs = 0; | ma_offs = 0; | ||||
vlist++; | vlist++; | ||||
piov++; | piov++; | ||||
} | } | ||||
auio.uio_iovcnt = piov - auio.uio_iov; | auio.uio_iovcnt = piov - auio.uio_iov; | ||||
piov = auio.uio_iov; | piov = auio.uio_iov; | ||||
} else if ((bp->bio_flags & BIO_UNMAPPED) != 0) { | } else if ((bp->bio_flags & BIO_UNMAPPED) != 0) { | ||||
pb = uma_zalloc(md_pbuf_zone, M_WAITOK); | pb = uma_zalloc(md_pbuf_zone, M_WAITOK); | ||||
MPASS((pb->b_flags & B_MAXPHYS) != 0); | |||||
bp->bio_resid = len; | bp->bio_resid = len; | ||||
unmapped_step: | unmapped_step: | ||||
npages = atop(min(MAXPHYS, round_page(len + (ma_offs & | npages = atop(min(maxphys, round_page(len + (ma_offs & | ||||
PAGE_MASK)))); | PAGE_MASK)))); | ||||
iolen = min(ptoa(npages) - (ma_offs & PAGE_MASK), len); | iolen = min(ptoa(npages) - (ma_offs & PAGE_MASK), len); | ||||
KASSERT(iolen > 0, ("zero iolen")); | KASSERT(iolen > 0, ("zero iolen")); | ||||
pmap_qenter((vm_offset_t)pb->b_data, | pmap_qenter((vm_offset_t)pb->b_data, | ||||
&bp->bio_ma[atop(ma_offs)], npages); | &bp->bio_ma[atop(ma_offs)], npages); | ||||
aiov.iov_base = (void *)((vm_offset_t)pb->b_data + | aiov.iov_base = (void *)((vm_offset_t)pb->b_data + | ||||
(ma_offs & PAGE_MASK)); | (ma_offs & PAGE_MASK)); | ||||
aiov.iov_len = iolen; | aiov.iov_len = iolen; | ||||
▲ Show 20 Lines • Show All 705 Lines • ▼ Show 20 Lines | case MD_NULL: | ||||
break; | break; | ||||
default: | default: | ||||
return (EINVAL); | return (EINVAL); | ||||
} | } | ||||
if (mdr->md_sectorsize == 0) | if (mdr->md_sectorsize == 0) | ||||
sectsize = DEV_BSIZE; | sectsize = DEV_BSIZE; | ||||
else | else | ||||
sectsize = mdr->md_sectorsize; | sectsize = mdr->md_sectorsize; | ||||
if (sectsize > MAXPHYS || mdr->md_mediasize < sectsize) | if (sectsize > maxphys || mdr->md_mediasize < sectsize) | ||||
return (EINVAL); | return (EINVAL); | ||||
if (mdr->md_options & MD_AUTOUNIT) | if (mdr->md_options & MD_AUTOUNIT) | ||||
sc = mdnew(-1, &error, mdr->md_type); | sc = mdnew(-1, &error, mdr->md_type); | ||||
else { | else { | ||||
if (mdr->md_unit > INT_MAX) | if (mdr->md_unit > INT_MAX) | ||||
return (EINVAL); | return (EINVAL); | ||||
sc = mdnew(mdr->md_unit, &error, mdr->md_type); | sc = mdnew(mdr->md_unit, &error, mdr->md_type); | ||||
} | } | ||||
▲ Show 20 Lines • Show All 474 Lines • Show Last 20 Lines |