switch l2cap ->memcpy_fromiovec() to msghdr
it'll die soon enough - now that kvec-backed iov_iter works regardless of set_fs(), both instances will become copy_from_iter() as soon as we introduce ->msg_iter... Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
This commit is contained in:
@@ -608,7 +608,7 @@ struct l2cap_ops {
|
|||||||
unsigned long len, int nb);
|
unsigned long len, int nb);
|
||||||
int (*memcpy_fromiovec) (struct l2cap_chan *chan,
|
int (*memcpy_fromiovec) (struct l2cap_chan *chan,
|
||||||
unsigned char *kdata,
|
unsigned char *kdata,
|
||||||
struct iovec *iov,
|
struct msghdr *msg,
|
||||||
int len);
|
int len);
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -905,13 +905,13 @@ static inline long l2cap_chan_no_get_sndtimeo(struct l2cap_chan *chan)
|
|||||||
|
|
||||||
static inline int l2cap_chan_no_memcpy_fromiovec(struct l2cap_chan *chan,
|
static inline int l2cap_chan_no_memcpy_fromiovec(struct l2cap_chan *chan,
|
||||||
unsigned char *kdata,
|
unsigned char *kdata,
|
||||||
struct iovec *iov,
|
struct msghdr *msg,
|
||||||
int len)
|
int len)
|
||||||
{
|
{
|
||||||
/* Following is safe since for compiler definitions of kvec and
|
/* Following is safe since for compiler definitions of kvec and
|
||||||
* iovec are identical, yielding the same in-core layout and alignment
|
* iovec are identical, yielding the same in-core layout and alignment
|
||||||
*/
|
*/
|
||||||
struct kvec *vec = (struct kvec *)iov;
|
struct kvec *vec = (struct kvec *)msg->msg_iov;
|
||||||
|
|
||||||
while (len > 0) {
|
while (len > 0) {
|
||||||
if (vec->iov_len) {
|
if (vec->iov_len) {
|
||||||
|
@@ -2097,7 +2097,7 @@ static inline int l2cap_skbuff_fromiovec(struct l2cap_chan *chan,
|
|||||||
int sent = 0;
|
int sent = 0;
|
||||||
|
|
||||||
if (chan->ops->memcpy_fromiovec(chan, skb_put(skb, count),
|
if (chan->ops->memcpy_fromiovec(chan, skb_put(skb, count),
|
||||||
msg->msg_iov, count))
|
msg, count))
|
||||||
return -EFAULT;
|
return -EFAULT;
|
||||||
|
|
||||||
sent += count;
|
sent += count;
|
||||||
@@ -2118,7 +2118,7 @@ static inline int l2cap_skbuff_fromiovec(struct l2cap_chan *chan,
|
|||||||
*frag = tmp;
|
*frag = tmp;
|
||||||
|
|
||||||
if (chan->ops->memcpy_fromiovec(chan, skb_put(*frag, count),
|
if (chan->ops->memcpy_fromiovec(chan, skb_put(*frag, count),
|
||||||
msg->msg_iov, count))
|
msg, count))
|
||||||
return -EFAULT;
|
return -EFAULT;
|
||||||
|
|
||||||
sent += count;
|
sent += count;
|
||||||
|
@@ -1338,9 +1338,9 @@ static struct sk_buff *l2cap_sock_alloc_skb_cb(struct l2cap_chan *chan,
|
|||||||
|
|
||||||
static int l2cap_sock_memcpy_fromiovec_cb(struct l2cap_chan *chan,
|
static int l2cap_sock_memcpy_fromiovec_cb(struct l2cap_chan *chan,
|
||||||
unsigned char *kdata,
|
unsigned char *kdata,
|
||||||
struct iovec *iov, int len)
|
struct msghdr *msg, int len)
|
||||||
{
|
{
|
||||||
return memcpy_fromiovec(kdata, iov, len);
|
return memcpy_from_msg(kdata, msg, len);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void l2cap_sock_ready_cb(struct l2cap_chan *chan)
|
static void l2cap_sock_ready_cb(struct l2cap_chan *chan)
|
||||||
|
Reference in New Issue
Block a user