subr_mchain.c (148517) | subr_mchain.c (177599) |
---|---|
1/*- 2 * Copyright (c) 2000, 2001 Boris Popov 3 * All rights reserved. 4 * 5 * Redistribution and use in source and binary forms, with or without 6 * modification, are permitted provided that the following conditions 7 * are met: 8 * 1. Redistributions of source code must retain the above copyright --- 14 unchanged lines hidden (view full) --- 23 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 24 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 25 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 26 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 27 * SUCH DAMAGE. 28 */ 29 30#include <sys/cdefs.h> | 1/*- 2 * Copyright (c) 2000, 2001 Boris Popov 3 * All rights reserved. 4 * 5 * Redistribution and use in source and binary forms, with or without 6 * modification, are permitted provided that the following conditions 7 * are met: 8 * 1. Redistributions of source code must retain the above copyright --- 14 unchanged lines hidden (view full) --- 23 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 24 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 25 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 26 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 27 * SUCH DAMAGE. 28 */ 29 30#include <sys/cdefs.h> |
31__FBSDID("$FreeBSD: head/sys/kern/subr_mchain.c 148517 2005-07-29 13:22:37Z imura $"); | 31__FBSDID("$FreeBSD: head/sys/kern/subr_mchain.c 177599 2008-03-25 09:39:02Z ru $"); |
32 33#include <sys/param.h> 34#include <sys/systm.h> 35#include <sys/endian.h> 36#include <sys/errno.h> 37#include <sys/mbuf.h> 38#include <sys/module.h> 39#include <sys/uio.h> --- 11 unchanged lines hidden (view full) --- 51/* 52 * Various helper functions 53 */ 54int 55mb_init(struct mbchain *mbp) 56{ 57 struct mbuf *m; 58 | 32 33#include <sys/param.h> 34#include <sys/systm.h> 35#include <sys/endian.h> 36#include <sys/errno.h> 37#include <sys/mbuf.h> 38#include <sys/module.h> 39#include <sys/uio.h> --- 11 unchanged lines hidden (view full) --- 51/* 52 * Various helper functions 53 */ 54int 55mb_init(struct mbchain *mbp) 56{ 57 struct mbuf *m; 58 |
59 m = m_gethdr(M_TRYWAIT, MT_DATA); 60 if (m == NULL) 61 return ENOBUFS; | 59 m = m_gethdr(M_WAIT, MT_DATA); |
62 m->m_len = 0; 63 mb_initm(mbp, m); 64 return 0; 65} 66 67void 68mb_initm(struct mbchain *mbp, struct mbuf *m) 69{ --- 38 unchanged lines hidden (view full) --- 108{ 109 struct mbuf *m, *mn; 110 caddr_t bpos; 111 112 if (size > MLEN) 113 panic("mb_reserve: size = %d\n", size); 114 m = mbp->mb_cur; 115 if (mbp->mb_mleft < size) { | 60 m->m_len = 0; 61 mb_initm(mbp, m); 62 return 0; 63} 64 65void 66mb_initm(struct mbchain *mbp, struct mbuf *m) 67{ --- 38 unchanged lines hidden (view full) --- 106{ 107 struct mbuf *m, *mn; 108 caddr_t bpos; 109 110 if (size > MLEN) 111 panic("mb_reserve: size = %d\n", size); 112 m = mbp->mb_cur; 113 if (mbp->mb_mleft < size) { |
116 mn = m_get(M_TRYWAIT, MT_DATA); 117 if (mn == NULL) 118 return NULL; | 114 mn = m_get(M_WAIT, MT_DATA); |
119 mbp->mb_cur = m->m_next = mn; 120 m = mn; 121 m->m_len = 0; 122 mbp->mb_mleft = M_TRAILINGSPACE(m); 123 } 124 mbp->mb_mleft -= size; 125 mbp->mb_count += size; 126 bpos = mtod(m, caddr_t) + m->m_len; --- 58 unchanged lines hidden (view full) --- 185 int cplen, error, mleft, count; 186 size_t srclen, dstlen; 187 188 m = mbp->mb_cur; 189 mleft = mbp->mb_mleft; 190 191 while (size > 0) { 192 if (mleft == 0) { | 115 mbp->mb_cur = m->m_next = mn; 116 m = mn; 117 m->m_len = 0; 118 mbp->mb_mleft = M_TRAILINGSPACE(m); 119 } 120 mbp->mb_mleft -= size; 121 mbp->mb_count += size; 122 bpos = mtod(m, caddr_t) + m->m_len; --- 58 unchanged lines hidden (view full) --- 181 int cplen, error, mleft, count; 182 size_t srclen, dstlen; 183 184 m = mbp->mb_cur; 185 mleft = mbp->mb_mleft; 186 187 while (size > 0) { 188 if (mleft == 0) { |
193 if (m->m_next == NULL) { 194 m = m_getm(m, size, M_TRYWAIT, MT_DATA); 195 if (m == NULL) 196 return ENOBUFS; 197 } else | 189 if (m->m_next == NULL) 190 m = m_getm(m, size, M_WAIT, MT_DATA); 191 else |
198 m = m->m_next; 199 mleft = M_TRAILINGSPACE(m); 200 continue; 201 } 202 cplen = mleft > size ? size : mleft; 203 srclen = dstlen = cplen; 204 dst = mtod(m, caddr_t) + m->m_len; 205 switch (type) { --- 84 unchanged lines hidden (view full) --- 290/* 291 * Routines for fetching data from an mbuf chain 292 */ 293int 294md_init(struct mdchain *mdp) 295{ 296 struct mbuf *m; 297 | 192 m = m->m_next; 193 mleft = M_TRAILINGSPACE(m); 194 continue; 195 } 196 cplen = mleft > size ? size : mleft; 197 srclen = dstlen = cplen; 198 dst = mtod(m, caddr_t) + m->m_len; 199 switch (type) { --- 84 unchanged lines hidden (view full) --- 284/* 285 * Routines for fetching data from an mbuf chain 286 */ 287int 288md_init(struct mdchain *mdp) 289{ 290 struct mbuf *m; 291 |
298 m = m_gethdr(M_TRYWAIT, MT_DATA); 299 if (m == NULL) 300 return ENOBUFS; | 292 m = m_gethdr(M_WAIT, MT_DATA); |
301 m->m_len = 0; 302 md_initm(mdp, m); 303 return 0; 304} 305 306void 307md_initm(struct mdchain *mdp, struct mbuf *m) 308{ --- 189 unchanged lines hidden (view full) --- 498 return 0; 499} 500 501int 502md_get_mbuf(struct mdchain *mdp, int size, struct mbuf **ret) 503{ 504 struct mbuf *m = mdp->md_cur, *rm; 505 | 293 m->m_len = 0; 294 md_initm(mdp, m); 295 return 0; 296} 297 298void 299md_initm(struct mdchain *mdp, struct mbuf *m) 300{ --- 189 unchanged lines hidden (view full) --- 490 return 0; 491} 492 493int 494md_get_mbuf(struct mdchain *mdp, int size, struct mbuf **ret) 495{ 496 struct mbuf *m = mdp->md_cur, *rm; 497 |
506 rm = m_copym(m, mdp->md_pos - mtod(m, u_char*), size, M_TRYWAIT); 507 if (rm == NULL) 508 return EBADRPC; | 498 rm = m_copym(m, mdp->md_pos - mtod(m, u_char*), size, M_WAIT); |
509 md_get_mem(mdp, NULL, size, MB_MZERO); 510 *ret = rm; 511 return 0; 512} 513 514int 515md_get_uio(struct mdchain *mdp, struct uio *uiop, int size) 516{ --- 29 unchanged lines hidden --- | 499 md_get_mem(mdp, NULL, size, MB_MZERO); 500 *ret = rm; 501 return 0; 502} 503 504int 505md_get_uio(struct mdchain *mdp, struct uio *uiop, int size) 506{ --- 29 unchanged lines hidden --- |