Page Menu
Home
FreeBSD
Search
Configure Global Search
Log In
Files
F149621677
D30133.id89870.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Flag For Later
Award Token
Size
1 KB
Referenced Files
None
Subscribers
None
D30133.id89870.diff
View Options
diff --git a/sys/kern/uipc_mbuf.c b/sys/kern/uipc_mbuf.c
--- a/sys/kern/uipc_mbuf.c
+++ b/sys/kern/uipc_mbuf.c
@@ -1139,6 +1139,29 @@
return (top);
}
+static void
+m_copytounmapped(const struct mbuf *m, int off, int len, c_caddr_t cp)
+{
+ struct iovec iov;
+ struct uio uio;
+ int error;
+
+ KASSERT(off >= 0, ("m_copytounmapped: negative off %d", off));
+ KASSERT(len >= 0, ("m_copytounmapped: negative len %d", len));
+ KASSERT(off < m->m_len, ("m_copytounmapped: len exceeds mbuf length"));
+ iov.iov_base = __DECONST(caddr_t, cp);
+ iov.iov_len = len;
+ uio.uio_resid = len;
+ uio.uio_iov = &iov;
+ uio.uio_segflg = UIO_SYSSPACE;
+ uio.uio_iovcnt = 1;
+ uio.uio_offset = 0;
+ uio.uio_rw = UIO_WRITE;
+ error = m_unmappedtouio(m, off, &uio, len);
+ KASSERT(error == 0, ("m_unmappedtouio failed: off %d, len %d", off,
+ len));
+}
+
/*
* Copy data from a buffer back into the indicated mbuf chain,
* starting "off" bytes from the beginning, extending the mbuf
@@ -1172,7 +1195,10 @@
M_TRAILINGSPACE(m));
}
mlen = min (m->m_len - off, len);
- bcopy(cp, off + mtod(m, caddr_t), (u_int)mlen);
+ if ((m->m_flags & M_EXTPG) != 0)
+ m_copytounmapped(m, off, mlen, cp);
+ else
+ bcopy(cp, off + mtod(m, caddr_t), (u_int)mlen);
cp += mlen;
len -= mlen;
mlen += off;
@@ -1870,7 +1896,7 @@
}
/*
- * Copy data from an unmapped mbuf into a uio limited by len if set.
+ * Copy data to/from an unmapped mbuf into a uio limited by len if set.
*/
int
m_unmappedtouio(const struct mbuf *m, int m_off, struct uio *uio, int len)
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Thu, Mar 26, 5:55 PM (14 h, 51 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
30373412
Default Alt Text
D30133.id89870.diff (1 KB)
Attached To
Mode
D30133: Extend m_copyback() to support unmapped mbufs.
Attached
Detach File
Event Timeline
Log In to Comment