Changeset View
Changeset View
Standalone View
Standalone View
sys/kern/uipc_mbuf.c
Show First 20 Lines • Show All 1,761 Lines • ▼ Show 20 Lines | |||||
static struct mbuf * | static struct mbuf * | ||||
m_uiotombuf_nomap(struct uio *uio, int how, int len, int maxseg, int flags) | m_uiotombuf_nomap(struct uio *uio, int how, int len, int maxseg, int flags) | ||||
{ | { | ||||
struct mbuf *m, *mb, *prev; | struct mbuf *m, *mb, *prev; | ||||
vm_page_t pg_array[MBUF_PEXT_MAX_PGS]; | vm_page_t pg_array[MBUF_PEXT_MAX_PGS]; | ||||
int error, length, i, needed; | int error, length, i, needed; | ||||
ssize_t total; | ssize_t total; | ||||
int pflags = malloc2vm_flags(how) | VM_ALLOC_NOOBJ | VM_ALLOC_NODUMP | | int pflags = malloc2vm_flags(how) | VM_ALLOC_NODUMP | VM_ALLOC_WIRED; | ||||
VM_ALLOC_WIRED; | |||||
MPASS((flags & M_PKTHDR) == 0); | MPASS((flags & M_PKTHDR) == 0); | ||||
MPASS((how & M_ZERO) == 0); | MPASS((how & M_ZERO) == 0); | ||||
/* | /* | ||||
* len can be zero or an arbitrary large value bound by | * len can be zero or an arbitrary large value bound by | ||||
* the total data supplied by the uio. | * the total data supplied by the uio. | ||||
*/ | */ | ||||
Show All 31 Lines | if (m == NULL) | ||||
m = mb; | m = mb; | ||||
else | else | ||||
prev->m_next = mb; | prev->m_next = mb; | ||||
prev = mb; | prev = mb; | ||||
mb->m_epg_flags = EPG_FLAG_ANON; | mb->m_epg_flags = EPG_FLAG_ANON; | ||||
needed = length = MIN(maxseg, total); | needed = length = MIN(maxseg, total); | ||||
for (i = 0; needed > 0; i++, needed -= PAGE_SIZE) { | for (i = 0; needed > 0; i++, needed -= PAGE_SIZE) { | ||||
retry_page: | retry_page: | ||||
pg_array[i] = vm_page_alloc(NULL, 0, pflags); | pg_array[i] = vm_page_alloc_noobj(pflags); | ||||
if (pg_array[i] == NULL) { | if (pg_array[i] == NULL) { | ||||
if (how & M_NOWAIT) { | if (how & M_NOWAIT) { | ||||
goto failed; | goto failed; | ||||
} else { | } else { | ||||
vm_wait(NULL); | vm_wait(NULL); | ||||
goto retry_page; | goto retry_page; | ||||
} | } | ||||
} | } | ||||
▲ Show 20 Lines • Show All 445 Lines • Show Last 20 Lines |